Team Fox / Mbed 2 deprecated BAE_QM_MAR9

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of workinQM_5thJan_azad by Team Fox

Committer:
lakshya
Date:
Sat May 14 11:19:13 2016 +0000
Revision:
18:3662058a7c10
Parent:
17:fc782f7548c6
Child:
19:79e69017c855
bcn working no hanging; ; rtos timer used for calling bcn_fen ; ( spi connection valid  if it waits for too long then maybe BCN_hw is commented make sure it sets the spi ); ; both short and long beacon working; ; also ACS (modifed version as earlier)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:7b4c00e3912f 1 #include "mbed.h"
sakthipriya 0:7b4c00e3912f 2 #include "rtos.h"
sakthipriya 0:7b4c00e3912f 3 #include "pin_config.h"
sakthipriya 0:7b4c00e3912f 4 #include "ACS.h"
sakthipriya 0:7b4c00e3912f 5 #include "EPS.h"
sakthipriya 0:7b4c00e3912f 6 #include "BCN.h"
sakthipriya 0:7b4c00e3912f 7 #include "TCTM.h"
sakthipriya 0:7b4c00e3912f 8
Bragadeesh153 13:fb7facaf308b 9 #define tm_len 135
Bragadeesh153 13:fb7facaf308b 10 #define tc_len 11
sakthipriya 0:7b4c00e3912f 11 #define batt_heat_low 20
sakthipriya 9:194afacf7449 12
sakthipriya 0:7b4c00e3912f 13 //***************************************************** flags *************************************************************//
sakthipriya 0:7b4c00e3912f 14 uint32_t BAE_STATUS = 0x00000000;
sakthipriya 0:7b4c00e3912f 15 uint32_t BAE_ENABLE = 0xFFFFFFFF;
sakthipriya 0:7b4c00e3912f 16
sakthipriya 5:bb592f3185cc 17 //i2c//
sakthipriya 5:bb592f3185cc 18 char data_send_flag = 'h';
sakthipriya 5:bb592f3185cc 19
sakthipriya 0:7b4c00e3912f 20 //.........acs...............//
sakthipriya 9:194afacf7449 21 /* char ACS_INIT_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 22 char ACS_DATA_ACQ_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 23 char ACS_ATS_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 24 char ACS_MAIN_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 25 char ACS_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 26
sakthipriya 0:7b4c00e3912f 27 char ACS_ATS_ENABLE = 'q';
sakthipriya 0:7b4c00e3912f 28 char ACS_DATA_ACQ_ENABLE = 'q';
sakthipriya 9:194afacf7449 29 char ACS_STATE = 'q';*/
sakthipriya 9:194afacf7449 30
sakthipriya 9:194afacf7449 31 uint8_t ACS_INIT_STATUS = 0;
sakthipriya 9:194afacf7449 32 uint8_t ACS_DATA_ACQ_STATUS = 0;
sakthipriya 9:194afacf7449 33 uint8_t ACS_ATS_STATUS = 0;
sakthipriya 9:194afacf7449 34 uint8_t ACS_MAIN_STATUS = 0;
sakthipriya 9:194afacf7449 35 uint8_t ACS_STATUS = 0;
sakthipriya 9:194afacf7449 36
sakthipriya 9:194afacf7449 37 uint8_t ACS_ATS_ENABLE = 1;
sakthipriya 9:194afacf7449 38 uint8_t ACS_DATA_ACQ_ENABLE = 1;
sakthipriya 9:194afacf7449 39 uint8_t ACS_STATE = 4;
lakshya 18:3662058a7c10 40 /*added for removing the stuck/hang problem*/
lakshya 18:3662058a7c10 41 /*does it work? now doing it in main*/
lakshya 18:3662058a7c10 42 extern uint8_t BCN_FEN;
lakshya 18:3662058a7c10 43 extern void FCTN_BCN_FEN(void const *args);
lakshya 18:3662058a7c10 44 Timeout timeout_bcn;
sakthipriya 0:7b4c00e3912f 45
sakthipriya 0:7b4c00e3912f 46 //.....................eps...................//
sakthipriya 0:7b4c00e3912f 47 //eps init
sakthipriya 9:194afacf7449 48 /*char EPS_INIT_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 49 char EPS_BATTERY_GAUGE_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 50 //eps main
sakthipriya 0:7b4c00e3912f 51 char EPS_MAIN_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 52 char EPS_BATTERY_TEMP_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 53 char EPS_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 54
sakthipriya 0:7b4c00e3912f 55 char EPS_BATTERY_HEAT_ENABLE = 'q';
sakthipriya 9:194afacf7449 56 */
sakthipriya 9:194afacf7449 57
sakthipriya 9:194afacf7449 58 uint8_t EPS_INIT_STATUS = 0;
sakthipriya 9:194afacf7449 59 uint8_t EPS_BATTERY_GAUGE_STATUS = 0;
sakthipriya 9:194afacf7449 60 //eps main
sakthipriya 9:194afacf7449 61 uint8_t EPS_MAIN_STATUS = 0;
sakthipriya 9:194afacf7449 62 uint8_t EPS_BATTERY_TEMP_STATUS = 0;
sakthipriya 9:194afacf7449 63 uint8_t EPS_STATUS = 7; //invalid status
sakthipriya 9:194afacf7449 64
sakthipriya 9:194afacf7449 65 uint8_t EPS_BATTERY_HEAT_ENABLE = 0;
sakthipriya 0:7b4c00e3912f 66
sakthipriya 0:7b4c00e3912f 67 //.......................global variables..................................................................// new hk structure- everything has to changed based on this
sakthipriya 6:036d08b62785 68 uint8_t BAE_data[74];
sakthipriya 6:036d08b62785 69 char BAE_chardata[74];
sakthipriya 0:7b4c00e3912f 70
sakthipriya 0:7b4c00e3912f 71
sakthipriya 0:7b4c00e3912f 72 //*************************************Global declarations************************************************//
sakthipriya 0:7b4c00e3912f 73 const int addr = 0x20; //slave address
sakthipriya 0:7b4c00e3912f 74
sakthipriya 0:7b4c00e3912f 75 Timer t_rfsilence;
sakthipriya 0:7b4c00e3912f 76 Timer t_start;
sakthipriya 7:a46a1dee4497 77 Timer t_tc;
sakthipriya 7:a46a1dee4497 78 Timer t_tm;
sakthipriya 0:7b4c00e3912f 79 Serial pc(USBTX, USBRX);
sakthipriya 0:7b4c00e3912f 80 int power_flag_dummy=2;
sakthipriya 0:7b4c00e3912f 81 float data[6];
sakthipriya 0:7b4c00e3912f 82
sakthipriya 0:7b4c00e3912f 83 extern float moment[3];
sakthipriya 0:7b4c00e3912f 84 extern uint8_t BCN_FEN;
sakthipriya 1:446a959e36ce 85 extern BAE_HK_actual actual_data;
sakthipriya 1:446a959e36ce 86 extern BAE_HK_quant quant_data;
sakthipriya 1:446a959e36ce 87 extern BAE_HK_min_max bae_HK_minmax;
sakthipriya 1:446a959e36ce 88 extern BAE_HK_arch arch_data;
sakthipriya 0:7b4c00e3912f 89
sakthipriya 5:bb592f3185cc 90 int write_ack = 1;
sakthipriya 5:bb592f3185cc 91 int read_ack = 1;
sakthipriya 0:7b4c00e3912f 92 char telecommand[tc_len];
Bragadeesh153 13:fb7facaf308b 93 extern uint8_t telemetry[135];
sakthipriya 5:bb592f3185cc 94
sakthipriya 5:bb592f3185cc 95 bool pf1check = 0;
sakthipriya 5:bb592f3185cc 96 bool pf2check = 0;
sakthipriya 5:bb592f3185cc 97 bool if1check = 0;
lakshya 14:a9588f443f1a 98 bool if2check = 0;
sakthipriya 0:7b4c00e3912f 99
sakthipriya 0:7b4c00e3912f 100 //*****************************************************Assigning pins******************************************************//
sakthipriya 9:194afacf7449 101 DigitalOut ATS1_SW_ENABLE(PTC0); // enable of att sens2 switch
sakthipriya 9:194afacf7449 102 DigitalOut ATS2_SW_ENABLE(PTC16); // enable of att sens switch
sakthipriya 0:7b4c00e3912f 103 InterruptIn irpt_4m_mstr(PIN38); //I2c interrupt from CDMS
sakthipriya 0:7b4c00e3912f 104 DigitalOut irpt_2_mstr(PIN4); //I2C interrupt to CDMS
lakshya 14:a9588f443f1a 105 I2CSlave slave (PIN1,PIN2);///pin1 pin2
sakthipriya 0:7b4c00e3912f 106 DigitalOut batt_heat(PIN96);
sakthipriya 0:7b4c00e3912f 107
sakthipriya 9:194afacf7449 108 //ATS1_SW_ENABLE = 0;
sakthipriya 0:7b4c00e3912f 109 PwmOut PWM1(PIN93); //x //Functions used to generate PWM signal
sakthipriya 0:7b4c00e3912f 110 PwmOut PWM2(PIN94); //y
sakthipriya 0:7b4c00e3912f 111 PwmOut PWM3(PIN95); //z //PWM output comes from pins p6
sakthipriya 0:7b4c00e3912f 112
sakthipriya 5:bb592f3185cc 113 //........faults
sakthipriya 5:bb592f3185cc 114 //Polled Faults
sakthipriya 5:bb592f3185cc 115 DigitalIn pf1(PIN5);//Attitude Sensor 1 OC bar fault signal
sakthipriya 5:bb592f3185cc 116 DigitalIn pf2(PIN97);//Attitude Sensor 2 OC bar fault signal
sakthipriya 5:bb592f3185cc 117 DigitalIn pf3(PIN83);//Fault Bar for TRXY driver
sakthipriya 5:bb592f3185cc 118
sakthipriya 5:bb592f3185cc 119 //Interrupt based faults
lakshya 14:a9588f443f1a 120 //InterruptIn ir1(PIN73);//Battery Gauge - Alert Bar Signal
sakthipriya 5:bb592f3185cc 121 InterruptIn ir2(PIN72);//TRXY Driver TR switch Fault
sakthipriya 5:bb592f3185cc 122 InterruptIn ir3(PIN89);//TRZ Driver Fault Bar
sakthipriya 5:bb592f3185cc 123 InterruptIn ir4(PIN91);//TRZ Driver TR switch Fault
sakthipriya 5:bb592f3185cc 124 InterruptIn ir5(PIN79);//CDMS - Switch Fault
sakthipriya 5:bb592f3185cc 125 InterruptIn ir6(PIN80);//Beacon- Switch OC bar
sakthipriya 5:bb592f3185cc 126 InterruptIn ir7(PIN42);//Charger IC - Fault Bar
sakthipriya 5:bb592f3185cc 127
lakshya 14:a9588f443f1a 128
Bragadeesh153 13:fb7facaf308b 129 //DigitalOut TRXY_SW_EN(PIN71); //TR XY Switch
Bragadeesh153 13:fb7facaf308b 130 //DigitalOut DRV_Z_SLP(PIN88); //Sleep pin of driver z
Bragadeesh153 13:fb7facaf308b 131 //DigitalOut TRZ_SW(PIN40); //TR Z Switch
Bragadeesh153 13:fb7facaf308b 132 //DigitalOut CDMS_RESET(PIN7); // CDMS RESET
Bragadeesh153 13:fb7facaf308b 133 //DigitalOut BCN_SW(PIN14); //Beacon switch
Bragadeesh153 13:fb7facaf308b 134 //DigitalOut DRV_XY_SLP(PIN82);
Bragadeesh153 13:fb7facaf308b 135
Bragadeesh153 13:fb7facaf308b 136
Bragadeesh153 13:fb7facaf308b 137 DigitalOut TRXY_SW(PIN71); //TR XY Switch
Bragadeesh153 13:fb7facaf308b 138 DigitalOut DRV_Z_EN(PIN88); //Sleep pin of driver z
sakthipriya 5:bb592f3185cc 139 DigitalOut TRZ_SW(PIN40); //TR Z Switch
sakthipriya 5:bb592f3185cc 140 DigitalOut CDMS_RESET(PIN7); // CDMS RESET
sakthipriya 5:bb592f3185cc 141 DigitalOut BCN_SW(PIN14); //Beacon switch
Bragadeesh153 13:fb7facaf308b 142 DigitalOut DRV_XY_EN(PIN82);
sakthipriya 0:7b4c00e3912f 143
sakthipriya 0:7b4c00e3912f 144 /*****************************************************************Threads USed***********************************************************************************/
sakthipriya 3:07e15677a75c 145
sakthipriya 0:7b4c00e3912f 146 Thread *ptr_t_i2c;
sakthipriya 0:7b4c00e3912f 147
sakthipriya 0:7b4c00e3912f 148 /*********************************************************FCTN HEADERS***********************************************************************************/
sakthipriya 0:7b4c00e3912f 149
sakthipriya 0:7b4c00e3912f 150 void FCTN_ISR_I2C();
sakthipriya 0:7b4c00e3912f 151 void FCTN_TM();
sakthipriya 3:07e15677a75c 152 void F_ACS();
sakthipriya 3:07e15677a75c 153 void F_EPS();
sakthipriya 3:07e15677a75c 154 void F_BCN();
sakthipriya 0:7b4c00e3912f 155
sakthipriya 0:7b4c00e3912f 156 //*******************************************ACS THREAD**************************************************//
sakthipriya 5:bb592f3185cc 157 uint8_t iterP1;
sakthipriya 5:bb592f3185cc 158 uint8_t iterP2;
sakthipriya 5:bb592f3185cc 159 uint8_t iterI1;
sakthipriya 5:bb592f3185cc 160 uint8_t iterI2;
sakthipriya 0:7b4c00e3912f 161
sakthipriya 5:bb592f3185cc 162
sakthipriya 3:07e15677a75c 163 void F_ACS()
sakthipriya 0:7b4c00e3912f 164 {
sakthipriya 8:82250e41da81 165
sakthipriya 9:194afacf7449 166
sakthipriya 8:82250e41da81 167 //...................//
sakthipriya 8:82250e41da81 168
sakthipriya 5:bb592f3185cc 169 if(pf1check == 1)
sakthipriya 5:bb592f3185cc 170 {
sakthipriya 5:bb592f3185cc 171 if(iterP1 >= 3)
sakthipriya 5:bb592f3185cc 172 {
sakthipriya 9:194afacf7449 173 ATS1_SW_ENABLE = 1; // turn off ats1 permanently
sakthipriya 5:bb592f3185cc 174 //FCTN_SWITCH_ATS(0); // switch on ATS2
sakthipriya 5:bb592f3185cc 175 }
sakthipriya 5:bb592f3185cc 176 else
sakthipriya 5:bb592f3185cc 177 {
sakthipriya 9:194afacf7449 178 ATS1_SW_ENABLE = 0;
sakthipriya 5:bb592f3185cc 179 iterP1++;
sakthipriya 5:bb592f3185cc 180 }
sakthipriya 9:194afacf7449 181 pf1check = 0;
sakthipriya 5:bb592f3185cc 182 }
sakthipriya 5:bb592f3185cc 183 if(pf2check == 1)
sakthipriya 5:bb592f3185cc 184 {
sakthipriya 5:bb592f3185cc 185 if(iterP1 >= 3)
sakthipriya 5:bb592f3185cc 186 {
sakthipriya 9:194afacf7449 187 ATS2_SW_ENABLE = 1; // turn off ats2 permanently
Bragadeesh153 13:fb7facaf308b 188 ACS_DATA_ACQ_ENABLE = 0;
Bragadeesh153 13:fb7facaf308b 189 ACS_STATE = 2 ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 5:bb592f3185cc 190 }
sakthipriya 5:bb592f3185cc 191 else
sakthipriya 5:bb592f3185cc 192 {
sakthipriya 9:194afacf7449 193 ATS2_SW_ENABLE = 0;
sakthipriya 5:bb592f3185cc 194 iterP2++;
sakthipriya 5:bb592f3185cc 195 }
sakthipriya 9:194afacf7449 196 pf2check = 0;
sakthipriya 5:bb592f3185cc 197 }
sakthipriya 5:bb592f3185cc 198 if(if1check == 1)
sakthipriya 5:bb592f3185cc 199 {
sakthipriya 5:bb592f3185cc 200 if(iterI1 >= 3)
sakthipriya 5:bb592f3185cc 201 {
Bragadeesh153 13:fb7facaf308b 202 TRXY_SW = 0; // turn off TRXY permanently
sakthipriya 5:bb592f3185cc 203 }
sakthipriya 5:bb592f3185cc 204 else
sakthipriya 5:bb592f3185cc 205 {
Bragadeesh153 13:fb7facaf308b 206 TRXY_SW = 1; //switch on TRXY
sakthipriya 5:bb592f3185cc 207 iterI1++;
sakthipriya 5:bb592f3185cc 208 }
sakthipriya 5:bb592f3185cc 209 }
sakthipriya 5:bb592f3185cc 210 if(if2check == 1)
sakthipriya 5:bb592f3185cc 211 {
sakthipriya 5:bb592f3185cc 212 if(iterI2 >= 3)
sakthipriya 5:bb592f3185cc 213 {
sakthipriya 5:bb592f3185cc 214 TRZ_SW = 0; // turn off TRZ permanently
Bragadeesh153 13:fb7facaf308b 215 ACS_STATE = 2 ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 5:bb592f3185cc 216 }
sakthipriya 5:bb592f3185cc 217 else
sakthipriya 5:bb592f3185cc 218 {
sakthipriya 5:bb592f3185cc 219 TRZ_SW = 1; //switch on Z
sakthipriya 5:bb592f3185cc 220 iterI2++;
sakthipriya 5:bb592f3185cc 221 }
sakthipriya 5:bb592f3185cc 222 }
sakthipriya 5:bb592f3185cc 223
sakthipriya 6:036d08b62785 224 //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};
sakthipriya 0:7b4c00e3912f 225 //b1[3] = {22, 22,10};
sakthipriya 0:7b4c00e3912f 226 //omega1[3] = {2.1,3.0,1.5};
sakthipriya 9:194afacf7449 227 // ATS1_SW_ENABLE = 0; // att sens2 switch is disabled
sakthipriya 9:194afacf7449 228 // ATS2_SW_ENABLE = 0; // att sens switch is disabled
sakthipriya 0:7b4c00e3912f 229
sakthipriya 3:07e15677a75c 230
sakthipriya 0:7b4c00e3912f 231
sakthipriya 3:07e15677a75c 232 //Thread::signal_wait(0x1);
sakthipriya 9:194afacf7449 233 ACS_MAIN_STATUS = 1; //set ACS_MAIN_STATUS flag
sakthipriya 0:7b4c00e3912f 234 PWM1 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 235 PWM2 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 236 PWM3 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 237 pc.printf("\n\rEntered ACS %f\n",t_start.read());
sakthipriya 0:7b4c00e3912f 238
sakthipriya 9:194afacf7449 239 if(ACS_DATA_ACQ_ENABLE == 1)// check if ACS_DATA_ACQ_ENABLE = 1?
sakthipriya 0:7b4c00e3912f 240 {
Bragadeesh153 13:fb7facaf308b 241 //FLAG();
sakthipriya 0:7b4c00e3912f 242 FCTN_ATS_DATA_ACQ(); //the angular velocity is stored in the first 3 values and magnetic field values in next 3
sakthipriya 0:7b4c00e3912f 243 pc.printf("gyro values\n\r"); //printing the angular velocity and magnetic field values
sakthipriya 0:7b4c00e3912f 244 for(int i=0; i<3; i++)
sakthipriya 0:7b4c00e3912f 245 {
lakshya 15:e09aaaccf134 246 printf("%f\n\r",actual_data.AngularSpeed_actual[i]);
sakthipriya 0:7b4c00e3912f 247 }
sakthipriya 0:7b4c00e3912f 248 pc.printf("mag values\n\r");
sakthipriya 6:036d08b62785 249 for(int i=0; i<3; i++)
sakthipriya 0:7b4c00e3912f 250 {
sakthipriya 6:036d08b62785 251 pc.printf("%f\n\r",actual_data.Bvalue_actual[i]);
sakthipriya 5:bb592f3185cc 252 }
sakthipriya 6:036d08b62785 253 // for(int i=0;i<3;i++)
sakthipriya 6:036d08b62785 254 // {
sakthipriya 6:036d08b62785 255 // omega1[i]= data[i];
sakthipriya 6:036d08b62785 256 // b1[i] = data[i+3];
sakthipriya 6:036d08b62785 257 // }
sakthipriya 0:7b4c00e3912f 258 }//if ACS_DATA_ACQ_ENABLE = 1
sakthipriya 0:7b4c00e3912f 259 else
sakthipriya 0:7b4c00e3912f 260 {
sakthipriya 0:7b4c00e3912f 261 // Z axis actuation is the only final solution,
sakthipriya 0:7b4c00e3912f 262 }
sakthipriya 9:194afacf7449 263 if(ACS_STATE == 0) // check ACS_STATE = ACS_CONTROL_OFF?
sakthipriya 0:7b4c00e3912f 264 {
sakthipriya 0:7b4c00e3912f 265 printf("\n\r acs control off\n");
sakthipriya 0:7b4c00e3912f 266 FLAG();
sakthipriya 9:194afacf7449 267 ACS_STATUS = 0; // set ACS_STATUS = ACS_CONTROL_OFF
sakthipriya 0:7b4c00e3912f 268 PWM1 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 269 PWM2 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 270 PWM3 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 271 }
sakthipriya 0:7b4c00e3912f 272 else
sakthipriya 0:7b4c00e3912f 273 {
sakthipriya 1:446a959e36ce 274 if(actual_data.power_mode>1)
sakthipriya 0:7b4c00e3912f 275
sakthipriya 0:7b4c00e3912f 276 {
sakthipriya 9:194afacf7449 277 if(ACS_STATE == 2) // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:7b4c00e3912f 278 {
sakthipriya 0:7b4c00e3912f 279 FLAG();
sakthipriya 0:7b4c00e3912f 280 printf("\n\r z axis moment only\n");
sakthipriya 9:194afacf7449 281 ACS_STATUS = 2; // set ACS_STATUS = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:7b4c00e3912f 282 // FCTN_ACS_CNTRLALGO(b1, omega1);
sakthipriya 0:7b4c00e3912f 283 moment[0] = 0;
sakthipriya 0:7b4c00e3912f 284 moment[1] = 0;
sakthipriya 0:7b4c00e3912f 285 moment[2] =1.3;// is a dummy value
sakthipriya 0:7b4c00e3912f 286 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:7b4c00e3912f 287 }
sakthipriya 0:7b4c00e3912f 288 else
sakthipriya 0:7b4c00e3912f 289 {
sakthipriya 9:194afacf7449 290 if(ACS_STATE == 3) // check ACS_STATE = ACS_DATA_ACQ_FAILURE
sakthipriya 0:7b4c00e3912f 291 {
sakthipriya 0:7b4c00e3912f 292 FLAG();
sakthipriya 0:7b4c00e3912f 293 printf("\n\r acs data failure ");
sakthipriya 9:194afacf7449 294 ACS_STATUS = 3; // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
sakthipriya 0:7b4c00e3912f 295 PWM1 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 296 PWM2 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 297 PWM3 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 298 }
sakthipriya 0:7b4c00e3912f 299 else
sakthipriya 0:7b4c00e3912f 300 {
sakthipriya 9:194afacf7449 301 if(ACS_STATE == 4) // check ACS_STATE = ACS_NOMINAL_ONLY
sakthipriya 0:7b4c00e3912f 302 {
sakthipriya 0:7b4c00e3912f 303 FLAG();
sakthipriya 0:7b4c00e3912f 304 printf("\n\r nominal");
sakthipriya 9:194afacf7449 305 ACS_STATUS = 4; // set ACS_STATUS = ACS_NOMINAL_ONLY
sakthipriya 6:036d08b62785 306 FCTN_ACS_CNTRLALGO(actual_data.Bvalue_actual,actual_data.AngularSpeed_actual);
sakthipriya 0:7b4c00e3912f 307 printf("\n\r moment values returned by control algo \n");
sakthipriya 0:7b4c00e3912f 308 for(int i=0; i<3; i++)
sakthipriya 0:7b4c00e3912f 309 {
sakthipriya 0:7b4c00e3912f 310 printf("%f\t",moment[i]);
sakthipriya 0:7b4c00e3912f 311 }
sakthipriya 0:7b4c00e3912f 312 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:7b4c00e3912f 313 }
sakthipriya 0:7b4c00e3912f 314 else
sakthipriya 0:7b4c00e3912f 315 {
sakthipriya 9:194afacf7449 316 if(ACS_STATE == 5) // check ACS_STATE = ACS_AUTO_CONTROL
sakthipriya 0:7b4c00e3912f 317 {
sakthipriya 0:7b4c00e3912f 318 FLAG();
sakthipriya 0:7b4c00e3912f 319 printf("\n\r auto control");
sakthipriya 9:194afacf7449 320 ACS_STATUS = 5; // set ACS_STATUS = ACS_AUTO_CONTROL
sakthipriya 0:7b4c00e3912f 321 //FCTN_ACS_AUTOCTRL_LOGIC // gotta include this code
sakthipriya 0:7b4c00e3912f 322 }
sakthipriya 0:7b4c00e3912f 323 else
sakthipriya 0:7b4c00e3912f 324 {
sakthipriya 9:194afacf7449 325 if(ACS_STATE == 6) // check ACS_STATE = ACS_DETUMBLING_ONLY
sakthipriya 0:7b4c00e3912f 326 {
sakthipriya 0:7b4c00e3912f 327 FLAG();
sakthipriya 0:7b4c00e3912f 328 printf("\n\r Entered detumbling \n");
sakthipriya 9:194afacf7449 329 ACS_STATUS = 6; // set ACS_STATUS = ACS_DETUMBLING_ONLY
sakthipriya 6:036d08b62785 330 FCTN_ACS_CNTRLALGO(actual_data.Bvalue_actual,actual_data.AngularSpeed_actual); // detumbling code has to be included
sakthipriya 0:7b4c00e3912f 331 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:7b4c00e3912f 332 }
sakthipriya 0:7b4c00e3912f 333 else
sakthipriya 0:7b4c00e3912f 334 {
sakthipriya 0:7b4c00e3912f 335 FLAG();
sakthipriya 0:7b4c00e3912f 336 printf("\n\r invalid state");
sakthipriya 9:194afacf7449 337 ACS_STATUS = 7 ; // set ACS_STATUS = INVALID STATE
sakthipriya 0:7b4c00e3912f 338 PWM1 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 339 PWM2 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 340 PWM3 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 341 }//else of invalid
sakthipriya 0:7b4c00e3912f 342 }//else of autocontrol
sakthipriya 0:7b4c00e3912f 343 }//else of nominal
sakthipriya 0:7b4c00e3912f 344 }//else of data acg failure
sakthipriya 0:7b4c00e3912f 345
sakthipriya 0:7b4c00e3912f 346 }//else fo z axis moment only
sakthipriya 0:7b4c00e3912f 347 }//if power >2
sakthipriya 0:7b4c00e3912f 348 else
sakthipriya 0:7b4c00e3912f 349 {
sakthipriya 0:7b4c00e3912f 350 FLAG();
sakthipriya 0:7b4c00e3912f 351 printf("\n\r low power");
sakthipriya 9:194afacf7449 352 ACS_STATUS = 1; // set ACS_STATUS = ACS_LOW_POWER
sakthipriya 0:7b4c00e3912f 353 PWM1 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 354 PWM2 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 355 PWM3 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 356 }
sakthipriya 0:7b4c00e3912f 357 } //else for acs control off
lakshya 18:3662058a7c10 358 ///
lakshya 18:3662058a7c10 359 printf("\n\rlow power crossed and pwm no hang");
sakthipriya 9:194afacf7449 360 ACS_MAIN_STATUS = 0; //clear ACS_MAIN_STATUS flag
sakthipriya 3:07e15677a75c 361
sakthipriya 0:7b4c00e3912f 362 }
sakthipriya 0:7b4c00e3912f 363 //***************************************************EPS THREAD***********************************************//
sakthipriya 0:7b4c00e3912f 364
sakthipriya 3:07e15677a75c 365 void F_EPS()
sakthipriya 0:7b4c00e3912f 366 {
sakthipriya 3:07e15677a75c 367
sakthipriya 0:7b4c00e3912f 368 pc.printf("\n\rEntered EPS %f\n",t_start.read());
sakthipriya 9:194afacf7449 369 EPS_MAIN_STATUS = 1; // Set EPS main status
sakthipriya 3:07e15677a75c 370 FCTN_BATT_TEMP_SENSOR_MAIN(actual_data.Batt_temp_actual);
sakthipriya 3:07e15677a75c 371 pc.printf("\n\r Battery temperature %f %f" ,actual_data.Batt_temp_actual[0], actual_data.Batt_temp_actual[1]);
sakthipriya 9:194afacf7449 372 EPS_BATTERY_TEMP_STATUS = 1; //set EPS_BATTERY_TEMP_STATUS
sakthipriya 9:194afacf7449 373 if(EPS_BATTERY_HEAT_ENABLE == 1)
sakthipriya 3:07e15677a75c 374 {
sakthipriya 5:bb592f3185cc 375 if((actual_data.Batt_temp_actual[0] < batt_heat_low) && (actual_data.Batt_temp_actual[1] < batt_heat_low)) // to confirm
sakthipriya 3:07e15677a75c 376 {
sakthipriya 3:07e15677a75c 377 batt_heat = 1; //turn on battery heater
sakthipriya 3:07e15677a75c 378 }
sakthipriya 3:07e15677a75c 379 else
sakthipriya 3:07e15677a75c 380 {
sakthipriya 3:07e15677a75c 381 batt_heat = 0; //turn off battery heater
sakthipriya 3:07e15677a75c 382 }
sakthipriya 3:07e15677a75c 383
sakthipriya 3:07e15677a75c 384 }
sakthipriya 9:194afacf7449 385 else if(EPS_BATTERY_HEAT_ENABLE == 0)
sakthipriya 3:07e15677a75c 386 {
sakthipriya 3:07e15677a75c 387 EPS_STATUS = 1;//EPS_STATUS = EPS_BATTERY_HEATER_DISABLED
sakthipriya 3:07e15677a75c 388 }
sakthipriya 0:7b4c00e3912f 389 FCTN_BATTERYGAUGE_MAIN(actual_data.Batt_gauge_actual);
sakthipriya 1:446a959e36ce 390 if (actual_data.Batt_gauge_actual[1] == 200) //data not received
sakthipriya 0:7b4c00e3912f 391 {
sakthipriya 0:7b4c00e3912f 392 actual_data.power_mode = 1;
sakthipriya 9:194afacf7449 393 EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS
sakthipriya 0:7b4c00e3912f 394
sakthipriya 0:7b4c00e3912f 395 }
sakthipriya 0:7b4c00e3912f 396 else
sakthipriya 0:7b4c00e3912f 397 {
sakthipriya 1:446a959e36ce 398 FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]); //updating power level
sakthipriya 9:194afacf7449 399 EPS_BATTERY_GAUGE_STATUS = 1; //set EPS_BATTERY_GAUGE_STATUS
sakthipriya 0:7b4c00e3912f 400 }
sakthipriya 3:07e15677a75c 401 // if( Temperature data received)
sakthipriya 3:07e15677a75c 402 //{
sakthipriya 3:07e15677a75c 403
sakthipriya 0:7b4c00e3912f 404
sakthipriya 3:07e15677a75c 405 // }
sakthipriya 3:07e15677a75c 406 // else
sakthipriya 3:07e15677a75c 407 // {
sakthipriya 3:07e15677a75c 408 // Set battery temp to XX
sakthipriya 9:194afacf7449 409 // EPS_BATTERY_TEMP_STATUS = 0; //clear EPS_BATTERY_TEMP_STATUS
sakthipriya 3:07e15677a75c 410 // EPS_STATUS = EPS_ERR_BATTERY_TEMP;
sakthipriya 3:07e15677a75c 411 // }
sakthipriya 3:07e15677a75c 412 FCTN_HK_MAIN();
sakthipriya 6:036d08b62785 413 // printf("\n\r here");
sakthipriya 5:bb592f3185cc 414 FCTN_APPEND_HKDATA();
sakthipriya 5:bb592f3185cc 415 minMaxHkData();
sakthipriya 6:036d08b62785 416 //printf("\n\r here");
sakthipriya 9:194afacf7449 417 EPS_MAIN_STATUS = 0; // clear EPS main status
sakthipriya 3:07e15677a75c 418
sakthipriya 0:7b4c00e3912f 419 }
sakthipriya 0:7b4c00e3912f 420
sakthipriya 0:7b4c00e3912f 421 //**************************************************BCN THREAD*******************************************************************//
sakthipriya 0:7b4c00e3912f 422
sakthipriya 3:07e15677a75c 423 void F_BCN()
sakthipriya 0:7b4c00e3912f 424 {
sakthipriya 3:07e15677a75c 425
sakthipriya 0:7b4c00e3912f 426 pc.printf("\n\rEntered BCN %f\n",t_start.read());
sakthipriya 0:7b4c00e3912f 427
Bragadeesh153 12:af1d7e18b868 428 FCTN_BCN_TX_MAIN();
sakthipriya 0:7b4c00e3912f 429
sakthipriya 0:7b4c00e3912f 430 }
sakthipriya 0:7b4c00e3912f 431
sakthipriya 0:7b4c00e3912f 432 //**************************************************TCTM THREAD*******************************************************************//
sakthipriya 0:7b4c00e3912f 433
sakthipriya 0:7b4c00e3912f 434 void T_TC(void const * args)
sakthipriya 0:7b4c00e3912f 435 {
sakthipriya 0:7b4c00e3912f 436 while(1)
sakthipriya 0:7b4c00e3912f 437 {
sakthipriya 0:7b4c00e3912f 438 Thread::signal_wait(0x4);
lakshya 15:e09aaaccf134 439 wait_us(200);
lakshya 15:e09aaaccf134 440 //printf("\n\rreached\n"); // can be between 38 to 15700
sakthipriya 0:7b4c00e3912f 441 if( slave.receive() == 0)
lakshya 15:e09aaaccf134 442 {slave.stop();
lakshya 15:e09aaaccf134 443 //printf("\n\rnot send\n");
lakshya 15:e09aaaccf134 444 }
sakthipriya 0:7b4c00e3912f 445 else if( slave.receive() == 1) // slave writes to master
sakthipriya 0:7b4c00e3912f 446 {
sakthipriya 5:bb592f3185cc 447 if(data_send_flag == 'h')
sakthipriya 6:036d08b62785 448 {
sakthipriya 6:036d08b62785 449 //FCTN_APPEND_HKDATA();
sakthipriya 6:036d08b62785 450 // pc.printf("\n\r here");
sakthipriya 6:036d08b62785 451 write_ack=slave.write(BAE_chardata,74);
Bragadeesh153 13:fb7facaf308b 452 if(write_ack==0)
lakshya 15:e09aaaccf134 453 {irpt_2_mstr = 0;
lakshya 15:e09aaaccf134 454 printf("\n\rgot interrupt\n");
lakshya 15:e09aaaccf134 455 }
sakthipriya 6:036d08b62785 456 }
sakthipriya 5:bb592f3185cc 457 else if(data_send_flag == 't')
sakthipriya 5:bb592f3185cc 458 {
Bragadeesh153 13:fb7facaf308b 459 write_ack=slave.write((char*)telemetry,tm_len);
sakthipriya 5:bb592f3185cc 460 data_send_flag = 'h';
Bragadeesh153 13:fb7facaf308b 461 if(write_ack==0)
Bragadeesh153 13:fb7facaf308b 462 irpt_2_mstr = 0;
sakthipriya 5:bb592f3185cc 463 }
sakthipriya 0:7b4c00e3912f 464 }
sakthipriya 0:7b4c00e3912f 465 else if( slave.receive()==3 || slave.receive()==2) // slave read
sakthipriya 0:7b4c00e3912f 466 {
sakthipriya 5:bb592f3185cc 467 read_ack=slave.read(telecommand,tc_len);
sakthipriya 7:a46a1dee4497 468 t_tc.start();
sakthipriya 6:036d08b62785 469 //pc.printf("\n\rTELECOMMAND received from CDMS is %s \n",telecommand);
sakthipriya 7:a46a1dee4497 470 pc.printf("\n\r Executing Telecommand \n");
sakthipriya 3:07e15677a75c 471 // FCTN_TC_DECODE((uint8_t*) telecommand);
sakthipriya 7:a46a1dee4497 472
Bragadeesh153 13:fb7facaf308b 473 FCTN_BAE_TM_TC((uint8_t*) telecommand);
Bragadeesh153 13:fb7facaf308b 474 //telemetry = (char*)temp;
sakthipriya 7:a46a1dee4497 475
sakthipriya 5:bb592f3185cc 476 FCTN_TM();
sakthipriya 7:a46a1dee4497 477 t_tc.stop();
sakthipriya 7:a46a1dee4497 478 printf("\n\r time taken %d",t_tc.read_us());
sakthipriya 7:a46a1dee4497 479 t_tc.reset();
sakthipriya 3:07e15677a75c 480 // for(int i = 0; i<134; i++)
sakthipriya 3:07e15677a75c 481 //pc.printf("%c", telemetry[i]);
sakthipriya 0:7b4c00e3912f 482 }
sakthipriya 0:7b4c00e3912f 483
sakthipriya 6:036d08b62785 484
sakthipriya 0:7b4c00e3912f 485 }
sakthipriya 0:7b4c00e3912f 486 }
sakthipriya 0:7b4c00e3912f 487
sakthipriya 0:7b4c00e3912f 488 void FCTN_TM()
sakthipriya 0:7b4c00e3912f 489 {
sakthipriya 4:39a4ae8c7ecd 490 //irpt_2_mstr = 0;
sakthipriya 5:bb592f3185cc 491 data_send_flag = 't';
sakthipriya 0:7b4c00e3912f 492 pc.printf("\n\r Telemetry Generation \n");
sakthipriya 0:7b4c00e3912f 493 irpt_2_mstr = 1;
sakthipriya 0:7b4c00e3912f 494 }
sakthipriya 0:7b4c00e3912f 495
sakthipriya 0:7b4c00e3912f 496
sakthipriya 0:7b4c00e3912f 497 //******************************************************* I2C *******************************************************************//
sakthipriya 0:7b4c00e3912f 498
sakthipriya 0:7b4c00e3912f 499 void FCTN_I2C_ISR()
sakthipriya 0:7b4c00e3912f 500 {
sakthipriya 0:7b4c00e3912f 501 ptr_t_i2c->signal_set(0x4);
sakthipriya 0:7b4c00e3912f 502 }
sakthipriya 0:7b4c00e3912f 503
sakthipriya 0:7b4c00e3912f 504
sakthipriya 5:bb592f3185cc 505 //***********************************************************FAULTS***************************************************************//
sakthipriya 5:bb592f3185cc 506 /*void ir1clear()
sakthipriya 5:bb592f3185cc 507 {
sakthipriya 5:bb592f3185cc 508 actual_data.faultIr_status |= 0x01; // alert
sakthipriya 5:bb592f3185cc 509
sakthipriya 5:bb592f3185cc 510 }*/
sakthipriya 5:bb592f3185cc 511
sakthipriya 5:bb592f3185cc 512
sakthipriya 5:bb592f3185cc 513
sakthipriya 5:bb592f3185cc 514 void ir2clear()
sakthipriya 5:bb592f3185cc 515 {
sakthipriya 5:bb592f3185cc 516 actual_data.faultIr_status |= 0x02;
Bragadeesh153 13:fb7facaf308b 517 TRXY_SW = 0; // Switch off TR XY
sakthipriya 5:bb592f3185cc 518 if1check = 1;
sakthipriya 5:bb592f3185cc 519 }
sakthipriya 5:bb592f3185cc 520
sakthipriya 5:bb592f3185cc 521 void ir3clear()
sakthipriya 5:bb592f3185cc 522 {
sakthipriya 5:bb592f3185cc 523 actual_data.faultIr_status |= 0x04;
Bragadeesh153 13:fb7facaf308b 524 DRV_Z_EN = 0;
sakthipriya 5:bb592f3185cc 525 wait_us(1);
Bragadeesh153 13:fb7facaf308b 526 DRV_Z_EN = 1;
sakthipriya 5:bb592f3185cc 527
sakthipriya 5:bb592f3185cc 528 }
sakthipriya 5:bb592f3185cc 529
sakthipriya 5:bb592f3185cc 530 void ir4clear()
sakthipriya 5:bb592f3185cc 531 {
sakthipriya 5:bb592f3185cc 532 if2check = 1;
sakthipriya 5:bb592f3185cc 533 actual_data.faultIr_status |= 0x08;
sakthipriya 5:bb592f3185cc 534 TRZ_SW = 0;
sakthipriya 5:bb592f3185cc 535 }
sakthipriya 5:bb592f3185cc 536
sakthipriya 5:bb592f3185cc 537 void ir5clear()
sakthipriya 5:bb592f3185cc 538 {
sakthipriya 5:bb592f3185cc 539 actual_data.faultIr_status |= 0x10;
sakthipriya 5:bb592f3185cc 540 CDMS_RESET = 0;
sakthipriya 5:bb592f3185cc 541 wait_us(1);
sakthipriya 5:bb592f3185cc 542 CDMS_RESET = 1;
sakthipriya 5:bb592f3185cc 543 }
sakthipriya 5:bb592f3185cc 544
sakthipriya 5:bb592f3185cc 545 void ir6clear()
sakthipriya 5:bb592f3185cc 546 {
sakthipriya 5:bb592f3185cc 547 actual_data.faultIr_status |= 0x20;
sakthipriya 5:bb592f3185cc 548 BCN_SW = 0;
sakthipriya 5:bb592f3185cc 549 wait_us(1);
sakthipriya 5:bb592f3185cc 550 BCN_SW = 1;
sakthipriya 5:bb592f3185cc 551 }
sakthipriya 5:bb592f3185cc 552
sakthipriya 5:bb592f3185cc 553 void ir7clear()
sakthipriya 5:bb592f3185cc 554 {
sakthipriya 5:bb592f3185cc 555 actual_data.faultIr_status |= 0x40;
sakthipriya 5:bb592f3185cc 556 }
sakthipriya 5:bb592f3185cc 557 uint8_t iter2=0,iter4 = 0;
sakthipriya 5:bb592f3185cc 558
sakthipriya 5:bb592f3185cc 559
sakthipriya 5:bb592f3185cc 560
sakthipriya 5:bb592f3185cc 561 void pollfault()
sakthipriya 5:bb592f3185cc 562 {
sakthipriya 5:bb592f3185cc 563
sakthipriya 5:bb592f3185cc 564
sakthipriya 5:bb592f3185cc 565
sakthipriya 5:bb592f3185cc 566 if (pf1==0) // OC_ATS1
sakthipriya 5:bb592f3185cc 567 {
sakthipriya 5:bb592f3185cc 568 pf1check=1;
sakthipriya 5:bb592f3185cc 569 actual_data.faultPoll_status |=0x01 ;
sakthipriya 9:194afacf7449 570 ATS1_SW_ENABLE = 1; // turn off ats1 // to be turned on next cycle in ACS
sakthipriya 5:bb592f3185cc 571 }
sakthipriya 5:bb592f3185cc 572 else actual_data.faultPoll_status &= 0xFE;
sakthipriya 5:bb592f3185cc 573
sakthipriya 5:bb592f3185cc 574 if (pf2==0)
sakthipriya 5:bb592f3185cc 575 {
sakthipriya 5:bb592f3185cc 576 pf2check=1;
sakthipriya 5:bb592f3185cc 577 actual_data.faultPoll_status |=0x02 ;
sakthipriya 9:194afacf7449 578 ATS2_SW_ENABLE = 1; // turn off ats2 // turn on in ACS
sakthipriya 5:bb592f3185cc 579 }
sakthipriya 5:bb592f3185cc 580 else actual_data.faultPoll_status &= 0xFD;
sakthipriya 5:bb592f3185cc 581
sakthipriya 5:bb592f3185cc 582 if (pf3==0)
sakthipriya 5:bb592f3185cc 583 { actual_data.faultPoll_status |=0x04 ;
Bragadeesh153 13:fb7facaf308b 584 DRV_XY_EN = 0;
sakthipriya 5:bb592f3185cc 585 wait_us(1);
Bragadeesh153 13:fb7facaf308b 586 DRV_XY_EN = 1;
sakthipriya 5:bb592f3185cc 587 }
sakthipriya 5:bb592f3185cc 588 else actual_data.faultPoll_status &= 0xFB;
sakthipriya 5:bb592f3185cc 589
sakthipriya 5:bb592f3185cc 590
sakthipriya 5:bb592f3185cc 591
sakthipriya 5:bb592f3185cc 592
sakthipriya 5:bb592f3185cc 593 /*if (ir1==1)
sakthipriya 5:bb592f3185cc 594 {
sakthipriya 5:bb592f3185cc 595 actual_data.faultIr_status &=0xFE;
sakthipriya 5:bb592f3185cc 596 }*/
lakshya 14:a9588f443f1a 597
sakthipriya 5:bb592f3185cc 598 if (ir2==1)
sakthipriya 5:bb592f3185cc 599 {
sakthipriya 5:bb592f3185cc 600 actual_data.faultIr_status &=0xFD;
sakthipriya 5:bb592f3185cc 601 }
sakthipriya 5:bb592f3185cc 602 if (ir3==1)
sakthipriya 5:bb592f3185cc 603 {
sakthipriya 5:bb592f3185cc 604 actual_data.faultIr_status &=0xFB;
sakthipriya 5:bb592f3185cc 605 }
sakthipriya 5:bb592f3185cc 606 if (ir4==1)
sakthipriya 5:bb592f3185cc 607 {
sakthipriya 5:bb592f3185cc 608 actual_data.faultIr_status &=0xF7;
sakthipriya 5:bb592f3185cc 609 }
sakthipriya 5:bb592f3185cc 610 if (ir5==1)
sakthipriya 5:bb592f3185cc 611 {
sakthipriya 5:bb592f3185cc 612 actual_data.faultIr_status &=0xEF;
sakthipriya 5:bb592f3185cc 613 }
sakthipriya 5:bb592f3185cc 614 if (ir6==1)
sakthipriya 5:bb592f3185cc 615 {
sakthipriya 5:bb592f3185cc 616 actual_data.faultIr_status &=0xDF;
sakthipriya 5:bb592f3185cc 617 }if (ir7==1)
sakthipriya 5:bb592f3185cc 618 {
sakthipriya 5:bb592f3185cc 619 actual_data.faultIr_status &=0xBF;
sakthipriya 5:bb592f3185cc 620 }
lakshya 14:a9588f443f1a 621
sakthipriya 5:bb592f3185cc 622
sakthipriya 5:bb592f3185cc 623 }
sakthipriya 5:bb592f3185cc 624
sakthipriya 5:bb592f3185cc 625
sakthipriya 0:7b4c00e3912f 626 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7b4c00e3912f 627 //SCHEDULER
sakthipriya 0:7b4c00e3912f 628 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7b4c00e3912f 629 uint8_t schedcount=1;
sakthipriya 0:7b4c00e3912f 630 void T_SC(void const *args)
sakthipriya 0:7b4c00e3912f 631 {
sakthipriya 0:7b4c00e3912f 632 printf("\n\r in scheduler");
sakthipriya 0:7b4c00e3912f 633
sakthipriya 0:7b4c00e3912f 634 if(schedcount == 7) //to reset the counter
sakthipriya 0:7b4c00e3912f 635 {
sakthipriya 0:7b4c00e3912f 636 schedcount = 1;
sakthipriya 0:7b4c00e3912f 637 }
sakthipriya 0:7b4c00e3912f 638 if(schedcount%1==0)
lakshya 14:a9588f443f1a 639 { pc.printf("\nSTATE IS !!!!!! = %x !!\n",ACS_STATE);
lakshya 14:a9588f443f1a 640 pc.printf("\niterp1 !!!!!! = %x !!\n",iterP1);
lakshya 14:a9588f443f1a 641 pc.printf("\niteri2 IS !!!!!! = %x !!\n",iterI2);
lakshya 14:a9588f443f1a 642 F_ACS();
sakthipriya 0:7b4c00e3912f 643 }
sakthipriya 0:7b4c00e3912f 644
sakthipriya 0:7b4c00e3912f 645 if(schedcount%2==0)
sakthipriya 0:7b4c00e3912f 646 {
lakshya 18:3662058a7c10 647 printf("\n\rreached scheduler part2 ");
lakshya 18:3662058a7c10 648 //F_EPS();
lakshya 18:3662058a7c10 649 //F_BCN();
sakthipriya 0:7b4c00e3912f 650 }
lakshya 18:3662058a7c10 651 printf("\n\rexited scheduler part2 ");
lakshya 16:f9e484dc505e 652 if(schedcount%3==0)
lakshya 18:3662058a7c10 653 {
lakshya 18:3662058a7c10 654 printf("\n\rreached scheduler part3 ");
lakshya 18:3662058a7c10 655 //F_ACS();
lakshya 18:3662058a7c10 656 F_BCN();
sakthipriya 0:7b4c00e3912f 657 }
sakthipriya 0:7b4c00e3912f 658 schedcount++;
lakshya 18:3662058a7c10 659 //t_start.start();
lakshya 18:3662058a7c10 660 printf("\n\r did increment %d",schedcount);
lakshya 18:3662058a7c10 661 printf("\n\r ex h");
lakshya 18:3662058a7c10 662 printf("\n\r time taken %f",t_start.read());
sakthipriya 0:7b4c00e3912f 663 }
sakthipriya 0:7b4c00e3912f 664
sakthipriya 0:7b4c00e3912f 665 Timer t_flag;
sakthipriya 0:7b4c00e3912f 666 void FLAG()
sakthipriya 0:7b4c00e3912f 667 {
sakthipriya 0:7b4c00e3912f 668
sakthipriya 0:7b4c00e3912f 669 //.............acs..................//
sakthipriya 9:194afacf7449 670 if(ACS_INIT_STATUS == 1)
sakthipriya 0:7b4c00e3912f 671 BAE_STATUS = BAE_STATUS | 0x00000080; //set ACS_INIT_STATUS flag
sakthipriya 9:194afacf7449 672 else if(ACS_INIT_STATUS == 0)
sakthipriya 0:7b4c00e3912f 673 BAE_STATUS &= 0xFFFFFF7F; //clear ACS_INIT_STATUS flag
sakthipriya 0:7b4c00e3912f 674
sakthipriya 9:194afacf7449 675 if(ACS_DATA_ACQ_STATUS == 1)
sakthipriya 0:7b4c00e3912f 676 BAE_STATUS =BAE_STATUS | 0x00000100; //set ACS_DATA_ACQ_STATUS flag
sakthipriya 9:194afacf7449 677 else if(ACS_DATA_ACQ_STATUS == 0)
sakthipriya 0:7b4c00e3912f 678 BAE_STATUS &= 0xFFFFFEFF; //clear ACS_DATA_ACQ_STATUS flag
sakthipriya 0:7b4c00e3912f 679
sakthipriya 9:194afacf7449 680 if(ACS_ATS_ENABLE == 1)
sakthipriya 0:7b4c00e3912f 681 BAE_ENABLE |= 0x00000004;
sakthipriya 9:194afacf7449 682 else if(ACS_ATS_ENABLE == 0)
sakthipriya 0:7b4c00e3912f 683 BAE_ENABLE = BAE_ENABLE &0xFFFFFFFB | 0x00000004;
sakthipriya 0:7b4c00e3912f 684
sakthipriya 0:7b4c00e3912f 685 if(ACS_DATA_ACQ_STATUS == 'f')
sakthipriya 0:7b4c00e3912f 686 BAE_STATUS |= 0x00000200;
sakthipriya 0:7b4c00e3912f 687
sakthipriya 9:194afacf7449 688 if(ACS_MAIN_STATUS == 1)
sakthipriya 0:7b4c00e3912f 689 BAE_STATUS = (BAE_STATUS | 0x00001000); //set ACS_MAIN_STATUS flag
sakthipriya 9:194afacf7449 690 else if(ACS_MAIN_STATUS == 0)
sakthipriya 0:7b4c00e3912f 691 BAE_STATUS &= 0xFFFFEFFF; //clear ACS_MAIN_STATUS flag
sakthipriya 0:7b4c00e3912f 692
sakthipriya 0:7b4c00e3912f 693 if(ACS_STATUS == '0')
sakthipriya 0:7b4c00e3912f 694 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF); // set ACS_STATUS = ACS_CONTROL_OFF
sakthipriya 0:7b4c00e3912f 695 else if(ACS_STATUS == '1')
sakthipriya 0:7b4c00e3912f 696 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x00002000; // set ACS_STATUS = ACS_LOW_POWER
sakthipriya 0:7b4c00e3912f 697 else if(ACS_STATUS == '2')
sakthipriya 0:7b4c00e3912f 698 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF)| 0x00004000; // set ACS_STATUS = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:7b4c00e3912f 699 else if(ACS_STATUS == '3')
sakthipriya 0:7b4c00e3912f 700 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF) | 0x00006000; // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
sakthipriya 0:7b4c00e3912f 701 else if(ACS_STATUS == '4')
sakthipriya 0:7b4c00e3912f 702 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF) | 0x00008000; // set ACS_STATUS = ACS_NOMINAL_ONLY
sakthipriya 0:7b4c00e3912f 703 else if(ACS_STATUS == '5')
sakthipriya 0:7b4c00e3912f 704 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000A000; // set ACS_STATUS = ACS_AUTO_CONTROL
sakthipriya 0:7b4c00e3912f 705 else if(ACS_STATUS == '6')
sakthipriya 0:7b4c00e3912f 706 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000C000; // set ACS_STATUS = ACS_DETUMBLING_ONLY
sakthipriya 0:7b4c00e3912f 707 else
sakthipriya 0:7b4c00e3912f 708 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000E000; // set ACS_STATUS = INVALID STATE
sakthipriya 0:7b4c00e3912f 709
sakthipriya 0:7b4c00e3912f 710 if(ACS_STATE == '0')
sakthipriya 0:7b4c00e3912f 711 BAE_ENABLE = (BAE_ENABLE & 0xFFFFFF8F); //ACS_STATE = ACS_CONTROL_OFF
sakthipriya 0:7b4c00e3912f 712 else if(ACS_STATE == '2')
sakthipriya 0:7b4c00e3912f 713 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000020); // ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:7b4c00e3912f 714 else if(ACS_STATE == '3')
sakthipriya 0:7b4c00e3912f 715 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000030); // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
sakthipriya 0:7b4c00e3912f 716 else if(ACS_STATE == '4')
sakthipriya 0:7b4c00e3912f 717 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000040); // ACS_STATE = ACS_NOMINAL_ONLY
sakthipriya 0:7b4c00e3912f 718 else if(ACS_STATE == '5')
sakthipriya 0:7b4c00e3912f 719 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000050); // ACS_STATE = ACS_AUTO_CONTROL
sakthipriya 0:7b4c00e3912f 720 else if(ACS_STATE == '6')
sakthipriya 0:7b4c00e3912f 721 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000060); //ACS_STATE = ACS_DETUMBLING_CONTROL
sakthipriya 0:7b4c00e3912f 722
sakthipriya 0:7b4c00e3912f 723 //...............eps......................//
sakthipriya 5:bb592f3185cc 724
sakthipriya 5:bb592f3185cc 725
sakthipriya 9:194afacf7449 726 if (EPS_INIT_STATUS==1) // Set EPS_INIT_STATUS
sakthipriya 5:bb592f3185cc 727 BAE_STATUS |= 0x00010000;
sakthipriya 9:194afacf7449 728 else if(EPS_INIT_STATUS==0) // Clear
sakthipriya 5:bb592f3185cc 729 BAE_STATUS &= 0xFFFEFFFF;
sakthipriya 5:bb592f3185cc 730
sakthipriya 5:bb592f3185cc 731
sakthipriya 9:194afacf7449 732 if (EPS_MAIN_STATUS==1) // Set EPS_MAIIN_STATUS
sakthipriya 5:bb592f3185cc 733 BAE_STATUS |= 0x00040000;
sakthipriya 9:194afacf7449 734 else if(EPS_MAIN_STATUS==0) // Clear
sakthipriya 5:bb592f3185cc 735 BAE_STATUS &= 0xFFFBFFFF;
sakthipriya 5:bb592f3185cc 736
sakthipriya 5:bb592f3185cc 737
sakthipriya 9:194afacf7449 738 if (EPS_BATTERY_GAUGE_STATUS==1) // Set EPS_BATTERY_GAUGE_STATUS
sakthipriya 5:bb592f3185cc 739 BAE_STATUS |= 0x00020000;
sakthipriya 9:194afacf7449 740 else if(EPS_BATTERY_GAUGE_STATUS==0) // Clear
sakthipriya 5:bb592f3185cc 741 BAE_STATUS &= 0xFFFDFFFF;
sakthipriya 5:bb592f3185cc 742
sakthipriya 5:bb592f3185cc 743
sakthipriya 9:194afacf7449 744 if (EPS_BATTERY_TEMP_STATUS==1) // Set EPS_BATTERY_TEMP_STATUS
sakthipriya 5:bb592f3185cc 745 BAE_STATUS |= 0x00080000;
sakthipriya 9:194afacf7449 746 else if(EPS_BATTERY_TEMP_STATUS==0) // Clear
sakthipriya 5:bb592f3185cc 747 BAE_STATUS &= 0xFFF7FFFF;
sakthipriya 5:bb592f3185cc 748
sakthipriya 5:bb592f3185cc 749 if (EPS_STATUS==0)
sakthipriya 5:bb592f3185cc 750 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF); // Set EPS_ERR_BATTERY_TEMP
sakthipriya 5:bb592f3185cc 751 else if (EPS_STATUS==1)
sakthipriya 5:bb592f3185cc 752 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00010000; // Set EPS_BATTERY_HEATER_DISABLED
sakthipriya 5:bb592f3185cc 753 else if (EPS_STATUS==2)
sakthipriya 5:bb592f3185cc 754 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00020000; // Set EPS_ERR_HEATER_SWITCH_OFF
sakthipriya 5:bb592f3185cc 755 else if (EPS_STATUS==3)
sakthipriya 5:bb592f3185cc 756 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00030000; // Set EPS_ERR_HEATER_SWITCH_ON
sakthipriya 5:bb592f3185cc 757 else if (EPS_STATUS==4)
sakthipriya 5:bb592f3185cc 758 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00040000; // Set EPS_BATTERY_HEATER_OFF
sakthipriya 5:bb592f3185cc 759 else if (EPS_STATUS==5)
sakthipriya 5:bb592f3185cc 760 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00050000; // Set EPS_BATTERY_HEATER_ON
sakthipriya 5:bb592f3185cc 761
sakthipriya 5:bb592f3185cc 762
sakthipriya 9:194afacf7449 763 if(EPS_BATTERY_HEAT_ENABLE == 1)
sakthipriya 5:bb592f3185cc 764 BAE_ENABLE |= 0x00000080;
sakthipriya 9:194afacf7449 765 else if(EPS_BATTERY_HEAT_ENABLE == 0)
sakthipriya 5:bb592f3185cc 766 BAE_ENABLE = BAE_ENABLE &0xFFFFFF7;
sakthipriya 3:07e15677a75c 767
sakthipriya 0:7b4c00e3912f 768
sakthipriya 0:7b4c00e3912f 769
sakthipriya 0:7b4c00e3912f 770 pc.printf("\n\r BAE status %x BAE ENABLE %x ",BAE_STATUS,BAE_ENABLE);
sakthipriya 0:7b4c00e3912f 771 }
sakthipriya 0:7b4c00e3912f 772
sakthipriya 0:7b4c00e3912f 773 void FCTN_BAE_INIT()
sakthipriya 0:7b4c00e3912f 774 {
lakshya 16:f9e484dc505e 775 printf("\n\r Initialising BAE _________________________________________________________________________________");
sakthipriya 3:07e15677a75c 776 //..........intial status....//
Bragadeesh153 13:fb7facaf308b 777 ACS_STATE = 4;
sakthipriya 9:194afacf7449 778 ACS_ATS_ENABLE = 1;
sakthipriya 9:194afacf7449 779 ACS_DATA_ACQ_ENABLE = 1;
sakthipriya 9:194afacf7449 780 EPS_BATTERY_HEAT_ENABLE = 1;
Bragadeesh153 13:fb7facaf308b 781 actual_data.power_mode=3;
sakthipriya 9:194afacf7449 782 //............intializing pins................//
sakthipriya 9:194afacf7449 783 ATS1_SW_ENABLE = 0;
sakthipriya 9:194afacf7449 784 ATS2_SW_ENABLE = 1;
Bragadeesh153 13:fb7facaf308b 785
Bragadeesh153 13:fb7facaf308b 786 DRV_XY_EN = 1;
Bragadeesh153 13:fb7facaf308b 787 DRV_Z_EN = 1;
Bragadeesh153 13:fb7facaf308b 788 TRZ_SW = 1;
Bragadeesh153 13:fb7facaf308b 789 TRXY_SW = 1;
sakthipriya 9:194afacf7449 790
sakthipriya 3:07e15677a75c 791 //............................//
sakthipriya 3:07e15677a75c 792 FCTN_ACS_INIT();
lakshya 17:fc782f7548c6 793 FCTN_EPS_INIT();
lakshya 18:3662058a7c10 794 FCTN_BCN_INIT();
sakthipriya 3:07e15677a75c 795
sakthipriya 3:07e15677a75c 796
sakthipriya 0:7b4c00e3912f 797 FLAG();
sakthipriya 0:7b4c00e3912f 798 }
sakthipriya 0:7b4c00e3912f 799
sakthipriya 0:7b4c00e3912f 800 int main()
sakthipriya 0:7b4c00e3912f 801 {
sakthipriya 0:7b4c00e3912f 802 pc.printf("\n\r BAE Activated. Testing Version 1.1 \n");
Bragadeesh153 13:fb7facaf308b 803 CDMS_RESET = 1;
lakshya 14:a9588f443f1a 804 /*if (BCN_FEN == 0) //dummy implementation
sakthipriya 0:7b4c00e3912f 805 {
sakthipriya 0:7b4c00e3912f 806 pc.printf("\n\r RF silence ");
Bragadeesh153 12:af1d7e18b868 807 FCTN_BCN_FEN();
sakthipriya 0:7b4c00e3912f 808 t_rfsilence.start();//Start the timer for RF_Silence
sakthipriya 0:7b4c00e3912f 809 while(t_rfsilence.read() < RF_SILENCE_TIME);
sakthipriya 0:7b4c00e3912f 810 }
sakthipriya 0:7b4c00e3912f 811 */
sakthipriya 3:07e15677a75c 812
sakthipriya 9:194afacf7449 813 //ACS_INIT_STATUS = 0;
sakthipriya 9:194afacf7449 814 //ACS_DATA_ACQ_STATUS = 0;
Bragadeesh153 13:fb7facaf308b 815
Bragadeesh153 13:fb7facaf308b 816
sakthipriya 9:194afacf7449 817
Bragadeesh153 13:fb7facaf308b 818 //FLAG();
sakthipriya 0:7b4c00e3912f 819 FCTN_BAE_INIT();
sakthipriya 3:07e15677a75c 820
sakthipriya 0:7b4c00e3912f 821
sakthipriya 0:7b4c00e3912f 822 //...i2c..
sakthipriya 3:07e15677a75c 823 //strcpy(telemetry,"This is telemetry THis is sample telemetry. ffffffffffffffffffffffffffffff end");
sakthipriya 0:7b4c00e3912f 824 slave.address(addr);
sakthipriya 0:7b4c00e3912f 825 irpt_2_mstr = 0;
sakthipriya 0:7b4c00e3912f 826
sakthipriya 0:7b4c00e3912f 827 ptr_t_i2c = new Thread(T_TC);
sakthipriya 0:7b4c00e3912f 828 ptr_t_i2c->set_priority(osPriorityHigh);
sakthipriya 5:bb592f3185cc 829
sakthipriya 0:7b4c00e3912f 830 irpt_4m_mstr.enable_irq();
sakthipriya 0:7b4c00e3912f 831 irpt_4m_mstr.rise(&FCTN_I2C_ISR);
sakthipriya 5:bb592f3185cc 832 // ir1.fall(&ir1clear); //Battery Gauge - Alert Bar Signal
lakshya 14:a9588f443f1a 833 /* ir2.fall(&ir2clear); //TRXY Driver TR switch Fault
lakshya 14:a9588f443f1a 834 ir3.fall(&ir3clear); //TRZ Driver Fault Bar
lakshya 14:a9588f443f1a 835 ir4.fall(&ir4clear); //TRZ Driver TR switch Fault
lakshya 14:a9588f443f1a 836 ir5.fall(&ir5clear); //CDMS - Switch Fault
lakshya 14:a9588f443f1a 837 ir6.fall(&ir6clear); //Beacon- Switch OC bar
lakshya 14:a9588f443f1a 838 ir7.fall(&ir7clear); //Charger IC - Fault Bar
lakshya 14:a9588f443f1a 839
lakshya 14:a9588f443f1a 840 */
sakthipriya 0:7b4c00e3912f 841 RtosTimer t_sc_timer(T_SC,osTimerPeriodic); // Initiating the scheduler thread
sakthipriya 0:7b4c00e3912f 842 t_sc_timer.start(10000);
sakthipriya 0:7b4c00e3912f 843 t_start.start();
sakthipriya 0:7b4c00e3912f 844 pc.printf("\n\rStarted scheduler %f\n\r",t_start.read());
sakthipriya 0:7b4c00e3912f 845
lakshya 18:3662058a7c10 846
lakshya 18:3662058a7c10 847 RtosTimer bcn_start_timer(FCTN_BCN_FEN,osTimerOnce);
lakshya 18:3662058a7c10 848 /*later change it to 30 min 1800 seconds*/
lakshya 18:3662058a7c10 849 bcn_start_timer.start(10000);
lakshya 18:3662058a7c10 850
lakshya 18:3662058a7c10 851 /*for calling bcn_fen function after 30 min as of now say 40 sec*/
lakshya 18:3662058a7c10 852 /*but it will be called again and again */
lakshya 18:3662058a7c10 853
lakshya 18:3662058a7c10 854 /// even this doesn't work if(t_start.read()>38 && t_start.read()<43)
lakshya 18:3662058a7c10 855 /// if(BCN_FEN==0)
lakshya 18:3662058a7c10 856 /// {
lakshya 18:3662058a7c10 857 /// FCTN_BCN_FEN();
lakshya 18:3662058a7c10 858 /// printf("\n\r entered the condition \n");
lakshya 18:3662058a7c10 859 /// }
lakshya 18:3662058a7c10 860
lakshya 18:3662058a7c10 861 // it won't work timeout_bcn.attach(&FCTN_BCN_FEN,42.0);
Bragadeesh153 13:fb7facaf308b 862
sakthipriya 0:7b4c00e3912f 863 //FCTN_BAE_INIT();
sakthipriya 0:7b4c00e3912f 864 while(1); //required to prevent main from terminating
sakthipriya 3:07e15677a75c 865 }
sakthipriya 3:07e15677a75c 866