首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > Wireless >

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

2012-12-30 
24L01发送完成中断TX_DS(IRQ)不产生....先调24L01发射部分就不成功....SPI读写寄存器没问题,Config(地址0x

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,激发数据发送


=======================================================================
发送至少延时10us,接收至少延时130us

还是就是接收发送地址要对应

最后是你的中断IRQ怎么弄的?

热点排行