diff options
-rw-r--r-- | include/driver/nrf24l01.h | 22 | ||||
-rw-r--r-- | src/app/nrf24l01test/main.cc | 9 | ||||
-rw-r--r-- | src/driver/nrf24l01.cc | 12 |
3 files changed, 28 insertions, 15 deletions
diff --git a/include/driver/nrf24l01.h b/include/driver/nrf24l01.h index e753604..ecf4bc2 100644 --- a/include/driver/nrf24l01.h +++ b/include/driver/nrf24l01.h @@ -60,7 +60,7 @@ private: */ uint8_t writePayload(const void *buf, uint8_t data_len, const uint8_t writeType); - /** + /** * Read the receive payload * * The size of data read is the fixed payload size, see getPayloadSize() @@ -69,7 +69,7 @@ private: * @param len Maximum number of bytes to read * @return Current value of status register */ - uint8_t readPayload(void* buf, uint8_t len); + uint8_t readPayload(void *buf, uint8_t len); inline void csnHigh() { @@ -81,6 +81,16 @@ private: gpio.write(NRF24L01_CS_PIN, 0); arch.delay_us(5); } + inline void ceHigh() + { + gpio.write(NRF24L01_EN_PIN, 1); + arch.delay_us(5); + } + inline void ceLow() + { + gpio.write(NRF24L01_EN_PIN, 0); + arch.delay_us(5); + } inline void beginTransaction() { csnLow(); @@ -515,7 +525,7 @@ s * void openWritingPipe(const uint8_t *address); - /** + /** * Test whether there was a carrier on the line for the * previous listening period. * @@ -523,9 +533,9 @@ s * * * @return true if was carrier, false if not */ - bool testCarrier(void); + bool testCarrier(void); - /** + /** * Test whether a signal (carrier or otherwise) greater than * or equal to -64dBm is present on the channel. Valid only * on nRF24L01P (+) hardware. On nRF24L01, use testCarrier(). @@ -542,7 +552,7 @@ s * * @endcode * @return true if signal => -64dBm, false if not */ - bool testRPD(void); + bool testRPD(void); uint8_t getStatus(); }; diff --git a/src/app/nrf24l01test/main.cc b/src/app/nrf24l01test/main.cc index d0961d4..2ddcee3 100644 --- a/src/app/nrf24l01test/main.cc +++ b/src/app/nrf24l01test/main.cc @@ -33,6 +33,9 @@ void loop(void) if (status & 0x01) { kout << " TX_FULL"; } + if ((status & 0x0e) < 0x0d) { + kout << " @" << (status & 0x0e)/2; + } kout << endl; #ifdef MULTIPASS_ARCH_msp430fr5969lp @@ -65,11 +68,11 @@ int main(void) kout << "nrf24l01 configure ..."; unsigned char addr[5] = {0, 'D', 'E', 'R', 'F'}; - //nrf24l01.setAutoAck(1); + nrf24l01.setAutoAck(1); //nrf24l01.enableAckPayload(); - nrf24l01.setDynamicPayloads(true); + nrf24l01.setDynamicPayloads(false); nrf24l01.setPALevel(Nrf24l01::RF24_PA_MAX); - nrf24l01.setChannel(25); + nrf24l01.setChannel(110); nrf24l01.setDataRate(Nrf24l01::RF24_2MBPS); #ifdef MULTIPASS_ARCH_msp430fr5994lp nrf24l01.openReadingPipe(1, addr); diff --git a/src/driver/nrf24l01.cc b/src/driver/nrf24l01.cc index abd42ea..937831b 100644 --- a/src/driver/nrf24l01.cc +++ b/src/driver/nrf24l01.cc @@ -131,7 +131,7 @@ void Nrf24l01::powerUp(void) void Nrf24l01::powerDown(void) { - gpio.write(NRF24L01_EN_PIN, 0); + ceLow(); writeRegister(NRF_CONFIG, readRegister(NRF_CONFIG) & ~(1 << PWR_UP)); } @@ -234,18 +234,18 @@ uint8_t Nrf24l01::write(const void *buf, uint8_t len, bool await_ack, bool block { writePayload(buf, len, await_ack ? W_TX_PAYLOAD : W_TX_PAYLOAD_NO_ACK); - gpio.write(NRF24L01_EN_PIN, 1); + ceHigh(); if (!blocking) { arch.delay_us(10); - gpio.write(NRF24L01_EN_PIN, 0); + ceLow(); return 0; } while (!(getStatus() & ((1 << TX_DS) | (1 << MAX_RT)))) ; - gpio.write(NRF24L01_EN_PIN, 1); + ceLow(); uint8_t status = writeRegister(NRF_STATUS, ((1 << TX_DS) | (1 << MAX_RT))); if (status & (1 << MAX_RT)) @@ -260,7 +260,7 @@ void Nrf24l01::startListening(void) { writeRegister(NRF_CONFIG, readRegister(NRF_CONFIG) | (1 << PRIM_RX)); writeRegister(NRF_STATUS, (1 << RX_DR) | (1 << TX_DS) | (1 << MAX_RT)); - gpio.write(NRF24L01_EN_PIN, 1); + ceHigh(); // Restore the pipe0 adddress, if exists if (pipe0_reading_address[0] > 0) @@ -280,7 +280,7 @@ void Nrf24l01::startListening(void) void Nrf24l01::stopListening(void) { - gpio.write(NRF24L01_EN_PIN, 0); + ceLow(); arch.delay_us(txRxDelay); |