|
有朋友遇到过这样的问题么!
接收端的CC1101长时间处于接收状态会死机。刚刚上电的时候正常接收。等待接收数据(发射端没有发送数据)大概2~4个小时后再由发送端发送数据,接收端接收不到数据,如果软件复位一次,又能够正常工作,但是再长时间等待接收数据还是会死机。
有高手帮忙看看程序!
//-----------------------------------------------------------
//输入:无
//输出:无
//功能:配置CC1100的寄存器
//----------------------------------------------------------
void F_SetCC1100(void)
{
F_SpiWriteReg(CC1100_Addr_FSCTRL0, CC1100_Set_FSCTRL2);//额外加的
// Write register settings
F_SpiWriteReg(CC1100_Addr_FSCTRL1, CC1100_Set_FSCTRL1);
F_SpiWriteReg(CC1100_Addr_FSCTRL0, CC1100_Set_FSCTRL0);
F_SpiWriteReg(CC1100_Addr_FREQ2, CC1100_Set_FREQ2);
F_SpiWriteReg(CC1100_Addr_FREQ1, CC1100_Set_FREQ1);
F_SpiWriteReg(CC1100_Addr_FREQ0, CC1100_Set_FREQ0);
F_SpiWriteReg(CC1100_Addr_MDMCFG4, CC1100_Set_MDMCFG4);
F_SpiWriteReg(CC1100_Addr_MDMCFG3, CC1100_Set_MDMCFG3);
F_SpiWriteReg(CC1100_Addr_MDMCFG2, CC1100_Set_MDMCFG2);
F_SpiWriteReg(CC1100_Addr_MDMCFG1, CC1100_Set_MDMCFG1);
F_SpiWriteReg(CC1100_Addr_MDMCFG0, CC1100_Set_MDMCFG0);
F_SpiWriteReg(CC1100_Addr_CHANNR, CC1100_Set_CHANNR);
F_SpiWriteReg(CC1100_Addr_DEVIATN, CC1100_Set_DEVIATN);
F_SpiWriteReg(CC1100_Addr_FREND1, CC1100_Set_FREND1);
F_SpiWriteReg(CC1100_Addr_FREND0, CC1100_Set_FREND0);
F_SpiWriteReg(CC1100_Addr_MCSM0 , CC1100_Set_MCSM0 );
F_SpiWriteReg(CC1100_Addr_FOCCFG, CC1100_Set_FOCCFG);
F_SpiWriteReg(CC1100_Addr_BSCFG, CC1100_Set_BSCFG);
F_SpiWriteReg(CC1100_Addr_AGCCTRL2, CC1100_Set_AGCCTRL2);
F_SpiWriteReg(CC1100_Addr_AGCCTRL1, CC1100_Set_AGCCTRL1);
F_SpiWriteReg(CC1100_Addr_AGCCTRL0, CC1100_Set_AGCCTRL0);
F_SpiWriteReg(CC1100_Addr_FSCAL3, CC1100_Set_FSCAL3);
F_SpiWriteReg(CC1100_Addr_FSCAL2, CC1100_Set_FSCAL2);
F_SpiWriteReg(CC1100_Addr_FSCAL1, CC1100_Set_FSCAL1);
F_SpiWriteReg(CC1100_Addr_FSCAL0, CC1100_Set_FSCAL0);
F_SpiWriteReg(CC1100_Addr_FSTEST, CC1100_Set_FSTEST);
F_SpiWriteReg(CC1100_Addr_TEST2, CC1100_Set_TEST2);
F_SpiWriteReg(CC1100_Addr_TEST1, CC1100_Set_TEST1);
F_SpiWriteReg(CC1100_Addr_TEST0, CC1100_Set_TEST0);
F_SpiWriteReg(CC1100_Addr_IOCFG2, CC1100_Set_IOCFG2);
F_SpiWriteReg(CC1100_Addr_IOCFG0, CC1100_Set_IOCFG0);
F_SpiWriteReg(CC1100_Addr_PKTCTRL1, CC1100_Set_PKTCTRL1);
F_SpiWriteReg(CC1100_Addr_PKTCTRL0, CC1100_Set_PKTCTRL0);
F_SpiWriteReg(CC1100_Addr_ADDR, CC1100_Set_ADDR);
F_SpiWriteReg(CC1100_Addr_PKTLEN, CC1100_Set_PKTLEN);
F_Delay(2);
F_SpiStrobe(CC1100_CMD_SCAL);
F_Delay(2);
F_SpiStrobe(CC1100_CMD_SFTX);
F_Delay(2);
F_SpiStrobe(CC1100_CMD_SFRX);
F_Delay(2);
F_SpiStrobe(CC1100_CMD_SIDLE);
F_Delay(4);
F_SpiStrobe(CC1100_CMD_SRX);
F_Delay(4);
}
//----------------------------------------------------------
//输入:无
//输出:接收一组数据的个数
//功能: CC1100接收一组数据
//----------------------------------------------------------
uint8 F_ReceCC1100(void)
{
uint8 temp1,temp2;
R_CC1100Cnt=0;
while(P_CC1100GetDO0())
{
if(R_CC1100Cnt>10)
{
return(0);
}
}
temp1=F_SpiReadStatus(CC1100_CMD_RXBYTES);
if(temp1&CC1100_BYTES_RXFIFO)
{
temp2=F_SpiReadReg(CC1100_Addr_RXFIFO);
if(temp2<16)
//如果所要的有效数据长度小于等于接收到的数据包的长度
{
F_SpiReadBurstReg(CC1100_Addr_RXFIFO,0,temp2);
F_SpiReadBurstReg(CC1100_Addr_RXFIFO,temp2,2);
F_SpiStrobe(CC1100_CMD_SFRX);
F_Delay(4);
F_SpiStrobe(CC1100_CMD_SRX);
F_Delay(4);
return((R_SpiRWReg[temp2+1])&CC1100_CRC_OK);
}
else
{
F_SpiStrobe(CC1100_CMD_SFRX);
F_Delay(4);
F_SpiStrobe(CC1100_CMD_SRX);
F_Delay(4);
return(0);
}
}
else
{
return(0);
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|