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[2]=MDMCFG2;
cfg[3]=MDMCFG3;
cfg[4]=MDMCFG4;
-
+ /*
+ freq[0]=FREQ0;
+ freq[1]=FREQ1;
+ freq[2]=FREQ2;
+ */
}
//! Restore MDMCFG*
void restore_settings(){
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.
//FSCTRL0 = 0x00; // Frequency synthesizer control.
- MDMCFG4 = 0x86; // Modem configuration.
- MDMCFG3 = 0x83; // Modem configuration.
- MDMCFG2 = 0x30; // Modem configuration.
- MDMCFG1 = 0x22; // Modem configuration.
- MDMCFG0 = 0xF8; // Modem configuration.
+ //Bandwidth, Symbol Rate
+ //MDMCFG4 = 0x86;
+ //Symbol Rate
+ //MDMCFG3 = 0x83;
+ //Sensitivity, shift-keying mode
+ //MDMCFG2 = 0x30;
+ //FEC, Premable, Spacing
+ //MDMCFG1 = 0x22;
+ //Channel Spacing
+ //MDMCFG0 = 0xF8;
/* Settings not from SmartRF® Studio. Setting both sync word registers to
* 0xAA = 0b10101010, i.e., the same as the preamble pattern. Not necessary,
#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
+ };
}
//idle a bit.
RFST=RFST_SIDLE;
while(MARCSTATE!=MARC_STATE_IDLE);
-
restore_settings();
- //idle a bit.
- RFST=RFST_SFSTXON;
- while(MARCSTATE!=MARC_STATE_FSTXON);
+ //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);
+ //RFST=RFST_SFSTXON;
+ //while(MARCSTATE!=MARC_STATE_FSTXON);
- //HALT;
- //sleepMillis(500);
- //HALT;
-
- //RFOFF;
-
- //SYNC1=0xAA;
- //SYNC0=0xAA;
//Transmit carrier for 10ms
carrier();
RFON;
+ //HALT;
+ //while(1);
+ //sleepMillis(200);
+ //sleepMillis(100);
+ //sleepMillis(50);
- sleepMillis(2000);
- //sleepMillis(20);
+ sleepMillis(10);
//HALT;
}
}
void rxwait(){
unsigned char len=16, i=0;
+ //Test to always carry.
+ //return;
+
do{
//1-out the buffer.
for(i=0;i<64;i++)
RFST=RFST_SRX;
while(MARCSTATE!=MARC_STATE_RX);
- if(PKTCTRL0&1){
- //auto length
- while(i<len+3){ //len+3 if status is appended.
- while(!RFTXRXIF); //Wait for byte to be ready.
- RFTXRXIF=0; //Clear the flag.
-
- packet[i++]=RFD; //Grab the next byte.
- len=packet[0]; //First byte of the packet is the length.
- }
- }else{
- //Fixed length
- packet[i++]=PKTLEN;
- while(i<PKTLEN){
- while(!RFTXRXIF); //Wait for byte to be ready.
- RFTXRXIF=0; //Clear the flag.
-
- packet[i++]=RFD; //Grab the next byte.
- }
+ //RFST = RFST_SIDLE; //End receive.
+ //return;
+
+
+ //Fixed length
+ packet[i++]=PKTLEN;
+ while(i<3){ //PKTLEN){
+ while(!RFTXRXIF); //Wait for byte to be ready.
+ RFTXRXIF=0; //Clear the flag.
+
+ packet[i++]=RFD; //Grab the next byte.
}
+
RFST = RFST_SIDLE; //End receive.
//This while loop can be used for filtering. Unused for now.