This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2530:在清除 RFIRQF1时、示例代码不会清除 S1CON

Guru**** 1818760 points
Other Parts Discussed in Thread: CC2530
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1385846/cc2530-example-code-does-not-clear-s1con-when-clearing-rfirqf1

器件型号:CC2530

工具与软件:

CC2530的示例代码(SWRC135B.zip)具有以下用于传输帧的代码。

uint8 halRfTransmit (void)

UINT8状态;

iSTXON();//发送

//等待传输完成
while (! (RFIRQF1 & IRQ_TXDONE ));

RFIRQF1 =~IRQ_TXDONE;
STATUS=成功;

返回状态;
}

用户指南的第23.1.2节指出、需要清除 S1CON 才能清除中断。  TX 的示例代码未执行此操作。  RX 示例代码(rfIsr)中的 ISR 的确清除了 S1CON。

由于示例代码不在 ISR 中、所以示例代码是否错误或无关紧要?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    每当发送 TX 时、RX 都处于活动状态(请参阅 basicRfSendPacket --> halRfReceiveOn )。

    这意味着、如果中断由于 RX (接收到包或 ACK)而发生、则 S1CON 被清零。

    对于 PER_TEST TX 函数、它不会请求 ACK 也不会接收数据包、这意味着 S1CON 未在 ISR 中明确清除。 但是 halRfTransmit 始终只检查 IRQ_TXDONE、因此它假定 S1CON 中的值并不重要。

    对于 light_switch transmit app (开关)、会请求 ACK、因此 ISR 会显式清除 S1CON。

    在这两种情况下、这个示例代码假定 S1CON 只在接收到一个数据包时才需要被明确清零。
    也许更安全的方法是每次在 ISR 中遵循用户指南并明确清零 S1CON、而不论是否接收到数据包。

    谢谢!
    Toby