最近弄了一套SI4432模块玩,把2个模块连接到同一个单片机,一个作为发送另一个接收,从网上下载了一个RFtest51示例代码修改:
配置为FIFO CRC通讯模式,接收到有效数据包或CRC校验错误产生中断NIRQ 信号输入
C/C++ code
while(1)
{
//当按键被按下就有一个数据包被发出;
if(PB1_TX == 0)//(发送模块处理)
{
while( PB1_TX == 0 );
UART_Send_Str("按键按下,开始发送....\n");
RFFIFOSendData2(sendLen, str);
//设置中断使能寄存器,这里设置为只有当有效的数据包被接收或者接收到的数据包数据CRC校验出错才来中断;具体设置参考0x05和0x06寄存器
SpiWriteRegister2(0x05, 0x03); //write 0x03 to the Interrupt Enable 1 register
SpiWriteRegister2(0x06, 0x00); //write 0x00 to the Interrupt Enable 2 register
//发射完毕后设置模块让它又工作在接收状态下;
RFSetRxMode2();
UART_Send_Str("发送完毕,恢复到接收状态....\n");
}
//check whether interrupt occured
//查询中断是否到来,如果中断来了,根据我们前面中断使能寄存器的设置,说明有效数据包已经收到,或者收到的数据包CRC校验出错;
//状态位进行处理
if( NIRQ == 0 )
{
//设置模块处于空闲模式,处理收到的数据包,不继续接收数据
//RFSetIdleMode读取中断标志ItStatus1清中断标志,并设置接收模块为Idle模式
RFSetIdleMode();
UART_Send_Str("中断来了....\n");
/*CRC Error interrupt occured*/
//判断是否由于CRC校验出错引发的中断;在RFSetIdleMode中已经读出了中断状态寄存器的值
if( (ItStatus1 & 0x01) == 0x01 )