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:射频 ISR 中的,MAC,我们是否发送 ACK?

Guru**** 2609895 points


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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/809470/cc2530-ti-mac-in-rf-isr-do-we-transmit-ack

器件型号:CC2530

在 macMcuInit 函数上   、我们执行 MAC_RADIO_TLE_ON_AUTO_ACK ();

在 rxStartIsr 函数上、它们下面会做什么?

MAC_RADIO_TX_ACK_PEND ();

MAC_RADIO_TX_ACK ();

MAC_RADIO_REQUEST_ACK_TX_DONE_CALLY();

如果我们需要处理射频 ISR 上的 ACK 问题、如果我们有其他 ISR、是否会发生未处理的问题?

mac_internal_API void macMcuInit (void)

……μ A

/*打开 autocack */
mac_radio_to_in_Auto_ACK ();

……μ A

静态空 rxStartIsr (空)

……μ A

/*------------------
*处理任何 ACK 请求。
*
IF (macRxOutgoingAckFlag)

halIntState_t s;

/*
*此关键部分可确保及时启动回调 ISR
*以确保与频闪灯相关。
*
HAL_enter_critical 段;

/*不能通过挂起的更多数据来获取数据包*/
if (MAC_FRAME_TYPE (&rxBuf[1])== MAC_FRAME_TYPE_COMMAND)

……μ A

if (预扣= MAC_RX_FLAG_ACK_PENDING)

MAC_RADIO_TX_ACK_PEND ();

其他

MAC_RADIO_TX_ACK ();


/*在 ACK 传输完成后请求对 macRxAckTxDoneCallback()进行回调*/
MAC_RADIO_REQUEST_ACK_TX_DONE_CALLY();
HAL_EXIT_CRITICAL_SECTION;

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

    您好!

    是的、由于 MAC_RADIO_TON_AUTO_ACK ()、ACK 会自动发送。

    MAC_RADIO_TX_ACK_PEND ()和 MAC_RADIO_TX_ACK ()将设置或清除  FRMCTRL1 (0x618A)中的 Pending_OR 位。
    对于 ACK 消息中是否设置了"帧等待"位、需要考虑该位。 "帧等待"位通知接收器 ACK 是否有消息等待接收器。

    MAC_RADIO_REQUEST_ACK_TX_DONE_CALLY()将在器件完成发送 ACK 时请求中断/回调。
    macMcuRfIsr 处理 所有射频中断。

    这些宏的定义在代码(mac_mcu.h、mac_radio_defs.h 等)中提供、并且寄存器说明在 用户指南中进行了详细说明。

    此致、
    Toby