- /*********************************************/
- /* 函数功能:24L01接收数据 */
- /* 入口参数:rxbuf 接收数据数组 */
- /* 返回值: 0 成功收到数据 */
- /* 1 没有收到数据 */
- /*********************************************/
- uchar NRF24L01_RxPacket(uchar *rxbuf)
- {
- uchar state;
-
- state=NRF24L01_Read_Reg(STATUS); //读取状态寄存器的值
- NRF24L01_Write_Reg(WRITE_REG+STATUS,state); //清除TX_DS或MAX_RT中断标志
- if(state&RX_OK) //接收到数据
- {
- NRF_CE = 0;
- NRF24L01_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据
- NRF24L01_Write_Reg(FLUSH_RX,0xff); //清除RX FIFO寄存器
- NRF_CE = 1;
- delay_150us();
- return 0;
- }
- return 1;//没收到任何数据
- }
- /**********************************************/
- /* 函数功能:设置24L01为发送模式 */
- /* 入口参数:txbuf 发送数据数组 */
- /* 返回值; 0x10 达到最大重发次数,发送失败*/
- /* 0x20 成功发送完成 */
- /* 0xff 发送失败 */
- /**********************************************/
- uchar NRF24L01_TxPacket(uchar *txbuf)
- {
- uchar state;
-
- NRF_CE=0; //CE拉低,使能24L01配置
- NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH); //写数据到TX BUF 32个字节
- NRF_CE=1; //CE置高,使能发送
- while(NRF_IRQ==1); //等待发送完成
- state=NRF24L01_Read_Reg(STATUS); //读取状态寄存器的值
- NRF24L01_Write_Reg(WRITE_REG+STATUS,state); //清除TX_DS或MAX_RT中断标志
- if(state&MAX_TX) //达到最大重发次数
- {
- NRF24L01_Write_Reg(FLUSH_TX,0xff); //清除TX FIFO寄存器
- return MAX_TX;
- }
- if(state&TX_OK) //发送完成
- {
- return TX_OK;
- }
- return 0xff; //发送失败
- }
|