2 #include "cc1110-ext.h"
4 char __xdata at 0xfe00 packet[256] ;
6 // Set the system clock source to HS XOSC and max CPU speed,
7 // ref. [clk]=>[clk_xosc.c]
8 SLEEP &= ~SLEEP_OSC_PD;
9 while( !(SLEEP & SLEEP_XOSC_S) );
10 CLKCON = (CLKCON & ~(CLKCON_CLKSPD | CLKCON_OSC)) | CLKSPD_DIV_1;
11 while (CLKCON & CLKCON_OSC);
12 SLEEP |= SLEEP_OSC_PD;
15 /* Setup radio with settings from SmartRF® Studio. The default settings are
16 * used, except that "unmodulated" is chosen in the "Simple RX tab". This
17 * results in an umodulated carrier with a frequency of approx. 2.433 GHz.
19 FSCTRL1 = 0x0A; // Frequency synthesizer control.
20 FSCTRL0 = 0x00; // Frequency synthesizer control.
24 MDMCFG4 = 0x86; // Modem configuration.
25 MDMCFG3 = 0x83; // Modem configuration.
26 MDMCFG2 = 0x30; // Modem configuration.
27 MDMCFG1 = 0x22; // Modem configuration.
28 MDMCFG0 = 0xF8; // Modem configuration.
29 CHANNR = 0x00; // Channel number.
30 DEVIATN = 0x00; // Modem deviation setting (when FSK modulation is enabled).
31 FREND1 = 0x56; // Front end RX configuration.
32 FREND0 = 0x10; // Front end RX configuration.
33 MCSM0 = 0x14; // Main Radio Control State Machine configuration.
34 FOCCFG = 0x16; // Frequency Offset Compensation Configuration.
35 BSCFG = 0x6C; // Bit synchronization Configuration.
36 AGCCTRL2 = 0x03; // AGC control.
37 AGCCTRL1 = 0x40; // AGC control.
38 AGCCTRL0 = 0x91; // AGC control.
39 FSCAL3 = 0xE9; // Frequency synthesizer calibration.
40 FSCAL2 = 0x2a; // Frequency synthesizer calibration.
41 FSCAL1 = 0x00; // Frequency synthesizer calibration.
42 FSCAL0 = 0x1f; // Frequency synthesizer calibration
44 TEST2 = 0x88; // Various test settings.
45 TEST1 = 0x31; // Various test settings.
46 TEST0 = 0x09; // Various test settings.
49 PA_TABLE0 = 0xFF; // PA output power setting.
50 PKTCTRL1 = 0x04; // Packet automation control.
51 PKTCTRL0 = 0x22; // Packet automation control.
52 ADDR = 0x00; // Device address.
53 PKTLEN = 0xFF; // Packet length.
55 /* Settings not from SmartRF® Studio. Setting both sync word registers to
56 * 0xAA = 0b10101010, i.e., the same as the preamble pattern. Not necessary,
57 * but gives control of what the radio attempts to transmit.
64 while ((MARCSTATE & MARCSTATE_MARC_STATE) != MARC_STATE_TX);
68 #define RFON RFST = RFST_SIDLE; RFST = RFST_STX; while ((MARCSTATE & MARCSTATE_MARC_STATE) != MARC_STATE_TX);
69 #define RFOFF RFST = RFST_SIDLE; //while ((MARCSTATE & MARCSTATE_MARC_STATE) != MARC_STATE_IDLE);
77 void sleepMillis(int ms) {
80 for (j=0; j<1200;j++); // about 1 millisecond
84 //! Wait for a packet to come, then immediately return.
93 while(MARCSTATE!=MARC_STATE_IDLE);
98 while(MARCSTATE!=MARC_STATE_RX);
99 //while(MARCSTATE!=MARC_STATE_RX_OVERFLOW);
108 while(!RFTXRXIF); //Wait for byte to be ready.
109 RFTXRXIF=0; //Clear the flag.
111 packet[i++]=RFD; //Grab the next byte.
115 //RFST = RFST_SIDLE; //End receive.
118 //! Reflexively jam on the present channel by responding to a signal with a carrier wave.
120 unsigned char threshold=packet[0], i=0, rssi=0;;
123 //Disable interrupts.
130 //while(MARCSTATE!=MARC_STATE_IDLE);
138 while(MARCSTATE!=MARC_STATE_IDLE);
146 //Transmit carrier for 10ms
149 while(MARCSTATE!=MARC_STATE_TX);
156 //Carrier will clear when the loop continue,
157 //but we can HALT to give the host a chance to take over.
160 RFST = RFST_SIDLE; //End transmit.