/* Read only one byte (useful for most of the reg.) */ unsigned char nrfRead1Reg(unsigned char address) { char byte; nrfReadReg(address, &byte, 1); return byte; }
/****************************检测应答信号******************************/ unsigned char nrfCheckACK() { //用于发射 sta=nrfReadReg(R_REGISTER+STATUS); // 返回状态寄存器 if(TX_DS||MAX_RT) //发送完毕中断 { nrfWriteReg(W_REGISTER+STATUS,0xff); // 清除TX_DS或MAX_RT中断标志 CSN=0; nrfSPI(FLUSH_TX);//用于清空FIFO !!关键!!不然会出现意想不到的后果!!!大家记住!! CSN=1; return(0); } else { return(1); } }
//获取24L01接收到的数据。 //当24L01收到数据触发中断后,调用本方法来取得24L01收到的数据 byte* nrfGetReceivedData() { static byte dataBuffer[RECEIVE_DATA_WIDTH]; sta=nrfReadReg(R_REGISTER+STATUS);//发送数据后读取状态寄存器 if(RX_DR) // 判断是否接收到数据 { //CE=0;//待机Standby-I // 从RXFIFO读取数据 nrfReadRxData( R_RX_PAYLOAD, dataBuffer, RECEIVE_DATA_WIDTH); //接收到数据后RX_DR置高为来清除中断标 nrfWriteReg( W_REGISTER+STATUS, 0x40 ); //用于清空FIFO !!关键!!不然会出现意想不到的后果!!!大家记住!! //我经过试验发现,不清FIFO的话,发送方有时候会出现收不到ACK的现象 CSN=0; nrfSPI(FLUSH_RX); CSN=1; } return dataBuffer; }
//获取24L01接收到的数据。 //当24L01收到数据触发中断后,调用本方法来取得24L01收到的数据 unsigned char* nrfGetReceivedData() { static unsigned char dataBuffer[RECEIVE_DATA_WIDTH]; sta=nrfReadReg(R_REGISTER+STATUS);//发送数据后读取状态寄存器 if(RX_DR) // 判断是否接收到数据 { //CE=0;//进入Standby-I模式 nrfReadRxData(R_RX_PAYLOAD,dataBuffer,RECEIVE_DATA_WIDTH);// 从RXFIFO读取数据 //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清除中断标 //nrfWriteReg(W_REGISTER+STATUS,0xff); //网上找到的例子是用0xff来清中断标志,我通过试验发现用0x40也可以清掉RX_DR nrfWriteReg(W_REGISTER+STATUS,0x40); //用于清空FIFO !!关键!!不然会出现意想不到的后果!!!大家记住!! //我经过试验发现,不清FIFO的话,发送方有时候会出现收不到ACK的现象 CSN=0; nrfSPI(FLUSH_RX); CSN=1; } return dataBuffer; }