请问 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]