/* * 函数名:NRF_Tx_Dat * 描述 :用于向NRF的发送缓冲区中写入数据 * 输入 :txBuf:存储了将要发送的数据的数组,外部定义 * 输出 :发送结果,成功返回TXDS,失败返回MAXRT或ERROR * 调用 :外部调用 */ u8 NRF_Tx_Dat(u8 *txbuf) { u8 state; /*ce为低,进入待机模式1*/ NRF_CE_LOW(); /*写数据到TX BUF 最大 32个字节*/ SPI_NRF_WriteBuf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH); /*CE为高,txbuf非空,发送数据包 */ NRF_CE_HIGH(); /*等待发送完成中断 */ while(NRF_Read_IRQ()!=0); /*读取状态寄存器的值 */ state = SPI_NRF_ReadReg(STATUS); /*清除TX_DS或MAX_RT中断标志*/ SPI_NRF_WriteReg(NRF_WRITE_REG+STATUS,state); SPI_NRF_WriteReg(FLUSH_TX,NOP); //清除TX FIFO寄存器 /*判断中断类型*/ if(state&MAX_RT) //达到最大重发次数 return MAX_RT; else if(state&TX_DS) //发送完成 return TX_DS; else return ERROR; //其他原因发送失败 }
/** * @brief 用于从NRF的接收缓冲区中读出数据 * @param * @arg rxBuf :用于接收该数据的数组,外部定义 * @retval * @arg 接收结果 */ u8 NRF_Rx_Dat(u8 *rxbuf) { u8 state; u16 link_count=0; NRF_CE_HIGH(); //进入接收状态 /*等待接收中断*/ while(NRF_Read_IRQ()!=0) { link_count ++; if(link_count == 5000) //5000为最大重连次数 return ERROR; } NRF_CE_LOW(); //进入待机状态 /*读取status寄存器的值 */ state=SPI_NRF_ReadReg(STATUS); /* 清除中断标志*/ SPI_NRF_WriteReg(NRF_WRITE_REG+STATUS,state); /*判断是否接收到数据*/ if(state&RX_DR) //接收到数据 { SPI_NRF_ReadBuf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据 SPI_NRF_WriteReg(FLUSH_RX,NOP); //清除RX FIFO寄存器 return RX_DR; } else return ERROR; //没收到任何数据 }