当前位置: 代码迷 >> Wireless >> 24L01发送完成间断TX_DS(IRQ)不产生.
  详细解决方案

24L01发送完成间断TX_DS(IRQ)不产生.

热度:3211   发布时间:2013-02-26 00:00:00.0
24L01发送完成中断TX_DS(IRQ)不产生....
先调24L01发射部分就不成功....SPI读写寄存器没问题,
Config(地址0x00)寄存器我给的0x0e,说明三种中断任何一种都会触发IRQ是吧
EN_AA(地址0x01)寄存器我给的0x00,也就是所有通道只要发成功,没有ACK也触发发送完成中断,STATUS寄存器的TX_DS位是吧,但是我不停发得到返回的STATUS寄存器是“0x0e 0x0e 0x0f 0x0f 0x0f...后面就是0f了”,CE拉高10uS后,发送完成位没有变1,IRQ用示波器看也没有....百度谷歌都搜遍了....希望CSDN的大神能出没下,哪怕这是该怀疑哪,怎么去试.....

void nRF24L01_TxPacket(  uchar * tx_buf)

    uchar sta=0;
    uchar flag=0;


    Low_24L01_CE;   //StandBy I模式 
Hign_24L01_CSN;
Low_24L01_SCK;
delay_nms(100);


   SPI_RW_Reg(WRITE_REG+STATUS,0xff);          //STATUS复位
   SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); 
   SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
   

   SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);  //使能P0通道自动应答 此功能禁止后可与24l01通讯
   SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x00);   //接收地址允许 P0通道接收允许
  // SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1f);  //500+86us自动重发15次(文档有问题...)
   SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00);  //不自动重发 重发间隔 0us
   SPI_RW_Reg(WRITE_REG + RF_CH, 0x00);         // 射频通道(工作频率)
   SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为5字节
  // SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);    // 发射功率0dB???
  SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0e);    // 发射功率0dB???


  SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);     // 装载数据 
   SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);       // IRQ收发完成中断响应,16位CRC,主发送

   delay_nms(20);
  Hign_24L01_CE;    //置高CE,激发数据发送

   _delay_us(200);
   Low_24L01_CE;

sta1=SPI_Read(STATUS);                   // 返回状态寄存器
USART_Transmit(sta1);                  //操作结果

}

------解决方案--------------------------------------------------------
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x00);     //接收地址允许 P0通道接收允许 
=======================================================================
这一句,Pipe0-5有低6位控制,enable pipe0是0x01

SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);       //  发射功率0dB
=======================================================================
这个就可以了,不用0x0e

SPI_RW_Reg(WRITE_REG + RF_CH, 0x00);           //  射频通道(工作频率)
=======================================================================
这个频率两端要设置一致

Hign_24L01_CE;                               //置高CE,激发数据发送