pl ack in tmtc

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of COM_MNG_TMTC_SIMPLE_pl123 by shubham c

Committer:
krishanprajapat
Date:
Fri Jan 01 06:40:02 2016 +0000
Revision:
18:f87a5b919d60
Parent:
9:e9eaada136c6
with ticker functions # defined

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 1:a0055b3280c8 1 //without reset feature , with state checks.
shreeshas95 2:2caf2a9a13aa 2 InterruptIn IRQ(ADF_IRQ);
shreeshas95 1:a0055b3280c8 3 Ticker ticker;
ee12b079 9:e9eaada136c6 4
shreeshas95 1:a0055b3280c8 5 bool sent_tmfrom_SDcard;
shreeshas95 1:a0055b3280c8 6 bool loop_on;
shreeshas95 1:a0055b3280c8 7 bool ADF_off;
shreeshas95 1:a0055b3280c8 8 bool buffer_state;
krishanprajapat 18:f87a5b919d60 9 bool stop_transmission = false;
ee12b079 9:e9eaada136c6 10 bool finish_write_data;
shreeshas95 1:a0055b3280c8 11 uint8_t signal = 0x00;
shreeshas95 1:a0055b3280c8 12 unsigned char bbram_buffer[66]={0x19,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0xF4,0xC2,0x10,0xC0,0x00,0x30,0x31,0x07,0x00,0x01,0x00,0x7F,0x00,0x0B,0x37,0x00,0x00,0x40,0x0C,0x00,0x05,0x00,0x00,0x18,0x12,0x34,0x56,0x10,0x10,0xC4,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00};
ee12b079 9:e9eaada136c6 13
shreeshas95 2:2caf2a9a13aa 14 //int initialise_card();
shreeshas95 2:2caf2a9a13aa 15 //int disk_initialize();
ee12b079 9:e9eaada136c6 16
shreeshas95 1:a0055b3280c8 17 #define bbram_write {\
shreeshas95 1:a0055b3280c8 18 SPI_mutex.lock();\
shreeshas95 1:a0055b3280c8 19 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 20 spi.write(0xB0);\
shreeshas95 1:a0055b3280c8 21 wait_us(300);\
shreeshas95 1:a0055b3280c8 22 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 23 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 24 for(int i=0;i<66;i++){\
shreeshas95 1:a0055b3280c8 25 spi.write(bbram_buffer[i]);\
shreeshas95 1:a0055b3280c8 26 }\
shreeshas95 1:a0055b3280c8 27 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 28 SPI_mutex.unlock();\
shreeshas95 1:a0055b3280c8 29 }
shreeshas95 1:a0055b3280c8 30 //------------------------------------------------------------------------
shreeshas95 1:a0055b3280c8 31 // state checking functions
shreeshas95 1:a0055b3280c8 32 //bool assrt_phy_off( int, int, int);
shreeshas95 1:a0055b3280c8 33 //bool assrt_phy_on( int,int,int);
shreeshas95 1:a0055b3280c8 34 //bool assrt_phy_tx(int,int,int);
ee12b079 9:e9eaada136c6 35
shreeshas95 1:a0055b3280c8 36 #define START_ADDRESS 0x020;
shreeshas95 1:a0055b3280c8 37 #define MISO_PIN PTE3
shreeshas95 1:a0055b3280c8 38 /**************Defining Counter Limits**************/
shreeshas95 1:a0055b3280c8 39 #define THRS 20
shreeshas95 1:a0055b3280c8 40 #define STATE_ERR_THRS 20
shreeshas95 1:a0055b3280c8 41 #define PHY_OFF_EXEC_TIME 300
shreeshas95 1:a0055b3280c8 42 #define PHY_ON_EXEC_TIME 300
shreeshas95 1:a0055b3280c8 43 #define PHY_TX_EXEC_TIME 600
shreeshas95 1:a0055b3280c8 44 /******DEFINING COMMANDS*********/
shreeshas95 1:a0055b3280c8 45 #define CMD_HW_RESET 0xC8
shreeshas95 1:a0055b3280c8 46 #define CMD_PHY_ON 0xB1
shreeshas95 1:a0055b3280c8 47 #define CMD_PHY_OFF 0xB0
shreeshas95 1:a0055b3280c8 48 #define CMD_PHY_TX 0xB5
shreeshas95 1:a0055b3280c8 49 #define CMD_CONFIG_DEV 0xBB
ee12b079 9:e9eaada136c6 50
shreeshas95 1:a0055b3280c8 51 #define check_status {\
shreeshas95 1:a0055b3280c8 52 unsigned char stat=0;\
shreeshas95 1:a0055b3280c8 53 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 54 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 55 stat = spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 56 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 57 status = stat;\
shreeshas95 1:a0055b3280c8 58 }
ee12b079 9:e9eaada136c6 59
shreeshas95 1:a0055b3280c8 60 // all three arguments are int
shreeshas95 1:a0055b3280c8 61 #define assrt_phy_off(return_this) {\
shreeshas95 1:a0055b3280c8 62 int cmd_err_cnt = 0;\
shreeshas95 1:a0055b3280c8 63 int spi_err_cnt = 0;\
shreeshas95 1:a0055b3280c8 64 int state_err_cnt = 0;\
shreeshas95 1:a0055b3280c8 65 for(int i = 0 ; i < 40 ;i++){\
shreeshas95 1:a0055b3280c8 66 check_status;\
shreeshas95 1:a0055b3280c8 67 if(status == 0xB1){\
shreeshas95 1:a0055b3280c8 68 return_this = 0;\
shreeshas95 1:a0055b3280c8 69 break;\
shreeshas95 1:a0055b3280c8 70 }\
shreeshas95 1:a0055b3280c8 71 else if(cmd_err_cnt>THRS||spi_err_cnt>THRS){\
shreeshas95 1:a0055b3280c8 72 return_this = 1;\
shreeshas95 1:a0055b3280c8 73 break;\
shreeshas95 1:a0055b3280c8 74 }\
shreeshas95 1:a0055b3280c8 75 else if(state_err_cnt>STATE_ERR_THRS){\
shreeshas95 1:a0055b3280c8 76 return_this = 1;\
shreeshas95 1:a0055b3280c8 77 break;\
shreeshas95 1:a0055b3280c8 78 }\
shreeshas95 1:a0055b3280c8 79 else if( (status & 0xA0) == 0xA0 ){\
shreeshas95 1:a0055b3280c8 80 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 81 spi.write(CMD_PHY_OFF);\
shreeshas95 1:a0055b3280c8 82 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 83 wait_us(PHY_OFF_EXEC_TIME);\
shreeshas95 1:a0055b3280c8 84 state_err_cnt++;\
shreeshas95 1:a0055b3280c8 85 }\
shreeshas95 1:a0055b3280c8 86 else if(status&0x80==0x00){\
shreeshas95 1:a0055b3280c8 87 wait_ms(5);\
shreeshas95 1:a0055b3280c8 88 spi_err_cnt++;\
shreeshas95 1:a0055b3280c8 89 }\
shreeshas95 1:a0055b3280c8 90 else {\
shreeshas95 1:a0055b3280c8 91 wait_ms(1);\
shreeshas95 1:a0055b3280c8 92 cmd_err_cnt++;\
shreeshas95 1:a0055b3280c8 93 }\
shreeshas95 1:a0055b3280c8 94 }\
shreeshas95 1:a0055b3280c8 95 }
ee12b079 9:e9eaada136c6 96
ee12b079 9:e9eaada136c6 97
shreeshas95 1:a0055b3280c8 98 //#define assrt_phy_on(cmd_err_cnt, spi_err_cnt, state_err_cnt, return_this){\
shreeshas95 1:a0055b3280c8 99 // status=check_status();\
shreeshas95 1:a0055b3280c8 100 // if((status&0x1F)==0x12){\
shreeshas95 1:a0055b3280c8 101 // return 0;\
shreeshas95 1:a0055b3280c8 102 // }\
shreeshas95 1:a0055b3280c8 103 // else if(cmd_err_cnt>THRS||spi_err_cnt>THRS){\
shreeshas95 1:a0055b3280c8 104 // return 1;\
shreeshas95 1:a0055b3280c8 105 // }\
shreeshas95 1:a0055b3280c8 106 // else if(state_err_cnt>STATE_ERR_THRS){\
shreeshas95 1:a0055b3280c8 107 // return 1;\
shreeshas95 1:a0055b3280c8 108 // }\
shreeshas95 1:a0055b3280c8 109 // else if((status&0xA0)==0xA0){\
shreeshas95 1:a0055b3280c8 110 // cs_adf=0;\
shreeshas95 1:a0055b3280c8 111 // spi.write(0xB1);\
shreeshas95 1:a0055b3280c8 112 // cs_adf=1;\
shreeshas95 1:a0055b3280c8 113 // wait_us(PHY_ON_EXEC_TIME);\
shreeshas95 1:a0055b3280c8 114 // return assrt_phy_on(cmd_err_cnt,spi_err_cnt,state_err_cnt+1);\
shreeshas95 1:a0055b3280c8 115 // }\
shreeshas95 1:a0055b3280c8 116 // else if(status&0x80==0x00){\
shreeshas95 1:a0055b3280c8 117 // wait_ms(5);\
shreeshas95 1:a0055b3280c8 118 // //Error: SPI=0 Not ready CMD= Dont care
shreeshas95 1:a0055b3280c8 119 // return assrt_phy_on(cmd_err_cnt,spi_err_cnt+1,state_err_cnt);\
shreeshas95 1:a0055b3280c8 120 // }\
shreeshas95 1:a0055b3280c8 121 // else{\
shreeshas95 1:a0055b3280c8 122 // if(status&0xA0==0x80){\
shreeshas95 1:a0055b3280c8 123 // wait_ms(1);\
shreeshas95 1:a0055b3280c8 124 // //Error: Command Not ready SPI Ready cmd_err_cnt is a global variable
shreeshas95 1:a0055b3280c8 125 // return assrt_phy_on(cmd_err_cnt+1,spi_err_cnt,state_err_cnt);\
shreeshas95 1:a0055b3280c8 126 // }\
shreeshas95 1:a0055b3280c8 127 // }\
shreeshas95 1:a0055b3280c8 128 //}
ee12b079 9:e9eaada136c6 129
ee12b079 9:e9eaada136c6 130
ee12b079 9:e9eaada136c6 131
ee12b079 9:e9eaada136c6 132
shreeshas95 1:a0055b3280c8 133 #define initial_adf_check {\
shreeshas95 1:a0055b3280c8 134 spi.write(CMD_PHY_OFF);\
shreeshas95 1:a0055b3280c8 135 int tempReturn = 0;\
shreeshas95 2:2caf2a9a13aa 136 bool flag = false;\
shreeshas95 1:a0055b3280c8 137 while( hw_reset_err_cnt < 2 ){\
shreeshas95 1:a0055b3280c8 138 assrt_phy_off( tempReturn);\
shreeshas95 1:a0055b3280c8 139 if( !tempReturn ){\
shreeshas95 1:a0055b3280c8 140 bbram_write;\
shreeshas95 1:a0055b3280c8 141 bbram_flag=1;\
shreeshas95 2:2caf2a9a13aa 142 flag = true;\
shreeshas95 1:a0055b3280c8 143 break;\
shreeshas95 1:a0055b3280c8 144 }\
shreeshas95 1:a0055b3280c8 145 else{\
shreeshas95 1:a0055b3280c8 146 hardware_reset(0);\
shreeshas95 1:a0055b3280c8 147 hw_reset_err_cnt++;\
shreeshas95 2:2caf2a9a13aa 148 gPC.puts("Resetting hardware\r\n");\
shreeshas95 1:a0055b3280c8 149 }\
shreeshas95 1:a0055b3280c8 150 }\
shreeshas95 2:2caf2a9a13aa 151 if( flag == false ){\
shreeshas95 2:2caf2a9a13aa 152 gPC.puts("Seems to be SPI problem\r\n");\
shreeshas95 2:2caf2a9a13aa 153 }\
shreeshas95 1:a0055b3280c8 154 assrt_phy_off(tempReturn);\
shreeshas95 1:a0055b3280c8 155 if(!bbram_flag){\
shreeshas95 1:a0055b3280c8 156 bcn_flag=1;\
shreeshas95 1:a0055b3280c8 157 }\
shreeshas95 1:a0055b3280c8 158 }
ee12b079 9:e9eaada136c6 159
shreeshas95 1:a0055b3280c8 160 unsigned char status =0;
shreeshas95 1:a0055b3280c8 161 unsigned int cmd_err_cnt=0;
shreeshas95 1:a0055b3280c8 162 unsigned int state_err_cnt=0;
shreeshas95 1:a0055b3280c8 163 unsigned int miso_err_cnt=0;
shreeshas95 1:a0055b3280c8 164 unsigned int hw_reset_err_cnt=0;
shreeshas95 1:a0055b3280c8 165 bool bcn_flag=0;
shreeshas95 1:a0055b3280c8 166 bool bbram_flag=0;
ee12b079 9:e9eaada136c6 167
shreeshas95 1:a0055b3280c8 168 //bool assrt_phy_off(int cmd_err_cnt,int spi_err_cnt,int state_err_cnt){
shreeshas95 1:a0055b3280c8 169 // status=check_status();
shreeshas95 1:a0055b3280c8 170 // if(status==0xB1){
shreeshas95 1:a0055b3280c8 171 // return 0;
shreeshas95 1:a0055b3280c8 172 // }
shreeshas95 1:a0055b3280c8 173 // else if(cmd_err_cnt>THRS||spi_err_cnt>THRS){
shreeshas95 1:a0055b3280c8 174 // return 1;//You need to Reset the hardware
shreeshas95 1:a0055b3280c8 175 // }
shreeshas95 1:a0055b3280c8 176 // else if(state_err_cnt>STATE_ERR_THRS){
shreeshas95 1:a0055b3280c8 177 // return 1;//Again reset the hardware
shreeshas95 1:a0055b3280c8 178 // }
shreeshas95 1:a0055b3280c8 179 // else if((status&0xA0)==0xA0){ //If Status' first three bit ore 0b1X1 =>SPI ready, Dont care interrupt and CMD Ready.
shreeshas95 1:a0055b3280c8 180 // cs_adf=0;
shreeshas95 1:a0055b3280c8 181 // spi.write(CMD_PHY_OFF); //CMD_PHY_OFF=0xB0
shreeshas95 1:a0055b3280c8 182 // cs_adf=1;
shreeshas95 1:a0055b3280c8 183 // wait_us(PHY_OFF_EXEC_TIME);// Typical = 24us We are giving 300us
shreeshas95 1:a0055b3280c8 184 // return assrt_phy_off(cmd_err_cnt,spi_err_cnt,state_err_cnt+1);
shreeshas95 1:a0055b3280c8 185 // }
shreeshas95 1:a0055b3280c8 186 // else if(status&0x80==0x00){
shreeshas95 1:a0055b3280c8 187 // wait_ms(5);
shreeshas95 1:a0055b3280c8 188 // //Error: SPI=0 Not ready CMD= Dont care
shreeshas95 1:a0055b3280c8 189 // return assrt_phy_off(cmd_err_cnt,spi_err_cnt+1,state_err_cnt);
shreeshas95 1:a0055b3280c8 190 // }
shreeshas95 1:a0055b3280c8 191 // else {//if(status&0xA0==0x80){
shreeshas95 1:a0055b3280c8 192 // wait_ms(1);
shreeshas95 1:a0055b3280c8 193 // //Error: Command Not ready SPI Ready cmd_err_cnt is a global variable
shreeshas95 1:a0055b3280c8 194 // return assrt_phy_off(cmd_err_cnt+1,spi_err_cnt,state_err_cnt);
shreeshas95 1:a0055b3280c8 195 // }
shreeshas95 1:a0055b3280c8 196 //}
ee12b079 9:e9eaada136c6 197
shreeshas95 1:a0055b3280c8 198 //bool assrt_phy_on(int cmd_err_cnt,int spi_err_cnt,int state_err_cnt){
shreeshas95 1:a0055b3280c8 199 // status=check_status();
shreeshas95 1:a0055b3280c8 200 // if((status&0x1F)==0x12){
shreeshas95 1:a0055b3280c8 201 // return 0;
shreeshas95 1:a0055b3280c8 202 // }
shreeshas95 1:a0055b3280c8 203 // else if(cmd_err_cnt>THRS||spi_err_cnt>THRS){
shreeshas95 1:a0055b3280c8 204 // return 1;//You need to Reset the hardware
shreeshas95 1:a0055b3280c8 205 // }
shreeshas95 1:a0055b3280c8 206 // else if(state_err_cnt>STATE_ERR_THRS){
shreeshas95 1:a0055b3280c8 207 // return 1;//Again reset the hardware
shreeshas95 1:a0055b3280c8 208 // }
shreeshas95 1:a0055b3280c8 209 // else if((status&0xA0)==0xA0){ //If Status' first three bit ore 0b1X1 =>SPI ready, Dont care interrupt and CMD Ready.
shreeshas95 1:a0055b3280c8 210 // cs_adf=0;
shreeshas95 1:a0055b3280c8 211 // spi.write(0xB1); //CMD_PHY_OFF
shreeshas95 1:a0055b3280c8 212 // cs_adf=1;
shreeshas95 1:a0055b3280c8 213 // wait_us(PHY_ON_EXEC_TIME);// Typical = 24us We are giving 300us
shreeshas95 1:a0055b3280c8 214 // return assrt_phy_on(cmd_err_cnt,spi_err_cnt,state_err_cnt+1);
shreeshas95 1:a0055b3280c8 215 // }
shreeshas95 1:a0055b3280c8 216 // else if(status&0x80==0x00){
shreeshas95 1:a0055b3280c8 217 // wait_ms(5);
shreeshas95 1:a0055b3280c8 218 // //Error: SPI=0 Not ready CMD= Dont care
shreeshas95 1:a0055b3280c8 219 // return assrt_phy_on(cmd_err_cnt,spi_err_cnt+1,state_err_cnt);
shreeshas95 1:a0055b3280c8 220 // }
shreeshas95 1:a0055b3280c8 221 // else{
shreeshas95 1:a0055b3280c8 222 // if(status&0xA0==0x80){
shreeshas95 1:a0055b3280c8 223 // wait_ms(1);
shreeshas95 1:a0055b3280c8 224 // //Error: Command Not ready SPI Ready cmd_err_cnt is a global variable
shreeshas95 1:a0055b3280c8 225 // return assrt_phy_on(cmd_err_cnt+1,spi_err_cnt,state_err_cnt);
shreeshas95 1:a0055b3280c8 226 // }
shreeshas95 1:a0055b3280c8 227 // }
shreeshas95 1:a0055b3280c8 228 //}
ee12b079 9:e9eaada136c6 229
ee12b079 9:e9eaada136c6 230
shreeshas95 1:a0055b3280c8 231 // bool assrt_phy_tx(int cmd_err_cnt,int spi_err_cnt,int state_err_cnt){
shreeshas95 1:a0055b3280c8 232 // status=check_status();
shreeshas95 1:a0055b3280c8 233 // if((status & 0x1F) == 0x14){
shreeshas95 1:a0055b3280c8 234 // return 0;
shreeshas95 1:a0055b3280c8 235 // }
shreeshas95 1:a0055b3280c8 236 // else if(cmd_err_cnt>THRS||spi_err_cnt>THRS){
shreeshas95 1:a0055b3280c8 237 // return 1;//You need to Reset the hardware
shreeshas95 1:a0055b3280c8 238 // }
shreeshas95 1:a0055b3280c8 239 // else if(state_err_cnt>STATE_ERR_THRS){
shreeshas95 1:a0055b3280c8 240 // return 1;//Again reset the hardware
shreeshas95 1:a0055b3280c8 241 // }
shreeshas95 1:a0055b3280c8 242 // else if((status&0xA0)==0xA0){ //If Status' first three bit ore 0b1X1 =>SPI ready, Dont care interrupt and CMD Ready.
shreeshas95 1:a0055b3280c8 243 // cs_adf=0;
shreeshas95 1:a0055b3280c8 244 // spi.write(0xB1); //CMD_PHY_OFF
shreeshas95 1:a0055b3280c8 245 // cs_adf=1;
shreeshas95 1:a0055b3280c8 246 // wait_us(PHY_TX_EXEC_TIME);// Typical = 24us We are giving 300us
shreeshas95 1:a0055b3280c8 247 // return assrt_phy_tx(cmd_err_cnt,spi_err_cnt,state_err_cnt+1);
shreeshas95 1:a0055b3280c8 248 // }
shreeshas95 1:a0055b3280c8 249 // else if(status&0x80==0x00){
shreeshas95 1:a0055b3280c8 250 // wait_ms(1);
shreeshas95 1:a0055b3280c8 251 // //Error: SPI=0 Not ready CMD= Dont care
shreeshas95 1:a0055b3280c8 252 // return assrt_phy_tx(cmd_err_cnt,spi_err_cnt+1,state_err_cnt);
shreeshas95 1:a0055b3280c8 253 // }
shreeshas95 1:a0055b3280c8 254 // else {
shreeshas95 1:a0055b3280c8 255 // if(status&0xA0==0x80){
shreeshas95 1:a0055b3280c8 256 // wait_us(50);
shreeshas95 1:a0055b3280c8 257 // //Error: Command Not ready SPI Ready cmd_err_cnt is a global variable
shreeshas95 1:a0055b3280c8 258 // return assrt_phy_tx(cmd_err_cnt+1,spi_err_cnt,state_err_cnt);
shreeshas95 1:a0055b3280c8 259 // }
shreeshas95 1:a0055b3280c8 260 // }
shreeshas95 1:a0055b3280c8 261 //}
ee12b079 9:e9eaada136c6 262
shreeshas95 1:a0055b3280c8 263 bool hardware_reset(int bcn_call){
shreeshas95 1:a0055b3280c8 264 for(int i= 0; i < 20 ; i++){
shreeshas95 1:a0055b3280c8 265 gCS_ADF=0;
shreeshas95 1:a0055b3280c8 266 spi.write(CMD_HW_RESET);
shreeshas95 1:a0055b3280c8 267 gCS_ADF=1;
shreeshas95 1:a0055b3280c8 268 wait_ms(2);// Typically 1 ms
shreeshas95 1:a0055b3280c8 269 int count=0;
shreeshas95 1:a0055b3280c8 270 int temp_return = 0;
shreeshas95 1:a0055b3280c8 271 while(count<10 && miso_err_cnt<10){
shreeshas95 1:a0055b3280c8 272 if(MISO_PIN){
shreeshas95 1:a0055b3280c8 273 assrt_phy_off(temp_return);
shreeshas95 1:a0055b3280c8 274 if(!temp_return){
shreeshas95 1:a0055b3280c8 275 return 0;
shreeshas95 1:a0055b3280c8 276 }
shreeshas95 1:a0055b3280c8 277 count++;
shreeshas95 1:a0055b3280c8 278 }
shreeshas95 1:a0055b3280c8 279 else{
shreeshas95 1:a0055b3280c8 280 wait_us(50);
shreeshas95 1:a0055b3280c8 281 miso_err_cnt++;
shreeshas95 1:a0055b3280c8 282 }
shreeshas95 1:a0055b3280c8 283 }
shreeshas95 1:a0055b3280c8 284 }
shreeshas95 1:a0055b3280c8 285 return 1;
shreeshas95 1:a0055b3280c8 286 }
ee12b079 9:e9eaada136c6 287
shreeshas95 1:a0055b3280c8 288 //bool hardware_reset(int bcn_call){
shreeshas95 1:a0055b3280c8 289 // if (bcn_call>20){//Worst Case 20seconds will be lost !
shreeshas95 1:a0055b3280c8 290 // return 1;
shreeshas95 1:a0055b3280c8 291 // }
shreeshas95 1:a0055b3280c8 292 // int count=0;
shreeshas95 1:a0055b3280c8 293 // cs_adf=0;
shreeshas95 1:a0055b3280c8 294 // spi.write(CMD_HW_RESET);
shreeshas95 1:a0055b3280c8 295 // cs_adf=1;
shreeshas95 1:a0055b3280c8 296 // wait_ms(2);// Typically 1 ms
shreeshas95 1:a0055b3280c8 297 // while(count<10 && miso_err_cnt<10){
shreeshas95 1:a0055b3280c8 298 // if(MISO_PIN){
shreeshas95 1:a0055b3280c8 299 // int temp_return;
shreeshas95 1:a0055b3280c8 300 // assrt_phy_off(0,0,0,temp_return);
shreeshas95 1:a0055b3280c8 301 // if(!temp_return){
shreeshas95 1:a0055b3280c8 302 // break;
shreeshas95 1:a0055b3280c8 303 // }
shreeshas95 1:a0055b3280c8 304 // count++;
shreeshas95 1:a0055b3280c8 305 // }
shreeshas95 1:a0055b3280c8 306 // else{
shreeshas95 1:a0055b3280c8 307 // wait_us(50);
shreeshas95 1:a0055b3280c8 308 // miso_err_cnt++;
shreeshas95 1:a0055b3280c8 309 // }
shreeshas95 1:a0055b3280c8 310 // }
shreeshas95 1:a0055b3280c8 311 // if(count==10 ||miso_err_cnt==10){
shreeshas95 1:a0055b3280c8 312 // return hardware_reset(bcn_call+1);
shreeshas95 1:a0055b3280c8 313 // }
shreeshas95 1:a0055b3280c8 314 // else
shreeshas95 1:a0055b3280c8 315 // return 0;
shreeshas95 1:a0055b3280c8 316 //
shreeshas95 1:a0055b3280c8 317 //}
ee12b079 9:e9eaada136c6 318
ee12b079 9:e9eaada136c6 319
ee12b079 9:e9eaada136c6 320
ee12b079 9:e9eaada136c6 321
shreeshas95 1:a0055b3280c8 322 //void initial_adf_check(){
shreeshas95 1:a0055b3280c8 323 // spi.write(CMD_PHY_OFF); //0xB0
shreeshas95 1:a0055b3280c8 324 // while(hw_reset_err_cnt<2){
shreeshas95 1:a0055b3280c8 325 //
shreeshas95 1:a0055b3280c8 326 // if(!assrt_phy_off(0,0,0)){ //assrt_phy_off () returns 0 if state is PHY_OFF , returns 1 if couldn't go to PHY_OFF
shreeshas95 1:a0055b3280c8 327 // bbram_write();
shreeshas95 1:a0055b3280c8 328 // bbram_flag=1;
shreeshas95 1:a0055b3280c8 329 // break;
shreeshas95 1:a0055b3280c8 330 // }
shreeshas95 1:a0055b3280c8 331 // else{
shreeshas95 1:a0055b3280c8 332 // hardware_reset(0); // Asserts Hardware for 20sec(20times). PHY_OFF for 20,000 times
shreeshas95 1:a0055b3280c8 333 // hw_reset_err_cnt++;
shreeshas95 1:a0055b3280c8 334 // }
shreeshas95 1:a0055b3280c8 335 // }
shreeshas95 1:a0055b3280c8 336 // assrt_phy_off(0,0,0);// We actually do not need this but make sure "we do not need this"
shreeshas95 1:a0055b3280c8 337 // if(!bbram_flag){
shreeshas95 1:a0055b3280c8 338 // //Switch to beacon
shreeshas95 1:a0055b3280c8 339 // bcn_flag=1;
shreeshas95 1:a0055b3280c8 340 // }
shreeshas95 1:a0055b3280c8 341 //}
ee12b079 9:e9eaada136c6 342
shreeshas95 1:a0055b3280c8 343 //for reseting the transmission call assert function after b5 and b1. after b1 assert_phi_on and after b5 assert_phi_tx.
shreeshas95 1:a0055b3280c8 344 //----------------------------------------------------------------------------
ee12b079 9:e9eaada136c6 345
shreeshas95 1:a0055b3280c8 346 # define initiate {\
shreeshas95 1:a0055b3280c8 347 SPI_mutex.lock();\
shreeshas95 1:a0055b3280c8 348 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 349 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 350 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 351 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 352 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 353 spi.write(0x08);\
shreeshas95 1:a0055b3280c8 354 spi.write(0x14);\
shreeshas95 1:a0055b3280c8 355 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 356 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 357 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 358 spi.write(0x08);\
shreeshas95 1:a0055b3280c8 359 spi.write(0x15);\
shreeshas95 1:a0055b3280c8 360 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 361 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 362 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 363 spi.write(0x09);\
shreeshas95 1:a0055b3280c8 364 spi.write(0x24);\
shreeshas95 1:a0055b3280c8 365 spi.write(0x20);\
shreeshas95 1:a0055b3280c8 366 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 367 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 368 spi.write(0x09);\
shreeshas95 1:a0055b3280c8 369 spi.write(0x37);\
shreeshas95 1:a0055b3280c8 370 spi.write(0xE0);\
shreeshas95 1:a0055b3280c8 371 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 372 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 373 spi.write(0x09);\
shreeshas95 1:a0055b3280c8 374 spi.write(0x36);\
shreeshas95 1:a0055b3280c8 375 spi.write(0x70);\
shreeshas95 1:a0055b3280c8 376 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 377 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 378 spi.write(0x09);\
shreeshas95 1:a0055b3280c8 379 spi.write(0x39);\
shreeshas95 1:a0055b3280c8 380 spi.write(0x10);\
shreeshas95 1:a0055b3280c8 381 gCS_ADF=1;\
ee12b079 9:e9eaada136c6 382 gCS_ADF=0;\
ee12b079 9:e9eaada136c6 383 spi.write(0xBB);\
ee12b079 9:e9eaada136c6 384 gCS_ADF=1;\
ee12b079 9:e9eaada136c6 385 gCS_ADF=0;\
ee12b079 9:e9eaada136c6 386 spi.write(0xFF);\
ee12b079 9:e9eaada136c6 387 spi.write(0xFF);\
ee12b079 9:e9eaada136c6 388 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 389 SPI_mutex.unlock();\
shreeshas95 1:a0055b3280c8 390 }
ee12b079 9:e9eaada136c6 391
shreeshas95 1:a0055b3280c8 392 #define write_data {\
shreeshas95 1:a0055b3280c8 393 SPI_mutex.lock();\
shreeshas95 1:a0055b3280c8 394 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 395 spi.write(0x0B);\
shreeshas95 1:a0055b3280c8 396 spi.write(0x36);\
shreeshas95 1:a0055b3280c8 397 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 398 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 399 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 400 if(buffer_state){\
shreeshas95 1:a0055b3280c8 401 spi.write(0x18);\
shreeshas95 1:a0055b3280c8 402 spi.write(0x20);\
shreeshas95 1:a0055b3280c8 403 for(unsigned char i=0; i<112;i++){\
shreeshas95 1:a0055b3280c8 404 spi.write(buffer_112[i]);\
shreeshas95 1:a0055b3280c8 405 }\
shreeshas95 1:a0055b3280c8 406 }\
shreeshas95 1:a0055b3280c8 407 else{\
shreeshas95 1:a0055b3280c8 408 spi.write(0x18);\
shreeshas95 1:a0055b3280c8 409 spi.write(0x90);\
shreeshas95 1:a0055b3280c8 410 for(unsigned char i=0; i<112;i++){\
shreeshas95 1:a0055b3280c8 411 spi.write(buffer_112[i]);\
shreeshas95 1:a0055b3280c8 412 }\
shreeshas95 1:a0055b3280c8 413 }\
shreeshas95 1:a0055b3280c8 414 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 415 SPI_mutex.unlock();\
shreeshas95 1:a0055b3280c8 416 buffer_state = !buffer_state;\
shreeshas95 1:a0055b3280c8 417 if(last_buffer){\
ee12b079 9:e9eaada136c6 418 finish_write_data = true;\
shreeshas95 1:a0055b3280c8 419 gPC.puts("adf_off\r\n");\
shreeshas95 1:a0055b3280c8 420 }\
shreeshas95 1:a0055b3280c8 421 }
shreeshas95 1:a0055b3280c8 422
ee12b079 9:e9eaada136c6 423
krishanprajapat 18:f87a5b919d60 424 void check() {
krishanprajapat 18:f87a5b919d60 425
shreeshas95 1:a0055b3280c8 426 if(IRQ){
krishanprajapat 18:f87a5b919d60 427 gCOM_MNG_TMTC_THREAD->signal_set(8);\
shreeshas95 1:a0055b3280c8 428 }
shreeshas95 1:a0055b3280c8 429 }
shreeshas95 1:a0055b3280c8 430
ee12b079 9:e9eaada136c6 431
shreeshas95 1:a0055b3280c8 432 #define send_data {\
shreeshas95 1:a0055b3280c8 433 if(sent_tmfrom_SDcard){\
shreeshas95 1:a0055b3280c8 434 send_tm_from_SD_card();\
shreeshas95 1:a0055b3280c8 435 }else{\
shreeshas95 1:a0055b3280c8 436 snd_tm.transmit_data(buffer_112,&last_buffer);\
shreeshas95 1:a0055b3280c8 437 }\
shreeshas95 1:a0055b3280c8 438 write_data;\
shreeshas95 1:a0055b3280c8 439 if(sent_tmfrom_SDcard){\
shreeshas95 1:a0055b3280c8 440 send_tm_from_SD_card();\
shreeshas95 1:a0055b3280c8 441 }else{\
shreeshas95 1:a0055b3280c8 442 snd_tm.transmit_data(buffer_112,&last_buffer);\
shreeshas95 1:a0055b3280c8 443 }\
shreeshas95 1:a0055b3280c8 444 write_data;\
shreeshas95 1:a0055b3280c8 445 if(sent_tmfrom_SDcard){\
shreeshas95 1:a0055b3280c8 446 send_tm_from_SD_card();\
shreeshas95 1:a0055b3280c8 447 }else{\
shreeshas95 1:a0055b3280c8 448 snd_tm.transmit_data(buffer_112,&last_buffer);\
shreeshas95 1:a0055b3280c8 449 }\
shreeshas95 1:a0055b3280c8 450 SPI_mutex.lock();\
shreeshas95 1:a0055b3280c8 451 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 452 spi.write(0xB1);\
shreeshas95 1:a0055b3280c8 453 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 454 wait_us(300);\
shreeshas95 1:a0055b3280c8 455 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 456 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 457 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 458 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 459 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 460 spi.write(0xB5);\
shreeshas95 1:a0055b3280c8 461 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 462 wait_us(300);\
shreeshas95 1:a0055b3280c8 463 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 464 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 465 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 466 gCS_ADF=1;\
krishanprajapat 18:f87a5b919d60 467 gPC.puts("1 \r\n");\
shreeshas95 1:a0055b3280c8 468 SPI_mutex.unlock();\
shreeshas95 1:a0055b3280c8 469 ticker.attach_us(&check,32000);\
shreeshas95 1:a0055b3280c8 470 }
shreeshas95 1:a0055b3280c8 471
shreeshas95 1:a0055b3280c8 472
shreeshas95 1:a0055b3280c8 473
shreeshas95 1:a0055b3280c8 474 #define adf_SND_SDCard {\
shreeshas95 1:a0055b3280c8 475 buffer_state = true;\
shreeshas95 1:a0055b3280c8 476 last_buffer = false;\
shreeshas95 1:a0055b3280c8 477 loop_on = true;\
shreeshas95 1:a0055b3280c8 478 ADF_off = false;\
shreeshas95 1:a0055b3280c8 479 sent_tmfrom_SDcard = true;\
shreeshas95 1:a0055b3280c8 480 signal = COM_MNG_TMTC_SIGNAL_ADF_SD;\
shreeshas95 1:a0055b3280c8 481 start_block_num = starting_add;\
shreeshas95 1:a0055b3280c8 482 end_block_num = ending_add;\
shreeshas95 1:a0055b3280c8 483 initial_adf_check;\
shreeshas95 1:a0055b3280c8 484 initiate;\
shreeshas95 1:a0055b3280c8 485 send_data;\
shreeshas95 1:a0055b3280c8 486 while(loop_on){\
shreeshas95 2:2caf2a9a13aa 487 /*led2=!led2;*/\
shreeshas95 3:6c81fc8834e2 488 gCOM_MNG_TMTC_THREAD->signal_wait(COM_MNG_TMTC_SIGNAL_ADF_SD);\
shreeshas95 1:a0055b3280c8 489 if(ADF_off){\
shreeshas95 1:a0055b3280c8 490 SPI_mutex.lock();\
shreeshas95 1:a0055b3280c8 491 ticker.detach();\
shreeshas95 1:a0055b3280c8 492 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 493 spi.write(0xB1);\
shreeshas95 1:a0055b3280c8 494 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 495 SPI_mutex.unlock();\
shreeshas95 1:a0055b3280c8 496 gPC.puts("transmission done\r\n");\
shreeshas95 1:a0055b3280c8 497 loop_on = false;\
shreeshas95 1:a0055b3280c8 498 }else{\
shreeshas95 1:a0055b3280c8 499 write_data;\
shreeshas95 1:a0055b3280c8 500 if(!last_buffer)\
shreeshas95 1:a0055b3280c8 501 send_tm_from_SD_card();\
shreeshas95 1:a0055b3280c8 502 }\
shreeshas95 1:a0055b3280c8 503 }\
shreeshas95 1:a0055b3280c8 504 }
shreeshas95 1:a0055b3280c8 505
shreeshas95 1:a0055b3280c8 506 void read_TC(Base_tc* TC_ptr){
shreeshas95 1:a0055b3280c8 507 gPC.puts("Inside sd card sending\r\n");
shreeshas95 1:a0055b3280c8 508 unsigned char service_subtype = 0;
shreeshas95 1:a0055b3280c8 509 uint64_t starting_add = 0, ending_add = 0;
shreeshas95 1:a0055b3280c8 510 service_subtype = (TC_ptr->TC_string[2])&0x0f;
shreeshas95 1:a0055b3280c8 511 starting_add = (TC_ptr->TC_string[5]) + ( (TC_ptr->TC_string[4])<<8 ) + ( (TC_ptr->TC_string[3]) <<16);
shreeshas95 1:a0055b3280c8 512 ending_add = (TC_ptr->TC_string[8]) + ( (TC_ptr->TC_string[7])<<8 ) + ( (TC_ptr->TC_string[6]) <<16);
shreeshas95 1:a0055b3280c8 513 starting_add = 10; // for now
shreeshas95 1:a0055b3280c8 514 ending_add = 20;
shreeshas95 1:a0055b3280c8 515 // adf_SND_SDCard(starting_add , ending_add);
shreeshas95 1:a0055b3280c8 516 gPC.puts("sending from sd card\r\n");
shreeshas95 1:a0055b3280c8 517 adf_SND_SDCard;
shreeshas95 1:a0055b3280c8 518 }
ee12b079 9:e9eaada136c6 519
shreeshas95 2:2caf2a9a13aa 520 //Timeout ADF_non_responsive_timeout;
shreeshas95 2:2caf2a9a13aa 521 //bool ADF_non_responsive_flag = false;
shreeshas95 2:2caf2a9a13aa 522 //
shreeshas95 2:2caf2a9a13aa 523 //void ADF_non_responsive_fun(){
shreeshas95 2:2caf2a9a13aa 524 // ADF_non_responsive_flag = true;
shreeshas95 2:2caf2a9a13aa 525 // gCOM_MNG_TMTC_THREAD->signal_set(signal);
shreeshas95 2:2caf2a9a13aa 526 //}
ee12b079 9:e9eaada136c6 527
krishanprajapat 18:f87a5b919d60 528 #define configure_adf {\
krishanprajapat 18:f87a5b919d60 529 finish_write_data = false;\
krishanprajapat 18:f87a5b919d60 530 buffer_state = true;\
krishanprajapat 18:f87a5b919d60 531 last_buffer = false;\
krishanprajapat 18:f87a5b919d60 532 loop_on = true;\
krishanprajapat 18:f87a5b919d60 533 ADF_off = false;\
krishanprajapat 18:f87a5b919d60 534 /*initial adf check*/\
krishanprajapat 18:f87a5b919d60 535 initial_adf_check;\
krishanprajapat 18:f87a5b919d60 536 gPC.puts("initial adf check\r\n");\
krishanprajapat 18:f87a5b919d60 537 initiate;\
krishanprajapat 18:f87a5b919d60 538 gPC.puts("adf configured\r\n");\
ee12b079 9:e9eaada136c6 539 }
ee12b079 9:e9eaada136c6 540
krishanprajapat 18:f87a5b919d60 541 #define adf_not_SDcard(){\
krishanprajapat 18:f87a5b919d60 542 gLEDG = 0;\
krishanprajapat 18:f87a5b919d60 543 gLEDR = 1;\
krishanprajapat 18:f87a5b919d60 544 sent_tmfrom_SDcard = false;\
krishanprajapat 18:f87a5b919d60 545 configure_adf;\
krishanprajapat 18:f87a5b919d60 546 signal = COM_MNG_TMTC_SIGNAL_ADF_NSD;\
krishanprajapat 18:f87a5b919d60 547 send_data;\
krishanprajapat 18:f87a5b919d60 548 while(loop_on){\
krishanprajapat 18:f87a5b919d60 549 gCOM_MNG_TMTC_THREAD->signal_wait(8);\
krishanprajapat 18:f87a5b919d60 550 gLEDR = !gLEDR;\
krishanprajapat 18:f87a5b919d60 551 if(!ADF_off){\
krishanprajapat 18:f87a5b919d60 552 if(stop_transmission){\
krishanprajapat 18:f87a5b919d60 553 write_data;\
krishanprajapat 18:f87a5b919d60 554 ADF_off=true;\
krishanprajapat 18:f87a5b919d60 555 }\
krishanprajapat 18:f87a5b919d60 556 else{\
krishanprajapat 18:f87a5b919d60 557 write_data;\
krishanprajapat 18:f87a5b919d60 558 snd_tm.transmit_data(buffer_112,&last_buffer);\
krishanprajapat 18:f87a5b919d60 559 }\
krishanprajapat 18:f87a5b919d60 560 }\
krishanprajapat 18:f87a5b919d60 561 else{\
krishanprajapat 18:f87a5b919d60 562 wait_ms(20);\
krishanprajapat 18:f87a5b919d60 563 ticker.detach();\
krishanprajapat 18:f87a5b919d60 564 gCS_ADF=0;\
krishanprajapat 18:f87a5b919d60 565 spi.write(0xB1);\
krishanprajapat 18:f87a5b919d60 566 gCS_ADF=1;\
krishanprajapat 18:f87a5b919d60 567 /* gPC.puts("transmission done\r\n");*/\
krishanprajapat 18:f87a5b919d60 568 /* cout<<counter<<endl;*/\
krishanprajapat 18:f87a5b919d60 569 loop_on=false; \
krishanprajapat 18:f87a5b919d60 570 } \
krishanprajapat 18:f87a5b919d60 571 }\
krishanprajapat 18:f87a5b919d60 572 }
krishanprajapat 18:f87a5b919d60 573
krishanprajapat 18:f87a5b919d60 574 //if(finish_write_data){
krishanprajapat 18:f87a5b919d60 575 // if(ADF_off){
krishanprajapat 18:f87a5b919d60 576 // wait_ms(30);
krishanprajapat 18:f87a5b919d60 577 // SPI_mutex.lock();
krishanprajapat 18:f87a5b919d60 578 // ticker.detach();
krishanprajapat 18:f87a5b919d60 579 // // wait_ms(35);
krishanprajapat 18:f87a5b919d60 580 // gCS_ADF=0;
krishanprajapat 18:f87a5b919d60 581 // spi.write(0xB1);
krishanprajapat 18:f87a5b919d60 582 // gCS_ADF=1;
krishanprajapat 18:f87a5b919d60 583 // SPI_mutex.unlock();
krishanprajapat 18:f87a5b919d60 584 // loop_on = false;
krishanprajapat 18:f87a5b919d60 585 // gPC.puts("Transmission done\r\n");
krishanprajapat 18:f87a5b919d60 586 // }
krishanprajapat 18:f87a5b919d60 587 // else{
krishanprajapat 18:f87a5b919d60 588 // ADF_off = true;
krishanprajapat 18:f87a5b919d60 589 // }
krishanprajapat 18:f87a5b919d60 590 // }else{
krishanprajapat 18:f87a5b919d60 591 // write_data;
krishanprajapat 18:f87a5b919d60 592 // snd_tm.transmit_data(buffer_112,&last_buffer);
krishanprajapat 18:f87a5b919d60 593 // }
shreeshas95 2:2caf2a9a13aa 594 // }
shreeshas95 2:2caf2a9a13aa 595 // else{
shreeshas95 2:2caf2a9a13aa 596 // gPC.puts("ADF non responsive\r\n");
shreeshas95 2:2caf2a9a13aa 597 // break;
krishanprajapat 18:f87a5b919d60 598 // }