X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=shellcode%2Fchipcon%2Fcc1110%2Freflexframe.c;h=9120ccf71d682babe7898e70e2d26b302fe64242;hp=57aa2ab049599c0bc1a9b53edc6c8a9194f9cbdf;hb=863730a5be779a7ab5a3217f5fab28d12939457a;hpb=81bbb3ce2efc1a032937f2a8da9806011aba6c8e diff --git a/shellcode/chipcon/cc1110/reflexframe.c b/shellcode/chipcon/cc1110/reflexframe.c index 57aa2ab..9120ccf 100644 --- a/shellcode/chipcon/cc1110/reflexframe.c +++ b/shellcode/chipcon/cc1110/reflexframe.c @@ -2,16 +2,49 @@ #include "cc1110-ext.h" char __xdata at 0xfe00 packet[256] ; + +char __xdata at 0xfdf0 cfg[5] ; +char __xdata at 0xfdf8 freq[3] ; +//! Save MDMCFG* +void save_settings(){ + cfg[0]=MDMCFG0; + cfg[1]=MDMCFG1; + cfg[2]=MDMCFG2; + cfg[3]=MDMCFG3; + cfg[4]=MDMCFG4; + /* + freq[0]=FREQ0; + freq[1]=FREQ1; + freq[2]=FREQ2; + */ +} +//! Restore MDMCFG* +void restore_settings(){ + MDMCFG0=cfg[0]; + MDMCFG1=cfg[1]; + MDMCFG2=cfg[2]; + MDMCFG3=cfg[3]; + MDMCFG4=cfg[4]; + /* + FREQ0=freq[0]; + FREQ1=freq[1]; + FREQ2=freq[2]; + */ +} + void carrier(){ // Set the system clock source to HS XOSC and max CPU speed, // ref. [clk]=>[clk_xosc.c] + /* SLEEP &= ~SLEEP_OSC_PD; while( !(SLEEP & SLEEP_XOSC_S) ); CLKCON = (CLKCON & ~(CLKCON_CLKSPD | CLKCON_OSC)) | CLKSPD_DIV_1; while (CLKCON & CLKCON_OSC); SLEEP |= SLEEP_OSC_PD; + */ - + //FREQ0=0x5C; + /* Setup radio with settings from SmartRF® Studio. The default settings are * used, except that "unmodulated" is chosen in the "Simple RX tab". This * results in an umodulated carrier with a frequency of approx. 2.433 GHz. @@ -20,40 +53,17 @@ void carrier(){ //FSCTRL0 = 0x00; // Frequency synthesizer control. + //Bandwidth, Symbol Rate + //MDMCFG4 = 0x86; + //Symbol Rate + //MDMCFG3 = 0x83; + //Sensitivity, shift-keying mode + //MDMCFG2 = 0x30; + //FEC, Premable, Spacing + //MDMCFG1 = 0x22; + //Channel Spacing + //MDMCFG0 = 0xF8; - MDMCFG4 = 0x86; // Modem configuration. - MDMCFG3 = 0x83; // Modem configuration. - MDMCFG2 = 0x30; // Modem configuration. - MDMCFG1 = 0x22; // Modem configuration. - MDMCFG0 = 0xF8; // Modem configuration. - - /* - CHANNR = 0x00; // Channel number. - DEVIATN = 0x00; // Modem deviation setting (when FSK modulation is enabled). - FREND1 = 0x56; // Front end RX configuration. - FREND0 = 0x10; // Front end RX configuration. - MCSM0 = 0x14; // Main Radio Control State Machine configuration. - FOCCFG = 0x16; // Frequency Offset Compensation Configuration. - BSCFG = 0x6C; // Bit synchronization Configuration. - AGCCTRL2 = 0x03; // AGC control. - AGCCTRL1 = 0x40; // AGC control. - AGCCTRL0 = 0x91; // AGC control. - FSCAL3 = 0xE9; // Frequency synthesizer calibration. - FSCAL2 = 0x2a; // Frequency synthesizer calibration. - FSCAL1 = 0x00; // Frequency synthesizer calibration. - FSCAL0 = 0x1f; // Frequency synthesizer calibration - - TEST2 = 0x88; // Various test settings. - TEST1 = 0x31; // Various test settings. - TEST0 = 0x09; // Various test settings. - - //FE is too high - PA_TABLE0 = 0xFF; // PA output power setting. - PKTCTRL1 = 0x04; // Packet automation control. - PKTCTRL0 = 0x22; // Packet automation control. - ADDR = 0x00; // Device address. - PKTLEN = 0xFF; // Packet length. - */ /* Settings not from SmartRF® Studio. Setting both sync word registers to * 0xAA = 0b10101010, i.e., the same as the preamble pattern. Not necessary, * but gives control of what the radio attempts to transmit. @@ -62,27 +72,19 @@ void carrier(){ //These sync values are better for jamming, but they break reception. //SYNC1 = 0xAA; //SYNC0 = 0xAA; - - /* Put radio in TX. - RFST = RFST_STX; - while ((MARCSTATE & MARCSTATE_MARC_STATE) != MARC_STATE_TX); - */ - #define RFON RFST = RFST_SIDLE; RFST = RFST_STX; while ((MARCSTATE & MARCSTATE_MARC_STATE) != MARC_STATE_TX); #define RFOFF RFST = RFST_SIDLE; //while ((MARCSTATE & MARCSTATE_MARC_STATE) != MARC_STATE_IDLE); //RFON; - //while(1); - - + //while(1); } void sleepMillis(int ms) { - int j; - while (--ms > 0) { - for (j=0; j<1200;j++); // about 1 millisecond - }; + int j; + while (--ms > 0) { + for (j=0; j<1200;j++); // about 1 millisecond + }; } @@ -93,35 +95,41 @@ void main(){ //Disable interrupts. RFTXRXIE=0; + save_settings(); + //carrier(); - //idle a bit. - RFST=RFST_SIDLE; - while(MARCSTATE!=MARC_STATE_IDLE); - + while(1){ //idle a bit. - RFST=RFST_SFSTXON; - while(MARCSTATE!=MARC_STATE_FSTXON); + RFST=RFST_SIDLE; + while(MARCSTATE!=MARC_STATE_IDLE); + restore_settings(); + //idle a bit, unecessary + //RFST=RFST_SFSTXON; + //while(MARCSTATE!=MARC_STATE_FSTXON); - sleepMillis(5); + //sleepMillis(100); rxwait(); //idle w/ oscillator - RFST=RFST_SFSTXON; - while(MARCSTATE!=MARC_STATE_FSTXON); - //HALT; + //RFST=RFST_SFSTXON; + //while(MARCSTATE!=MARC_STATE_FSTXON); - //RFOFF; - - //SYNC1=0xAA; - //SYNC0=0xAA; //Transmit carrier for 10ms carrier(); RFON; - HALT; + //HALT; + //while(1); + //sleepMillis(200); + //sleepMillis(100); + //sleepMillis(50); + + + sleepMillis(10); + //HALT; } } @@ -129,6 +137,9 @@ void main(){ void rxwait(){ unsigned char len=16, i=0; + //Test to always carry. + //return; + do{ //1-out the buffer. for(i=0;i<64;i++) @@ -146,25 +157,19 @@ void rxwait(){ RFST=RFST_SRX; while(MARCSTATE!=MARC_STATE_RX); - if(PKTCTRL0&1){ - //auto length - while(i