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: Measure_system Quadcopter_copy
Diff: RF12B.cpp
- Revision:
- 0:bd1232f200be
- Child:
- 1:42b124ed1f57
diff -r 000000000000 -r bd1232f200be RF12B.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/RF12B.cpp Thu Mar 10 10:56:15 2011 +0000
@@ -0,0 +1,97 @@
+#include "RF12B.h"
+
+RF12B::RF12B(PinName SDI,
+ PinName SDO,
+ PinName SCK,
+ PinName NCS,
+ PinName NIRQ):spi(SDI, SDO, SCK),
+ NCS(NCS), NIRQ(NIRQ) {
+ this->initialized = false;
+ this->trans = false;
+
+ this->spi.format(16,0);
+ this->spi.frequency(2000000);
+ this->NCS = 1;
+}
+
+/* Initialises the RF12B module as transmitter
+ or receiver. This should be called after the
+ RF module has fully started up (give it a
+ few hundred ms) */
+void RF12B::init(bool _trans) {
+ trans = _trans;
+
+ writeCmd(0x80E7); //EL,EF,868band,12.0pF
+ if (trans) {
+ writeCmd(0x8239); //!er,!ebb,ET,ES,EX,!eb,!ew,DC
+ } else {
+ writeCmd(0x8299); //er,!ebb,ET,ES,EX,!eb,!ew,DC
+ }
+ writeCmd(0xA640); //frequency select
+ writeCmd(0xC647); //4.8kbps
+ writeCmd(0x94A0); //VDI,FAST,134kHz,0dBm,-103dBm
+ writeCmd(0xC2AC); //AL,!ml,DIG,DQD4
+ writeCmd(0xCA81); //FIFO8,SYNC,!ff,DR
+ writeCmd(0xCED4); //SYNC=2DD4
+ writeCmd(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN
+ writeCmd(0x9850); //!mp,90kHz,MAX OUT
+ writeCmd(0xCC17); //OB1, COB0, LPX, Iddy, CDDITCBW0
+ writeCmd(0xE000); //NOT USED
+ writeCmd(0xC800); //NOT USED
+ writeCmd(0xC040); //1.66MHz,2.2V
+
+ initialized = true;
+}
+
+/* Reads a byte of data from the RF module's buffer
+ This is a blocking call */
+unsigned char RF12B::read() {
+ if (!initialized) {
+ init(false); //Receiver
+ trans = false;
+ initialized = true;
+ }
+ if(trans) {
+ return 0;
+ }
+
+ unsigned int data;
+ while (1) {
+ data = writeCmd(0x0000);
+ if ( (data&0x8000) ) {
+ data = writeCmd(0xB000);
+ return (data&0x00FF);
+ }
+ }
+}
+
+/* Sends a byte of data to the RF module for transmission */
+void RF12B::write(unsigned char data) {
+ if (!initialized) {
+ init(true); //Transmitter
+ trans = true;
+ initialized = true;
+ }
+ if (!trans) {
+ return; // Must be in transmitter mode!
+ }
+
+ while (NIRQ);
+ writeCmd(0xB800 + data);
+}
+
+/* Flushes all data from the RF module's buffer */
+void RF12B::flush() {
+ if (!trans) {
+ writeCmd(0xCA81);
+ writeCmd(0xCA83);
+ }
+};
+
+unsigned int RF12B::writeCmd(unsigned int cmd) {
+ unsigned int recv;
+ NCS = 0;
+ recv = spi.write(cmd);
+ NCS = 1;
+ return recv;
+}