您好!
在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是程序中用来判断中断是发射产生的中断,还是接收产生的中断;
冰天雪地跪等回复!