for frequency correction testing
Dependencies: FreescaleIAP SimpleDMA mbed-rtos mbed
Fork of CDMS_CODE by
CDMS_HK.h
00001 void FCTN_CDMS_HK_MAIN(); 00002 void FCTN_CDMS_HK(); 00003 void VERIFY_COMRX(); 00004 void VERIFY_RTC(); 00005 void CDMS_HK_SD(); 00006 void HANDLE_HW_FAULTS(); 00007 void HANDLE_HW_FAULT_SD(); 00008 void HANDLE_HW_FAULT_BAE(); 00009 void HANDLE_HW_FAULT_PL(); 00010 void FUNC_CDMS_GPIO_STATUS(); 00011 void minMaxHkData(); 00012 void COLLECT_CDMS_RAM(); 00013 00014 extern uint8_t beacon_array[134]; 00015 00016 AnalogIn TempInput(PIN27); // Input from Current Multiplexer 00017 AnalogIn CDMS_temp_sensor(PIN53); 00018 AnalogIn COMRX_RSSI_volatge(PIN70); 00019 AnalogIn EPS_BTRY_VOLT (PIN54); 00020 00021 00022 DigitalOut SelectLinec3 (PIN79); // MSB of Select Lines 00023 DigitalOut SelectLinec2 (PIN78); 00024 DigitalOut SelectLinec1 (PIN76); 00025 DigitalOut SelectLinec0 (PIN77); // LSB of Select Lines 00026 00027 /* 00028 Before SBC. To be restored in FM model 00029 DigitalOut SelectLinec1 (PIN77); 00030 DigitalOut SelectLinec0 (PIN76); // LSB of Select Lines 00031 */ 00032 00033 Convolution CDMS_HEALTH; 00034 Convolution BAE_HEALTH; 00035 unsigned char CDMS_HK_FRAME[134] = {0}; 00036 char BAE_HK[134] = {0}; 00037 uint8_t convoluted_CDMS_HK[270]; 00038 uint8_t interleave_CDMS_HK[288]; 00039 uint8_t CDMS_HEALTH_FINAL[512] = {0}; 00040 uint8_t convoluted_BAE_HK[270]; 00041 uint8_t interleave_BAE_HK[288]; 00042 uint8_t BAE_HEALTH_FINAL[512] = {0}; 00043 unsigned char BAE_HK_FRAME[134] = {0}; 00044 00045 00046 00047 void FCTN_CDMS_HK_MAIN(void const *args) 00048 { 00049 uint8_t sd_stat = 0; 00050 uint8_t hk_count=0; 00051 while(1) 00052 { 00053 gHK_THREAD->signal_wait(HK_SIGNAL); 00054 gMutex.lock(); 00055 if(hk_count == 1 || hk_count == 2) 00056 { 00057 FCTN_CDMS_PL_MAIN((void const *)NULL); 00058 hk_count--; 00059 gMutex.unlock(); 00060 continue; 00061 } 00062 else if(hk_count == 0) 00063 { 00064 FCTN_CDMS_PL_MAIN((void const *)NULL); 00065 hk_count = 2; 00066 } 00067 // gPC.printf("\n\rEntering HK thread\n"); 00068 gPC.printf("\n\r%d\n",CDMS_WR_SD_FAULT_COUNTER); 00069 if(EN_CDMS_HK == 0x00) 00070 continue; 00071 CDMS_HK_MAIN_STATUS = 0x01; 00072 CDMS_HK_MAIN_COUNTER++; 00073 00074 FCTN_CDMS_HK(); //collects temperatures 00075 RSSI_volatge = COMRX_RSSI_volatge.read() * 3.3;//to be checked 00076 //gPC.printf("\n\rRSSI voltage = %f",RSSI_volatge); 00077 VERIFY_COMRX(); 00078 VERIFY_RTC(); 00079 HANDLE_HW_FAULTS(); 00080 FUNC_CDMS_GPIO_STATUS(); 00081 00082 uint8_t CDMS_quant[20]; 00083 CDMS_quant[1]= (uint8_t)quant_data.CDMS_temp_quant; 00084 CDMS_quant[2]= (uint8_t)RSSI_volatge; 00085 CDMS_quant[3]= (uint8_t)(EPS_BTRY_VOLT*33*(62.0/11)); 00086 for(int i=0; i<16; i++) { 00087 CDMS_quant[i+4]= (uint8_t)quant_data.temp_quant[i]; 00088 } 00089 minMaxHkData(); 00090 00091 CDMS_HEALTH_DATA[1] = GPIO_STATUS; //Reading GPIO Pins 00092 CDMS_HEALTH_DATA[0] = GPIO_STATUS >> 8; 00093 COLLECT_CDMS_RAM(); 00094 for(int i = 0;i<84;i++) 00095 CDMS_HEALTH_DATA[2+i] = CDMS_RAM[i]; //Reading RAM parameters 00096 for(int i = 0;i<20;i++) //Collecting Data from Temp sensors 00097 CDMS_HEALTH_DATA[86+i] = CDMS_quant[i]; 00098 00099 // Here: Have to FIT flash data. 00100 CDMS_HEALTH_DATA[106] = (EPS_V_A_EN_STATUS<<7) | ((BAE_STATUS<<5)&0x60) | ((SD_STATUS<<3)&0x18) | ((PL_STATUS<<1)&0x06) | (PL_EPS_LATCH_SW_EN & 0x01); 00101 CDMS_HEALTH_DATA[107] = (RTC_INIT_STATUS<<6) | ((CDMS_RTC_DISABLE<<5)&0x20); 00102 CDMS_HEALTH_DATA[108] = CDMS_RESET_COUNTER >>8; 00103 CDMS_HEALTH_DATA[109] = CDMS_RESET_COUNTER; 00104 CDMS_HEALTH_DATA[110] = TIME_LATEST_CDSMS_RESET >>24; 00105 CDMS_HEALTH_DATA[111] = TIME_LATEST_CDSMS_RESET >>16; 00106 CDMS_HEALTH_DATA[112] = TIME_LATEST_CDSMS_RESET >>8; 00107 CDMS_HEALTH_DATA[113] = TIME_LATEST_CDSMS_RESET; 00108 CDMS_HEALTH_DATA[114] = COM_TC_BYTES_LIMIT>>8; 00109 CDMS_HEALTH_DATA[115] = COM_TC_BYTES_LIMIT; 00110 CDMS_HEALTH_DATA[116] = COM_RX_CURRENT_MAX; 00111 CDMS_HEALTH_DATA[117] = COM_RX_DISABLE_TIMEOUT; 00112 CDMS_HEALTH_DATA[118] = COM_PA_TMP_HIGH; 00113 CDMS_HEALTH_DATA[119] = COM_PA_RECOVERY_TIMEOUT; 00114 CDMS_HEALTH_DATA[120] = COM_SESSION_TIMEOUT; 00115 CDMS_HEALTH_DATA[121] = COM_RSSI_MIN; 00116 CDMS_HEALTH_DATA[122] = SD_LIB_BLK_CURRENT>>8; 00117 CDMS_HEALTH_DATA[122] = SD_LIB_BLK_CURRENT; 00118 00119 uint64_t time = FCTN_CDMS_RD_RTC() >> 7; //Reading Time from RTC 00120 for(int i = 124; i<128; i++) 00121 CDMS_HEALTH_DATA[i] = time >> (i-124)*8; 00122 gPC.printf("0x%d\n",time); 00123 gPC.printf("HK ARCH TIME TAGGED"); 00124 FCTN_SD_MNGR(); //Adding FSC & TMID to TM frame 00125 CDMS_HK_FRAME[0] = 0x20; 00126 CDMS_HK_FRAME[1] = FSC_CURRENT[4]+1; 00127 CDMS_HK_FRAME[2] = (FSC_CURRENT[4]+1) >> 8; 00128 CDMS_HK_FRAME[3] = (FSC_CURRENT[4]+1) >> 16; 00129 // gPC.printf("\n"); 00130 for(int i = 0; i<128; i++){ /*Adding actual CDMS Health data to TM frame*/ 00131 CDMS_HK_FRAME[i+4] = CDMS_HEALTH_DATA[i]; 00132 //gPC.printf("%02x",CDMS_HEALTH_DATA[i]); 00133 } 00134 // gPC.printf("\n"); 00135 uint16_t crc = crc16_gen(CDMS_HK_FRAME,132); /*Adding CRC to TM frame*/ 00136 CDMS_HK_FRAME[133] = crc; 00137 CDMS_HK_FRAME[132] = crc >> 8; 00138 00139 exor(CDMS_HK_FRAME); 00140 CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME , convoluted_CDMS_HK); 00141 CDMS_HEALTH.convolutionEncode(CDMS_HK_FRAME + 67, convoluted_CDMS_HK + 135); 00142 //gPC.printf("\n\r reached here"); 00143 interleave(convoluted_CDMS_HK , interleave_CDMS_HK); 00144 interleave(convoluted_CDMS_HK +135, interleave_CDMS_HK + 144); 00145 //gPC.printf("\n\r reached here"); 00146 for(int i=0; i<288; i++) 00147 CDMS_HEALTH_FINAL[i] = interleave_CDMS_HK[i]; 00148 //gPC.printf("\n\r reached here"); 00149 sd_stat = SD_WRITE(CDMS_HEALTH_FINAL,FSC_CURRENT[4]+1,4); 00150 if(sd_stat) 00151 { 00152 gPC.puts("sd write failure $*&^@!~!"); 00153 // break; 00154 } 00155 // gPC.printf("Completed CDMS HK\t"); 00156 00157 /*---------------------------------- BAE HK --------------------------------------------*/ 00158 00159 BAE_HK_I2C = FCTN_I2C_READ(BAE_HK,134); 00160 // gPC.printf("Entering BAE HK\t"); 00161 if(BAE_HK_I2C == 0) { 00162 crc = crc16_gen((unsigned char *)BAE_HK,132); 00163 if(crc == ((uint16_t)BAE_HK[132] << 8) | (uint16_t)BAE_HK[133]){ 00164 //gPC.printf("BAE HK data recieved through I2C\t"); 00165 TIME_LATEST_I2C_BAE = FCTN_CDMS_RD_RTC() >> 7; 00166 /*for(int i = 0; i<15; i++) 00167 gPC.printf("\r 0x%02X\n",BAE_HK[i]);*/ 00168 for(int i = 0; i<4; i++) 00169 BAE_HK[i] = time >> i; 00170 BAE_HK_FRAME[0] = 0x28; 00171 BAE_HK_FRAME[1] = FSC_CURRENT[5]+1; 00172 BAE_HK_FRAME[2] = (FSC_CURRENT[5]+1) >> 8; 00173 BAE_HK_FRAME[3] = (FSC_CURRENT[5]+1) >> 16; 00174 for(int i = 0; i<128; i++) /*Adding actual CDMS Health data to TM frame*/ 00175 BAE_HK_FRAME[4+i] = BAE_HK[i]; 00176 crc = crc16_gen(BAE_HK_FRAME,132); /*Adding CRC to TM frame*/ 00177 BAE_HK_FRAME[133] = crc; 00178 BAE_HK_FRAME[132] = crc >> 8; 00179 exor(BAE_HK_FRAME); 00180 BAE_HEALTH.convolutionEncode(BAE_HK_FRAME , convoluted_BAE_HK); 00181 BAE_HEALTH.convolutionEncode(BAE_HK_FRAME + 67, convoluted_BAE_HK + 135); 00182 interleave(convoluted_BAE_HK , interleave_BAE_HK); 00183 interleave(convoluted_BAE_HK +135, interleave_BAE_HK + 144); 00184 for(int i=0; i<288; i++) 00185 BAE_HEALTH_FINAL[i] = interleave_BAE_HK[i]; 00186 sd_stat = SD_WRITE(BAE_HEALTH_FINAL,FSC_CURRENT[5]+1,5); 00187 if(sd_stat) 00188 { 00189 gPC.puts("sd write failure"); 00190 //break; 00191 } 00192 } 00193 00194 } else { 00195 gPC.printf("BAE HK data not recieved through I2C\t"); 00196 for(int i = 0; i<134; i++) 00197 BAE_HK[i] = 0; 00198 } 00199 // gPC.printf("Completed BAE HK\n"); 00200 00201 /*----------------------------------Beacon message--------------------------------------*/ 00202 00203 00204 // Add HK bits 00205 beacon_array[0] = 0x00; 00206 beacon_array[1] = time >> 32; 00207 beacon_array[2] = time >> 24; 00208 beacon_array[3] = time >> 16; 00209 beacon_array[4] = time >> 8; 00210 beacon_array[5] = time; 00211 beacon_array[6] = SD_FAULTCOUNT >> 8; 00212 beacon_array[7] = SD_FAULTCOUNT; 00213 beacon_array[8] = RTC_FAULTCOUNT >> 8; 00214 beacon_array[9] = RTC_FAULTCOUNT; 00215 beacon_array[10] = (((SD_STATUS == DEVICE_DISABLED || SD_STATUS == DEVICE_OC_FAULT)?1:0)<<7)|(RTC_STATUS <<6)|(COM_RX_STATUS<<3)|(0<<2)|(COMRX_OC_FAULT<<1)|(COM_TX_OC_FAULT); 00216 beacon_array[11] = (COM_RX_CNTRL <<7)|(COM_TX_CNTRL); 00217 beacon_array[12] = CDMS_HK_MAIN_COUNTER >>8; 00218 beacon_array[13] = CDMS_HK_MAIN_COUNTER; 00219 beacon_array[14] = PL_MAIN_COUNTER >>8; 00220 beacon_array[15] = PL_MAIN_COUNTER; 00221 beacon_array[16] = PL_RCV_SC_DATA_COUNTER >>8; 00222 beacon_array[17] = PL_RCV_SC_DATA_COUNTER; 00223 beacon_array[18] = TIME_LATEST_SPI_SPEED >>24; 00224 beacon_array[19] = TIME_LATEST_SPI_SPEED >>16; 00225 beacon_array[20] = TIME_LATEST_SPI_SPEED >>8; 00226 beacon_array[21] = TIME_LATEST_SPI_SPEED; 00227 beacon_array[22] = (uint8_t)RSSI_volatge; 00228 00229 // Add SC bits 00230 crc = crc16_gen(beacon_array,132); 00231 beacon_array[132] = crc; 00232 beacon_array[133] = crc >> 8; 00233 bool y; 00234 y = FCTN_I2C_WRITE((char *)beacon_array,134); 00235 if(y == 0) 00236 gPC.printf("long Bcn sent\n\r"); 00237 else 00238 gPC.printf("long Bcn not sent\r\n"); 00239 //gPC.printf("\rCompleted Beacon\n"); 00240 gMutex.unlock(); 00241 } 00242 } 00243 00244 int quantiz(float start,float step,float x) 00245 { 00246 int y=(x-start)/step; 00247 if(y<=0)y=0; 00248 if(y>=255)y=255; 00249 return y; 00250 } 00251 00252 char saveMin(char x,char y) 00253 { 00254 return (y<x)?y:x; 00255 } 00256 00257 char saveMax(char x,char y) 00258 { 00259 return (y>x)?y:x; 00260 } 00261 00262 void minMaxHkData() 00263 { 00264 if(firstCount==true) { 00265 for (int i = 4; i < 16; ++i) { 00266 min_max_data.temp_min[i] = quant_data.temp_quant[i]; 00267 min_max_data.temp_max[i] = quant_data.temp_quant[i]; 00268 } 00269 00270 min_max_data.CDMS_temp_min=quant_data.CDMS_temp_quant; 00271 min_max_data.CDMS_temp_max=quant_data.CDMS_temp_quant; 00272 } else { 00273 for (int i = 4; i < 16; ++i) { 00274 min_max_data.temp_min[i] = saveMin(min_max_data.temp_min[i],quant_data.temp_quant[i]); 00275 min_max_data.temp_max[i] = saveMax(min_max_data.temp_max[i],quant_data.temp_quant[i]); 00276 //gPC.printf("\rMax reading, iteration = %d, %d \n",min_max_data.temp_max[i], i); 00277 //gPC.printf("\rMin reading, iteration = %d, %d \n",min_max_data.temp_min[i], i); 00278 } 00279 00280 min_max_data.CDMS_temp_min = saveMin(min_max_data.CDMS_temp_min,quant_data.CDMS_temp_quant); 00281 min_max_data.CDMS_temp_max = saveMax(min_max_data.CDMS_temp_max,quant_data.CDMS_temp_quant); 00282 } 00283 firstCount=false; 00284 } 00285 00286 void FCTN_CDMS_HK() 00287 { 00288 00289 int Iteration=0; 00290 float resistance; 00291 00292 SelectLinec0=0; 00293 SelectLinec1=0; 00294 SelectLinec2=0; 00295 SelectLinec3=0; 00296 wait_ms(1); 00297 //gPC.printf("\r%d %d %d %d\n",SelectLinec3.read(),SelectLinec2.read(),SelectLinec1.read(),SelectLinec0.read()); 00298 for(Iteration=0; Iteration<16; Iteration++) { 00299 00300 actual_data.temp_actual[Iteration]=TempInput.read(); 00301 00302 SelectLinec0=!(SelectLinec0); 00303 if(Iteration%2==1) 00304 SelectLinec1=!(SelectLinec1); 00305 if(Iteration%4==3) 00306 SelectLinec2=!(SelectLinec2); 00307 if(Iteration%8==7) 00308 SelectLinec3=!(SelectLinec3); 00309 wait_ms(1); 00310 // gPC.printf("\r%d %d %d %d\n",SelectLinec3.read(),SelectLinec2.read(),SelectLinec1.read(),SelectLinec0.read()); 00311 } 00312 00313 actual_data.CDMS_temp_actual=(-90.7*3.3*CDMS_temp_sensor.read())+190.1543; 00314 00315 00316 00317 for(Iteration=0; Iteration<16; Iteration++) { 00318 00319 if(Iteration<4) 00320 { 00321 actual_data.temp_actual[Iteration]=actual_data.temp_actual[Iteration]*3.3*2*10; 00322 } 00323 else if(Iteration<14) 00324 { 00325 resistance=24000*actual_data.temp_actual[Iteration]*3.3/(3.3-actual_data.temp_actual[Iteration]*3.3); 00326 00327 if(actual_data.temp_actual[Iteration]*3.3<1.47) //Document says 1.378 .Pls Check 00328 00329 actual_data.temp_actual[Iteration]=(3694/log(24.032242*resistance))-273; 00330 else 00331 00332 actual_data.temp_actual[Iteration]=(3365.4/log(7.60573*resistance))-273; 00333 00334 } 00335 else 00336 actual_data.temp_actual[Iteration]=(-90.7*3.3*actual_data.temp_actual[Iteration])+190.1543; 00337 } 00338 for(Iteration=0; Iteration<16; Iteration++) { 00339 00340 if(Iteration<4) 00341 quant_data.temp_quant[Iteration]=actual_data.temp_actual[Iteration] * 10; 00342 else if(Iteration<14) 00343 quant_data.temp_quant[Iteration]=quantiz(tstart_thermistor,tstep_thermistor,actual_data.temp_actual[Iteration]); 00344 // quant_data.temp_quant[Iteration]=quantiz(0,1,actual_data.temp_actual[Iteration]); 00345 else 00346 // quant_data.temp_quant[Iteration]=quantiz(tstart,tstep,actual_data.temp_actual[Iteration]); 00347 quant_data.temp_quant[Iteration]=quantiz(tstart,tstep,actual_data.temp_actual[Iteration]); 00348 } 00349 quant_data.CDMS_temp_quant=quantiz(tstart,tstep,actual_data.CDMS_temp_actual); 00350 00351 minMaxHkData(); 00352 } 00353 00354 void FUNC_CDMS_GPIO_STATUS() //Polls the status of Input GPIO PINS 00355 { 00356 /* 00357 //V_A_PGOOD //TRZ EN 00358 GPIO_STATUS=(V_A_PGOOD)?(GPIO_STATUS)|((uint16_t)(0x1<<15)):(GPIO_STATUS)&(~((uint16_t)(0x1<<15))); 00359 //V_B_PGOOD_1 //3V3BPGOOD //$ 00360 GPIO_STATUS=(V_B_PGOOD_1)?(GPIO_STATUS)|((uint16_t)(0x1<<14)):(GPIO_STATUS)&(~((uint16_t)(0x1<<14))); 00361 //V_B_PGOOD_2 //3V3BEN //$ 00362 GPIO_STATUS=(V_B_PGOOD_2)?(GPIO_STATUS)|((uint16_t)(0x1<<13)):(GPIO_STATUS)&(~((uint16_t)(0x1<<13))); 00363 //V_C_PGOOD //3V3CPGOOD //$ 00364 GPIO_STATUS=(V_C_PGOOD)?(GPIO_STATUS)|((uint16_t)(0x1<<12)):(GPIO_STATUS)&(~((uint16_t)(0x1<<12))); 00365 */ 00366 00367 //COMRX_OC_FAULT //$ 00368 GPIO_STATUS=(COMRX_OC_FAULT)?(GPIO_STATUS)|((uint16_t)(0x1<<11)):(GPIO_STATUS)&(~((uint16_t)(0x1<<11))); 00369 // COMTX_OC_FAULT //$ 00370 GPIO_STATUS=(COM_TX_OC_FAULT)?(GPIO_STATUS)|((uint16_t)(0x1<<10)):(GPIO_STATUS)&(~((uint16_t)(0x1<<10))); 00371 // CDMS_SD_OC_FAULT 00372 GPIO_STATUS=(SD_OC_FAULT)?(GPIO_STATUS)|((uint16_t)(0x1<<9)):(GPIO_STATUS)&(~((uint16_t)(0x1<<9))); 00373 //BAE_OC_FAULT //$ 00374 GPIO_STATUS=(BAE_OC_FAULT)?(GPIO_STATUS)|((uint16_t)(0x1<<8)):(GPIO_STATUS)&(~((uint16_t)(0x1<<8))); 00375 00376 /* 00377 //PL_GPIO_1_STATUS //$ 00378 GPIO_STATUS=(PL_GPIO_1_STATUS)?(GPIO_STATUS)|((uint16_t)(0x1<<8)):(GPIO_STATUS)&(~((uint16_t)(0x1<<8))); 00379 //PL_GPIO_2_STATUS //$ 00380 GPIO_STATUS=(PL_GPIO_2_STATUS)?(GPIO_STATUS)|((uint16_t)(0x1<<7)):(GPIO_STATUS)&(~((uint16_t)(0x1<<7))); 00381 //PL_GPIO_3_STATUS //$ 00382 GPIO_STATUS=(PL_GPIO_3_STATUS)?(GPIO_STATUS)|((uint16_t)(0x1<<6)):(GPIO_STATUS)&(~((uint16_t)(0x1<<6))); 00383 */ 00384 00385 //PL_BEE_SW_OC_FAULT //to be verified 00386 GPIO_STATUS=(PL_BEE_SW_OC_FAULT)?(GPIO_STATUS)|((uint16_t)(0x1<<4)):(GPIO_STATUS)&(~((uint16_t)(0x1<<4))); 00387 //PL_EPS_LATCH_SW_OC_FAULT // to be verified 00388 GPIO_STATUS=(PL_EPS_LATCH_SW_OC_FAULT)?(GPIO_STATUS)|((uint16_t)(0x1<<3)):(GPIO_STATUS)&(~((uint16_t)(0x1<<3))); 00389 //EPS_V_C_EN_STATUS 00390 GPIO_STATUS=(COM_RX_CNTRL)?(GPIO_STATUS)|((uint16_t)(0x1<<2)):(GPIO_STATUS)&(~((uint16_t)(0x1<<2))); 00391 //EPS_V_D_EN_STATUS 00392 GPIO_STATUS=(COM_TX_CNTRL)?(GPIO_STATUS)|((uint16_t)(0x1<<1)):(GPIO_STATUS)&(~((uint16_t)(0x1<<1))); 00393 // gPC.printf("%04x\n",GPIO_STATUS); 00394 gPC.printf("\rBAE_OC STATE = %04x \n",GPIO_STATUS); 00395 } 00396 00397 void VERIFY_COMRX() 00398 { 00399 //COMRX_OC_FAULT //$ 00400 if(COMRX_OC_FAULT==0 && RSSI_volatge > 0.4) { 00401 COMRX_STATUS = COMRX_ALIVE; 00402 } else { 00403 //RESET_COMRX(); 00404 COMRX_RESET_COUNTER++; 00405 if(COMRX_OC_FAULT==0 && RSSI_volatge > 0.4) 00406 COMRX_STATUS = COMRX_ALIVE; 00407 else 00408 COMRX_STATUS = COMRX_DEAD; 00409 } 00410 } 00411 00412 void VERIFY_RTC() 00413 { 00414 uint8_t response; 00415 if(EN_RTC == 0x00) 00416 return; 00417 gCS_RTC=1; 00418 gCS_RTC=0; 00419 spi.write(0x0F); 00420 response = spi.write(0x00); 00421 CDMS_RTC_BL = (response & 0x10) >>4; 00422 if(response & 0x04 == 0x04) { 00423 //RESET_RTC(); 00424 RTC_STATUS = 0x01; 00425 RTC_FAULTCOUNT++; 00426 } 00427 gCS_RTC=1; 00428 } 00429 00430 void HANDLE_HW_FAULTS() 00431 { 00432 HANDLE_HW_FAULT_SD(); 00433 HANDLE_HW_FAULT_BAE(); 00434 HANDLE_HW_FAULT_PL(); 00435 } 00436 00437 void HANDLE_HW_FAULT_SD() 00438 { 00439 if(SD_STATUS != DEVICE_DISABLED) { 00440 if(SD_STATUS == DEVICE_OC_FAULT){ 00441 gPC.printf("Switching on SD card"); 00442 SD_SW_EN_DS = 1; //powering on SD 00443 wait_ms(10); 00444 } 00445 00446 if(SD_OC_FAULT == 0) { 00447 gPC.printf("Switching off SD card"); 00448 SD_SW_EN_DS = 0; //switching off SD card 00449 SD_FAULTCOUNT++; 00450 SD_STATUS = (SD_FAULTCOUNT == 3) ? DEVICE_DISABLED :DEVICE_OC_FAULT; 00451 if(SD_FAULTCOUNT == 3){ 00452 FCTN_CDMS_WR_FLASH(2,DEVICE_DISABLED); 00453 gPC.printf("Declaring SD card permanantly Disabled"); 00454 } 00455 } else { 00456 SD_STATUS = DEVICE_POWERED; 00457 if(SD_STATUS != DEVICE_POWERED) 00458 FCTN_CDMS_WR_FLASH(2,DEVICE_POWERED); 00459 SD_FAULTCOUNT = 0; 00460 } 00461 } 00462 } 00463 00464 void HANDLE_HW_FAULT_BAE() 00465 { 00466 if(BAE_STATUS != DEVICE_DISABLED) { 00467 if(BAE_STATUS == DEVICE_OC_FAULT){ 00468 gPC.printf("Switching on BAE"); 00469 BAE_SW_EN_DS = 1; //Power ON BAE 00470 wait_ms(10); 00471 } 00472 00473 if(BAE_OC_FAULT == 0) { 00474 gPC.printf("Switching off BAE"); 00475 BAE_SW_EN_DS = 0; //Switch OFF BAE 00476 BAE_FAULTCOUNT++; 00477 BAE_STATUS = (BAE_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT; 00478 if(BAE_FAULTCOUNT == 3){ 00479 FCTN_CDMS_WR_FLASH(1,DEVICE_DISABLED); 00480 gPC.printf("Declaring BAE permanantly Disabled"); 00481 } 00482 } else { 00483 BAE_STATUS = DEVICE_POWERED; 00484 if(SD_STATUS != DEVICE_POWERED); 00485 FCTN_CDMS_WR_FLASH(1,DEVICE_POWERED); 00486 BAE_FAULTCOUNT = 0; 00487 } 00488 } 00489 } 00490 00491 void HANDLE_HW_FAULT_PL() 00492 { 00493 if(PL_STATUS != DEVICE_DISABLED) { 00494 if(PL_STATUS == DEVICE_OC_FAULT){ 00495 gPC.printf("Switching on PL_BEE"); 00496 PYLD_DFF_CLK = 0; 00497 PYLD_DFF = 1; // Switching ON PL 00498 wait_us(1); 00499 PYLD_DFF_CLK = 1; 00500 wait_us(1); 00501 PYLD_DFF_CLK = 0; 00502 wait_us(1); 00503 } 00504 if(PL_BEE_SW_OC_FAULT == 0) { // if OC Fault 00505 gPC.printf("Switching off PL_BEE"); 00506 PYLD_DFF_CLK = 0; 00507 PYLD_DFF = 0; //Switching OFF PL 00508 wait_us(1); 00509 PYLD_DFF_CLK = 1; 00510 wait_us(1); 00511 PYLD_DFF_CLK = 0; 00512 wait_us(1); 00513 PL_FAULTCOUNT++; 00514 PL_STATUS = (PL_FAULTCOUNT == 3)?DEVICE_DISABLED:DEVICE_OC_FAULT; 00515 if(PL_FAULTCOUNT == 3){ 00516 FCTN_CDMS_WR_FLASH(3,DEVICE_DISABLED); 00517 gPC.printf("Declaring PL_BEE permanantly Disabled"); 00518 } 00519 } else { 00520 if(PL_STATUS == DEVICE_OC_FAULT){ 00521 gPC.printf("Switching off PL_BEE"); 00522 PYLD_DFF_CLK = 0; 00523 PYLD_DFF = 0; //Switching OFF PL 00524 wait_us(1); 00525 PYLD_DFF_CLK = 1; 00526 wait_us(1); 00527 PYLD_DFF_CLK = 0; 00528 wait_us(1); 00529 } 00530 PL_STATUS = DEVICE_ENABLED; 00531 if(PL_STATUS != DEVICE_ENABLED) 00532 FCTN_CDMS_WR_FLASH(3,DEVICE_ENABLED); 00533 PL_FAULTCOUNT = 0; 00534 } 00535 } 00536 } 00537 00538 void COLLECT_CDMS_RAM() 00539 { 00540 CDMS_RAM[0] = ((PL_INIT_STATUS<<7)&0x80)|((PL_MAIN_status<<6)&0x40)|((PL_LOW_power<<5)&0x20)|((PL_STATE<<3)&0x18)|(PL_STATUS&0x07); 00541 //gPC.printf("\n\rPL_STATUS : %d",PL_STATUS); 00542 //gPC.printf("\n\rPL_STATE : %d",PL_STATE); 00543 //gPC.printf("\n\rpl bits = %02x\n",CDMS_RAM[0]); 00544 CDMS_RAM[1] = ((PL_RCV_SC_DATA_STATUS<<7)&0x80)|((COM_SESSION<<6)&0x40)|((COM_RX<<5)&0x20)|((RF_SW_STATUS<<4)&0x10)|((COM_TX<<3)&0x08)|((COM_TX_STATUS<<2)&0x04)|((COM_MNG_TMTC<<1)&0x02)|(EN_CDMS_HK&0x01); 00545 CDMS_RAM[2] = ((EN_PL<<7)&0x80)|((EN_RCV_SC<<6)&0x40)|((CDMS_INIT_STATUS<<5)&0x20)|((CDMS_HK_MAIN_STATUS<<4)&0x10)|((CDMS_HK_STATUS<<2)&0x0C)|((COM_RX_STATUS<<1)&0x02)|(CDMS_RTC_BL&0x01); 00546 CDMS_RAM[3] = CDMS_I2C_ERR_SPEED_COUNTER >> 8; 00547 CDMS_RAM[4] = CDMS_I2C_ERR_SPEED_COUNTER; 00548 CDMS_RAM[5] = CDMS_I2C_ERR_BAE_COUNTER >> 8; 00549 CDMS_RAM[6] = CDMS_I2C_ERR_BAE_COUNTER; 00550 CDMS_RAM[7] = CDMS_HK_MAIN_COUNTER >> 8; 00551 CDMS_RAM[8] = CDMS_HK_MAIN_COUNTER; 00552 CDMS_RAM[9] = PL_MAIN_COUNTER >> 8; 00553 CDMS_RAM[10] = PL_MAIN_COUNTER; 00554 CDMS_RAM[11] = PL_RCV_SC_DATA_COUNTER >> 8; 00555 CDMS_RAM[12] = PL_RCV_SC_DATA_COUNTER; 00556 CDMS_RAM[13] = COMRX_RESET_COUNTER >> 8; 00557 CDMS_RAM[14] = COMRX_RESET_COUNTER; 00558 CDMS_RAM[15] = CDMS_WR_SD_FAULT_COUNTER >> 8; 00559 CDMS_RAM[16] = CDMS_WR_SD_FAULT_COUNTER; 00560 CDMS_RAM[17] = SD_LIB_WRITES >> 8; 00561 CDMS_RAM[18] = SD_LIB_WRITES; 00562 TIME_LATEST_RTC= FCTN_CDMS_RD_RTC() >> 7; // added by samp 00563 for(int i = 0; i<4; i++) 00564 CDMS_RAM[19+i] = TIME_LATEST_RTC >> (3-i)*8; 00565 for(int i = 0; i<4; i++) 00566 CDMS_RAM[23+i] = TIME_LATEST_I2C_BAE >> (3-i)*8; 00567 for(int i = 0; i<4; i++) 00568 CDMS_RAM[27+i] = TIME_LATEST_I2C_SPEED >> (3-i)*8; 00569 for(int i = 0; i<4; i++) 00570 CDMS_RAM[31+i] = TIME_LATEST_SD_WR >> (3-i)*8; 00571 for(int i = 0; i<4; i++) 00572 CDMS_RAM[35+i] = TIME_LATEST_SD_RD >> (3-i)*8; 00573 for(int i = 0; i<4; i++) 00574 CDMS_RAM[39+i] = TIME_LATEST_SPI_SPEED >> (3-i)*8; 00575 for(int i = 0; i<4; i++) 00576 CDMS_RAM[43+i] = FSC_CURRENT[1] >> (3-i)*8; 00577 for(int i = 0; i<4; i++) 00578 CDMS_RAM[47+i] = FSC_LAST[1] >> (3-i)*8; 00579 for(int i = 0; i<4; i++) 00580 CDMS_RAM[51+i] = FSC_CURRENT[2] >> (3-i)*8; 00581 for(int i = 0; i<4; i++) 00582 CDMS_RAM[55+i] = FSC_LAST[2] >> (3-i)*8; 00583 for(int i = 0; i<4; i++) 00584 CDMS_RAM[59+i] = FSC_CURRENT[3] >> (3-i)*8; 00585 for(int i = 0; i<4; i++) 00586 CDMS_RAM[63+i] = FSC_LAST[3] >> (3-i)*8; 00587 for(int i = 0; i<4; i++) 00588 CDMS_RAM[67+i] = FSC_CURRENT[4] >> (3-i)*8; 00589 for(int i = 0; i<4; i++) 00590 CDMS_RAM[71+i] = FSC_LAST[4] >> (3-i)*8; 00591 for(int i = 0; i<4; i++) 00592 CDMS_RAM[75+i] = FSC_CURRENT[5] >> (3-i)*8; 00593 for(int i = 0; i<4; i++) 00594 CDMS_RAM[79+i] = FSC_LAST[5] >> (3-i)*8; 00595 CDMS_RAM[83] = 0x00; 00596 gPC.printf("\n\r%d %d %d %d %d",FSC_CURRENT[1],FSC_CURRENT[2],FSC_CURRENT[3],FSC_CURRENT[4],FSC_CURRENT[5]); 00597 }
Generated on Sat Jul 16 2022 01:27:53 by 1.7.2