CC1125 双向通信,导致死机
您好!
在CC1125使用过程中,发射器定时100ms,发送数据,接收器在收到数据后马上反馈1个信号;
在信号环境好的时候,都是OK的,但是在反馈信号很差时,发射端出现死机状态,此时不再产生中断,也不会有数据发出;
程序如下:
发射程序
char runTX1(unsigned char *txBuff,unsigned char len)
{
u32 i;
//trxSpiCmdStrobe(CC112X_SIDLE);
//trxSpiCmdStrobe(CC112X_SFSTXON);
// trxSpiCmdStrobe(CC112X_SFRX);
// trxSpiCmdStrobe(CC112X_SFTX);
// Write packet to tx fifo
cc112xSpiWriteTxFifo(txBuff,len);
// Strobe TX to send packet
trxSpiCmdStrobe(CC112X_STX);
// Wait for interrupt that packet has been sent.
// (Assumes the GPIO connected to the radioRxTxISR function is set
// to GPIOx_CFG = 0x06)
RF_status =1;
i=0;
while(packetSemaphore != ISR_ACTION_REQUIRED)
{
i++;
if(i>1400000) //20ms delay
{
return 0;
}
}
// Clear semaphore flag
packetSemaphore = ISR_IDLE;
trxSpiCmdStrobe(CC112X_SRX);
RF_status =0;
}
接收:
void runRX(void){
u8 rxBuffer[64] = {0};
u8 rxBytes;
// Wait for packet received interrupt
// cc112xSpiReadReg(CC112X_MARC_STATUS1, &marcStatus, 1); //read CC112X_MARC_STATUS1
//if(marcStatus ==0x80)//
if(packetSemaphore == ISR_ACTION_REQUIRED)
{
// Read number of bytes in rx fifo
cc112xSpiReadReg(CC112X_NUM_RXBYTES, &rxBytes, 1);
// Read n bytes from rx fifo
cc112xSpiReadRxFifo(rxBuffer, rxBytes);
if()
{
.....
}
// Reset packet semaphore
packetSemaphore = ISR_IDLE;
// Set radio back in RX
//trxSpiCmdStrobe(CC112X_SRX);
RF_status =1;
}
}
其中RF_status是程序中用来判断中断是发射产生的中断,还是接收产生的中断;
冰天雪地跪等回复!
补充说明:接收端一直工作正常,发射端注释掉接收程序后,也一直工作正常;
也就是说,仅在发射端要同时处理发、收时,且反馈信号很差时出问题;
硬件完全采用的是官网的DEMO,程序上我也试各种方式,譬如,修改中断方式,用读取状态寄存器,
或者发送前清空缓存等,都没有任务作用。唯一的是有改善的是,在出现死机时,设置一个时间,超时后重新初始化高频,
但是也只是改善,偶尔还是会出现不断电初始化都不行的,并且这个出现死机现象完全没有规律,
这是CC1125固有的bug吗,拜托各位TI的技术给个建议啊;
或者有成功的双向通信的范例吗,急等啊