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.
30 /* Settings not from SmartRF® Studio. Setting both sync word registers to
31 * 0xAA = 0b10101010, i.e., the same as the preamble pattern. Not necessary,
32 * but gives control of what the radio attempts to transmit.
35 //These sync values are better for jamming, but they break reception.
39 #define RFON RFST = RFST_SIDLE; RFST = RFST_STX; while ((MARCSTATE & MARCSTATE_MARC_STATE) != MARC_STATE_TX);
40 #define RFOFF RFST = RFST_SIDLE; //while ((MARCSTATE & MARCSTATE_MARC_STATE) != MARC_STATE_IDLE);
48 void sleepMillis(int ms) {
51 for (j=0; j<1200;j++); // about 1 millisecond
56 //! Reflexively jam on the present channel by responding to a signal with a carrier wave.
58 unsigned char threshold=packet[0], i=0, rssi=0;;
67 while(MARCSTATE!=MARC_STATE_IDLE);
72 while(MARCSTATE!=MARC_STATE_FSTXON);
80 while(MARCSTATE!=MARC_STATE_FSTXON);
91 //Transmit carrier for 10ms
102 //! Receives a packet out of the radio from 0xFE00.
104 unsigned char len=16, i=0;
112 //Disable interrupts.
117 while(MARCSTATE!=MARC_STATE_IDLE);
121 while(MARCSTATE!=MARC_STATE_RX);
125 while(i<len+3){ //len+3 if status is appended.
126 while(!RFTXRXIF); //Wait for byte to be ready.
127 RFTXRXIF=0; //Clear the flag.
129 packet[i++]=RFD; //Grab the next byte.
130 len=packet[0]; //First byte of the packet is the length.
136 while(!RFTXRXIF); //Wait for byte to be ready.
137 RFTXRXIF=0; //Clear the flag.
139 packet[i++]=RFD; //Grab the next byte.
142 RFST = RFST_SIDLE; //End receive.
144 //This while loop can be used for filtering. Unused for now.
145 }while(0); //packet[0]==(char) 0x0f || packet[1]==(char) 0xFF || packet[9]==(char) 0x03);