Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FreescaleIAP mbed-rtos mbed
Fork of QM_BAE_review_1 by
main.cpp
00001 #include "mbed.h" 00002 #include "rtos.h" 00003 #include "pin_config.h" 00004 #include "ACS.h" 00005 #include "EPS.h" 00006 #include "BCN.h" 00007 #include "TCTM.h" 00008 00009 #define tm_len 135 00010 #define tc_len 11 00011 #define batt_heat_low 20 00012 00013 //***************************************************** flags *************************************************************// 00014 uint32_t BAE_STATUS = 0x00000000; 00015 uint32_t BAE_ENABLE = 0xFFFFFFFF; 00016 00017 //i2c// 00018 char data_send_flag = 'h'; 00019 00020 //.........acs...............// 00021 /* char ACS_INIT_STATUS = 'q'; 00022 char ACS_DATA_ACQ_STATUS = 'q'; 00023 char ACS_ATS_STATUS = 'q'; 00024 char ACS_MAIN_STATUS = 'q'; 00025 char ACS_STATUS = 'q'; 00026 00027 char ACS_ATS_ENABLE = 'q'; 00028 char ACS_DATA_ACQ_ENABLE = 'q'; 00029 char ACS_STATE = 'q';*/ 00030 00031 uint8_t ACS_INIT_STATUS = 0; 00032 uint8_t ACS_DATA_ACQ_STATUS = 0; 00033 uint8_t ACS_ATS_STATUS = 0x60; 00034 uint8_t ACS_MAIN_STATUS = 0; 00035 uint8_t ACS_STATUS = 0; 00036 00037 uint8_t ACS_ATS_ENABLE = 1; 00038 uint8_t ACS_DATA_ACQ_ENABLE = 1; 00039 uint8_t ACS_STATE = 4; 00040 00041 //.....................eps...................// 00042 //eps init 00043 /*char EPS_INIT_STATUS = 'q'; 00044 char EPS_BATTERY_GAUGE_STATUS = 'q'; 00045 //eps main 00046 char EPS_MAIN_STATUS = 'q'; 00047 char EPS_BATTERY_TEMP_STATUS = 'q'; 00048 char EPS_STATUS = 'q'; 00049 00050 char EPS_BATTERY_HEAT_ENABLE = 'q'; 00051 */ 00052 00053 uint8_t EPS_INIT_STATUS = 0; 00054 uint8_t EPS_BATTERY_GAUGE_STATUS = 0; 00055 //eps main 00056 uint8_t EPS_MAIN_STATUS = 0; 00057 uint8_t EPS_BATTERY_TEMP_STATUS = 0; 00058 uint8_t EPS_STATUS = 7; //invalid status 00059 00060 uint8_t EPS_BATTERY_HEAT_ENABLE = 0; 00061 00062 //.......................global variables..................................................................// new hk structure- everything has to changed based on this 00063 uint8_t BAE_data[74]; 00064 char BAE_chardata[74]; 00065 00066 00067 //*************************************Global declarations************************************************// 00068 const int addr = 0x20; //slave address 00069 00070 Timer t_rfsilence; 00071 Timer t_start; 00072 Timer t_tc; 00073 Timer t_tm; 00074 Serial pc(USBTX, USBRX); 00075 int power_flag_dummy=2; 00076 float data[6]; 00077 00078 extern float moment[3]; 00079 extern uint8_t BCN_FEN; 00080 extern BAE_HK_actual actual_data; 00081 extern BAE_HK_quant quant_data; 00082 extern BAE_HK_min_max bae_HK_minmax; 00083 extern BAE_HK_arch arch_data; 00084 00085 int write_ack = 1; 00086 int read_ack = 1; 00087 char telecommand[tc_len]; 00088 extern uint8_t telemetry[135]; 00089 00090 bool pf1check = 0; 00091 bool pf2check = 0; 00092 bool if1check = 0; 00093 bool if2check = 0; 00094 00095 //*****************************************************Assigning pins******************************************************// 00096 DigitalOut ATS1_SW_ENABLE(PTC0); // enable of att sens2 switch 00097 DigitalOut ATS2_SW_ENABLE(PTC16); // enable of att sens switch 00098 00099 InterruptIn irpt_4m_mstr(PIN38); //I2c interrupt from CDMS 00100 DigitalOut irpt_2_mstr(PIN4); //I2C interrupt to CDMS 00101 I2CSlave slave (PIN1,PIN2);///pin1 pin2 00102 DigitalOut batt_heat(PIN96); 00103 00104 //ATS1_SW_ENABLE = 0; 00105 PwmOut PWM1(PIN93); //x //Functions used to generate PWM signal 00106 PwmOut PWM2(PIN94); //y 00107 PwmOut PWM3(PIN95); //z //PWM output comes from pins p6 00108 00109 //........faults 00110 //Polled Faults 00111 DigitalIn pf1(PIN5);//Attitude Sensor 1 OC bar fault signal 00112 DigitalIn pf2(PIN97);//Attitude Sensor 2 OC bar fault signal 00113 DigitalIn pf3(PIN83);//Fault Bar for TRXY driver 00114 00115 //Interrupt based faults 00116 //InterruptIn ir1(PIN73);//Battery Gauge - Alert Bar Signal 00117 InterruptIn ir2(PIN72);//TRXY Driver TR switch Fault 00118 InterruptIn ir3(PIN89);//TRZ Driver Fault Bar 00119 InterruptIn ir4(PIN91);//TRZ Driver TR switch Fault 00120 InterruptIn ir5(PIN79);//CDMS - Switch Fault 00121 InterruptIn ir6(PIN80);//Beacon- Switch OC bar 00122 InterruptIn ir7(PIN42);//Charger IC - Fault Bar 00123 00124 00125 //DigitalOut TRXY_SW_EN(PIN71); //TR XY Switch 00126 //DigitalOut DRV_Z_SLP(PIN88); //Sleep pin of driver z 00127 //DigitalOut TRZ_SW(PIN40); //TR Z Switch 00128 //DigitalOut CDMS_RESET(PIN7); // CDMS RESET 00129 //DigitalOut BCN_SW(PIN14); //Beacon switch 00130 //DigitalOut DRV_XY_SLP(PIN82); 00131 00132 00133 DigitalOut TRXY_SW(PIN71); //TR XY Switch 00134 DigitalOut DRV_Z_EN(PIN88); //Sleep pin of driver z 00135 DigitalOut TRZ_SW(PIN40); //TR Z Switch 00136 DigitalOut CDMS_RESET(PIN7); // CDMS RESET 00137 DigitalOut BCN_SW(PIN14); //Beacon switch 00138 DigitalOut DRV_XY_EN(PIN82); 00139 00140 /*****************************************************************Threads USed***********************************************************************************/ 00141 00142 Thread *ptr_t_i2c; 00143 00144 /*********************************************************FCTN HEADERS***********************************************************************************/ 00145 00146 void FCTN_ISR_I2C(); 00147 void FCTN_TM(); 00148 void F_ACS(); 00149 void F_EPS(); 00150 void F_BCN(); 00151 00152 //*******************************************ACS THREAD**************************************************// 00153 uint8_t iterP1; 00154 uint8_t iterP2; 00155 uint8_t iterI1; 00156 uint8_t iterI2; 00157 00158 00159 void F_ACS() 00160 { 00161 00162 00163 //...................// 00164 00165 if(pf1check == 1) 00166 { 00167 if(iterP1 >= 3) 00168 { 00169 ATS1_SW_ENABLE = 1; // turn off ats1 permanently 00170 //FCTN_SWITCH_ATS(0); // switch on ATS2 00171 } 00172 else 00173 { 00174 ATS1_SW_ENABLE = 0; 00175 iterP1++; 00176 } 00177 pf1check = 0; 00178 } 00179 if(pf2check == 1) 00180 { 00181 if(iterP1 >= 3) 00182 { 00183 ATS2_SW_ENABLE = 1; // turn off ats2 permanently 00184 ACS_DATA_ACQ_ENABLE = 0; 00185 ACS_STATE = 2 ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY 00186 } 00187 else 00188 { 00189 ATS2_SW_ENABLE = 0; 00190 iterP2++; 00191 } 00192 pf2check = 0; 00193 } 00194 if(if1check == 1) 00195 { 00196 if(iterI1 >= 3) 00197 { 00198 TRXY_SW = 0; // turn off TRXY permanently 00199 } 00200 else 00201 { 00202 TRXY_SW = 1; //switch on TRXY 00203 iterI1++; 00204 } 00205 } 00206 if(if2check == 1) 00207 { 00208 if(iterI2 >= 3) 00209 { 00210 TRZ_SW = 0; // turn off TRZ permanently 00211 ACS_STATE = 2 ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY 00212 } 00213 else 00214 { 00215 TRZ_SW = 1; //switch on Z 00216 iterI2++; 00217 } 00218 } 00219 00220 //float b1[3]={-23.376,-37.56,14.739}, omega1[3]={-1.52,2.746,0.7629}, moment1[3]= {1.0498,-1.0535,1.3246}; 00221 //b1[3] = {22, 22,10}; 00222 //omega1[3] = {2.1,3.0,1.5}; 00223 // ATS1_SW_ENABLE = 0; // att sens2 switch is disabled 00224 // ATS2_SW_ENABLE = 0; // att sens switch is disabled 00225 00226 00227 00228 //Thread::signal_wait(0x1); 00229 ACS_MAIN_STATUS = 1; //set ACS_MAIN_STATUS flag 00230 PWM1 = 0; //clear pwm pins 00231 PWM2 = 0; //clear pwm pins 00232 PWM3 = 0; //clear pwm pins 00233 pc.printf("\n\rEntered ACS %f\n",t_start.read()); 00234 00235 if(ACS_DATA_ACQ_ENABLE == 1)// check if ACS_DATA_ACQ_ENABLE = 1? 00236 { 00237 //FLAG(); 00238 FCTN_ATS_DATA_ACQ(); //the angular velocity is stored in the first 3 values and magnetic field values in next 3 00239 pc.printf("gyro values\n\r"); //printing the angular velocity and magnetic field values 00240 for(int i=0; i<3; i++) 00241 { 00242 printf("%f\n\r",actual_data.AngularSpeed_actual[i]); 00243 } 00244 pc.printf("mag values\n\r"); 00245 for(int i=0; i<3; i++) 00246 { 00247 pc.printf("%f\n\r",actual_data.Bvalue_actual[i]); 00248 } 00249 // for(int i=0;i<3;i++) 00250 // { 00251 // omega1[i]= data[i]; 00252 // b1[i] = data[i+3]; 00253 // } 00254 }//if ACS_DATA_ACQ_ENABLE = 1 00255 else 00256 { 00257 // Z axis actuation is the only final solution, 00258 } 00259 if(ACS_STATE == 0) // check ACS_STATE = ACS_CONTROL_OFF? 00260 { 00261 printf("\n\r acs control off\n"); 00262 FLAG(); 00263 ACS_STATUS = 0; // set ACS_STATUS = ACS_CONTROL_OFF 00264 PWM1 = 0; //clear pwm pins 00265 PWM2 = 0; //clear pwm pins 00266 PWM3 = 0; //clear pwm pins 00267 } 00268 else 00269 { 00270 if(actual_data.power_mode>1) 00271 00272 { 00273 if(ACS_STATE == 2) // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY 00274 { 00275 FLAG(); 00276 printf("\n\r z axis moment only\n"); 00277 ACS_STATUS = 2; // set ACS_STATUS = ACS_ZAXIS_MOMENT_ONLY 00278 // FCTN_ACS_CNTRLALGO(b1, omega1); 00279 moment[0] = 0; 00280 moment[1] = 0; 00281 moment[2] =1.3;// is a dummy value 00282 FCTN_ACS_GENPWM_MAIN(moment) ; 00283 } 00284 else 00285 { 00286 if(ACS_STATE == 3) // check ACS_STATE = ACS_DATA_ACQ_FAILURE 00287 { 00288 FLAG(); 00289 printf("\n\r acs data failure "); 00290 ACS_STATUS = 3; // set ACS_STATUS = ACS_DATA_ACQ_FAILURE 00291 PWM1 = 0; //clear pwm pins 00292 PWM2 = 0; //clear pwm pins 00293 PWM3 = 0; //clear pwm pins 00294 } 00295 else 00296 { 00297 if(ACS_STATE == 4) // check ACS_STATE = ACS_NOMINAL_ONLY 00298 { 00299 FLAG(); 00300 printf("\n\r nominal"); 00301 ACS_STATUS = 4; // set ACS_STATUS = ACS_NOMINAL_ONLY 00302 FCTN_ACS_CNTRLALGO(actual_data.Bvalue_actual,actual_data.AngularSpeed_actual); 00303 printf("\n\r moment values returned by control algo \n"); 00304 for(int i=0; i<3; i++) 00305 { 00306 printf("%f\t",moment[i]); 00307 } 00308 FCTN_ACS_GENPWM_MAIN(moment) ; 00309 } 00310 else 00311 { 00312 if(ACS_STATE == 5) // check ACS_STATE = ACS_AUTO_CONTROL 00313 { 00314 FLAG(); 00315 printf("\n\r auto control"); 00316 ACS_STATUS = 5; // set ACS_STATUS = ACS_AUTO_CONTROL 00317 //FCTN_ACS_AUTOCTRL_LOGIC // gotta include this code 00318 } 00319 else 00320 { 00321 if(ACS_STATE == 6) // check ACS_STATE = ACS_DETUMBLING_ONLY 00322 { 00323 FLAG(); 00324 printf("\n\r Entered detumbling \n"); 00325 ACS_STATUS = 6; // set ACS_STATUS = ACS_DETUMBLING_ONLY 00326 FCTN_ACS_CNTRLALGO(actual_data.Bvalue_actual,actual_data.AngularSpeed_actual); // detumbling code has to be included 00327 FCTN_ACS_GENPWM_MAIN(moment) ; 00328 } 00329 else 00330 { 00331 FLAG(); 00332 printf("\n\r invalid state"); 00333 ACS_STATUS = 7 ; // set ACS_STATUS = INVALID STATE 00334 PWM1 = 0; //clear pwm pins 00335 PWM2 = 0; //clear pwm pins 00336 PWM3 = 0; //clear pwm pins 00337 }//else of invalid 00338 }//else of autocontrol 00339 }//else of nominal 00340 }//else of data acg failure 00341 00342 }//else fo z axis moment only 00343 }//if power >2 00344 else 00345 { 00346 FLAG(); 00347 printf("\n\r low power"); 00348 ACS_STATUS = 1; // set ACS_STATUS = ACS_LOW_POWER 00349 PWM1 = 0; //clear pwm pins 00350 PWM2 = 0; //clear pwm pins 00351 PWM3 = 0; //clear pwm pins 00352 } 00353 } //else for acs control off 00354 ACS_MAIN_STATUS = 0; //clear ACS_MAIN_STATUS flag 00355 00356 } 00357 //***************************************************EPS THREAD***********************************************// 00358 00359 void F_EPS() 00360 { 00361 00362 pc.printf("\n\rEntered EPS %f\n",t_start.read()); 00363 EPS_MAIN_STATUS = 1; // Set EPS main status 00364 FCTN_BATT_TEMP_SENSOR_MAIN(actual_data.Batt_temp_actual); 00365 pc.printf("\n\r Battery temperature %f %f" ,actual_data.Batt_temp_actual[0], actual_data.Batt_temp_actual[1]); 00366 EPS_BATTERY_TEMP_STATUS = 1; //set EPS_BATTERY_TEMP_STATUS 00367 if(EPS_BATTERY_HEAT_ENABLE == 1) 00368 { 00369 if((actual_data.Batt_temp_actual[0] < batt_heat_low) && (actual_data.Batt_temp_actual[1] < batt_heat_low)) // to confirm 00370 { 00371 batt_heat = 1; //turn on battery heater 00372 } 00373 else 00374 { 00375 batt_heat = 0; //turn off battery heater 00376 } 00377 00378 } 00379 else if(EPS_BATTERY_HEAT_ENABLE == 0) 00380 { 00381 EPS_STATUS = 1;//EPS_STATUS = EPS_BATTERY_HEATER_DISABLED 00382 } 00383 FCTN_BATTERYGAUGE_MAIN(actual_data.Batt_gauge_actual); 00384 if (actual_data.Batt_gauge_actual[1] == 200) //data not received 00385 { 00386 actual_data.power_mode = 1; 00387 EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS 00388 00389 } 00390 else 00391 { 00392 FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]); //updating power level 00393 EPS_BATTERY_GAUGE_STATUS = 1; //set EPS_BATTERY_GAUGE_STATUS 00394 } 00395 // if( Temperature data received) 00396 //{ 00397 00398 00399 // } 00400 // else 00401 // { 00402 // Set battery temp to XX 00403 // EPS_BATTERY_TEMP_STATUS = 0; //clear EPS_BATTERY_TEMP_STATUS 00404 // EPS_STATUS = EPS_ERR_BATTERY_TEMP; 00405 // } 00406 FCTN_HK_MAIN(); 00407 // printf("\n\r here"); 00408 FCTN_APPEND_HKDATA(); 00409 minMaxHkData(); 00410 //printf("\n\r here"); 00411 EPS_MAIN_STATUS = 0; // clear EPS main status 00412 00413 } 00414 00415 //**************************************************BCN THREAD*******************************************************************// 00416 00417 void F_BCN() 00418 { 00419 00420 pc.printf("\n\rEntered BCN %f\n",t_start.read()); 00421 00422 FCTN_BCN_TX_MAIN(); 00423 00424 } 00425 00426 //**************************************************TCTM THREAD*******************************************************************// 00427 00428 void T_TC(void const * args) 00429 { 00430 while(1) 00431 { 00432 Thread::signal_wait(0x4); 00433 wait_us(200); 00434 //printf("\n\rreached\n"); // can be between 38 to 15700 00435 if( slave.receive() == 0) 00436 {slave.stop(); 00437 //printf("\n\rnot send\n"); 00438 } 00439 else if( slave.receive() == 1) // slave writes to master 00440 { 00441 if(data_send_flag == 'h') 00442 { 00443 //FCTN_APPEND_HKDATA(); 00444 // pc.printf("\n\r here"); 00445 write_ack=slave.write(BAE_chardata,74); 00446 if(write_ack==0) 00447 {irpt_2_mstr = 0; 00448 printf("\n\rgot interrupt\n"); 00449 } 00450 } 00451 else if(data_send_flag == 't') 00452 { 00453 write_ack=slave.write((char*)telemetry,tm_len); 00454 data_send_flag = 'h'; 00455 if(write_ack==0) 00456 irpt_2_mstr = 0; 00457 } 00458 } 00459 else if( slave.receive()==3 || slave.receive()==2) // slave read 00460 { 00461 read_ack=slave.read(telecommand,tc_len); 00462 t_tc.start(); 00463 //pc.printf("\n\rTELECOMMAND received from CDMS is %s \n",telecommand); 00464 pc.printf("\n\r Executing Telecommand \n"); 00465 // FCTN_TC_DECODE((uint8_t*) telecommand); 00466 00467 FCTN_BAE_TM_TC((uint8_t*) telecommand); 00468 //telemetry = (char*)temp; 00469 00470 FCTN_TM(); 00471 t_tc.stop(); 00472 printf("\n\r time taken %d",t_tc.read_us()); 00473 t_tc.reset(); 00474 // for(int i = 0; i<134; i++) 00475 //pc.printf("%c", telemetry[i]); 00476 } 00477 00478 00479 } 00480 } 00481 00482 void FCTN_TM() 00483 { 00484 //irpt_2_mstr = 0; 00485 data_send_flag = 't'; 00486 pc.printf("\n\r Telemetry Generation \n"); 00487 irpt_2_mstr = 1; 00488 } 00489 00490 00491 //******************************************************* I2C *******************************************************************// 00492 00493 void FCTN_I2C_ISR() 00494 { 00495 ptr_t_i2c->signal_set(0x4); 00496 } 00497 00498 00499 //***********************************************************FAULTS***************************************************************// 00500 /*void ir1clear() 00501 { 00502 actual_data.faultIr_status |= 0x01; // alert 00503 00504 }*/ 00505 00506 00507 00508 void ir2clear() 00509 { 00510 actual_data.faultIr_status |= 0x02; 00511 TRXY_SW = 0; // Switch off TR XY 00512 if1check = 1; 00513 } 00514 00515 void ir3clear() 00516 { 00517 actual_data.faultIr_status |= 0x04; 00518 DRV_Z_EN = 0; 00519 wait_us(1); 00520 DRV_Z_EN = 1; 00521 00522 } 00523 00524 void ir4clear() 00525 { 00526 if2check = 1; 00527 actual_data.faultIr_status |= 0x08; 00528 TRZ_SW = 0; 00529 } 00530 00531 void ir5clear() 00532 { 00533 actual_data.faultIr_status |= 0x10; 00534 CDMS_RESET = 0; 00535 wait_us(1); 00536 CDMS_RESET = 1; 00537 } 00538 00539 void ir6clear() 00540 { 00541 actual_data.faultIr_status |= 0x20; 00542 BCN_SW = 0; 00543 wait_us(1); 00544 BCN_SW = 1; 00545 } 00546 00547 void ir7clear() 00548 { 00549 actual_data.faultIr_status |= 0x40; 00550 } 00551 uint8_t iter2=0,iter4 = 0; 00552 00553 00554 00555 void pollfault() 00556 { 00557 00558 00559 00560 if (pf1==0) // OC_ATS1 00561 { 00562 pf1check=1; 00563 actual_data.faultPoll_status |=0x01 ; 00564 ATS1_SW_ENABLE = 1; // turn off ats1 // to be turned on next cycle in ACS 00565 } 00566 else actual_data.faultPoll_status &= 0xFE; 00567 00568 if (pf2==0) 00569 { 00570 pf2check=1; 00571 actual_data.faultPoll_status |=0x02 ; 00572 ATS2_SW_ENABLE = 1; // turn off ats2 // turn on in ACS 00573 } 00574 else actual_data.faultPoll_status &= 0xFD; 00575 00576 if (pf3==0) 00577 { actual_data.faultPoll_status |=0x04 ; 00578 DRV_XY_EN = 0; 00579 wait_us(1); 00580 DRV_XY_EN = 1; 00581 } 00582 else actual_data.faultPoll_status &= 0xFB; 00583 00584 00585 00586 00587 /*if (ir1==1) 00588 { 00589 actual_data.faultIr_status &=0xFE; 00590 }*/ 00591 00592 if (ir2==1) 00593 { 00594 actual_data.faultIr_status &=0xFD; 00595 } 00596 if (ir3==1) 00597 { 00598 actual_data.faultIr_status &=0xFB; 00599 } 00600 if (ir4==1) 00601 { 00602 actual_data.faultIr_status &=0xF7; 00603 } 00604 if (ir5==1) 00605 { 00606 actual_data.faultIr_status &=0xEF; 00607 } 00608 if (ir6==1) 00609 { 00610 actual_data.faultIr_status &=0xDF; 00611 }if (ir7==1) 00612 { 00613 actual_data.faultIr_status &=0xBF; 00614 } 00615 00616 00617 } 00618 00619 00620 //------------------------------------------------------------------------------------------------------------------------------------------------ 00621 //SCHEDULER 00622 //------------------------------------------------------------------------------------------------------------------------------------------------ 00623 uint8_t schedcount=1; 00624 void T_SC(void const *args) 00625 { 00626 printf("\n\r in scheduler"); 00627 00628 if(schedcount == 7) //to reset the counter 00629 { 00630 schedcount = 1; 00631 } 00632 if(schedcount%1==0) 00633 { pc.printf("\nSTATE IS !!!!!! = %x !!\n",ACS_STATE); 00634 pc.printf("\niterp1 !!!!!! = %x !!\n",iterP1); 00635 pc.printf("\niteri2 IS !!!!!! = %x !!\n",iterI2); 00636 F_ACS(); 00637 } 00638 00639 if(schedcount%2==0) 00640 { 00641 // F_EPS(); 00642 } 00643 if(schedcount%1==0) 00644 { 00645 F_BCN(); 00646 } 00647 schedcount++; 00648 printf("\n\r exited scheduler"); 00649 } 00650 00651 Timer t_flag; 00652 void FLAG() 00653 { 00654 00655 //.............acs..................// 00656 if(ACS_INIT_STATUS == 1) 00657 BAE_STATUS = BAE_STATUS | 0x00000080; //set ACS_INIT_STATUS flag 00658 else if(ACS_INIT_STATUS == 0) 00659 BAE_STATUS &= 0xFFFFFF7F; //clear ACS_INIT_STATUS flag 00660 00661 if(ACS_DATA_ACQ_STATUS == 1) 00662 BAE_STATUS =BAE_STATUS | 0x00000100; //set ACS_DATA_ACQ_STATUS flag 00663 else if(ACS_DATA_ACQ_STATUS == 0) 00664 BAE_STATUS &= 0xFFFFFEFF; //clear ACS_DATA_ACQ_STATUS flag 00665 00666 if(ACS_ATS_ENABLE == 1) 00667 BAE_ENABLE |= 0x00000004; 00668 else if(ACS_ATS_ENABLE == 0) 00669 BAE_ENABLE = BAE_ENABLE &0xFFFFFFFB | 0x00000004; 00670 00671 if(ACS_DATA_ACQ_STATUS == 'f') 00672 BAE_STATUS |= 0x00000200; 00673 00674 if(ACS_MAIN_STATUS == 1) 00675 BAE_STATUS = (BAE_STATUS | 0x00001000); //set ACS_MAIN_STATUS flag 00676 else if(ACS_MAIN_STATUS == 0) 00677 BAE_STATUS &= 0xFFFFEFFF; //clear ACS_MAIN_STATUS flag 00678 00679 if(ACS_STATUS == '0') 00680 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF); // set ACS_STATUS = ACS_CONTROL_OFF 00681 else if(ACS_STATUS == '1') 00682 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x00002000; // set ACS_STATUS = ACS_LOW_POWER 00683 else if(ACS_STATUS == '2') 00684 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF)| 0x00004000; // set ACS_STATUS = ACS_ZAXIS_MOMENT_ONLY 00685 else if(ACS_STATUS == '3') 00686 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF) | 0x00006000; // set ACS_STATUS = ACS_DATA_ACQ_FAILURE 00687 else if(ACS_STATUS == '4') 00688 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF) | 0x00008000; // set ACS_STATUS = ACS_NOMINAL_ONLY 00689 else if(ACS_STATUS == '5') 00690 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000A000; // set ACS_STATUS = ACS_AUTO_CONTROL 00691 else if(ACS_STATUS == '6') 00692 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000C000; // set ACS_STATUS = ACS_DETUMBLING_ONLY 00693 else 00694 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000E000; // set ACS_STATUS = INVALID STATE 00695 00696 if(ACS_STATE == '0') 00697 BAE_ENABLE = (BAE_ENABLE & 0xFFFFFF8F); //ACS_STATE = ACS_CONTROL_OFF 00698 else if(ACS_STATE == '2') 00699 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000020); // ACS_STATE = ACS_ZAXIS_MOMENT_ONLY 00700 else if(ACS_STATE == '3') 00701 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000030); // set ACS_STATUS = ACS_DATA_ACQ_FAILURE 00702 else if(ACS_STATE == '4') 00703 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000040); // ACS_STATE = ACS_NOMINAL_ONLY 00704 else if(ACS_STATE == '5') 00705 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000050); // ACS_STATE = ACS_AUTO_CONTROL 00706 else if(ACS_STATE == '6') 00707 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000060); //ACS_STATE = ACS_DETUMBLING_CONTROL 00708 00709 //...............eps......................// 00710 00711 00712 if (EPS_INIT_STATUS==1) // Set EPS_INIT_STATUS 00713 BAE_STATUS |= 0x00010000; 00714 else if(EPS_INIT_STATUS==0) // Clear 00715 BAE_STATUS &= 0xFFFEFFFF; 00716 00717 00718 if (EPS_MAIN_STATUS==1) // Set EPS_MAIIN_STATUS 00719 BAE_STATUS |= 0x00040000; 00720 else if(EPS_MAIN_STATUS==0) // Clear 00721 BAE_STATUS &= 0xFFFBFFFF; 00722 00723 00724 if (EPS_BATTERY_GAUGE_STATUS==1) // Set EPS_BATTERY_GAUGE_STATUS 00725 BAE_STATUS |= 0x00020000; 00726 else if(EPS_BATTERY_GAUGE_STATUS==0) // Clear 00727 BAE_STATUS &= 0xFFFDFFFF; 00728 00729 00730 if (EPS_BATTERY_TEMP_STATUS==1) // Set EPS_BATTERY_TEMP_STATUS 00731 BAE_STATUS |= 0x00080000; 00732 else if(EPS_BATTERY_TEMP_STATUS==0) // Clear 00733 BAE_STATUS &= 0xFFF7FFFF; 00734 00735 if (EPS_STATUS==0) 00736 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF); // Set EPS_ERR_BATTERY_TEMP 00737 else if (EPS_STATUS==1) 00738 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00010000; // Set EPS_BATTERY_HEATER_DISABLED 00739 else if (EPS_STATUS==2) 00740 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00020000; // Set EPS_ERR_HEATER_SWITCH_OFF 00741 else if (EPS_STATUS==3) 00742 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00030000; // Set EPS_ERR_HEATER_SWITCH_ON 00743 else if (EPS_STATUS==4) 00744 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00040000; // Set EPS_BATTERY_HEATER_OFF 00745 else if (EPS_STATUS==5) 00746 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00050000; // Set EPS_BATTERY_HEATER_ON 00747 00748 00749 if(EPS_BATTERY_HEAT_ENABLE == 1) 00750 BAE_ENABLE |= 0x00000080; 00751 else if(EPS_BATTERY_HEAT_ENABLE == 0) 00752 BAE_ENABLE = BAE_ENABLE &0xFFFFFF7; 00753 00754 00755 00756 pc.printf("\n\r BAE status %x BAE ENABLE %x ",BAE_STATUS,BAE_ENABLE); 00757 } 00758 00759 void FCTN_BAE_INIT() 00760 { 00761 printf("\n\r Initialising BAE "); 00762 //..........intial status....// 00763 ACS_STATE = 4; 00764 ACS_ATS_ENABLE = 1; 00765 ACS_DATA_ACQ_ENABLE = 1; 00766 00767 00768 EPS_BATTERY_HEAT_ENABLE = 1; 00769 actual_data.power_mode=3; 00770 //............intializing pins................// 00771 00772 ATS2_SW_ENABLE = 1; 00773 ATS1_SW_ENABLE = 1; 00774 wait_ms(5); 00775 ATS1_SW_ENABLE = 0; 00776 00777 ACS_ATS_STATUS = 0x60; //Set Sensor 1 working , Sensor2 working and powered off by default 00778 00779 DRV_XY_EN = 1; 00780 DRV_Z_EN = 1; 00781 TRZ_SW = 1; 00782 TRXY_SW = 1; 00783 00784 //............................// 00785 FCTN_ACS_INIT(); 00786 // FCTN_EPS_INIT(); 00787 //FCTN_BCN_INIT(); 00788 00789 00790 FLAG(); 00791 } 00792 00793 int main() 00794 { 00795 pc.printf("\n\r BAE Activated. Testing Version 1.1 \n"); 00796 CDMS_RESET = 1; 00797 /*if (BCN_FEN == 0) //dummy implementation 00798 { 00799 pc.printf("\n\r RF silence "); 00800 FCTN_BCN_FEN(); 00801 t_rfsilence.start();//Start the timer for RF_Silence 00802 while(t_rfsilence.read() < RF_SILENCE_TIME); 00803 } 00804 */ 00805 00806 //ACS_INIT_STATUS = 0; 00807 //ACS_DATA_ACQ_STATUS = 0; 00808 00809 00810 00811 //FLAG(); 00812 FCTN_BAE_INIT(); 00813 00814 00815 //...i2c.. 00816 //strcpy(telemetry,"This is telemetry THis is sample telemetry. ffffffffffffffffffffffffffffff end"); 00817 slave.address(addr); 00818 irpt_2_mstr = 0; 00819 00820 ptr_t_i2c = new Thread(T_TC); 00821 ptr_t_i2c->set_priority(osPriorityHigh); 00822 00823 irpt_4m_mstr.enable_irq(); 00824 irpt_4m_mstr.rise(&FCTN_I2C_ISR); 00825 // ir1.fall(&ir1clear); //Battery Gauge - Alert Bar Signal 00826 /* ir2.fall(&ir2clear); //TRXY Driver TR switch Fault 00827 ir3.fall(&ir3clear); //TRZ Driver Fault Bar 00828 ir4.fall(&ir4clear); //TRZ Driver TR switch Fault 00829 ir5.fall(&ir5clear); //CDMS - Switch Fault 00830 ir6.fall(&ir6clear); //Beacon- Switch OC bar 00831 ir7.fall(&ir7clear); //Charger IC - Fault Bar 00832 00833 */ 00834 RtosTimer t_sc_timer(T_SC,osTimerPeriodic); // Initiating the scheduler thread 00835 t_sc_timer.start(10000); 00836 t_start.start(); 00837 pc.printf("\n\rStarted scheduler %f\n\r",t_start.read()); 00838 00839 00840 //FCTN_BAE_INIT(); 00841 while(1); //required to prevent main from terminating 00842 } 00843
Generated on Tue Jul 12 2022 17:24:01 by
1.7.2
