|
发表于 2011-6-5 18:50:02
|
显示全部楼层
楼主如何设置地址过滤的啊?
发送这样定义
0x05, // PKTCTRL1 Packet automation control.
0x05, // PKTCTRL0 Packet automation control.
0x01, // ADDR Device address.
0x20 //DataSize // PKTLEN Packet length.
发送数据如下:
INT8U TxBuf[10]={0x08,0x0A,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
INT8U TxBuf1[10]={0x0A,0x0A,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07};
INT8U TxBuf2[10]={0x0A,0x08,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06};
INT8U TxBuf3[10]={0x08,0x0A,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};
while(1)
{
leng=10;
halRfSendPacket(TxBuf,leng); // Transmit Tx buffer data
halRfSendPacket(TxBuf1,leng); // Transmit Tx buffer data
halRfSendPacket(TxBuf2,leng); // Transmit Tx buffer data
halRfSendPacket(TxBuf3,leng); // Transmit Tx buffer data
}
接收定义如下:
0x05, // PKTCTRL1 Packet automation control.
0x05, // PKTCTRL0 Packet automation control.
0x08, // ADDR Device address.
0x40 //DataSize // PKTLEN Packet length.
接收函数如下:
INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
{
INT8U status[2];
INT8U packetLength;
//INT8U i=(*length)*4; // 具体多少要根据datarate和length来决定
halSpiStrobe(CCxxx0_SRX); //进入接收状态
delay(2);
while (!GDO0);
while (GDO0);
if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
{
packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
//packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
if (packetLength <= *length ) //如果所要的有效数据长度小于等于接收到的数据包的长度
{
halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
*length = packetLength; //把接收数据长度的修改为当前数据的长度
// Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位
halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
return (status[1] & CRC_OK); //如果校验成功返回接收成功
}
else
{
*length = packetLength;
halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
return 0;
}
}
else
return 0;
}
现在情况是第一次能正确接收
INT8U TxBuf[10]={0x08,0x0A,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
INT8U TxBuf3[10]={0x08,0x0A,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};
第二次开始就不能接收
INT8U TxBuf3[10]={0x08,0x0A,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};了。奇怪。是不是发送速率太快的原因。
另外怎么目标物理地址是第一个字节呢? |
|