Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: WalkingRobot PcRadioBridge FzeroXcontroller WalkingRobot ... more
Diff: Radio.cpp
- Revision:
- 1:32635715529f
- Parent:
- 0:fb0cf6209cd3
- Child:
- 2:24a6ae7c3f69
diff -r fb0cf6209cd3 -r 32635715529f Radio.cpp
--- a/Radio.cpp Sun Dec 23 04:48:16 2012 +0000
+++ b/Radio.cpp Sun Dec 23 04:56:14 2012 +0000
@@ -16,12 +16,6 @@
_spi.frequency(SPI_FREQUENCY);
_spi.format(8, 0);
- // Power up
- int config = getRegister(CONFIG);
- config |= CONFIG_PWR_UP;
- setRegister(CONFIG, config);
- wait_us(TIMING_Tpd2stby);
-
// Set to use controller channel 0
controller = 0;
@@ -205,3 +199,108 @@
}
}
+
+
+
+/************************************************************************/
+
+
+
+RadioController::RadioController(PinName mosi, PinName miso, PinName sck, PinName csn, PinName ce)
+: _spi(mosi, miso, sck), _csn(csn), _ce(ce)
+{
+ // Disable nRF24L01+
+ _ce = 0;
+
+ // Disable chip select
+ _csn = 1;
+
+ // Set up SPI
+ _spi.frequency(SPI_FREQUENCY);
+ _spi.format(8, 0);
+
+ // Set to use controller channel 0
+ controller = 0;
+}
+
+
+
+void RadioController::reset()
+{
+ // Wait for power on reset
+ wait_us(TIMING_Tpor);
+
+ // Put into standby
+ _ce = 0;
+
+ // Configure registers
+ setRegister(CONFIG, CONFIG_MASK_RX_DR | CONFIG_MASK_TX_DS | CONFIG_MASK_MAX_RT | CONFIG_EN_CRC | CONFIG_PWR_UP);
+ setRegister(EN_AA, 0x00);
+ setRegister(EN_RXADDR, 0x00);
+ setRegister(SETUP_AW, SETUP_AW_3BYTES);
+ setRegister(SETUP_RETR, 0x00);
+ setRegister(RF_CH, RF_CHANNEL);
+ setRegister(RF_SETUP, RF_SETUP_RF_DR_HIGH | RF_SETUP_RF_PWR_0);
+ setRegister(STATUS, STATUS_RX_DR | STATUS_TX_DS | STATUS_MAX_RT);
+ setRegister(DYNPD, 0x00);
+ setRegister(FEATURE, 0x00);
+
+ // Set transmit address
+ _csn = 0;
+ _spi.write(W_REGISTER | TX_ADDR);
+ _spi.write(CTRL_BASE_ADDRESS_1 + (controller & 0xf));
+ _spi.write(CTRL_BASE_ADDRESS_2);
+ _spi.write(CTRL_BASE_ADDRESS_3);
+ _csn = 1;
+
+ // Flush TX FIFO
+ _csn = 0;
+ _spi.write(FLUSH_TX);
+ _csn = 1;
+}
+
+
+
+void RadioController::transmit(uint32_t data)
+{
+ // Write packet data
+ _csn = 0;
+ _spi.write(W_TX_PAYLOAD);
+ _spi.write( (data>>0) & 0xff );
+ _spi.write( (data>>8) & 0xff );
+ _spi.write( (data>>16) & 0xff );
+ _spi.write( (data>>24) & 0xff );
+ _csn = 1;
+
+ // Put into PTX and transmit packet
+ _ce = 1;
+ wait_us(TIMING_Tstby2a);
+
+ // Go back into standby
+ _ce = 0;
+}
+
+
+
+void RadioController::setRegister(int address, int data)
+{
+ bool enabled = false;
+ if (_ce == 1)
+ {
+ enabled = true;
+ _ce = 0;
+ }
+
+ _csn = 0;
+ int rc = W_REGISTER | (address & REGISTER_ADDRESS_MASK);
+ _spi.write(rc);
+ _spi.write(data & 0xff);
+ _csn = 1;
+
+ if (enabled)
+ {
+ _ce = 1;
+ wait_us(TIMING_Tpece2csn);
+ }
+
+}