sky5566 发表于 2014-3-16 19:23:27

请问 cc1110 CCA 传送方式?

本帖最后由 sky5566 于 2014-3-16 19:24 编辑

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

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, writingtotal 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
页: [1]
查看完整版本: 请问 cc1110 CCA 传送方式?