| 
 
初级会员 
 
	积分91金钱91 注册时间2016-7-18在线时间22 小时 | 
 
1金钱 
| 各位大大,小白新手上路,做了一个小的nrf24l01的收发程序,用IRQ引脚作中断源。接收程序如下void RX_Mode(void) {
 CE(0);
 SPI_Write_Buf(WRITE_REG_NRF24L01 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);  //配置地址
 SPI_RW_Reg(WRITE_REG_NRF24L01 + RX_PW_P0, TX_PLOAD_WIDTH);  //通道0和宽度
 
 SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_AA, 0x00); //禁止自动应答
 SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_RXADDR, 0x3D); // 接收通道0
 SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_CH, 0x40);  //射频0x40
 
 SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_SETUP, 0x07);
 SPI_RW_Reg(WRITE_REG_NRF24L01 + CONFIG, 0x3f);
 CE(1);
 }
 
 void NRF24L01_Receive(void)
 {
 u8 status=0x01;
 
 RX_Mode();
 
 CE(0);
 delay1us(10);
 
 status=SPI_Read_Reg(STATUS);
 
 //        if(status & 0x40)
 //        {
 //        SPI_Read_Buf(RD_RX_PLOAD,RX_BUF,TX_PLOAD_WIDTH);
 //        SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS, 0x40);
 //        }
 CE(1);
 
 delay1us(10);
 }
 
 
 void GPIO_IRQHandler(void)
 {
 
 u8 status=0x01;
 uint8_t buflen;
 uint8_t *data=(uint8_t *) RX_BUF;
 if(GPIO_GetIntStatus(2,8,1))
 {
 GPIO_ClearInt(2,1<<8);
 CE(0);
 delay1us(10);
 status=SPI_Read_Reg(STATUS);        //
 if(status & 0x40)                        //
 {
 SPI_Read_Buf(RD_RX_PLOAD,RX_BUF,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
 SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS, 0x40);      //
 buflen=RX_BUF[3]+6;
 }
 CE(1);
 
 
 
 }
 }
 
 
 int main(void)
 {
 nRF24L01_Initial();
 
 while(1)
 {NRF24L01_Receive();}
 }
 
 当我把NRF24L01_Receive()里面的if语句整个注释掉时,中断进不去。但是在不注释的情况下,中断就能进去。这是为什么?我在不注释的情况下,不发送任何数据,debug一遍,然后启动发射,中断能进去。
 
 | 
 |