微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > CC2530和CC2538应该在什么时候去设置MAC ACK的Pend标志?

CC2530和CC2538应该在什么时候去设置MAC ACK的Pend标志?

时间:10-02 整理:3721RD 点击:

自己写协议栈,也要实现Date-Poll的间接传输模式,需要设置自动ACK的Pend标志。CC2530就只有一个寄存器FRMCTRL1的第2位PENDING_OR标志来设置。

在使用间接传输模式时,如果收到了MAC Data Request命令时,应该在什么时候去判断要不要使能PENDING_OR?如果Data Request的Src地址在间接发送的地址中,就应该使能PD标志,如果不在就没有必要使能。Z-stack和TIMAC中,为什么并没有根据Data Request的SrcAddr去判断要不要设置PENDING_OR?函数rxStartIsr  中有这样一段代码,貌似是有间接发送统统一律都要设置为PENDING_OR。

    /* Do not ack data packet with pending more data */
    if( MAC_FRAME_TYPE(&rxBuf[1]) == MAC_FRAME_TYPE_COMMAND )
    {
      if( macRxCheckMACPendingCallback())
      {
        /* Check is any mac data pending for end devices */
        ackWithPending = MAC_RX_FLAG_ACK_PENDING;
      }
      else
      {
        if( macSrcMatchIsEnabled )
        {
          /* When autopend is enabled, check if allpending is set to true */
          if( MAC_SrcMatchCheckAllPending() == MAC_AUTOACK_PENDING_ALL_ON )
          {
            ackWithPending = MAC_RX_FLAG_ACK_PENDING;
          }
        }
        else
        {
          /* When autopend is disabled, check the application pending callback */
          if( macRxCheckPendingCallback() )
          {
            ackWithPending = MAC_RX_FLAG_ACK_PENDING;
          }
        }
      }
    }

    if( ackWithPending == MAC_RX_FLAG_ACK_PENDING )
    {
      MAC_RADIO_TX_ACK_PEND();
    }
    else
    {
      MAC_RADIO_TX_ACK();
    }

MAC_SrcMatchAckAllPending

这个函数貌似是在初始化的时候就调用了?

中断的时候不需要做任何操作么?我看CC2530数据手册,上面有一个96字节的源地址存储区,这个源地址存储区能否在接收中断时,自动产生ACK PEND?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top