![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
General testings
Fork of BEACON_CODE_NEW by
Diff: BCN.cpp
- Revision:
- 31:90cdfbadea91
- Parent:
- 30:ca96cddf25d0
- Child:
- 32:e5d6c0cffa82
--- a/BCN.cpp Mon Nov 02 14:46:12 2015 +0000 +++ b/BCN.cpp Sat Nov 07 10:23:10 2015 +0000 @@ -5,6 +5,8 @@ //Takes max 4.3 sec in void FCTN_BCN_TX_MAIN() (temp.calc. + long_beacon + short_beacon) Serial pc_bcn(USBTX, USBRX); //tx,rx +//SPI spi(D11, D12, D13); // mosi, miso, sclk +//DigitalOut cs(D10); //slave select or chip select SPI spi(PIN16, PIN17, PIN15); // mosi, miso, sclk DigitalOut cs(PIN6); //slave select or chip select Timer t_i;//timer for checking the time taken by (temp.calc. + long_beacon + short_beacon) @@ -18,8 +20,10 @@ uint8_t BCN_TX_EN = 1; //hardcoding for now //check where is this variable toggled?? uint8_t BCN_FEN = 0; //hardcoding for now //write this value to flash uint8_t BCN_STANDBY = 0; //hardcoding for now //check where is this variable toggled?? -uint8_t BCN_TS_BUFFER = 0; // For Temperature - +uint8_t BCN_TS_BUFFER = 0; // For Temperature +uint8_t ERROR_CHECK = 0; +uint8_t BCN_FAIL_COUNT = 0; //Flag for keeping count of no. of times of BCN failure in init or one transmission in 30 secs (failure in spi communication) + //This Flag when exceeds a threshold, uC should reset. void FCTN_BCN_INIT() { pc_bcn.printf("FCTN_BCN_INIT\n"); @@ -36,6 +40,7 @@ } void FCTN_BCN_TX_MAIN() { + ERROR_CHECK=0; pc_bcn.printf("FCTN_BCN_TX_MAIN\n"); t_i.start(); int begin = t_i.read_us(); @@ -89,6 +94,7 @@ t_i.stop(); int end = t_i.read_us(); pc_bcn.printf("The time required for FCTN_BCN_TX_MAIN is %d useconds\r\n", end-begin); + ERROR_CHECK = 0; } @@ -170,11 +176,11 @@ wait(0.1);// takes time to set to tx mode hence the delay of 0.1. //Check for fifoThresh - while(timeout_count--)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x20) == 0x20)break; + while(timeout_count--)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x20) == 0x20)break;else if(timeout_count == 1) reset_rfm(1); timeout_count=10e5; //Check for packet_sent - while(timeout_count--)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x04) == 0x04)break; + while(timeout_count--)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x04) == 0x04)break;else if(timeout_count == 1) reset_rfm(1); //pc_bcn.printf("Short packet sent\r\n"); @@ -212,7 +218,7 @@ wait(0.1);//necessary //Check for fifoThresh - while(timeout_count--)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x20) == 0x20)break; + while(timeout_count--)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x20) == 0x20)break;else if(timeout_count == 1) reset_rfm(1); timeout_count=10e5; cs = 0; @@ -224,22 +230,29 @@ cs = 1; wait(0.1); //Check for fifoThresh - while(timeout_count--)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x20) == 0x20)break; + while(timeout_count--)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x20) == 0x20)break;else if(timeout_count == 1) reset_rfm(1); timeout_count=10e5; //Check for packetsent interrupt - while(timeout_count--)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x04) == 0x04)break; + while(timeout_count--)if((readreg(RF22_REG_03_INTERRUPT_STATUS1) & 0x04) == 0x04)break;else if(timeout_count == 1) reset_rfm(1); //pc_bcn.printf("Long packet sent\r\n"); writereg(RF22_REG_07_OPERATING_MODE1,0x00); //standby mode } -void reset_rfm() +void reset_rfm(uint8_t fl) { - FCTN_BCN_INIT(); +if (fl ==1 && ERROR_CHECK ==0) + {BCN_FAIL_COUNT++; + ERROR_CHECK=1; + printf("BCN_FAIL_COUNT++\n");} + else if(fl == 0) + {BCN_FAIL_COUNT = 0; + ERROR_CHECK=0;} } void writereg(uint8_t reg,uint8_t val) { + uint8_t count = 0; for(;;count++) { @@ -253,8 +266,9 @@ } else if(count == 5) { - reset_rfm(), printf("reg = 0x%X\n",reg);break; + reset_rfm(1); printf("reg = 0x%X\n",reg);break; } + else init_spi(); } else break; @@ -290,23 +304,32 @@ writereg(RF22_REG_77_NOMINAL_CARRIER_FREQUENCY0, fc & 0xff); return 0; } - - -void Init_BEACON_HW() +void init_spi() { - wait(0.1); cs=1; // chip must be deselected wait(0.1); spi.format(8,0); spi.frequency(10000000); //10MHz SCLK +} +void Init_BEACON_HW() +{ + ERROR_CHECK=0; + wait(0.1); + int i = 5; + while(i--) + { + init_spi(); //should either have a flag for invalid SPI or discard this for actual case or add reset if (readreg(RF22_REG_00_DEVICE_TYPE) == 0x08) - pc_bcn.printf("spi connection valid\r\n"); - else + {pc_bcn.printf("spi connection valid\r\n"); + reset_rfm(0);break;} + else if (i == 1) {pc_bcn.printf("error in spi connection\r\n"); - reset_rfm(); + reset_rfm(1); + return; } + } writereg(RF22_REG_07_OPERATING_MODE1,0x80); //sw_reset wait(0.1); //takes time to reset @@ -328,11 +351,15 @@ writereg(RF22_REG_0C_GPIO_CONFIGURATION1,0x12); // RX state setFrequency(435.0); - + + i=3; + while(i--) if((readreg(RF22_REG_02_DEVICE_STATUS)& 0x08)!= 0x00) { - pc_bcn.printf("frequency not set properly\r\n"); - reset_rfm(); + setFrequency(435.0); + if (i==1) + {pc_bcn.printf("frequency not set properly\r\n"); + reset_rfm(1);} } //set Modem Configuration @@ -347,6 +374,7 @@ writereg(RF22_REG_6D_TX_POWER,0x07); //20dbm //TX_packet_length written later + ERROR_CHECK = 0; } bool Check_ACK_RECEIVED() { @@ -361,7 +389,7 @@ return 0; } } -/*int main() +int main() { FCTN_BCN_INIT(); @@ -369,4 +397,4 @@ while(1); -}*/ \ No newline at end of file +} \ No newline at end of file