搜索
bottom↓
回复: 0

请问 cc1110 CCA 传送方式?

[复制链接]

出0入0汤圆

发表于 2014-3-16 19:23:27 | 显示全部楼层 |阅读模式
本帖最后由 sky5566 于 2014-3-16 19:24 编辑

为什么传送资料时,还要启动接收??

BYTE sppSend(SPP_STRUCT* pPacketPointer)
  {
   BYTE res = TRUE;

   //  Checking that length is not too long
   if (pPacketPointer->payloadLength > SPP_MAX_PAYLOAD_LENGTH)
   {
      res = TOO_LONG;         
      sppTxStatus = TX_IDLE;  
   }

   // Flipping the sequence bit, writing  total packet length and address if the transfer is not a retransmission.
   // If it is a retransmission, the fields are correct
   if(!(pPacketPointer->flags & RETRANSMISSION)) // RETRANSMISSION=0x04
   {
      pPacketPointer->flags ^= SEQUENCE_BIT;     // SEQUENCE_BIT=0x80
      pPacketPointer->payloadLength += SPP_HEADER_AND_FOOTER_LENGTH; // SPP_HEADER_AND_FOOTER_LENGTH=3
      pPacketPointer->srcAddress = myAddress;
   }


   // Setting up the DMA
   // DMAARM = (0x80 | ((0x01 << ch) & 0x1F)
  
   DMA_ABORT_CHANNEL(dmaNumberTx);
  
   SET_DMA_SOURCE(dmaTx,pPacketPointer);


   //Proceed if the packet length is OK.
   if (res == TRUE)
   {
      // Clearing RF interrupt flags and enabling RF interrupts.
      RFIF &= ~IRQ_DONE;
      RFIM &= ~IRQ_SFD;
      INT_SETFLAG(INUM_RF, INT_CLR); // 关闭 RF 中断
     // PKTSTATUS & 0x10
     if(!CCA)     
      {
         SRX();    // 启动接收 RF
         // Turning on Rx and waiting to make the RSSI value become valid.
         halWait(1);
      }

     
      if(CCA) //
      {  // Setting up radio
         DMA_ABORT_CHANNEL(dmaNumberRx);  // 启动DAM 进入接收状态
         SIDLE();                             // 进入IDLE
         SCAL();                              // 断开
         RFTXRXIF = 0;                    // 清除 RF 中断旗号
         INT_GLOBAL_ENABLE(FALSE);        // 关闭中断总开关

         
         DMA_ARM_CHANNEL(dmaNumberTx);    // 启动 DMA 进入传送
         while(MARCSTATE != 0x01);        // 等待进入 IDLE 状态
         STX();                           // 传送
         INT_GLOBAL_ENABLE(TRUE);         // 启动中断总开关
         sppTxStatus = TX_IN_PROGRESS;    // 开使传送
         // 目前是 DO_NOT_ACK
         if(pPacketPointer->flags & DO_ACK)
         {
            pAckData = pPacketPointer;
            waitForAck();                 
         }
         else
         {
            pAckData = NULL;
         }
         RFIM |= IRQ_DONE;
      }
      // The "air" is busy

      else  
      {
         res = CHANNEL_BUSY;
         RFIM &= ~IRQ_DONE;
         //De-flipping the sequence bit.
         if(!(pPacketPointer->flags & RETRANSMISSION))
         {
            pPacketPointer->flags ^= SEQUENCE_BIT; // SEQUENCE_BIT=0x80
         }
      }
   }
   return res;
} // ends sppSend

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 03:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表