大家有没有用过CC1101多点进行通讯的,我现在用TDMA方式实现多点向单点通信,但是接收端偶尔会接到不从机的数据,修改通信速率和信道等都无果,不知道怎么回事,大致代码如下:
主机部分采用定时器10ms中断增加wirelesst值:
switch(wirelesst){
case 1: //对时信息
TxBuf[3]=wirelesst;
halRfSendPacket(TxBuf,11); //Transmit Tx buffer data 广播。。。
break;
case 34:
rfSettings.ADDR = 0x04;
halWait(10);
break;
case 54:
rfSettings.ADDR = 0x06;
halWait(10);
break;
case 74: //提前2ms准备。。。。。。。。。
rfSettings.ADDR= 0x08;
halWait(10);
break;
default:
break;
}
if(halRfReceivePacket(RxBuf,&leng)) //主机接收部分
{
SBUF=RxBuf[0];
while (!TI);
TI=0;
halSpiStrobe(CCxxx0_SFRX); //清空接收缓冲区
halSpiStrobe(CCxxx0_SRX); //继续转为接受状态
}
从机部分:
if(halRfReceivePacket(RxBuf,&leng))
{
//LED_B0 = ~LED_B0;
if(RxBuf[3]==1){
wirelesst=RxBuf[3]; //时间同步
// SciPrtfInt(RxBuf[3]);
tdmaflag=1;
}
// Sci0TxStr(" Master reached...... \r\n");
/*for(i=0;i<11; i++)
{
SciPrtfInt(RxBuf[i]);
}
Sci0TxStr(" \r\n");
GucCount = 0;*/
}
if((wirelesst==10*TxBuf[0])&&(tdmaflag==1)){ //执行发送命令
tdmaflag=0;
RLED_on();
TxBuf[4]++;
halRfSendPacket(TxBuf,11); // Transmit Tx buffer data //返回确认机制
halSpiStrobe(CCxxx0_SFTX); // 清空发送缓冲区
RLED_off();
}