初级会员
- 积分
- 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一遍,然后启动发射,中断能进去。
|
|