This is a work in progress for an NRF2401P
Dependencies: mbed
Fork of NRF2401P by
Diff: NRF2401P.cpp
- Revision:
- 1:ff53b1ac3bad
- Parent:
- 0:8fd0531ae0be
- Child:
- 2:ca0a3c0bba70
--- a/NRF2401P.cpp Thu Jun 11 11:19:57 2015 +0000 +++ b/NRF2401P.cpp Thu Jun 11 17:00:18 2015 +0000 @@ -42,7 +42,7 @@ csn = 1; ce = 0; dynamic = false; - debug=false; + debug=1|false; }; @@ -52,8 +52,8 @@ void NRF2401P::log (char *msg) { if(debug) { - pc->printf("%s \t %s\n\r",statusString(), msg); - wait(0.1); + printf("<%s \t %s>\n\r",statusString(), msg); + wait(0.01); }; } @@ -82,12 +82,13 @@ setRadio(0,3); setChannel(channel); setRxMode(); - setPwrUp(); + setAddressWidth(3); - setRxAddress(addr,1); + setRxAddress(addr,0); setDynamicPayload(); - writeReg(0x02,0x03); // EN_RXADDR for P1 and P0 - writeReg(0x01,0x3f); // EN_AA regi for P1 and P0 + writeReg(0x02,0x03); // EN_RXADDR for P1 + writeReg(0x01,0x03); // EN_AA regi for P1 + setPwrUp(); ce=1; wait (0.1f); @@ -130,6 +131,10 @@ setDynamicPayload(); setAddressWidth(3); setTxAddress(addr); + writeReg(0x04,0x2f); // ARD 750 uS ARC 15 + writeReg(0x02,0x03); // EN_RXADDR for P1 and P0 + setPwrUp(); + ce=1; wait (0.0016f); // wait for pll to settle } @@ -194,6 +199,7 @@ */ char NRF2401P::transmitData( char *data, char width ) { + clearStatus(); ce = 1; csn = 0; char address = 0XA0; @@ -213,7 +219,7 @@ /** * sets acknowledge data width bytes of data. width <32 */ -char NRF2401P::acknowledgeData( char *data, char width, char pipe=1 ) +char NRF2401P::acknowledgeData( char *data, char width, char pipe ) { ce = 1; csn = 0; @@ -417,10 +423,31 @@ buff[ 4 ] = ( address >> 32 ) & 0xFF; return setRxAddress( buff, pipe ); } +/** +*checks the status flag +*/ +char NRF2401P::checkStatus() +{ + readReg(0x07,&status); + return status; +} +/** +* checks if Ack data available. +*/ +bool NRF2401P::isAckData() +{ + char fifo; + readReg(0x17,&fifo); + bool isData = !(fifo&0x01); + return isData; +} +/** +* checks if RX data available. +*/ bool NRF2401P::isRxData() { - readReg(0x07,&status); + checkStatus(); bool isData = (status>>6)&0x01; return isData; } @@ -444,7 +471,7 @@ status = readReg(0x12,&width); // width of p1 } - // width=18; + // width=18; return width; } /** @@ -486,7 +513,9 @@ char NRF2401P::setDynamicPayload() { dynamic = true; - writeReg (0x1D,0x04); + + writeReg (0x1D,0x06); + writeReg(0x01,0x3f); // EN_AA regi for P1 and P0 return(writeReg(0x1C, 0x1F)); } /**