27,377
社区成员
发帖
与我相关
我的任务
分享
INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
{
INT8U status[2];
INT8U packetLength;
INT8U i=leng*4; // 具体多少要根据datarate 和length 来决定
**** (这里没看懂)***
halSpi Strobe( CCxxx0_ SRX); // 进入接收状态
delay(2);
while(GDO0)
{
delay(2);
--i;
if(i<1) //****(这个i一定要根据数据长度来定吗)****
return 0;
}
if (( halSpiReadStatus( CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) // 如果接的字节数不为0
{
packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
if (packetLength <= *length) // 如果所要的有效数据长度小于等于接收到的数据包的长度
{
halSpiReadBurstReg(CCx xx0_RXFIFO, rxBuffer, packetLength); // 读出所有接收到的数据
*length = packetLength; // 把接收数据长度的修改为当前数据的长度
halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); // 读出CRC 校验位
halSpi Strobe( CCxxx0_ SFRX); // 清洗接收缓冲区
return (status[1] & CRC_ OK); // 如果校验成功返回接收成功
}
else
{
*length = packetLength;
halSpi Strobe( CCxxx0_ SFRX); // 清洗接收缓冲区
return 0;
}
}
else
return 0;
}
#define CCxxx0_PATABLE 0x3E
#define CCxxx0_TXFIFO 0x3F
#define CCxxx0_RXFIFO 0x3F
这三个寄存器我数据手册上没看到过,是不是自己设的啊!