I2C BAE standalone hardware testing

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of ACS_Flowchart_BAE_1 by Team Fox

Committer:
prasanthbj05
Date:
Mon Jul 04 17:46:48 2016 +0000
Revision:
18:95f0cc565ee3
Parent:
17:8a8024c45dc0
Child:
19:95ba0ed3370c
BAE I2C standalone latest

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
prasanthbj05 18:95f0cc565ee3 9 //#include "crc.h"
prasanthbj05 18:95f0cc565ee3 10 //namespace CRC{
prasanthbj05 18:95f0cc565ee3 11 // };
prasanthbj05 18:95f0cc565ee3 12 #define TOPBIT16 (1 << 15)
prasanthbj05 18:95f0cc565ee3 13 #define TOPBIT8 (1 << 7)
prasanthbj05 18:95f0cc565ee3 14 #define POLYNOMIAL16 0x1021
prasanthbj05 18:95f0cc565ee3 15 #define POLYNOMIAL8 0xEA
prasanthbj05 18:95f0cc565ee3 16
Bragadeesh153 13:fb7facaf308b 17 #define tm_len 135
Bragadeesh153 13:fb7facaf308b 18 #define tc_len 11
sakthipriya 0:7b4c00e3912f 19 #define batt_heat_low 20
prasanthbj05 18:95f0cc565ee3 20
prasanthbj05 18:95f0cc565ee3 21 //temporary definitions
prasanthbj05 17:8a8024c45dc0 22 #define PRINT 1
prasanthbj05 18:95f0cc565ee3 23 #define PRINT2 1
prasanthbj05 18:95f0cc565ee3 24 //DigitalOut temp_irpt(PIN88);
sakthipriya 9:194afacf7449 25
sakthipriya 0:7b4c00e3912f 26 //***************************************************** flags *************************************************************//
sakthipriya 0:7b4c00e3912f 27 uint32_t BAE_STATUS = 0x00000000;
sakthipriya 0:7b4c00e3912f 28 uint32_t BAE_ENABLE = 0xFFFFFFFF;
sakthipriya 0:7b4c00e3912f 29
sakthipriya 5:bb592f3185cc 30 //i2c//
sakthipriya 5:bb592f3185cc 31 char data_send_flag = 'h';
sakthipriya 5:bb592f3185cc 32
sakthipriya 0:7b4c00e3912f 33 //.........acs...............//
sakthipriya 9:194afacf7449 34 /* char ACS_INIT_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 35 char ACS_DATA_ACQ_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 36 char ACS_ATS_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 37 char ACS_MAIN_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 38 char ACS_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 39
sakthipriya 0:7b4c00e3912f 40 char ACS_ATS_ENABLE = 'q';
sakthipriya 0:7b4c00e3912f 41 char ACS_DATA_ACQ_ENABLE = 'q';
sakthipriya 9:194afacf7449 42 char ACS_STATE = 'q';*/
sakthipriya 9:194afacf7449 43
sakthipriya 9:194afacf7449 44 uint8_t ACS_INIT_STATUS = 0;
sakthipriya 9:194afacf7449 45 uint8_t ACS_DATA_ACQ_STATUS = 0;
Bragadeesh153 16:cc77770d787f 46 uint8_t ACS_ATS_STATUS = 0x60;
sakthipriya 9:194afacf7449 47 uint8_t ACS_MAIN_STATUS = 0;
sakthipriya 9:194afacf7449 48 uint8_t ACS_STATUS = 0;
sakthipriya 9:194afacf7449 49
sakthipriya 9:194afacf7449 50 uint8_t ACS_ATS_ENABLE = 1;
sakthipriya 9:194afacf7449 51 uint8_t ACS_DATA_ACQ_ENABLE = 1;
sakthipriya 9:194afacf7449 52 uint8_t ACS_STATE = 4;
sakthipriya 0:7b4c00e3912f 53
sakthipriya 0:7b4c00e3912f 54 //.....................eps...................//
sakthipriya 0:7b4c00e3912f 55 //eps init
sakthipriya 9:194afacf7449 56 /*char EPS_INIT_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 57 char EPS_BATTERY_GAUGE_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 58 //eps main
sakthipriya 0:7b4c00e3912f 59 char EPS_MAIN_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 60 char EPS_BATTERY_TEMP_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 61 char EPS_STATUS = 'q';
sakthipriya 0:7b4c00e3912f 62
sakthipriya 0:7b4c00e3912f 63 char EPS_BATTERY_HEAT_ENABLE = 'q';
sakthipriya 9:194afacf7449 64 */
sakthipriya 9:194afacf7449 65
sakthipriya 9:194afacf7449 66 uint8_t EPS_INIT_STATUS = 0;
sakthipriya 9:194afacf7449 67 uint8_t EPS_BATTERY_GAUGE_STATUS = 0;
sakthipriya 9:194afacf7449 68 //eps main
sakthipriya 9:194afacf7449 69 uint8_t EPS_MAIN_STATUS = 0;
sakthipriya 9:194afacf7449 70 uint8_t EPS_BATTERY_TEMP_STATUS = 0;
sakthipriya 9:194afacf7449 71 uint8_t EPS_STATUS = 7; //invalid status
sakthipriya 9:194afacf7449 72
sakthipriya 9:194afacf7449 73 uint8_t EPS_BATTERY_HEAT_ENABLE = 0;
sakthipriya 0:7b4c00e3912f 74
sakthipriya 0:7b4c00e3912f 75 //.......................global variables..................................................................// new hk structure- everything has to changed based on this
sakthipriya 6:036d08b62785 76 uint8_t BAE_data[74];
prasanthbj05 18:95f0cc565ee3 77 uint8_t BAE_chardata[74];
sakthipriya 0:7b4c00e3912f 78
sakthipriya 0:7b4c00e3912f 79 //*************************************Global declarations************************************************//
sakthipriya 0:7b4c00e3912f 80 const int addr = 0x20; //slave address
sakthipriya 0:7b4c00e3912f 81
sakthipriya 0:7b4c00e3912f 82 Timer t_rfsilence;
sakthipriya 0:7b4c00e3912f 83 Timer t_start;
sakthipriya 7:a46a1dee4497 84 Timer t_tc;
sakthipriya 7:a46a1dee4497 85 Timer t_tm;
prasanthbj05 17:8a8024c45dc0 86 Timer synch;
sakthipriya 0:7b4c00e3912f 87 Serial pc(USBTX, USBRX);
sakthipriya 0:7b4c00e3912f 88 int power_flag_dummy=2;
sakthipriya 0:7b4c00e3912f 89 float data[6];
sakthipriya 0:7b4c00e3912f 90
sakthipriya 0:7b4c00e3912f 91 extern float moment[3];
sakthipriya 0:7b4c00e3912f 92 extern uint8_t BCN_FEN;
sakthipriya 1:446a959e36ce 93 extern BAE_HK_actual actual_data;
sakthipriya 1:446a959e36ce 94 extern BAE_HK_quant quant_data;
sakthipriya 1:446a959e36ce 95 extern BAE_HK_min_max bae_HK_minmax;
sakthipriya 1:446a959e36ce 96 extern BAE_HK_arch arch_data;
sakthipriya 0:7b4c00e3912f 97
sakthipriya 5:bb592f3185cc 98 int write_ack = 1;
sakthipriya 5:bb592f3185cc 99 int read_ack = 1;
prasanthbj05 18:95f0cc565ee3 100 uint8_t telecommand[930];
Bragadeesh153 13:fb7facaf308b 101 extern uint8_t telemetry[135];
sakthipriya 5:bb592f3185cc 102
sakthipriya 5:bb592f3185cc 103 bool pf1check = 0;
sakthipriya 5:bb592f3185cc 104 bool pf2check = 0;
sakthipriya 5:bb592f3185cc 105 bool if1check = 0;
lakshya 14:a9588f443f1a 106 bool if2check = 0;
sakthipriya 0:7b4c00e3912f 107
sakthipriya 0:7b4c00e3912f 108 //*****************************************************Assigning pins******************************************************//
sakthipriya 9:194afacf7449 109 DigitalOut ATS1_SW_ENABLE(PTC0); // enable of att sens2 switch
sakthipriya 9:194afacf7449 110 DigitalOut ATS2_SW_ENABLE(PTC16); // enable of att sens switch
Bragadeesh153 16:cc77770d787f 111
sakthipriya 0:7b4c00e3912f 112 InterruptIn irpt_4m_mstr(PIN38); //I2c interrupt from CDMS
sakthipriya 0:7b4c00e3912f 113 DigitalOut irpt_2_mstr(PIN4); //I2C interrupt to CDMS
lakshya 14:a9588f443f1a 114 I2CSlave slave (PIN1,PIN2);///pin1 pin2
sakthipriya 0:7b4c00e3912f 115 DigitalOut batt_heat(PIN96);
sakthipriya 0:7b4c00e3912f 116
sakthipriya 9:194afacf7449 117 //ATS1_SW_ENABLE = 0;
sakthipriya 0:7b4c00e3912f 118 PwmOut PWM1(PIN93); //x //Functions used to generate PWM signal
sakthipriya 0:7b4c00e3912f 119 PwmOut PWM2(PIN94); //y
sakthipriya 0:7b4c00e3912f 120 PwmOut PWM3(PIN95); //z //PWM output comes from pins p6
sakthipriya 0:7b4c00e3912f 121
sakthipriya 5:bb592f3185cc 122 //........faults
sakthipriya 5:bb592f3185cc 123 //Polled Faults
sakthipriya 5:bb592f3185cc 124 DigitalIn pf1(PIN5);//Attitude Sensor 1 OC bar fault signal
sakthipriya 5:bb592f3185cc 125 DigitalIn pf2(PIN97);//Attitude Sensor 2 OC bar fault signal
sakthipriya 5:bb592f3185cc 126 DigitalIn pf3(PIN83);//Fault Bar for TRXY driver
sakthipriya 5:bb592f3185cc 127
sakthipriya 5:bb592f3185cc 128 //Interrupt based faults
lakshya 14:a9588f443f1a 129 //InterruptIn ir1(PIN73);//Battery Gauge - Alert Bar Signal
sakthipriya 5:bb592f3185cc 130 InterruptIn ir2(PIN72);//TRXY Driver TR switch Fault
sakthipriya 5:bb592f3185cc 131 InterruptIn ir3(PIN89);//TRZ Driver Fault Bar
sakthipriya 5:bb592f3185cc 132 InterruptIn ir4(PIN91);//TRZ Driver TR switch Fault
sakthipriya 5:bb592f3185cc 133 InterruptIn ir5(PIN79);//CDMS - Switch Fault
sakthipriya 5:bb592f3185cc 134 InterruptIn ir6(PIN80);//Beacon- Switch OC bar
sakthipriya 5:bb592f3185cc 135 InterruptIn ir7(PIN42);//Charger IC - Fault Bar
sakthipriya 5:bb592f3185cc 136
lakshya 14:a9588f443f1a 137
Bragadeesh153 13:fb7facaf308b 138 //DigitalOut TRXY_SW_EN(PIN71); //TR XY Switch
Bragadeesh153 13:fb7facaf308b 139 //DigitalOut DRV_Z_SLP(PIN88); //Sleep pin of driver z
Bragadeesh153 13:fb7facaf308b 140 //DigitalOut TRZ_SW(PIN40); //TR Z Switch
Bragadeesh153 13:fb7facaf308b 141 //DigitalOut CDMS_RESET(PIN7); // CDMS RESET
Bragadeesh153 13:fb7facaf308b 142 //DigitalOut BCN_SW(PIN14); //Beacon switch
Bragadeesh153 13:fb7facaf308b 143 //DigitalOut DRV_XY_SLP(PIN82);
Bragadeesh153 13:fb7facaf308b 144
Bragadeesh153 13:fb7facaf308b 145
Bragadeesh153 13:fb7facaf308b 146 DigitalOut TRXY_SW(PIN71); //TR XY Switch
Bragadeesh153 13:fb7facaf308b 147 DigitalOut DRV_Z_EN(PIN88); //Sleep pin of driver z
sakthipriya 5:bb592f3185cc 148 DigitalOut TRZ_SW(PIN40); //TR Z Switch
prasanthbj05 17:8a8024c45dc0 149 DigitalOut CDMS_RESET(PIN7,1); // CDMS RESET
sakthipriya 5:bb592f3185cc 150 DigitalOut BCN_SW(PIN14); //Beacon switch
Bragadeesh153 13:fb7facaf308b 151 DigitalOut DRV_XY_EN(PIN82);
sakthipriya 0:7b4c00e3912f 152
sakthipriya 0:7b4c00e3912f 153 /*****************************************************************Threads USed***********************************************************************************/
sakthipriya 3:07e15677a75c 154
sakthipriya 0:7b4c00e3912f 155 Thread *ptr_t_i2c;
sakthipriya 0:7b4c00e3912f 156
sakthipriya 0:7b4c00e3912f 157 /*********************************************************FCTN HEADERS***********************************************************************************/
sakthipriya 0:7b4c00e3912f 158
sakthipriya 0:7b4c00e3912f 159 void FCTN_ISR_I2C();
sakthipriya 0:7b4c00e3912f 160 void FCTN_TM();
sakthipriya 3:07e15677a75c 161 void F_ACS();
sakthipriya 3:07e15677a75c 162 void F_EPS();
sakthipriya 3:07e15677a75c 163 void F_BCN();
sakthipriya 0:7b4c00e3912f 164
prasanthbj05 18:95f0cc565ee3 165 //delete
prasanthbj05 18:95f0cc565ee3 166 uint16_t crc16_gen2(const unsigned char message[], unsigned int nBytes){
prasanthbj05 18:95f0cc565ee3 167 uint16_t remainder = 0xffff;
prasanthbj05 18:95f0cc565ee3 168 int byte;
prasanthbj05 18:95f0cc565ee3 169 char bit;
prasanthbj05 18:95f0cc565ee3 170
prasanthbj05 18:95f0cc565ee3 171 for( byte = 0 ; byte < nBytes ; byte++ ){
prasanthbj05 18:95f0cc565ee3 172 /*
prasanthbj05 18:95f0cc565ee3 173 Bring the data byte by byte
prasanthbj05 18:95f0cc565ee3 174 each time only one byte is brought
prasanthbj05 18:95f0cc565ee3 175 0 xor x = x
prasanthbj05 18:95f0cc565ee3 176 */
prasanthbj05 18:95f0cc565ee3 177 remainder = remainder ^ ( message[byte] << 8 );
prasanthbj05 18:95f0cc565ee3 178
prasanthbj05 18:95f0cc565ee3 179 for( bit = 8 ; bit > 0 ; bit--){
prasanthbj05 18:95f0cc565ee3 180 /*
prasanthbj05 18:95f0cc565ee3 181 for each bit, xor the remainder with polynomial
prasanthbj05 18:95f0cc565ee3 182 if the MSB is 1
prasanthbj05 18:95f0cc565ee3 183 */
prasanthbj05 18:95f0cc565ee3 184 if(remainder & TOPBIT16){
prasanthbj05 18:95f0cc565ee3 185 remainder = (remainder << 1) ^ POLYNOMIAL16;
prasanthbj05 18:95f0cc565ee3 186 /*
prasanthbj05 18:95f0cc565ee3 187 each time the remainder is xor-ed with polynomial, the MSB is made zero
prasanthbj05 18:95f0cc565ee3 188 hence the first digit of the remainder is ignored in the loop
prasanthbj05 18:95f0cc565ee3 189 */
prasanthbj05 18:95f0cc565ee3 190 }
prasanthbj05 18:95f0cc565ee3 191 else{
prasanthbj05 18:95f0cc565ee3 192 remainder = (remainder << 1);
prasanthbj05 18:95f0cc565ee3 193 }
prasanthbj05 18:95f0cc565ee3 194 }
prasanthbj05 18:95f0cc565ee3 195 }
prasanthbj05 18:95f0cc565ee3 196
prasanthbj05 18:95f0cc565ee3 197 return remainder;
prasanthbj05 18:95f0cc565ee3 198 }
prasanthbj05 18:95f0cc565ee3 199
prasanthbj05 18:95f0cc565ee3 200
sakthipriya 0:7b4c00e3912f 201 //*******************************************ACS THREAD**************************************************//
sakthipriya 5:bb592f3185cc 202 uint8_t iterP1;
sakthipriya 5:bb592f3185cc 203 uint8_t iterP2;
sakthipriya 5:bb592f3185cc 204 uint8_t iterI1;
sakthipriya 5:bb592f3185cc 205 uint8_t iterI2;
sakthipriya 0:7b4c00e3912f 206
sakthipriya 5:bb592f3185cc 207
sakthipriya 3:07e15677a75c 208 void F_ACS()
sakthipriya 0:7b4c00e3912f 209 {
sakthipriya 8:82250e41da81 210
sakthipriya 9:194afacf7449 211
sakthipriya 8:82250e41da81 212 //...................//
sakthipriya 8:82250e41da81 213
sakthipriya 5:bb592f3185cc 214 if(pf1check == 1)
sakthipriya 5:bb592f3185cc 215 {
sakthipriya 5:bb592f3185cc 216 if(iterP1 >= 3)
sakthipriya 5:bb592f3185cc 217 {
sakthipriya 9:194afacf7449 218 ATS1_SW_ENABLE = 1; // turn off ats1 permanently
sakthipriya 5:bb592f3185cc 219 //FCTN_SWITCH_ATS(0); // switch on ATS2
sakthipriya 5:bb592f3185cc 220 }
sakthipriya 5:bb592f3185cc 221 else
sakthipriya 5:bb592f3185cc 222 {
sakthipriya 9:194afacf7449 223 ATS1_SW_ENABLE = 0;
sakthipriya 5:bb592f3185cc 224 iterP1++;
sakthipriya 5:bb592f3185cc 225 }
sakthipriya 9:194afacf7449 226 pf1check = 0;
sakthipriya 5:bb592f3185cc 227 }
sakthipriya 5:bb592f3185cc 228 if(pf2check == 1)
sakthipriya 5:bb592f3185cc 229 {
sakthipriya 5:bb592f3185cc 230 if(iterP1 >= 3)
sakthipriya 5:bb592f3185cc 231 {
sakthipriya 9:194afacf7449 232 ATS2_SW_ENABLE = 1; // turn off ats2 permanently
Bragadeesh153 13:fb7facaf308b 233 ACS_DATA_ACQ_ENABLE = 0;
Bragadeesh153 13:fb7facaf308b 234 ACS_STATE = 2 ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 5:bb592f3185cc 235 }
sakthipriya 5:bb592f3185cc 236 else
sakthipriya 5:bb592f3185cc 237 {
sakthipriya 9:194afacf7449 238 ATS2_SW_ENABLE = 0;
sakthipriya 5:bb592f3185cc 239 iterP2++;
sakthipriya 5:bb592f3185cc 240 }
sakthipriya 9:194afacf7449 241 pf2check = 0;
sakthipriya 5:bb592f3185cc 242 }
sakthipriya 5:bb592f3185cc 243 if(if1check == 1)
sakthipriya 5:bb592f3185cc 244 {
sakthipriya 5:bb592f3185cc 245 if(iterI1 >= 3)
sakthipriya 5:bb592f3185cc 246 {
Bragadeesh153 13:fb7facaf308b 247 TRXY_SW = 0; // turn off TRXY permanently
sakthipriya 5:bb592f3185cc 248 }
sakthipriya 5:bb592f3185cc 249 else
sakthipriya 5:bb592f3185cc 250 {
Bragadeesh153 13:fb7facaf308b 251 TRXY_SW = 1; //switch on TRXY
sakthipriya 5:bb592f3185cc 252 iterI1++;
sakthipriya 5:bb592f3185cc 253 }
sakthipriya 5:bb592f3185cc 254 }
sakthipriya 5:bb592f3185cc 255 if(if2check == 1)
sakthipriya 5:bb592f3185cc 256 {
sakthipriya 5:bb592f3185cc 257 if(iterI2 >= 3)
sakthipriya 5:bb592f3185cc 258 {
sakthipriya 5:bb592f3185cc 259 TRZ_SW = 0; // turn off TRZ permanently
Bragadeesh153 13:fb7facaf308b 260 ACS_STATE = 2 ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 5:bb592f3185cc 261 }
sakthipriya 5:bb592f3185cc 262 else
sakthipriya 5:bb592f3185cc 263 {
sakthipriya 5:bb592f3185cc 264 TRZ_SW = 1; //switch on Z
sakthipriya 5:bb592f3185cc 265 iterI2++;
sakthipriya 5:bb592f3185cc 266 }
sakthipriya 5:bb592f3185cc 267 }
sakthipriya 5:bb592f3185cc 268
sakthipriya 6:036d08b62785 269 //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 270 //b1[3] = {22, 22,10};
sakthipriya 0:7b4c00e3912f 271 //omega1[3] = {2.1,3.0,1.5};
sakthipriya 9:194afacf7449 272 // ATS1_SW_ENABLE = 0; // att sens2 switch is disabled
sakthipriya 9:194afacf7449 273 // ATS2_SW_ENABLE = 0; // att sens switch is disabled
sakthipriya 0:7b4c00e3912f 274
sakthipriya 3:07e15677a75c 275
sakthipriya 0:7b4c00e3912f 276
sakthipriya 3:07e15677a75c 277 //Thread::signal_wait(0x1);
sakthipriya 9:194afacf7449 278 ACS_MAIN_STATUS = 1; //set ACS_MAIN_STATUS flag
sakthipriya 0:7b4c00e3912f 279 PWM1 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 280 PWM2 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 281 PWM3 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 282 pc.printf("\n\rEntered ACS %f\n",t_start.read());
sakthipriya 0:7b4c00e3912f 283
sakthipriya 9:194afacf7449 284 if(ACS_DATA_ACQ_ENABLE == 1)// check if ACS_DATA_ACQ_ENABLE = 1?
sakthipriya 0:7b4c00e3912f 285 {
Bragadeesh153 13:fb7facaf308b 286 //FLAG();
sakthipriya 0:7b4c00e3912f 287 FCTN_ATS_DATA_ACQ(); //the angular velocity is stored in the first 3 values and magnetic field values in next 3
sakthipriya 0:7b4c00e3912f 288 pc.printf("gyro values\n\r"); //printing the angular velocity and magnetic field values
sakthipriya 0:7b4c00e3912f 289 for(int i=0; i<3; i++)
sakthipriya 0:7b4c00e3912f 290 {
lakshya 15:e09aaaccf134 291 printf("%f\n\r",actual_data.AngularSpeed_actual[i]);
sakthipriya 0:7b4c00e3912f 292 }
sakthipriya 0:7b4c00e3912f 293 pc.printf("mag values\n\r");
sakthipriya 6:036d08b62785 294 for(int i=0; i<3; i++)
sakthipriya 0:7b4c00e3912f 295 {
sakthipriya 6:036d08b62785 296 pc.printf("%f\n\r",actual_data.Bvalue_actual[i]);
sakthipriya 5:bb592f3185cc 297 }
sakthipriya 6:036d08b62785 298 // for(int i=0;i<3;i++)
sakthipriya 6:036d08b62785 299 // {
sakthipriya 6:036d08b62785 300 // omega1[i]= data[i];
sakthipriya 6:036d08b62785 301 // b1[i] = data[i+3];
sakthipriya 6:036d08b62785 302 // }
sakthipriya 0:7b4c00e3912f 303 }//if ACS_DATA_ACQ_ENABLE = 1
sakthipriya 0:7b4c00e3912f 304 else
sakthipriya 0:7b4c00e3912f 305 {
sakthipriya 0:7b4c00e3912f 306 // Z axis actuation is the only final solution,
sakthipriya 0:7b4c00e3912f 307 }
sakthipriya 9:194afacf7449 308 if(ACS_STATE == 0) // check ACS_STATE = ACS_CONTROL_OFF?
sakthipriya 0:7b4c00e3912f 309 {
sakthipriya 0:7b4c00e3912f 310 printf("\n\r acs control off\n");
sakthipriya 0:7b4c00e3912f 311 FLAG();
sakthipriya 9:194afacf7449 312 ACS_STATUS = 0; // set ACS_STATUS = ACS_CONTROL_OFF
sakthipriya 0:7b4c00e3912f 313 PWM1 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 314 PWM2 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 315 PWM3 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 316 }
sakthipriya 0:7b4c00e3912f 317 else
sakthipriya 0:7b4c00e3912f 318 {
sakthipriya 1:446a959e36ce 319 if(actual_data.power_mode>1)
sakthipriya 0:7b4c00e3912f 320
sakthipriya 0:7b4c00e3912f 321 {
sakthipriya 9:194afacf7449 322 if(ACS_STATE == 2) // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:7b4c00e3912f 323 {
sakthipriya 0:7b4c00e3912f 324 FLAG();
sakthipriya 0:7b4c00e3912f 325 printf("\n\r z axis moment only\n");
sakthipriya 9:194afacf7449 326 ACS_STATUS = 2; // set ACS_STATUS = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:7b4c00e3912f 327 // FCTN_ACS_CNTRLALGO(b1, omega1);
sakthipriya 0:7b4c00e3912f 328 moment[0] = 0;
sakthipriya 0:7b4c00e3912f 329 moment[1] = 0;
sakthipriya 0:7b4c00e3912f 330 moment[2] =1.3;// is a dummy value
sakthipriya 0:7b4c00e3912f 331 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:7b4c00e3912f 332 }
sakthipriya 0:7b4c00e3912f 333 else
sakthipriya 0:7b4c00e3912f 334 {
sakthipriya 9:194afacf7449 335 if(ACS_STATE == 3) // check ACS_STATE = ACS_DATA_ACQ_FAILURE
sakthipriya 0:7b4c00e3912f 336 {
sakthipriya 0:7b4c00e3912f 337 FLAG();
sakthipriya 0:7b4c00e3912f 338 printf("\n\r acs data failure ");
sakthipriya 9:194afacf7449 339 ACS_STATUS = 3; // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
sakthipriya 0:7b4c00e3912f 340 PWM1 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 341 PWM2 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 342 PWM3 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 343 }
sakthipriya 0:7b4c00e3912f 344 else
sakthipriya 0:7b4c00e3912f 345 {
sakthipriya 9:194afacf7449 346 if(ACS_STATE == 4) // check ACS_STATE = ACS_NOMINAL_ONLY
sakthipriya 0:7b4c00e3912f 347 {
sakthipriya 0:7b4c00e3912f 348 FLAG();
sakthipriya 0:7b4c00e3912f 349 printf("\n\r nominal");
sakthipriya 9:194afacf7449 350 ACS_STATUS = 4; // set ACS_STATUS = ACS_NOMINAL_ONLY
sakthipriya 6:036d08b62785 351 FCTN_ACS_CNTRLALGO(actual_data.Bvalue_actual,actual_data.AngularSpeed_actual);
sakthipriya 0:7b4c00e3912f 352 printf("\n\r moment values returned by control algo \n");
sakthipriya 0:7b4c00e3912f 353 for(int i=0; i<3; i++)
sakthipriya 0:7b4c00e3912f 354 {
sakthipriya 0:7b4c00e3912f 355 printf("%f\t",moment[i]);
sakthipriya 0:7b4c00e3912f 356 }
sakthipriya 0:7b4c00e3912f 357 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:7b4c00e3912f 358 }
sakthipriya 0:7b4c00e3912f 359 else
sakthipriya 0:7b4c00e3912f 360 {
sakthipriya 9:194afacf7449 361 if(ACS_STATE == 5) // check ACS_STATE = ACS_AUTO_CONTROL
sakthipriya 0:7b4c00e3912f 362 {
sakthipriya 0:7b4c00e3912f 363 FLAG();
sakthipriya 0:7b4c00e3912f 364 printf("\n\r auto control");
sakthipriya 9:194afacf7449 365 ACS_STATUS = 5; // set ACS_STATUS = ACS_AUTO_CONTROL
sakthipriya 0:7b4c00e3912f 366 //FCTN_ACS_AUTOCTRL_LOGIC // gotta include this code
sakthipriya 0:7b4c00e3912f 367 }
sakthipriya 0:7b4c00e3912f 368 else
sakthipriya 0:7b4c00e3912f 369 {
sakthipriya 9:194afacf7449 370 if(ACS_STATE == 6) // check ACS_STATE = ACS_DETUMBLING_ONLY
sakthipriya 0:7b4c00e3912f 371 {
sakthipriya 0:7b4c00e3912f 372 FLAG();
sakthipriya 0:7b4c00e3912f 373 printf("\n\r Entered detumbling \n");
sakthipriya 9:194afacf7449 374 ACS_STATUS = 6; // set ACS_STATUS = ACS_DETUMBLING_ONLY
sakthipriya 6:036d08b62785 375 FCTN_ACS_CNTRLALGO(actual_data.Bvalue_actual,actual_data.AngularSpeed_actual); // detumbling code has to be included
sakthipriya 0:7b4c00e3912f 376 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:7b4c00e3912f 377 }
sakthipriya 0:7b4c00e3912f 378 else
sakthipriya 0:7b4c00e3912f 379 {
sakthipriya 0:7b4c00e3912f 380 FLAG();
sakthipriya 0:7b4c00e3912f 381 printf("\n\r invalid state");
sakthipriya 9:194afacf7449 382 ACS_STATUS = 7 ; // set ACS_STATUS = INVALID STATE
sakthipriya 0:7b4c00e3912f 383 PWM1 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 384 PWM2 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 385 PWM3 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 386 }//else of invalid
sakthipriya 0:7b4c00e3912f 387 }//else of autocontrol
sakthipriya 0:7b4c00e3912f 388 }//else of nominal
sakthipriya 0:7b4c00e3912f 389 }//else of data acg failure
sakthipriya 0:7b4c00e3912f 390
sakthipriya 0:7b4c00e3912f 391 }//else fo z axis moment only
sakthipriya 0:7b4c00e3912f 392 }//if power >2
sakthipriya 0:7b4c00e3912f 393 else
sakthipriya 0:7b4c00e3912f 394 {
sakthipriya 0:7b4c00e3912f 395 FLAG();
sakthipriya 0:7b4c00e3912f 396 printf("\n\r low power");
sakthipriya 9:194afacf7449 397 ACS_STATUS = 1; // set ACS_STATUS = ACS_LOW_POWER
sakthipriya 0:7b4c00e3912f 398 PWM1 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 399 PWM2 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 400 PWM3 = 0; //clear pwm pins
sakthipriya 0:7b4c00e3912f 401 }
sakthipriya 0:7b4c00e3912f 402 } //else for acs control off
sakthipriya 9:194afacf7449 403 ACS_MAIN_STATUS = 0; //clear ACS_MAIN_STATUS flag
sakthipriya 3:07e15677a75c 404
sakthipriya 0:7b4c00e3912f 405 }
sakthipriya 0:7b4c00e3912f 406 //***************************************************EPS THREAD***********************************************//
sakthipriya 0:7b4c00e3912f 407
sakthipriya 3:07e15677a75c 408 void F_EPS()
sakthipriya 0:7b4c00e3912f 409 {
sakthipriya 3:07e15677a75c 410
sakthipriya 0:7b4c00e3912f 411 pc.printf("\n\rEntered EPS %f\n",t_start.read());
sakthipriya 9:194afacf7449 412 EPS_MAIN_STATUS = 1; // Set EPS main status
sakthipriya 3:07e15677a75c 413 FCTN_BATT_TEMP_SENSOR_MAIN(actual_data.Batt_temp_actual);
sakthipriya 3:07e15677a75c 414 pc.printf("\n\r Battery temperature %f %f" ,actual_data.Batt_temp_actual[0], actual_data.Batt_temp_actual[1]);
sakthipriya 9:194afacf7449 415 EPS_BATTERY_TEMP_STATUS = 1; //set EPS_BATTERY_TEMP_STATUS
sakthipriya 9:194afacf7449 416 if(EPS_BATTERY_HEAT_ENABLE == 1)
sakthipriya 3:07e15677a75c 417 {
sakthipriya 5:bb592f3185cc 418 if((actual_data.Batt_temp_actual[0] < batt_heat_low) && (actual_data.Batt_temp_actual[1] < batt_heat_low)) // to confirm
sakthipriya 3:07e15677a75c 419 {
sakthipriya 3:07e15677a75c 420 batt_heat = 1; //turn on battery heater
sakthipriya 3:07e15677a75c 421 }
sakthipriya 3:07e15677a75c 422 else
sakthipriya 3:07e15677a75c 423 {
sakthipriya 3:07e15677a75c 424 batt_heat = 0; //turn off battery heater
sakthipriya 3:07e15677a75c 425 }
sakthipriya 3:07e15677a75c 426
sakthipriya 3:07e15677a75c 427 }
sakthipriya 9:194afacf7449 428 else if(EPS_BATTERY_HEAT_ENABLE == 0)
sakthipriya 3:07e15677a75c 429 {
sakthipriya 3:07e15677a75c 430 EPS_STATUS = 1;//EPS_STATUS = EPS_BATTERY_HEATER_DISABLED
sakthipriya 3:07e15677a75c 431 }
sakthipriya 0:7b4c00e3912f 432 FCTN_BATTERYGAUGE_MAIN(actual_data.Batt_gauge_actual);
sakthipriya 1:446a959e36ce 433 if (actual_data.Batt_gauge_actual[1] == 200) //data not received
sakthipriya 0:7b4c00e3912f 434 {
sakthipriya 0:7b4c00e3912f 435 actual_data.power_mode = 1;
sakthipriya 9:194afacf7449 436 EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS
sakthipriya 0:7b4c00e3912f 437
sakthipriya 0:7b4c00e3912f 438 }
sakthipriya 0:7b4c00e3912f 439 else
sakthipriya 0:7b4c00e3912f 440 {
sakthipriya 1:446a959e36ce 441 FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]); //updating power level
sakthipriya 9:194afacf7449 442 EPS_BATTERY_GAUGE_STATUS = 1; //set EPS_BATTERY_GAUGE_STATUS
sakthipriya 0:7b4c00e3912f 443 }
sakthipriya 3:07e15677a75c 444 // if( Temperature data received)
sakthipriya 3:07e15677a75c 445 //{
sakthipriya 3:07e15677a75c 446
sakthipriya 0:7b4c00e3912f 447
sakthipriya 3:07e15677a75c 448 // }
sakthipriya 3:07e15677a75c 449 // else
sakthipriya 3:07e15677a75c 450 // {
sakthipriya 3:07e15677a75c 451 // Set battery temp to XX
sakthipriya 9:194afacf7449 452 // EPS_BATTERY_TEMP_STATUS = 0; //clear EPS_BATTERY_TEMP_STATUS
sakthipriya 3:07e15677a75c 453 // EPS_STATUS = EPS_ERR_BATTERY_TEMP;
sakthipriya 3:07e15677a75c 454 // }
sakthipriya 3:07e15677a75c 455 FCTN_HK_MAIN();
sakthipriya 6:036d08b62785 456 // printf("\n\r here");
sakthipriya 5:bb592f3185cc 457 FCTN_APPEND_HKDATA();
sakthipriya 5:bb592f3185cc 458 minMaxHkData();
sakthipriya 6:036d08b62785 459 //printf("\n\r here");
sakthipriya 9:194afacf7449 460 EPS_MAIN_STATUS = 0; // clear EPS main status
sakthipriya 0:7b4c00e3912f 461 }
sakthipriya 0:7b4c00e3912f 462
sakthipriya 0:7b4c00e3912f 463 //**************************************************BCN THREAD*******************************************************************//
sakthipriya 0:7b4c00e3912f 464
sakthipriya 3:07e15677a75c 465 void F_BCN()
sakthipriya 0:7b4c00e3912f 466 {
sakthipriya 3:07e15677a75c 467
sakthipriya 0:7b4c00e3912f 468 pc.printf("\n\rEntered BCN %f\n",t_start.read());
sakthipriya 0:7b4c00e3912f 469
Bragadeesh153 12:af1d7e18b868 470 FCTN_BCN_TX_MAIN();
sakthipriya 0:7b4c00e3912f 471
sakthipriya 0:7b4c00e3912f 472 }
sakthipriya 0:7b4c00e3912f 473
sakthipriya 0:7b4c00e3912f 474 //**************************************************TCTM THREAD*******************************************************************//
prasanthbj05 18:95f0cc565ee3 475 /*void I2C_busreset_test(void)
prasanthbj05 17:8a8024c45dc0 476 {
prasanthbj05 17:8a8024c45dc0 477 uint8_t count=0;
prasanthbj05 17:8a8024c45dc0 478 if((PORTE->PCR[1] & PORT_PCR_MUX(6)) && (PORTE->PCR[0] & PORT_PCR_MUX(6)))
prasanthbj05 17:8a8024c45dc0 479 {
prasanthbj05 17:8a8024c45dc0 480 printf("\n\rResetting\n\r");
prasanthbj05 17:8a8024c45dc0 481 I2C1->C1 &= 0x7f; // Disable I2C1 bus
prasanthbj05 17:8a8024c45dc0 482 PORTE->PCR[1] = PORT_PCR_MUX(1); // PTE1 Alt1 (pin)
prasanthbj05 17:8a8024c45dc0 483 PORTE->PCR[0] = PORT_PCR_MUX(1); // PTE0 Alt1 (pin)
prasanthbj05 17:8a8024c45dc0 484 while(((PTE->PDIR & 0x3) != 3) && (count<10)) // When PTE0 / PTE1 are not 1 : I2C1 bus lock-up
prasanthbj05 17:8a8024c45dc0 485 {
prasanthbj05 17:8a8024c45dc0 486 PTE->PDDR |= 0x3; // Set PTE1 and PTE0 as a GPIO output so we can bit bang it
prasanthbj05 17:8a8024c45dc0 487 PTE->PDOR |= 0x2; // Set PTE1 (SCL) pin high;
prasanthbj05 17:8a8024c45dc0 488 wait_ms(1);
prasanthbj05 17:8a8024c45dc0 489 PTE->PDOR |= 0x1; // Set PTE0 (SDA) pin high;
prasanthbj05 17:8a8024c45dc0 490 wait_ms(1);
prasanthbj05 17:8a8024c45dc0 491 count++;
prasanthbj05 17:8a8024c45dc0 492 wait(1);
prasanthbj05 17:8a8024c45dc0 493 }
prasanthbj05 17:8a8024c45dc0 494 // Reinstate I2C1 bus pins
prasanthbj05 17:8a8024c45dc0 495 PORTE->PCR[1] = PORT_PCR_MUX(6); // PTE1 Alt6 (SCL)
prasanthbj05 17:8a8024c45dc0 496 PORTE->PCR[0] = PORT_PCR_MUX(6); // PTE0 Alt6 (SDA)
prasanthbj05 17:8a8024c45dc0 497 I2C1->C1 |= 0x80; // Enable I2C1 bus
prasanthbj05 17:8a8024c45dc0 498 printf("Count: %d\n\r",count);
prasanthbj05 17:8a8024c45dc0 499 //wait(1);
prasanthbj05 17:8a8024c45dc0 500 }
prasanthbj05 17:8a8024c45dc0 501
prasanthbj05 17:8a8024c45dc0 502 }*/
prasanthbj05 17:8a8024c45dc0 503 #define PORT_PCR_MUX_MASK2 0x00000700u
prasanthbj05 17:8a8024c45dc0 504 void debug()
prasanthbj05 17:8a8024c45dc0 505 {
prasanthbj05 17:8a8024c45dc0 506 // uint32_t temp=0x0AF30000;
prasanthbj05 17:8a8024c45dc0 507 //printf("\n\rTemp = %08X",temp);
prasanthbj05 17:8a8024c45dc0 508 //pc.printf("\n\rPORTE->PCR[0] = 0x%08X",PORTE->PCR[0]);
prasanthbj05 17:8a8024c45dc0 509 //pc.printf("\n\rPORTE->PCR[1] = 0x%08X",PORTE->PCR[1]);
prasanthbj05 17:8a8024c45dc0 510 pc.printf("\n\rPTE->DIR = 0x%08X",PTE->PDIR);
prasanthbj05 17:8a8024c45dc0 511 }
prasanthbj05 17:8a8024c45dc0 512 void debug1()
prasanthbj05 17:8a8024c45dc0 513 {
prasanthbj05 17:8a8024c45dc0 514 printf("\n\r Before disabling");
prasanthbj05 17:8a8024c45dc0 515 debug();
prasanthbj05 17:8a8024c45dc0 516 //wait_ms(50);
prasanthbj05 17:8a8024c45dc0 517 I2C1->C1 &= 0x7f;
prasanthbj05 17:8a8024c45dc0 518 printf("\n\r After muxing ");
prasanthbj05 17:8a8024c45dc0 519 PORTE->PCR[1] = PORT_PCR_MUX(1); // PTE24 Alt1 (pin)
prasanthbj05 17:8a8024c45dc0 520 PORTE->PCR[0] = PORT_PCR_MUX(1); // PTE25 Alt1 (pin)
prasanthbj05 17:8a8024c45dc0 521 PTE->PDDR |= 0x3; // Set PTE1 and PTE0 as a GPIO output so we can bit bang it
prasanthbj05 17:8a8024c45dc0 522 PTE->PDOR |= 0x2; // Set PTE1 (SCL) pin high;
prasanthbj05 17:8a8024c45dc0 523 wait_ms(1);
prasanthbj05 17:8a8024c45dc0 524 PTE->PDOR |= 0x1; // Set PTE0 (SDA) pin high;
prasanthbj05 17:8a8024c45dc0 525 wait_ms(1);
prasanthbj05 17:8a8024c45dc0 526 debug();
prasanthbj05 17:8a8024c45dc0 527 PORTE->PCR[1] &= (~(PORT_PCR_MUX_MASK2));
prasanthbj05 17:8a8024c45dc0 528 PORTE->PCR[0] &= (~(PORT_PCR_MUX_MASK2));
prasanthbj05 17:8a8024c45dc0 529 PORTE->PCR[1] |= PORT_PCR_MUX(6); // PTE24 Alt6 (pin)
prasanthbj05 17:8a8024c45dc0 530 PORTE->PCR[0] |= PORT_PCR_MUX(6); // PTE25 Alt6 (pin)
prasanthbj05 17:8a8024c45dc0 531 PORTE->PCR[1] |= 0x00000004;
prasanthbj05 17:8a8024c45dc0 532 PORTE->PCR[0] |= 0x00000004;
prasanthbj05 17:8a8024c45dc0 533 I2C1->C1 |= 0x80; // Enable I2C1 bus
prasanthbj05 17:8a8024c45dc0 534 printf("\n\r After enabling I2C");
prasanthbj05 17:8a8024c45dc0 535 debug();
prasanthbj05 17:8a8024c45dc0 536 }
prasanthbj05 17:8a8024c45dc0 537 void debug2()
prasanthbj05 17:8a8024c45dc0 538 {
prasanthbj05 18:95f0cc565ee3 539 pc.printf("\n\rI2C1->A1 = 0x%02X",I2C1->A1);
prasanthbj05 18:95f0cc565ee3 540 pc.printf("\n\rI2C1->F = 0x%02X",I2C1->F);
prasanthbj05 18:95f0cc565ee3 541 pc.printf("\n\rI2C1->C1 = 0x%02X",I2C1->C1);
prasanthbj05 18:95f0cc565ee3 542 pc.printf("\n\rI2C1->S = 0x%02X",I2C1->S);
prasanthbj05 18:95f0cc565ee3 543 pc.printf("\n\rI2C1->D = 0x%02X",I2C1->D);
prasanthbj05 18:95f0cc565ee3 544 pc.printf("\n\rI2C1->C2 = 0x%02X",I2C1->C2);
prasanthbj05 18:95f0cc565ee3 545 pc.printf("\n\rI2C1->FLT = 0x%02X",I2C1->FLT);
prasanthbj05 18:95f0cc565ee3 546 pc.printf("\n\rI2C1->RA = 0x%02X",I2C1->RA);
prasanthbj05 18:95f0cc565ee3 547 pc.printf("\n\rI2C1->SMB = 0x%02X",I2C1->SMB);
prasanthbj05 18:95f0cc565ee3 548 pc.printf("\n\rI2C1->A2 = 0x%02X",I2C1->A2);
prasanthbj05 18:95f0cc565ee3 549 pc.printf("\n\rI2C1->SLTH = 0x%02X",I2C1->SLTH);
prasanthbj05 18:95f0cc565ee3 550 pc.printf("\n\rI2C1->SLTL = 0x%02X\n",I2C1->SLTL);
prasanthbj05 17:8a8024c45dc0 551 }
sakthipriya 0:7b4c00e3912f 552
prasanthbj05 17:8a8024c45dc0 553 void debug3()
prasanthbj05 17:8a8024c45dc0 554 {
prasanthbj05 17:8a8024c45dc0 555 //pc.printf("\n\r Resetting I2C");
prasanthbj05 17:8a8024c45dc0 556 //debug2();
prasanthbj05 17:8a8024c45dc0 557 //printf("\n\r SIM->SCGC4 = 0x%08X",SIM->SCGC4);
prasanthbj05 17:8a8024c45dc0 558 PORTE->PCR[1] &= 0xfffffffb;
prasanthbj05 17:8a8024c45dc0 559 PORTE->PCR[0] &= 0xfffffffb;
prasanthbj05 17:8a8024c45dc0 560 I2C1->C1 &= 0x7f;
prasanthbj05 17:8a8024c45dc0 561 //wait_ms(2);
prasanthbj05 17:8a8024c45dc0 562 SIM->SCGC4 &= 0xffffff7f;
prasanthbj05 17:8a8024c45dc0 563 //printf("\n\r SIM->SCGC4 = 0x%08X",SIM->SCGC4);
prasanthbj05 17:8a8024c45dc0 564 //wait_ms(10);
prasanthbj05 17:8a8024c45dc0 565 SIM->SCGC4 |= 0x00000080;
prasanthbj05 17:8a8024c45dc0 566 //printf("\n\r SIM->SCGC4 = 0x%08X",SIM->SCGC4);
prasanthbj05 17:8a8024c45dc0 567 //wait_ms(10);
prasanthbj05 17:8a8024c45dc0 568 I2C1->C1 |= 0x80;
prasanthbj05 17:8a8024c45dc0 569 PORTE->PCR[1] |= 0x00000004;
prasanthbj05 17:8a8024c45dc0 570 PORTE->PCR[0] |= 0x00000004;
prasanthbj05 17:8a8024c45dc0 571 //wait_ms(10);
prasanthbj05 17:8a8024c45dc0 572 wait_ms(2);
prasanthbj05 17:8a8024c45dc0 573 //printf("\n\r After enabling clock");
prasanthbj05 17:8a8024c45dc0 574 //debug2();
prasanthbj05 17:8a8024c45dc0 575 //printf("\n");
prasanthbj05 17:8a8024c45dc0 576 }
prasanthbj05 17:8a8024c45dc0 577 void I2C_busreset()
prasanthbj05 17:8a8024c45dc0 578 {
prasanthbj05 17:8a8024c45dc0 579 PORTE->PCR[1] &= 0xfffffffb;
prasanthbj05 17:8a8024c45dc0 580 PORTE->PCR[0] &= 0xfffffffb;
prasanthbj05 17:8a8024c45dc0 581 I2C1->C1 &= 0x7f;
prasanthbj05 17:8a8024c45dc0 582 SIM->SCGC4 &= 0xffffff7f;
prasanthbj05 17:8a8024c45dc0 583 SIM->SCGC4 |= 0x00000080;
prasanthbj05 17:8a8024c45dc0 584 I2C1->C1 |= 0x80;
prasanthbj05 17:8a8024c45dc0 585 PORTE->PCR[1] |= 0x00000004;
prasanthbj05 17:8a8024c45dc0 586 PORTE->PCR[0] |= 0x00000004;
prasanthbj05 17:8a8024c45dc0 587 Thread::wait(1);
prasanthbj05 17:8a8024c45dc0 588 }
prasanthbj05 18:95f0cc565ee3 589 uint32_t pdir_tc1,pdir_tc2,pdir_tm1,pdir_tm2,pdir_ss1,pdir_ss2;//variables used to verify i2c working
prasanthbj05 18:95f0cc565ee3 590 uint16_t crc16_check;
sakthipriya 0:7b4c00e3912f 591 void T_TC(void const * args)
sakthipriya 0:7b4c00e3912f 592 {
sakthipriya 0:7b4c00e3912f 593 while(1)
prasanthbj05 17:8a8024c45dc0 594 {
prasanthbj05 17:8a8024c45dc0 595 //pc.printf("\n\n\rWaiting");
prasanthbj05 18:95f0cc565ee3 596 Thread::signal_wait(0x4); //signalled by ISR when CDMS sends an interrupt
prasanthbj05 18:95f0cc565ee3 597 wait_us(300); // can be between 38 to 15700 but currently fixed as 300us
prasanthbj05 18:95f0cc565ee3 598 if( slave.receive() == 0) //Slave not addressed
prasanthbj05 18:95f0cc565ee3 599 {
prasanthbj05 17:8a8024c45dc0 600 irpt_2_mstr = 0;
prasanthbj05 17:8a8024c45dc0 601 data_send_flag = 'h';
prasanthbj05 17:8a8024c45dc0 602 #if PRINT
prasanthbj05 18:95f0cc565ee3 603 pc.printf("\n\rSlave not addressed");
prasanthbj05 18:95f0cc565ee3 604 pc.printf("\n\rPTE->DIR = 0x%08X",pdir_ss1);
prasanthbj05 17:8a8024c45dc0 605 #endif
prasanthbj05 17:8a8024c45dc0 606 slave.stop();
prasanthbj05 18:95f0cc565ee3 607 pdir_ss1=PTE->PDIR;
prasanthbj05 18:95f0cc565ee3 608 if(((pdir_ss1 & 0x00000003)!=3))
prasanthbj05 18:95f0cc565ee3 609 {
prasanthbj05 18:95f0cc565ee3 610 I2C_busreset();
prasanthbj05 18:95f0cc565ee3 611 }
prasanthbj05 18:95f0cc565ee3 612 pdir_ss2=PTE->PDIR;
prasanthbj05 18:95f0cc565ee3 613 #if PRINT2
prasanthbj05 18:95f0cc565ee3 614 pc.printf("\n\rPTE->DIR = 0x%08X",pdir_ss2);
prasanthbj05 17:8a8024c45dc0 615 #endif
prasanthbj05 17:8a8024c45dc0 616 }
prasanthbj05 17:8a8024c45dc0 617 else if( slave.receive() == 1) // slave writes to master
sakthipriya 0:7b4c00e3912f 618 {
prasanthbj05 18:95f0cc565ee3 619 if(data_send_flag == 'h') //Send Housekeeping data
sakthipriya 6:036d08b62785 620 {
sakthipriya 6:036d08b62785 621 //FCTN_APPEND_HKDATA();
prasanthbj05 18:95f0cc565ee3 622 crc16_check = crc16_gen2(BAE_chardata,72);
prasanthbj05 18:95f0cc565ee3 623 BAE_chardata[72] = (uint8_t)((crc16_check&0xFF00)>>8);
prasanthbj05 18:95f0cc565ee3 624 BAE_chardata[73] = (uint8_t)(crc16_check&0x00FF);
prasanthbj05 18:95f0cc565ee3 625 write_ack=slave.write((char*)BAE_chardata,74);
prasanthbj05 17:8a8024c45dc0 626 irpt_2_mstr = 0;
Bragadeesh153 13:fb7facaf308b 627 if(write_ack==0)
prasanthbj05 17:8a8024c45dc0 628 {
prasanthbj05 17:8a8024c45dc0 629 irpt_2_mstr = 0;
prasanthbj05 18:95f0cc565ee3 630 pc.printf("\n\rHK data sent\n");
prasanthbj05 17:8a8024c45dc0 631 }
sakthipriya 6:036d08b62785 632 }
prasanthbj05 18:95f0cc565ee3 633 else if(data_send_flag == 't') //Send Telemetry corresponding to Telecommand
prasanthbj05 18:95f0cc565ee3 634 {
prasanthbj05 17:8a8024c45dc0 635 uint8_t i2c_count =0;
prasanthbj05 18:95f0cc565ee3 636 write_ack=slave.write((char*)telemetry,134);
prasanthbj05 18:95f0cc565ee3 637 Thread::wait(1); //for correct values of register to be updated
prasanthbj05 18:95f0cc565ee3 638 pdir_tm1=PTE->PDIR;
prasanthbj05 17:8a8024c45dc0 639 irpt_2_mstr = 0;
prasanthbj05 17:8a8024c45dc0 640 //data_send_flag = 'h';
prasanthbj05 17:8a8024c45dc0 641 if(write_ack==0)
prasanthbj05 17:8a8024c45dc0 642 {
prasanthbj05 18:95f0cc565ee3 643 while(((pdir_tm1 & 0x00000003)!=3)&& i2c_count<10)
prasanthbj05 17:8a8024c45dc0 644 {
prasanthbj05 17:8a8024c45dc0 645 Thread::wait(1);
prasanthbj05 18:95f0cc565ee3 646 pdir_tm1=PTE->PDIR;
prasanthbj05 17:8a8024c45dc0 647 i2c_count++;
prasanthbj05 17:8a8024c45dc0 648 }
prasanthbj05 18:95f0cc565ee3 649 if(((pdir_tm1 & 0x00000003)==3))
prasanthbj05 17:8a8024c45dc0 650 {
prasanthbj05 17:8a8024c45dc0 651 pc.printf("\n\rWrite TM success");
prasanthbj05 17:8a8024c45dc0 652 }
prasanthbj05 17:8a8024c45dc0 653 else
prasanthbj05 17:8a8024c45dc0 654 {
prasanthbj05 17:8a8024c45dc0 655 #if PRINT
prasanthbj05 17:8a8024c45dc0 656 pc.printf("\n\rWrite TM error");
prasanthbj05 18:95f0cc565ee3 657 pc.printf("\n\rPTE->DIR = 0x%08X",pdir_tm1);
prasanthbj05 17:8a8024c45dc0 658 #endif
prasanthbj05 18:95f0cc565ee3 659 wait_ms(20); //should be atleast 7ms for correct operation but fix this value as 20ms
prasanthbj05 18:95f0cc565ee3 660 I2C_busreset();
prasanthbj05 18:95f0cc565ee3 661 #if PRINT2
prasanthbj05 18:95f0cc565ee3 662 pdir_tm2=PTE->PDIR;
prasanthbj05 18:95f0cc565ee3 663 pc.printf("\n\rPTE->DIR = 0x%08X",pdir_tm2);
prasanthbj05 17:8a8024c45dc0 664 #endif
prasanthbj05 17:8a8024c45dc0 665 }
prasanthbj05 17:8a8024c45dc0 666 //pc.printf("\n\rTM count:%d",i2c_count);
prasanthbj05 17:8a8024c45dc0 667 }
prasanthbj05 17:8a8024c45dc0 668 else
prasanthbj05 18:95f0cc565ee3 669 {
prasanthbj05 17:8a8024c45dc0 670 #if PRINT
prasanthbj05 17:8a8024c45dc0 671 pc.printf("\nTM ack failed");
prasanthbj05 18:95f0cc565ee3 672 pc.printf("\n\rPTE->DIR = 0x%08X",pdir_tm1);
prasanthbj05 17:8a8024c45dc0 673 #endif
prasanthbj05 18:95f0cc565ee3 674 I2C_busreset();
prasanthbj05 18:95f0cc565ee3 675 #if PRINT2
prasanthbj05 18:95f0cc565ee3 676 pdir_tm2=PTE->PDIR;
prasanthbj05 18:95f0cc565ee3 677 pc.printf("\n\rPTE->DIR = 0x%08X",pdir_tm2);
prasanthbj05 18:95f0cc565ee3 678 #endif
prasanthbj05 17:8a8024c45dc0 679 }
prasanthbj05 18:95f0cc565ee3 680 //i2c_count=0;
prasanthbj05 18:95f0cc565ee3 681 irpt_2_mstr = 0;
prasanthbj05 17:8a8024c45dc0 682 }
prasanthbj05 17:8a8024c45dc0 683 else if(data_send_flag == 'i')
prasanthbj05 17:8a8024c45dc0 684 {
prasanthbj05 18:95f0cc565ee3 685 data_send_flag = 'h';
prasanthbj05 18:95f0cc565ee3 686 //to be filled by Lakshya during code integration
prasanthbj05 18:95f0cc565ee3 687 ///////////////////////////////////////////////
prasanthbj05 18:95f0cc565ee3 688 ///////////////////////////////////////////////
prasanthbj05 17:8a8024c45dc0 689 }
sakthipriya 0:7b4c00e3912f 690 }
prasanthbj05 18:95f0cc565ee3 691 else if( slave.receive()==3 || slave.receive()==2) // slave reads from master
sakthipriya 0:7b4c00e3912f 692 {
prasanthbj05 17:8a8024c45dc0 693 uint8_t i2c_count = 0;
prasanthbj05 18:95f0cc565ee3 694 data_send_flag = 't';
prasanthbj05 18:95f0cc565ee3 695 read_ack=slave.read((char *)telecommand,11); //read() function returns acknowledgement
prasanthbj05 17:8a8024c45dc0 696 Thread::wait(1);
prasanthbj05 18:95f0cc565ee3 697 pdir_tc1=PTE->PDIR;
prasanthbj05 18:95f0cc565ee3 698 if(read_ack==0) //read() says it was successful
prasanthbj05 17:8a8024c45dc0 699 {
prasanthbj05 18:95f0cc565ee3 700 while(((pdir_tc1 & 0x00000003)!=3)&& i2c_count<10)//checking if SDA and SCL lines are logic 0 and not more than 10 times(10ms)
prasanthbj05 17:8a8024c45dc0 701 {
prasanthbj05 17:8a8024c45dc0 702 Thread::wait(1);
prasanthbj05 18:95f0cc565ee3 703 pdir_tc1=PTE->PDIR;
prasanthbj05 17:8a8024c45dc0 704 i2c_count++;
prasanthbj05 17:8a8024c45dc0 705 }
prasanthbj05 18:95f0cc565ee3 706 if(((pdir_tc1 & 0x00000003)==3))
prasanthbj05 17:8a8024c45dc0 707 {
prasanthbj05 18:95f0cc565ee3 708 pc.printf("\n\n\rRead TC success");
prasanthbj05 18:95f0cc565ee3 709 //FCTN_TC_DECODE((uint8_t*) telecommand);
prasanthbj05 17:8a8024c45dc0 710 //FCTN_BAE_TM_TC((uint8_t*) telecommand);
prasanthbj05 17:8a8024c45dc0 711 //telemetry = (char*)temp;
prasanthbj05 18:95f0cc565ee3 712 //data_send_flag = 't';
prasanthbj05 18:95f0cc565ee3 713 //pc.printf("\n\r Telemetry Generation \n");
prasanthbj05 18:95f0cc565ee3 714 //irpt_2_mstr = 1;
prasanthbj05 17:8a8024c45dc0 715
prasanthbj05 17:8a8024c45dc0 716 //uint8_t read_ack2 = (uint8_t)(PTE->PDIR & 0x00000003);
prasanthbj05 17:8a8024c45dc0 717 //printf("\n\rread_ack2 = %d",read_ack2);
prasanthbj05 17:8a8024c45dc0 718 //if((read_ack ==0)&&(read_ack2==3))
prasanthbj05 17:8a8024c45dc0 719 //if(read_ack==0 && ((PTE->PDIR & 0x00000003)==3))
prasanthbj05 17:8a8024c45dc0 720 //debug2();
prasanthbj05 17:8a8024c45dc0 721 //pc.printf("\n\rPTE->DIR = 0x%08X",PTE->PDIR);
prasanthbj05 17:8a8024c45dc0 722 //wait_us(10);
prasanthbj05 17:8a8024c45dc0 723 //read_ack2 = (uint8_t)(PTE->PDIR & 0x00000003);
prasanthbj05 17:8a8024c45dc0 724 //tempt.stop();
prasanthbj05 17:8a8024c45dc0 725 //data_send_flag = 't'; //uncomment later
prasanthbj05 17:8a8024c45dc0 726 }
prasanthbj05 18:95f0cc565ee3 727 else //either or both of SDA and SCL lines low
prasanthbj05 17:8a8024c45dc0 728 {
prasanthbj05 17:8a8024c45dc0 729 #if PRINT
prasanthbj05 17:8a8024c45dc0 730 pc.printf("\n\n\rRead TC error");
prasanthbj05 18:95f0cc565ee3 731 pc.printf("\n\rPTE->DIR = 0x%08X",pdir_tc1);
prasanthbj05 17:8a8024c45dc0 732 #endif
prasanthbj05 17:8a8024c45dc0 733 I2C_busreset();
prasanthbj05 18:95f0cc565ee3 734 //data_send_flag = 'i';
prasanthbj05 18:95f0cc565ee3 735 #if PRINT2
prasanthbj05 18:95f0cc565ee3 736 pdir_tc2=PTE->PDIR;
prasanthbj05 18:95f0cc565ee3 737 pc.printf("\n\rPTE->DIR = 0x%08X",pdir_tc2);
prasanthbj05 17:8a8024c45dc0 738 #endif
prasanthbj05 17:8a8024c45dc0 739 }
prasanthbj05 18:95f0cc565ee3 740 //irpt_2_mstr = 1;
prasanthbj05 17:8a8024c45dc0 741 //pc.printf("\n\rTC count:%d",i2c_count);
prasanthbj05 17:8a8024c45dc0 742 }
prasanthbj05 18:95f0cc565ee3 743 else //read() says it was not successful
prasanthbj05 17:8a8024c45dc0 744 {
prasanthbj05 17:8a8024c45dc0 745 #if PRINT
prasanthbj05 17:8a8024c45dc0 746 pc.printf("\n\n\rTC ack failed");
prasanthbj05 18:95f0cc565ee3 747 pc.printf("\n\rPTE->DIR = 0x%08X",pdir_tc1);
prasanthbj05 17:8a8024c45dc0 748 #endif
prasanthbj05 17:8a8024c45dc0 749 I2C_busreset();
prasanthbj05 18:95f0cc565ee3 750 pdir_tc2 = PTE->PDIR;
prasanthbj05 18:95f0cc565ee3 751 //data_send_flag = 'i'; //'i' = invalid
prasanthbj05 18:95f0cc565ee3 752 #if PRINT2
prasanthbj05 18:95f0cc565ee3 753 pc.printf("\n\rPTE->DIR = 0x%08X",pdir_tc2);
prasanthbj05 18:95f0cc565ee3 754 #endif
prasanthbj05 17:8a8024c45dc0 755 }
prasanthbj05 17:8a8024c45dc0 756 i2c_count = 0;
prasanthbj05 18:95f0cc565ee3 757 irpt_2_mstr = 1;
prasanthbj05 17:8a8024c45dc0 758 //printf("\n\rSize of data : %d",sizeof(telecommand));
prasanthbj05 17:8a8024c45dc0 759 //printf("\n\rGiven Size : %d\n",11);
prasanthbj05 17:8a8024c45dc0 760 //printf("\n\rREAD_ACK : %d",read_ack);
prasanthbj05 17:8a8024c45dc0 761 //t_tc.start();
prasanthbj05 17:8a8024c45dc0 762 //pc.printf("\n\rTELECOMMAND received from CDMS is %s \n",telecommand);
prasanthbj05 17:8a8024c45dc0 763 //pc.printf("\n\r Executing Telecommand \n");
sakthipriya 3:07e15677a75c 764 // for(int i = 0; i<134; i++)
sakthipriya 3:07e15677a75c 765 //pc.printf("%c", telemetry[i]);
prasanthbj05 17:8a8024c45dc0 766 }
prasanthbj05 17:8a8024c45dc0 767 }
sakthipriya 0:7b4c00e3912f 768 }
sakthipriya 0:7b4c00e3912f 769 //******************************************************* I2C *******************************************************************//
sakthipriya 0:7b4c00e3912f 770
sakthipriya 0:7b4c00e3912f 771 void FCTN_I2C_ISR()
sakthipriya 0:7b4c00e3912f 772 {
prasanthbj05 17:8a8024c45dc0 773 //synch.start();
sakthipriya 0:7b4c00e3912f 774 ptr_t_i2c->signal_set(0x4);
sakthipriya 0:7b4c00e3912f 775 }
sakthipriya 0:7b4c00e3912f 776
sakthipriya 5:bb592f3185cc 777 //***********************************************************FAULTS***************************************************************//
sakthipriya 5:bb592f3185cc 778 /*void ir1clear()
sakthipriya 5:bb592f3185cc 779 {
sakthipriya 5:bb592f3185cc 780 actual_data.faultIr_status |= 0x01; // alert
sakthipriya 5:bb592f3185cc 781
sakthipriya 5:bb592f3185cc 782 }*/
sakthipriya 5:bb592f3185cc 783
sakthipriya 5:bb592f3185cc 784
sakthipriya 5:bb592f3185cc 785
sakthipriya 5:bb592f3185cc 786 void ir2clear()
sakthipriya 5:bb592f3185cc 787 {
sakthipriya 5:bb592f3185cc 788 actual_data.faultIr_status |= 0x02;
Bragadeesh153 13:fb7facaf308b 789 TRXY_SW = 0; // Switch off TR XY
sakthipriya 5:bb592f3185cc 790 if1check = 1;
sakthipriya 5:bb592f3185cc 791 }
sakthipriya 5:bb592f3185cc 792
sakthipriya 5:bb592f3185cc 793 void ir3clear()
sakthipriya 5:bb592f3185cc 794 {
sakthipriya 5:bb592f3185cc 795 actual_data.faultIr_status |= 0x04;
Bragadeesh153 13:fb7facaf308b 796 DRV_Z_EN = 0;
sakthipriya 5:bb592f3185cc 797 wait_us(1);
Bragadeesh153 13:fb7facaf308b 798 DRV_Z_EN = 1;
sakthipriya 5:bb592f3185cc 799
sakthipriya 5:bb592f3185cc 800 }
sakthipriya 5:bb592f3185cc 801
sakthipriya 5:bb592f3185cc 802 void ir4clear()
sakthipriya 5:bb592f3185cc 803 {
sakthipriya 5:bb592f3185cc 804 if2check = 1;
sakthipriya 5:bb592f3185cc 805 actual_data.faultIr_status |= 0x08;
sakthipriya 5:bb592f3185cc 806 TRZ_SW = 0;
sakthipriya 5:bb592f3185cc 807 }
sakthipriya 5:bb592f3185cc 808
sakthipriya 5:bb592f3185cc 809 void ir5clear()
sakthipriya 5:bb592f3185cc 810 {
sakthipriya 5:bb592f3185cc 811 actual_data.faultIr_status |= 0x10;
sakthipriya 5:bb592f3185cc 812 CDMS_RESET = 0;
sakthipriya 5:bb592f3185cc 813 wait_us(1);
sakthipriya 5:bb592f3185cc 814 CDMS_RESET = 1;
sakthipriya 5:bb592f3185cc 815 }
sakthipriya 5:bb592f3185cc 816
sakthipriya 5:bb592f3185cc 817 void ir6clear()
sakthipriya 5:bb592f3185cc 818 {
sakthipriya 5:bb592f3185cc 819 actual_data.faultIr_status |= 0x20;
sakthipriya 5:bb592f3185cc 820 BCN_SW = 0;
sakthipriya 5:bb592f3185cc 821 wait_us(1);
sakthipriya 5:bb592f3185cc 822 BCN_SW = 1;
sakthipriya 5:bb592f3185cc 823 }
sakthipriya 5:bb592f3185cc 824
sakthipriya 5:bb592f3185cc 825 void ir7clear()
sakthipriya 5:bb592f3185cc 826 {
sakthipriya 5:bb592f3185cc 827 actual_data.faultIr_status |= 0x40;
sakthipriya 5:bb592f3185cc 828 }
sakthipriya 5:bb592f3185cc 829 uint8_t iter2=0,iter4 = 0;
sakthipriya 5:bb592f3185cc 830
sakthipriya 5:bb592f3185cc 831
sakthipriya 5:bb592f3185cc 832
sakthipriya 5:bb592f3185cc 833 void pollfault()
sakthipriya 5:bb592f3185cc 834 {
sakthipriya 5:bb592f3185cc 835 if (pf1==0) // OC_ATS1
sakthipriya 5:bb592f3185cc 836 {
sakthipriya 5:bb592f3185cc 837 pf1check=1;
sakthipriya 5:bb592f3185cc 838 actual_data.faultPoll_status |=0x01 ;
sakthipriya 9:194afacf7449 839 ATS1_SW_ENABLE = 1; // turn off ats1 // to be turned on next cycle in ACS
sakthipriya 5:bb592f3185cc 840 }
sakthipriya 5:bb592f3185cc 841 else actual_data.faultPoll_status &= 0xFE;
sakthipriya 5:bb592f3185cc 842
sakthipriya 5:bb592f3185cc 843 if (pf2==0)
sakthipriya 5:bb592f3185cc 844 {
sakthipriya 5:bb592f3185cc 845 pf2check=1;
sakthipriya 5:bb592f3185cc 846 actual_data.faultPoll_status |=0x02 ;
sakthipriya 9:194afacf7449 847 ATS2_SW_ENABLE = 1; // turn off ats2 // turn on in ACS
sakthipriya 5:bb592f3185cc 848 }
sakthipriya 5:bb592f3185cc 849 else actual_data.faultPoll_status &= 0xFD;
sakthipriya 5:bb592f3185cc 850
sakthipriya 5:bb592f3185cc 851 if (pf3==0)
sakthipriya 5:bb592f3185cc 852 { actual_data.faultPoll_status |=0x04 ;
Bragadeesh153 13:fb7facaf308b 853 DRV_XY_EN = 0;
sakthipriya 5:bb592f3185cc 854 wait_us(1);
Bragadeesh153 13:fb7facaf308b 855 DRV_XY_EN = 1;
sakthipriya 5:bb592f3185cc 856 }
sakthipriya 5:bb592f3185cc 857 else actual_data.faultPoll_status &= 0xFB;
sakthipriya 5:bb592f3185cc 858
sakthipriya 5:bb592f3185cc 859
sakthipriya 5:bb592f3185cc 860
sakthipriya 5:bb592f3185cc 861
sakthipriya 5:bb592f3185cc 862 /*if (ir1==1)
sakthipriya 5:bb592f3185cc 863 {
sakthipriya 5:bb592f3185cc 864 actual_data.faultIr_status &=0xFE;
sakthipriya 5:bb592f3185cc 865 }*/
lakshya 14:a9588f443f1a 866
sakthipriya 5:bb592f3185cc 867 if (ir2==1)
sakthipriya 5:bb592f3185cc 868 {
sakthipriya 5:bb592f3185cc 869 actual_data.faultIr_status &=0xFD;
sakthipriya 5:bb592f3185cc 870 }
sakthipriya 5:bb592f3185cc 871 if (ir3==1)
sakthipriya 5:bb592f3185cc 872 {
sakthipriya 5:bb592f3185cc 873 actual_data.faultIr_status &=0xFB;
sakthipriya 5:bb592f3185cc 874 }
sakthipriya 5:bb592f3185cc 875 if (ir4==1)
sakthipriya 5:bb592f3185cc 876 {
sakthipriya 5:bb592f3185cc 877 actual_data.faultIr_status &=0xF7;
sakthipriya 5:bb592f3185cc 878 }
sakthipriya 5:bb592f3185cc 879 if (ir5==1)
sakthipriya 5:bb592f3185cc 880 {
sakthipriya 5:bb592f3185cc 881 actual_data.faultIr_status &=0xEF;
sakthipriya 5:bb592f3185cc 882 }
sakthipriya 5:bb592f3185cc 883 if (ir6==1)
sakthipriya 5:bb592f3185cc 884 {
sakthipriya 5:bb592f3185cc 885 actual_data.faultIr_status &=0xDF;
sakthipriya 5:bb592f3185cc 886 }if (ir7==1)
sakthipriya 5:bb592f3185cc 887 {
sakthipriya 5:bb592f3185cc 888 actual_data.faultIr_status &=0xBF;
sakthipriya 5:bb592f3185cc 889 }
lakshya 14:a9588f443f1a 890
sakthipriya 5:bb592f3185cc 891
sakthipriya 5:bb592f3185cc 892 }
sakthipriya 5:bb592f3185cc 893
sakthipriya 5:bb592f3185cc 894
sakthipriya 0:7b4c00e3912f 895 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7b4c00e3912f 896 //SCHEDULER
sakthipriya 0:7b4c00e3912f 897 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7b4c00e3912f 898 uint8_t schedcount=1;
sakthipriya 0:7b4c00e3912f 899 void T_SC(void const *args)
sakthipriya 0:7b4c00e3912f 900 {
prasanthbj05 17:8a8024c45dc0 901 //printf("\n\r in scheduler");
sakthipriya 0:7b4c00e3912f 902
sakthipriya 0:7b4c00e3912f 903 if(schedcount == 7) //to reset the counter
sakthipriya 0:7b4c00e3912f 904 {
sakthipriya 0:7b4c00e3912f 905 schedcount = 1;
sakthipriya 0:7b4c00e3912f 906 }
sakthipriya 0:7b4c00e3912f 907 if(schedcount%1==0)
prasanthbj05 17:8a8024c45dc0 908 { //pc.printf("\nSTATE IS !!!!!! = %x !!\n",ACS_STATE);
prasanthbj05 17:8a8024c45dc0 909 //pc.printf("\niterp1 !!!!!! = %x !!\n",iterP1);
prasanthbj05 17:8a8024c45dc0 910 //pc.printf("\niteri2 IS !!!!!! = %x !!\n",iterI2);
prasanthbj05 17:8a8024c45dc0 911 //F_ACS();
sakthipriya 0:7b4c00e3912f 912 }
sakthipriya 0:7b4c00e3912f 913
sakthipriya 0:7b4c00e3912f 914 if(schedcount%2==0)
sakthipriya 0:7b4c00e3912f 915 {
prasanthbj05 17:8a8024c45dc0 916 //F_EPS();
sakthipriya 0:7b4c00e3912f 917 }
lakshya 14:a9588f443f1a 918 if(schedcount%1==0)
sakthipriya 0:7b4c00e3912f 919 {
prasanthbj05 17:8a8024c45dc0 920 //F_BCN();
sakthipriya 0:7b4c00e3912f 921 }
sakthipriya 0:7b4c00e3912f 922 schedcount++;
prasanthbj05 17:8a8024c45dc0 923 //printf("\n\r BAE is alive\n");
sakthipriya 0:7b4c00e3912f 924 }
sakthipriya 0:7b4c00e3912f 925
sakthipriya 0:7b4c00e3912f 926 Timer t_flag;
sakthipriya 0:7b4c00e3912f 927 void FLAG()
sakthipriya 0:7b4c00e3912f 928 {
sakthipriya 0:7b4c00e3912f 929
sakthipriya 0:7b4c00e3912f 930 //.............acs..................//
sakthipriya 9:194afacf7449 931 if(ACS_INIT_STATUS == 1)
sakthipriya 0:7b4c00e3912f 932 BAE_STATUS = BAE_STATUS | 0x00000080; //set ACS_INIT_STATUS flag
sakthipriya 9:194afacf7449 933 else if(ACS_INIT_STATUS == 0)
sakthipriya 0:7b4c00e3912f 934 BAE_STATUS &= 0xFFFFFF7F; //clear ACS_INIT_STATUS flag
sakthipriya 0:7b4c00e3912f 935
sakthipriya 9:194afacf7449 936 if(ACS_DATA_ACQ_STATUS == 1)
sakthipriya 0:7b4c00e3912f 937 BAE_STATUS =BAE_STATUS | 0x00000100; //set ACS_DATA_ACQ_STATUS flag
sakthipriya 9:194afacf7449 938 else if(ACS_DATA_ACQ_STATUS == 0)
sakthipriya 0:7b4c00e3912f 939 BAE_STATUS &= 0xFFFFFEFF; //clear ACS_DATA_ACQ_STATUS flag
sakthipriya 0:7b4c00e3912f 940
sakthipriya 9:194afacf7449 941 if(ACS_ATS_ENABLE == 1)
sakthipriya 0:7b4c00e3912f 942 BAE_ENABLE |= 0x00000004;
sakthipriya 9:194afacf7449 943 else if(ACS_ATS_ENABLE == 0)
sakthipriya 0:7b4c00e3912f 944 BAE_ENABLE = BAE_ENABLE &0xFFFFFFFB | 0x00000004;
sakthipriya 0:7b4c00e3912f 945
sakthipriya 0:7b4c00e3912f 946 if(ACS_DATA_ACQ_STATUS == 'f')
sakthipriya 0:7b4c00e3912f 947 BAE_STATUS |= 0x00000200;
sakthipriya 0:7b4c00e3912f 948
sakthipriya 9:194afacf7449 949 if(ACS_MAIN_STATUS == 1)
sakthipriya 0:7b4c00e3912f 950 BAE_STATUS = (BAE_STATUS | 0x00001000); //set ACS_MAIN_STATUS flag
sakthipriya 9:194afacf7449 951 else if(ACS_MAIN_STATUS == 0)
sakthipriya 0:7b4c00e3912f 952 BAE_STATUS &= 0xFFFFEFFF; //clear ACS_MAIN_STATUS flag
sakthipriya 0:7b4c00e3912f 953
sakthipriya 0:7b4c00e3912f 954 if(ACS_STATUS == '0')
sakthipriya 0:7b4c00e3912f 955 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF); // set ACS_STATUS = ACS_CONTROL_OFF
sakthipriya 0:7b4c00e3912f 956 else if(ACS_STATUS == '1')
sakthipriya 0:7b4c00e3912f 957 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x00002000; // set ACS_STATUS = ACS_LOW_POWER
sakthipriya 0:7b4c00e3912f 958 else if(ACS_STATUS == '2')
sakthipriya 0:7b4c00e3912f 959 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF)| 0x00004000; // set ACS_STATUS = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:7b4c00e3912f 960 else if(ACS_STATUS == '3')
sakthipriya 0:7b4c00e3912f 961 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF) | 0x00006000; // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
sakthipriya 0:7b4c00e3912f 962 else if(ACS_STATUS == '4')
sakthipriya 0:7b4c00e3912f 963 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF) | 0x00008000; // set ACS_STATUS = ACS_NOMINAL_ONLY
sakthipriya 0:7b4c00e3912f 964 else if(ACS_STATUS == '5')
sakthipriya 0:7b4c00e3912f 965 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000A000; // set ACS_STATUS = ACS_AUTO_CONTROL
sakthipriya 0:7b4c00e3912f 966 else if(ACS_STATUS == '6')
sakthipriya 0:7b4c00e3912f 967 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000C000; // set ACS_STATUS = ACS_DETUMBLING_ONLY
sakthipriya 0:7b4c00e3912f 968 else
sakthipriya 0:7b4c00e3912f 969 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000E000; // set ACS_STATUS = INVALID STATE
sakthipriya 0:7b4c00e3912f 970
sakthipriya 0:7b4c00e3912f 971 if(ACS_STATE == '0')
sakthipriya 0:7b4c00e3912f 972 BAE_ENABLE = (BAE_ENABLE & 0xFFFFFF8F); //ACS_STATE = ACS_CONTROL_OFF
sakthipriya 0:7b4c00e3912f 973 else if(ACS_STATE == '2')
sakthipriya 0:7b4c00e3912f 974 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000020); // ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:7b4c00e3912f 975 else if(ACS_STATE == '3')
sakthipriya 0:7b4c00e3912f 976 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000030); // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
sakthipriya 0:7b4c00e3912f 977 else if(ACS_STATE == '4')
sakthipriya 0:7b4c00e3912f 978 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000040); // ACS_STATE = ACS_NOMINAL_ONLY
sakthipriya 0:7b4c00e3912f 979 else if(ACS_STATE == '5')
sakthipriya 0:7b4c00e3912f 980 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000050); // ACS_STATE = ACS_AUTO_CONTROL
sakthipriya 0:7b4c00e3912f 981 else if(ACS_STATE == '6')
sakthipriya 0:7b4c00e3912f 982 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000060); //ACS_STATE = ACS_DETUMBLING_CONTROL
sakthipriya 0:7b4c00e3912f 983
sakthipriya 0:7b4c00e3912f 984 //...............eps......................//
sakthipriya 5:bb592f3185cc 985
sakthipriya 5:bb592f3185cc 986
sakthipriya 9:194afacf7449 987 if (EPS_INIT_STATUS==1) // Set EPS_INIT_STATUS
sakthipriya 5:bb592f3185cc 988 BAE_STATUS |= 0x00010000;
sakthipriya 9:194afacf7449 989 else if(EPS_INIT_STATUS==0) // Clear
sakthipriya 5:bb592f3185cc 990 BAE_STATUS &= 0xFFFEFFFF;
sakthipriya 5:bb592f3185cc 991
sakthipriya 5:bb592f3185cc 992
sakthipriya 9:194afacf7449 993 if (EPS_MAIN_STATUS==1) // Set EPS_MAIIN_STATUS
sakthipriya 5:bb592f3185cc 994 BAE_STATUS |= 0x00040000;
sakthipriya 9:194afacf7449 995 else if(EPS_MAIN_STATUS==0) // Clear
sakthipriya 5:bb592f3185cc 996 BAE_STATUS &= 0xFFFBFFFF;
sakthipriya 5:bb592f3185cc 997
sakthipriya 5:bb592f3185cc 998
sakthipriya 9:194afacf7449 999 if (EPS_BATTERY_GAUGE_STATUS==1) // Set EPS_BATTERY_GAUGE_STATUS
sakthipriya 5:bb592f3185cc 1000 BAE_STATUS |= 0x00020000;
sakthipriya 9:194afacf7449 1001 else if(EPS_BATTERY_GAUGE_STATUS==0) // Clear
sakthipriya 5:bb592f3185cc 1002 BAE_STATUS &= 0xFFFDFFFF;
sakthipriya 5:bb592f3185cc 1003
sakthipriya 5:bb592f3185cc 1004
sakthipriya 9:194afacf7449 1005 if (EPS_BATTERY_TEMP_STATUS==1) // Set EPS_BATTERY_TEMP_STATUS
sakthipriya 5:bb592f3185cc 1006 BAE_STATUS |= 0x00080000;
sakthipriya 9:194afacf7449 1007 else if(EPS_BATTERY_TEMP_STATUS==0) // Clear
sakthipriya 5:bb592f3185cc 1008 BAE_STATUS &= 0xFFF7FFFF;
sakthipriya 5:bb592f3185cc 1009
sakthipriya 5:bb592f3185cc 1010 if (EPS_STATUS==0)
sakthipriya 5:bb592f3185cc 1011 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF); // Set EPS_ERR_BATTERY_TEMP
sakthipriya 5:bb592f3185cc 1012 else if (EPS_STATUS==1)
sakthipriya 5:bb592f3185cc 1013 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00010000; // Set EPS_BATTERY_HEATER_DISABLED
sakthipriya 5:bb592f3185cc 1014 else if (EPS_STATUS==2)
sakthipriya 5:bb592f3185cc 1015 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00020000; // Set EPS_ERR_HEATER_SWITCH_OFF
sakthipriya 5:bb592f3185cc 1016 else if (EPS_STATUS==3)
sakthipriya 5:bb592f3185cc 1017 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00030000; // Set EPS_ERR_HEATER_SWITCH_ON
sakthipriya 5:bb592f3185cc 1018 else if (EPS_STATUS==4)
sakthipriya 5:bb592f3185cc 1019 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00040000; // Set EPS_BATTERY_HEATER_OFF
sakthipriya 5:bb592f3185cc 1020 else if (EPS_STATUS==5)
prasanthbj05 18:95f0cc565ee3 1021 BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00050000; // Set EPS_BATTERY_HEATER_ON
sakthipriya 5:bb592f3185cc 1022
sakthipriya 9:194afacf7449 1023 if(EPS_BATTERY_HEAT_ENABLE == 1)
sakthipriya 5:bb592f3185cc 1024 BAE_ENABLE |= 0x00000080;
sakthipriya 9:194afacf7449 1025 else if(EPS_BATTERY_HEAT_ENABLE == 0)
prasanthbj05 18:95f0cc565ee3 1026 BAE_ENABLE = BAE_ENABLE &0xFFFFFF7;
sakthipriya 0:7b4c00e3912f 1027
sakthipriya 0:7b4c00e3912f 1028 pc.printf("\n\r BAE status %x BAE ENABLE %x ",BAE_STATUS,BAE_ENABLE);
sakthipriya 0:7b4c00e3912f 1029 }
sakthipriya 0:7b4c00e3912f 1030
sakthipriya 0:7b4c00e3912f 1031 void FCTN_BAE_INIT()
sakthipriya 0:7b4c00e3912f 1032 {
sakthipriya 0:7b4c00e3912f 1033 printf("\n\r Initialising BAE ");
sakthipriya 3:07e15677a75c 1034 //..........intial status....//
Bragadeesh153 13:fb7facaf308b 1035 ACS_STATE = 4;
sakthipriya 9:194afacf7449 1036 ACS_ATS_ENABLE = 1;
sakthipriya 9:194afacf7449 1037 ACS_DATA_ACQ_ENABLE = 1;
Bragadeesh153 16:cc77770d787f 1038
Bragadeesh153 16:cc77770d787f 1039
sakthipriya 9:194afacf7449 1040 EPS_BATTERY_HEAT_ENABLE = 1;
Bragadeesh153 13:fb7facaf308b 1041 actual_data.power_mode=3;
sakthipriya 9:194afacf7449 1042 //............intializing pins................//
Bragadeesh153 16:cc77770d787f 1043
Bragadeesh153 16:cc77770d787f 1044 ATS2_SW_ENABLE = 1;
Bragadeesh153 16:cc77770d787f 1045 ATS1_SW_ENABLE = 1;
Bragadeesh153 16:cc77770d787f 1046 wait_ms(5);
sakthipriya 9:194afacf7449 1047 ATS1_SW_ENABLE = 0;
Bragadeesh153 16:cc77770d787f 1048
Bragadeesh153 16:cc77770d787f 1049 ACS_ATS_STATUS = 0x60; //Set Sensor 1 working , Sensor2 working and powered off by default
Bragadeesh153 13:fb7facaf308b 1050
Bragadeesh153 13:fb7facaf308b 1051 DRV_XY_EN = 1;
Bragadeesh153 13:fb7facaf308b 1052 DRV_Z_EN = 1;
Bragadeesh153 13:fb7facaf308b 1053 TRZ_SW = 1;
Bragadeesh153 13:fb7facaf308b 1054 TRXY_SW = 1;
sakthipriya 9:194afacf7449 1055
sakthipriya 3:07e15677a75c 1056 //............................//
prasanthbj05 17:8a8024c45dc0 1057 //FCTN_ACS_INIT();
prasanthbj05 17:8a8024c45dc0 1058 //FCTN_EPS_INIT();
lakshya 14:a9588f443f1a 1059 //FCTN_BCN_INIT();
sakthipriya 3:07e15677a75c 1060
sakthipriya 3:07e15677a75c 1061
sakthipriya 0:7b4c00e3912f 1062 FLAG();
sakthipriya 0:7b4c00e3912f 1063 }
sakthipriya 0:7b4c00e3912f 1064
sakthipriya 0:7b4c00e3912f 1065 int main()
sakthipriya 0:7b4c00e3912f 1066 {
prasanthbj05 17:8a8024c45dc0 1067 pc.baud(9600);
sakthipriya 0:7b4c00e3912f 1068 pc.printf("\n\r BAE Activated. Testing Version 1.1 \n");
prasanthbj05 18:95f0cc565ee3 1069 //slave.frequency(100000);
prasanthbj05 17:8a8024c45dc0 1070 //CDMS_RESET = 1;
lakshya 14:a9588f443f1a 1071 /*if (BCN_FEN == 0) //dummy implementation
sakthipriya 0:7b4c00e3912f 1072 {
sakthipriya 0:7b4c00e3912f 1073 pc.printf("\n\r RF silence ");
Bragadeesh153 12:af1d7e18b868 1074 FCTN_BCN_FEN();
sakthipriya 0:7b4c00e3912f 1075 t_rfsilence.start();//Start the timer for RF_Silence
sakthipriya 0:7b4c00e3912f 1076 while(t_rfsilence.read() < RF_SILENCE_TIME);
sakthipriya 0:7b4c00e3912f 1077 }
sakthipriya 0:7b4c00e3912f 1078 */
sakthipriya 3:07e15677a75c 1079
sakthipriya 9:194afacf7449 1080 //ACS_INIT_STATUS = 0;
sakthipriya 9:194afacf7449 1081 //ACS_DATA_ACQ_STATUS = 0;
Bragadeesh153 13:fb7facaf308b 1082
Bragadeesh153 13:fb7facaf308b 1083
sakthipriya 9:194afacf7449 1084
Bragadeesh153 13:fb7facaf308b 1085 //FLAG();
sakthipriya 0:7b4c00e3912f 1086 FCTN_BAE_INIT();
prasanthbj05 17:8a8024c45dc0 1087 //pc.printf("\n\rPORTE->PCR[0] = 0x%08X",PORTE->PCR[0]);
prasanthbj05 17:8a8024c45dc0 1088 //pc.printf("\n\rPORTE->PCR[1] = 0x%08X",PORTE->PCR[1]);
sakthipriya 3:07e15677a75c 1089
sakthipriya 0:7b4c00e3912f 1090
sakthipriya 0:7b4c00e3912f 1091 //...i2c..
sakthipriya 3:07e15677a75c 1092 //strcpy(telemetry,"This is telemetry THis is sample telemetry. ffffffffffffffffffffffffffffff end");
sakthipriya 0:7b4c00e3912f 1093 slave.address(addr);
prasanthbj05 18:95f0cc565ee3 1094 slave.frequency(50000);
sakthipriya 0:7b4c00e3912f 1095 irpt_2_mstr = 0;
sakthipriya 0:7b4c00e3912f 1096
sakthipriya 0:7b4c00e3912f 1097 ptr_t_i2c = new Thread(T_TC);
sakthipriya 0:7b4c00e3912f 1098 ptr_t_i2c->set_priority(osPriorityHigh);
sakthipriya 5:bb592f3185cc 1099
sakthipriya 0:7b4c00e3912f 1100 irpt_4m_mstr.enable_irq();
sakthipriya 0:7b4c00e3912f 1101 irpt_4m_mstr.rise(&FCTN_I2C_ISR);
sakthipriya 5:bb592f3185cc 1102 // ir1.fall(&ir1clear); //Battery Gauge - Alert Bar Signal
lakshya 14:a9588f443f1a 1103 /* ir2.fall(&ir2clear); //TRXY Driver TR switch Fault
lakshya 14:a9588f443f1a 1104 ir3.fall(&ir3clear); //TRZ Driver Fault Bar
lakshya 14:a9588f443f1a 1105 ir4.fall(&ir4clear); //TRZ Driver TR switch Fault
lakshya 14:a9588f443f1a 1106 ir5.fall(&ir5clear); //CDMS - Switch Fault
lakshya 14:a9588f443f1a 1107 ir6.fall(&ir6clear); //Beacon- Switch OC bar
lakshya 14:a9588f443f1a 1108 ir7.fall(&ir7clear); //Charger IC - Fault Bar
lakshya 14:a9588f443f1a 1109
lakshya 14:a9588f443f1a 1110 */
sakthipriya 0:7b4c00e3912f 1111 RtosTimer t_sc_timer(T_SC,osTimerPeriodic); // Initiating the scheduler thread
sakthipriya 0:7b4c00e3912f 1112 t_sc_timer.start(10000);
sakthipriya 0:7b4c00e3912f 1113 t_start.start();
sakthipriya 0:7b4c00e3912f 1114 pc.printf("\n\rStarted scheduler %f\n\r",t_start.read());
prasanthbj05 17:8a8024c45dc0 1115 printf("\n\rPTE->DIR = 0x%08X",PTE->PDIR);
prasanthbj05 17:8a8024c45dc0 1116 //printf("\n\rInitial values\n");
prasanthbj05 17:8a8024c45dc0 1117 //debug();
prasanthbj05 17:8a8024c45dc0 1118 //debug2();
sakthipriya 0:7b4c00e3912f 1119 //FCTN_BAE_INIT();
sakthipriya 0:7b4c00e3912f 1120 while(1); //required to prevent main from terminating
sakthipriya 3:07e15677a75c 1121 }
sakthipriya 3:07e15677a75c 1122