bae wrking isr no bcn

Dependencies:   mbed-rtos mbed

Fork of TV_BAE_conops1_1_1 by Team Fox

Committer:
sakthipriya
Date:
Tue Nov 03 14:46:51 2015 +0000
Revision:
0:913c9e982740
i2c in rtos working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:913c9e982740 1 #include "mbed.h"
sakthipriya 0:913c9e982740 2 #include "rtos.h"
sakthipriya 0:913c9e982740 3 #include "pin_config.h"
sakthipriya 0:913c9e982740 4 #include "ACS.h"
sakthipriya 0:913c9e982740 5 #include "EPS.h"
sakthipriya 0:913c9e982740 6 #include "BCN.h"
sakthipriya 0:913c9e982740 7
sakthipriya 0:913c9e982740 8 #define tm_len 1100
sakthipriya 0:913c9e982740 9 #define tc_len 150
sakthipriya 0:913c9e982740 10 #define hk_len 150
sakthipriya 0:913c9e982740 11
sakthipriya 0:913c9e982740 12 //***************************************************** flags *************************************************************//
sakthipriya 0:913c9e982740 13 uint32_t BAE_STATUS = 0x00000000;
sakthipriya 0:913c9e982740 14 uint32_t BAE_ENABLE = 0xFFFFFFFF;
sakthipriya 0:913c9e982740 15
sakthipriya 0:913c9e982740 16 //.........acs...............//
sakthipriya 0:913c9e982740 17 char ACS_INIT_STATUS = 'q';
sakthipriya 0:913c9e982740 18 char ACS_DATA_ACQ_STATUS = 'q';
sakthipriya 0:913c9e982740 19 char ACS_ATS_STATUS = 'q';
sakthipriya 0:913c9e982740 20 char ACS_MAIN_STATUS = 'q';
sakthipriya 0:913c9e982740 21 char ACS_STATUS = 'q';
sakthipriya 0:913c9e982740 22
sakthipriya 0:913c9e982740 23 char ACS_ATS_ENABLE = 'q';
sakthipriya 0:913c9e982740 24 char ACS_DATA_ACQ_ENABLE = 'q';
sakthipriya 0:913c9e982740 25 char ACS_STATE = 'q';
sakthipriya 0:913c9e982740 26
sakthipriya 0:913c9e982740 27 //.....................eps...................//
sakthipriya 0:913c9e982740 28 char EPS_INIT_STATUS = 'q';
sakthipriya 0:913c9e982740 29 char EPS_BATTERY_GAUGE_STATUS = 'q';
sakthipriya 0:913c9e982740 30 char EPS_MAIN_STATUS = 'q';
sakthipriya 0:913c9e982740 31 char EPS_BATTERY_TEMP_STATUS = 'q';
sakthipriya 0:913c9e982740 32 char EPS_STATUS = 'q';
sakthipriya 0:913c9e982740 33
sakthipriya 0:913c9e982740 34 char EPS_BATTERY_HEAT_ENABLE = 'q';
sakthipriya 0:913c9e982740 35
sakthipriya 0:913c9e982740 36 //*************************************Global declarations************************************************//
sakthipriya 0:913c9e982740 37 const int addr = 0x20; //slave address
sakthipriya 0:913c9e982740 38
sakthipriya 0:913c9e982740 39 Timer t_rfsilence;
sakthipriya 0:913c9e982740 40 Timer t_start;
sakthipriya 0:913c9e982740 41 Serial pc(USBTX, USBRX);
sakthipriya 0:913c9e982740 42 int power_flag_dummy=2;
sakthipriya 0:913c9e982740 43 float data[6];
sakthipriya 0:913c9e982740 44
sakthipriya 0:913c9e982740 45 extern float moment[3];
sakthipriya 0:913c9e982740 46 extern SensorData Sensor;
sakthipriya 0:913c9e982740 47 extern uint8_t BCN_FEN;
sakthipriya 0:913c9e982740 48
sakthipriya 0:913c9e982740 49 bool write_ack = 1;
sakthipriya 0:913c9e982740 50 bool read_ack = 1;
sakthipriya 0:913c9e982740 51 char hk_data[hk_len];
sakthipriya 0:913c9e982740 52 char telecommand[tc_len];
sakthipriya 0:913c9e982740 53 char telemetry[tm_len];
sakthipriya 0:913c9e982740 54 char data_send_flag = 'h';
sakthipriya 0:913c9e982740 55
sakthipriya 0:913c9e982740 56 //*****************************************************Assigning pins******************************************************//
sakthipriya 0:913c9e982740 57 DigitalOut gpo1(PTC0); // enable of att sens2 switch
sakthipriya 0:913c9e982740 58 DigitalOut gpo2(PTC16); // enable of att sens switch
sakthipriya 0:913c9e982740 59 InterruptIn irpt_4m_mstr(PIN38); //I2c interrupt from CDMS
sakthipriya 0:913c9e982740 60 DigitalOut irpt_2_mstr(PIN4); //I2C interrupt to CDMS
sakthipriya 0:913c9e982740 61 I2CSlave slave (PIN1,PIN2);
sakthipriya 0:913c9e982740 62
sakthipriya 0:913c9e982740 63
sakthipriya 0:913c9e982740 64 //gpo1 = 0;
sakthipriya 0:913c9e982740 65 PwmOut PWM1(PIN93); //x //Functions used to generate PWM signal
sakthipriya 0:913c9e982740 66 PwmOut PWM2(PIN94); //y
sakthipriya 0:913c9e982740 67 PwmOut PWM3(PIN95); //z //PWM output comes from pins p6
sakthipriya 0:913c9e982740 68
sakthipriya 0:913c9e982740 69
sakthipriya 0:913c9e982740 70 /*****************************************************************Threads USed***********************************************************************************/
sakthipriya 0:913c9e982740 71 Thread *ptr_t_acs;
sakthipriya 0:913c9e982740 72 Thread *ptr_t_eps;
sakthipriya 0:913c9e982740 73 Thread *ptr_t_bcn;
sakthipriya 0:913c9e982740 74 Thread *ptr_t_i2c;
sakthipriya 0:913c9e982740 75
sakthipriya 0:913c9e982740 76 /*********************************************************FCTN HEADERS***********************************************************************************/
sakthipriya 0:913c9e982740 77
sakthipriya 0:913c9e982740 78 void FCTN_ISR_I2C();
sakthipriya 0:913c9e982740 79 void FCTN_TM();
sakthipriya 0:913c9e982740 80
sakthipriya 0:913c9e982740 81 //*******************************************ACS THREAD**************************************************//
sakthipriya 0:913c9e982740 82
sakthipriya 0:913c9e982740 83 void T_ACS(void const *args)
sakthipriya 0:913c9e982740 84 {
sakthipriya 0:913c9e982740 85 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:913c9e982740 86 //b1[3] = {22, 22,10};
sakthipriya 0:913c9e982740 87 //omega1[3] = {2.1,3.0,1.5};
sakthipriya 0:913c9e982740 88 // gpo1 = 0; // att sens2 switch is disabled
sakthipriya 0:913c9e982740 89 // gpo2 = 0; // att sens switch is disabled
sakthipriya 0:913c9e982740 90
sakthipriya 0:913c9e982740 91 while(1)
sakthipriya 0:913c9e982740 92 {
sakthipriya 0:913c9e982740 93
sakthipriya 0:913c9e982740 94 Thread::signal_wait(0x1);
sakthipriya 0:913c9e982740 95 ACS_MAIN_STATUS = 's'; //set ACS_MAIN_STATUS flag
sakthipriya 0:913c9e982740 96 PWM1 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 97 PWM2 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 98 PWM3 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 99 pc.printf("\n\rEntered ACS %f\n",t_start.read());
sakthipriya 0:913c9e982740 100
sakthipriya 0:913c9e982740 101 if(ACS_DATA_ACQ_ENABLE == 'e')// check if ACS_DATA_ACQ_ENABLE = 1?
sakthipriya 0:913c9e982740 102 {
sakthipriya 0:913c9e982740 103 FLAG();
sakthipriya 0:913c9e982740 104 FCTN_ATS_DATA_ACQ(); //the angular velocity is stored in the first 3 values and magnetic field values in next 3
sakthipriya 0:913c9e982740 105 pc.printf("gyro values\n\r"); //printing the angular velocity and magnetic field values
sakthipriya 0:913c9e982740 106 for(int i=0; i<3; i++)
sakthipriya 0:913c9e982740 107 {
sakthipriya 0:913c9e982740 108 pc.printf("%f\n\r",data[i]);
sakthipriya 0:913c9e982740 109 }
sakthipriya 0:913c9e982740 110 pc.printf("mag values\n\r");
sakthipriya 0:913c9e982740 111 for(int i=3; i<6; i++)
sakthipriya 0:913c9e982740 112 {
sakthipriya 0:913c9e982740 113 pc.printf("%f\n\r",data[i]);
sakthipriya 0:913c9e982740 114
sakthipriya 0:913c9e982740 115 for(int i=0;i<3;i++)
sakthipriya 0:913c9e982740 116 {
sakthipriya 0:913c9e982740 117 omega1[i]= data[i];
sakthipriya 0:913c9e982740 118 b1[i] = data[i+3];
sakthipriya 0:913c9e982740 119 }
sakthipriya 0:913c9e982740 120 }
sakthipriya 0:913c9e982740 121 }//if ACS_DATA_ACQ_ENABLE = 1
sakthipriya 0:913c9e982740 122 else
sakthipriya 0:913c9e982740 123 {
sakthipriya 0:913c9e982740 124 // Z axis actuation is the only final solution,
sakthipriya 0:913c9e982740 125 }
sakthipriya 0:913c9e982740 126 if(ACS_STATE == '0') // check ACS_STATE = ACS_CONTROL_OFF?
sakthipriya 0:913c9e982740 127 {
sakthipriya 0:913c9e982740 128 printf("\n\r acs control off\n");
sakthipriya 0:913c9e982740 129 FLAG();
sakthipriya 0:913c9e982740 130 ACS_STATUS = '0'; // set ACS_STATUS = ACS_CONTROL_OFF
sakthipriya 0:913c9e982740 131 PWM1 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 132 PWM2 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 133 PWM3 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 134 }
sakthipriya 0:913c9e982740 135 else
sakthipriya 0:913c9e982740 136 {
sakthipriya 0:913c9e982740 137 if(Sensor.power_mode>1)
sakthipriya 0:913c9e982740 138
sakthipriya 0:913c9e982740 139 {
sakthipriya 0:913c9e982740 140 if(ACS_STATE == '2') // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:913c9e982740 141 {
sakthipriya 0:913c9e982740 142 FLAG();
sakthipriya 0:913c9e982740 143 printf("\n\r z axis moment only\n");
sakthipriya 0:913c9e982740 144 ACS_STATUS = '2'; // set ACS_STATUS = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:913c9e982740 145 // FCTN_ACS_CNTRLALGO(b1, omega1);
sakthipriya 0:913c9e982740 146 moment[0] = 0;
sakthipriya 0:913c9e982740 147 moment[1] = 0;
sakthipriya 0:913c9e982740 148 moment[2] =1.3;// is a dummy value
sakthipriya 0:913c9e982740 149 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:913c9e982740 150 }
sakthipriya 0:913c9e982740 151 else
sakthipriya 0:913c9e982740 152 {
sakthipriya 0:913c9e982740 153 if(ACS_STATE == '3') // check ACS_STATE = ACS_DATA_ACQ_FAILURE
sakthipriya 0:913c9e982740 154 {
sakthipriya 0:913c9e982740 155 FLAG();
sakthipriya 0:913c9e982740 156 printf("\n\r acs data failure ");
sakthipriya 0:913c9e982740 157 ACS_STATUS = '3'; // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
sakthipriya 0:913c9e982740 158 PWM1 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 159 PWM2 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 160 PWM3 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 161 }
sakthipriya 0:913c9e982740 162 else
sakthipriya 0:913c9e982740 163 {
sakthipriya 0:913c9e982740 164 if(ACS_STATE == '4') // check ACS_STATE = ACS_NOMINAL_ONLY
sakthipriya 0:913c9e982740 165 {
sakthipriya 0:913c9e982740 166 FLAG();
sakthipriya 0:913c9e982740 167 printf("\n\r nominal");
sakthipriya 0:913c9e982740 168 ACS_STATUS = '4'; // set ACS_STATUS = ACS_NOMINAL_ONLY
sakthipriya 0:913c9e982740 169 FCTN_ACS_CNTRLALGO(b1,omega1);
sakthipriya 0:913c9e982740 170 printf("\n\r moment values returned by control algo \n");
sakthipriya 0:913c9e982740 171 for(int i=0; i<3; i++)
sakthipriya 0:913c9e982740 172 {
sakthipriya 0:913c9e982740 173 printf("%f\t",moment[i]);
sakthipriya 0:913c9e982740 174 }
sakthipriya 0:913c9e982740 175 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:913c9e982740 176 }
sakthipriya 0:913c9e982740 177 else
sakthipriya 0:913c9e982740 178 {
sakthipriya 0:913c9e982740 179 if(ACS_STATE == '5') // check ACS_STATE = ACS_AUTO_CONTROL
sakthipriya 0:913c9e982740 180 {
sakthipriya 0:913c9e982740 181 FLAG();
sakthipriya 0:913c9e982740 182 printf("\n\r auto control");
sakthipriya 0:913c9e982740 183 ACS_STATUS = '5'; // set ACS_STATUS = ACS_AUTO_CONTROL
sakthipriya 0:913c9e982740 184 //FCTN_ACS_AUTOCTRL_LOGIC // gotta include this code
sakthipriya 0:913c9e982740 185 }
sakthipriya 0:913c9e982740 186 else
sakthipriya 0:913c9e982740 187 {
sakthipriya 0:913c9e982740 188 if(ACS_STATE == '6') // check ACS_STATE = ACS_DETUMBLING_ONLY
sakthipriya 0:913c9e982740 189 {
sakthipriya 0:913c9e982740 190 FLAG();
sakthipriya 0:913c9e982740 191 printf("\n\r Entered detumbling \n");
sakthipriya 0:913c9e982740 192 ACS_STATUS = '6'; // set ACS_STATUS = ACS_DETUMBLING_ONLY
sakthipriya 0:913c9e982740 193 FCTN_ACS_CNTRLALGO(b1,omega1); // detumbling code has to be included
sakthipriya 0:913c9e982740 194 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:913c9e982740 195 }
sakthipriya 0:913c9e982740 196 else
sakthipriya 0:913c9e982740 197 {
sakthipriya 0:913c9e982740 198 FLAG();
sakthipriya 0:913c9e982740 199 printf("\n\r invalid state");
sakthipriya 0:913c9e982740 200 ACS_STATUS = '7' ; // set ACS_STATUS = INVALID STATE
sakthipriya 0:913c9e982740 201 PWM1 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 202 PWM2 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 203 PWM3 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 204 }//else of invalid
sakthipriya 0:913c9e982740 205 }//else of autocontrol
sakthipriya 0:913c9e982740 206 }//else of nominal
sakthipriya 0:913c9e982740 207 }//else of data acg failure
sakthipriya 0:913c9e982740 208
sakthipriya 0:913c9e982740 209 }//else fo z axis moment only
sakthipriya 0:913c9e982740 210 }//if power >2
sakthipriya 0:913c9e982740 211 else
sakthipriya 0:913c9e982740 212 {
sakthipriya 0:913c9e982740 213 FLAG();
sakthipriya 0:913c9e982740 214 printf("\n\r low power");
sakthipriya 0:913c9e982740 215 ACS_STATUS = '1'; // set ACS_STATUS = ACS_LOW_POWER
sakthipriya 0:913c9e982740 216 PWM1 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 217 PWM2 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 218 PWM3 = 0; //clear pwm pins
sakthipriya 0:913c9e982740 219 }
sakthipriya 0:913c9e982740 220 } //else for acs control off
sakthipriya 0:913c9e982740 221
sakthipriya 0:913c9e982740 222
sakthipriya 0:913c9e982740 223
sakthipriya 0:913c9e982740 224 ACS_MAIN_STATUS = 'c'; //clear ACS_MAIN_STATUS flag
sakthipriya 0:913c9e982740 225 }//while ends
sakthipriya 0:913c9e982740 226
sakthipriya 0:913c9e982740 227
sakthipriya 0:913c9e982740 228 }
sakthipriya 0:913c9e982740 229 //***************************************************EPS THREAD***********************************************//
sakthipriya 0:913c9e982740 230
sakthipriya 0:913c9e982740 231 void T_EPS(void const *args)
sakthipriya 0:913c9e982740 232 {
sakthipriya 0:913c9e982740 233 while(1)
sakthipriya 0:913c9e982740 234 {
sakthipriya 0:913c9e982740 235 Thread::signal_wait(0x2);
sakthipriya 0:913c9e982740 236 pc.printf("\n\rEntered EPS %f\n",t_start.read());
sakthipriya 0:913c9e982740 237
sakthipriya 0:913c9e982740 238 }
sakthipriya 0:913c9e982740 239
sakthipriya 0:913c9e982740 240 }
sakthipriya 0:913c9e982740 241
sakthipriya 0:913c9e982740 242 //**************************************************BCN THREAD*******************************************************************//
sakthipriya 0:913c9e982740 243
sakthipriya 0:913c9e982740 244 void T_BCN(void const *args)
sakthipriya 0:913c9e982740 245 {
sakthipriya 0:913c9e982740 246 while(1)
sakthipriya 0:913c9e982740 247 {
sakthipriya 0:913c9e982740 248 Thread::signal_wait(0x3);
sakthipriya 0:913c9e982740 249 pc.printf("\n\rEntered BCN %f\n",t_start.read());
sakthipriya 0:913c9e982740 250
sakthipriya 0:913c9e982740 251 P_BCN_TX_MAIN();
sakthipriya 0:913c9e982740 252 }
sakthipriya 0:913c9e982740 253
sakthipriya 0:913c9e982740 254 }
sakthipriya 0:913c9e982740 255
sakthipriya 0:913c9e982740 256 //**************************************************TCTM THREAD*******************************************************************//
sakthipriya 0:913c9e982740 257
sakthipriya 0:913c9e982740 258 void T_TC(void const * args)
sakthipriya 0:913c9e982740 259 {
sakthipriya 0:913c9e982740 260 while(1)
sakthipriya 0:913c9e982740 261 {
sakthipriya 0:913c9e982740 262 Thread::signal_wait(0x1);
sakthipriya 0:913c9e982740 263 pc.printf("\n\rTELECOMMAND received from CDMS is %s \n",telecommand);
sakthipriya 0:913c9e982740 264 pc.printf("\n\r Executing Telecommand \n");
sakthipriya 0:913c9e982740 265 FCTN_TM();
sakthipriya 0:913c9e982740 266 }
sakthipriya 0:913c9e982740 267 }
sakthipriya 0:913c9e982740 268
sakthipriya 0:913c9e982740 269 void FCTN_TM()
sakthipriya 0:913c9e982740 270 {
sakthipriya 0:913c9e982740 271 pc.printf("\n\r Telemetry Generation \n");
sakthipriya 0:913c9e982740 272 data_send_flag = 't';
sakthipriya 0:913c9e982740 273 irpt_2_mstr = 1;
sakthipriya 0:913c9e982740 274 wait_us(100);
sakthipriya 0:913c9e982740 275 irpt_2_mstr = 0;
sakthipriya 0:913c9e982740 276
sakthipriya 0:913c9e982740 277
sakthipriya 0:913c9e982740 278 }
sakthipriya 0:913c9e982740 279
sakthipriya 0:913c9e982740 280
sakthipriya 0:913c9e982740 281 //******************************************************* I2C *******************************************************************//
sakthipriya 0:913c9e982740 282
sakthipriya 0:913c9e982740 283 void FCTN_I2C_ISR()
sakthipriya 0:913c9e982740 284 {
sakthipriya 0:913c9e982740 285 wait_us(200); // can be between 38 to 15700
sakthipriya 0:913c9e982740 286 if( slave.receive() == 0)
sakthipriya 0:913c9e982740 287 slave.stop();
sakthipriya 0:913c9e982740 288 else if( slave.receive() == 1) // slave writes to master
sakthipriya 0:913c9e982740 289 {
sakthipriya 0:913c9e982740 290 if(data_send_flag == 'h')
sakthipriya 0:913c9e982740 291 write_ack=slave.write(hk_data,hk_len);
sakthipriya 0:913c9e982740 292 else if(data_send_flag == 't')
sakthipriya 0:913c9e982740 293 {
sakthipriya 0:913c9e982740 294 write_ack=slave.write(telemetry,tm_len);
sakthipriya 0:913c9e982740 295 data_send_flag = 'h';
sakthipriya 0:913c9e982740 296 }
sakthipriya 0:913c9e982740 297
sakthipriya 0:913c9e982740 298 }
sakthipriya 0:913c9e982740 299 else if( slave.receive()==3 || slave.receive()==2) // slave read
sakthipriya 0:913c9e982740 300 {
sakthipriya 0:913c9e982740 301 read_ack=slave.read(telecommand,tc_len);
sakthipriya 0:913c9e982740 302 ptr_t_i2c->signal_set(0x1);
sakthipriya 0:913c9e982740 303 }
sakthipriya 0:913c9e982740 304 }
sakthipriya 0:913c9e982740 305
sakthipriya 0:913c9e982740 306
sakthipriya 0:913c9e982740 307 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:913c9e982740 308 //SCHEDULER
sakthipriya 0:913c9e982740 309 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:913c9e982740 310 uint8_t schedcount=1;
sakthipriya 0:913c9e982740 311 void T_SC(void const *args)
sakthipriya 0:913c9e982740 312 {
sakthipriya 0:913c9e982740 313 printf("\n\r in scheduler");
sakthipriya 0:913c9e982740 314
sakthipriya 0:913c9e982740 315 if(schedcount == 7) //to reset the counter
sakthipriya 0:913c9e982740 316 {
sakthipriya 0:913c9e982740 317 schedcount = 1;
sakthipriya 0:913c9e982740 318 }
sakthipriya 0:913c9e982740 319 if(schedcount%1==0)
sakthipriya 0:913c9e982740 320 {
sakthipriya 0:913c9e982740 321 ptr_t_acs -> signal_set(0x1);
sakthipriya 0:913c9e982740 322 }
sakthipriya 0:913c9e982740 323
sakthipriya 0:913c9e982740 324 if(schedcount%2==0)
sakthipriya 0:913c9e982740 325 {
sakthipriya 0:913c9e982740 326 // ptr_t_eps -> signal_set(0x2);
sakthipriya 0:913c9e982740 327
sakthipriya 0:913c9e982740 328 }
sakthipriya 0:913c9e982740 329 if(schedcount%3==0)
sakthipriya 0:913c9e982740 330 {
sakthipriya 0:913c9e982740 331 //ptr_t_bcn -> signal_set(0x3);
sakthipriya 0:913c9e982740 332 }
sakthipriya 0:913c9e982740 333 schedcount++;
sakthipriya 0:913c9e982740 334 printf("\n\r exited scheduler");
sakthipriya 0:913c9e982740 335 }
sakthipriya 0:913c9e982740 336
sakthipriya 0:913c9e982740 337 Timer t_flag;
sakthipriya 0:913c9e982740 338 void FLAG()
sakthipriya 0:913c9e982740 339 {
sakthipriya 0:913c9e982740 340
sakthipriya 0:913c9e982740 341 //.............acs..................//
sakthipriya 0:913c9e982740 342 if(ACS_INIT_STATUS == 's')
sakthipriya 0:913c9e982740 343 BAE_STATUS = BAE_STATUS | 0x00000080; //set ACS_INIT_STATUS flag
sakthipriya 0:913c9e982740 344 else if(ACS_INIT_STATUS == 'c')
sakthipriya 0:913c9e982740 345 BAE_STATUS &= 0xFFFFFF7F; //clear ACS_INIT_STATUS flag
sakthipriya 0:913c9e982740 346
sakthipriya 0:913c9e982740 347 if(ACS_DATA_ACQ_STATUS == 's')
sakthipriya 0:913c9e982740 348 BAE_STATUS =BAE_STATUS | 0x00000100; //set ACS_DATA_ACQ_STATUS flag
sakthipriya 0:913c9e982740 349 else if(ACS_DATA_ACQ_STATUS == 'c')
sakthipriya 0:913c9e982740 350 BAE_STATUS &= 0xFFFFFEFF; //clear ACS_DATA_ACQ_STATUS flag
sakthipriya 0:913c9e982740 351
sakthipriya 0:913c9e982740 352 if(ACS_ATS_ENABLE == 'e')
sakthipriya 0:913c9e982740 353 BAE_ENABLE |= 0x00000004;
sakthipriya 0:913c9e982740 354 else if(ACS_ATS_ENABLE == 'd')
sakthipriya 0:913c9e982740 355 BAE_ENABLE = BAE_ENABLE &0xFFFFFFFB | 0x00000004;
sakthipriya 0:913c9e982740 356
sakthipriya 0:913c9e982740 357 if(ACS_DATA_ACQ_STATUS == 'f')
sakthipriya 0:913c9e982740 358 BAE_STATUS |= 0x00000200;
sakthipriya 0:913c9e982740 359
sakthipriya 0:913c9e982740 360 if(ACS_MAIN_STATUS == 's')
sakthipriya 0:913c9e982740 361 BAE_STATUS = (BAE_STATUS | 0x00001000); //set ACS_MAIN_STATUS flag
sakthipriya 0:913c9e982740 362 else if(ACS_MAIN_STATUS == 'c')
sakthipriya 0:913c9e982740 363 BAE_STATUS &= 0xFFFFEFFF; //clear ACS_MAIN_STATUS flag
sakthipriya 0:913c9e982740 364
sakthipriya 0:913c9e982740 365 if(ACS_STATUS == '0')
sakthipriya 0:913c9e982740 366 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF); // set ACS_STATUS = ACS_CONTROL_OFF
sakthipriya 0:913c9e982740 367 else if(ACS_STATUS == '1')
sakthipriya 0:913c9e982740 368 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x00002000; // set ACS_STATUS = ACS_LOW_POWER
sakthipriya 0:913c9e982740 369 else if(ACS_STATUS == '2')
sakthipriya 0:913c9e982740 370 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF)| 0x00004000; // set ACS_STATUS = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:913c9e982740 371 else if(ACS_STATUS == '3')
sakthipriya 0:913c9e982740 372 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF) | 0x00006000; // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
sakthipriya 0:913c9e982740 373 else if(ACS_STATUS == '4')
sakthipriya 0:913c9e982740 374 BAE_STATUS = (BAE_STATUS & 0xFFFF1FFF) | 0x00008000; // set ACS_STATUS = ACS_NOMINAL_ONLY
sakthipriya 0:913c9e982740 375 else if(ACS_STATUS == '5')
sakthipriya 0:913c9e982740 376 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000A000; // set ACS_STATUS = ACS_AUTO_CONTROL
sakthipriya 0:913c9e982740 377 else if(ACS_STATUS == '6')
sakthipriya 0:913c9e982740 378 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000C000; // set ACS_STATUS = ACS_DETUMBLING_ONLY
sakthipriya 0:913c9e982740 379 else
sakthipriya 0:913c9e982740 380 BAE_STATUS =(BAE_STATUS & 0xFFFF1FFF) | 0x0000E000; // set ACS_STATUS = INVALID STATE
sakthipriya 0:913c9e982740 381
sakthipriya 0:913c9e982740 382 if(ACS_STATE == '0')
sakthipriya 0:913c9e982740 383 BAE_ENABLE = (BAE_ENABLE & 0xFFFFFF8F); //ACS_STATE = ACS_CONTROL_OFF
sakthipriya 0:913c9e982740 384 else if(ACS_STATE == '2')
sakthipriya 0:913c9e982740 385 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000020); // ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:913c9e982740 386 else if(ACS_STATE == '3')
sakthipriya 0:913c9e982740 387 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000030); // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
sakthipriya 0:913c9e982740 388 else if(ACS_STATE == '4')
sakthipriya 0:913c9e982740 389 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000040); // ACS_STATE = ACS_NOMINAL_ONLY
sakthipriya 0:913c9e982740 390 else if(ACS_STATE == '5')
sakthipriya 0:913c9e982740 391 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000050); // ACS_STATE = ACS_AUTO_CONTROL
sakthipriya 0:913c9e982740 392 else if(ACS_STATE == '6')
sakthipriya 0:913c9e982740 393 BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000060); //ACS_STATE = ACS_DETUMBLING_CONTROL
sakthipriya 0:913c9e982740 394
sakthipriya 0:913c9e982740 395 //...............eps......................//
sakthipriya 0:913c9e982740 396 if(EPS_INIT_STATUS == 's')
sakthipriya 0:913c9e982740 397 BAE_STATUS |= 0x00010000; //set EPS_INIT_STATUS flag
sakthipriya 0:913c9e982740 398 else if(EPS_INIT_STATUS == 'c')
sakthipriya 0:913c9e982740 399 BAE_STATUS &= 0xFFFEFFFF; //clear EPS_INIT_STATUS flag
sakthipriya 0:913c9e982740 400 if(EPS_BATTERY_GAUGE_STATUS == 'c')
sakthipriya 0:913c9e982740 401 BAE_STATUS &= 0xFFFDFFFF; //clear EPS_BATTERY_GAUGE_STATUS
sakthipriya 0:913c9e982740 402 else if(EPS_BATTERY_GAUGE_STATUS == 's')
sakthipriya 0:913c9e982740 403 BAE_STATUS |= 0x00020000; //set EPS_BATTERY_GAUGE_STATUS
sakthipriya 0:913c9e982740 404
sakthipriya 0:913c9e982740 405
sakthipriya 0:913c9e982740 406 pc.printf("\n\r BAE status %x BAE ENABLE %x ",BAE_STATUS,BAE_ENABLE);
sakthipriya 0:913c9e982740 407 }
sakthipriya 0:913c9e982740 408
sakthipriya 0:913c9e982740 409 void FCTN_BAE_INIT()
sakthipriya 0:913c9e982740 410 {
sakthipriya 0:913c9e982740 411 printf("\n\r Initialising BAE ");
sakthipriya 0:913c9e982740 412 FCTN_ACS_INIT();
sakthipriya 0:913c9e982740 413 FCTN_EPS_INIT();
sakthipriya 0:913c9e982740 414 //P_BCN_INIT();
sakthipriya 0:913c9e982740 415 FLAG();
sakthipriya 0:913c9e982740 416 }
sakthipriya 0:913c9e982740 417
sakthipriya 0:913c9e982740 418 int main()
sakthipriya 0:913c9e982740 419 {
sakthipriya 0:913c9e982740 420 pc.printf("\n\r BAE Activated. Testing Version 1.1 \n");
sakthipriya 0:913c9e982740 421
sakthipriya 0:913c9e982740 422 /* if (BCN_FEN == 0) //dummy implementation
sakthipriya 0:913c9e982740 423 {
sakthipriya 0:913c9e982740 424 pc.printf("\n\r RF silence ");
sakthipriya 0:913c9e982740 425 P_BCN_FEN();
sakthipriya 0:913c9e982740 426 t_rfsilence.start();//Start the timer for RF_Silence
sakthipriya 0:913c9e982740 427 while(t_rfsilence.read() < RF_SILENCE_TIME);
sakthipriya 0:913c9e982740 428 }
sakthipriya 0:913c9e982740 429 */
sakthipriya 0:913c9e982740 430 ACS_STATE = '0';
sakthipriya 0:913c9e982740 431 //ACS_INIT_STATUS = 'c';
sakthipriya 0:913c9e982740 432 //ACS_DATA_ACQ_STATUS = 'c';
sakthipriya 0:913c9e982740 433 gpo1 = 0;
sakthipriya 0:913c9e982740 434 FLAG();
sakthipriya 0:913c9e982740 435 FCTN_BAE_INIT();
sakthipriya 0:913c9e982740 436 ACS_ATS_ENABLE = 'e';
sakthipriya 0:913c9e982740 437 ACS_DATA_ACQ_ENABLE = 'e';
sakthipriya 0:913c9e982740 438
sakthipriya 0:913c9e982740 439 //...i2c..
sakthipriya 0:913c9e982740 440 strcpy(telemetry,"This is telemetry THis is sample telemetry. fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff end");
sakthipriya 0:913c9e982740 441 strcpy(hk_data," This is hk hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh h end");
sakthipriya 0:913c9e982740 442 slave.address(addr);
sakthipriya 0:913c9e982740 443 irpt_2_mstr = 0;
sakthipriya 0:913c9e982740 444
sakthipriya 0:913c9e982740 445 ptr_t_i2c = new Thread(T_TC);
sakthipriya 0:913c9e982740 446 ptr_t_i2c->set_priority(osPriorityHigh);
sakthipriya 0:913c9e982740 447 ptr_t_acs = new Thread(T_ACS);
sakthipriya 0:913c9e982740 448 ptr_t_acs->set_priority(osPriorityAboveNormal);
sakthipriya 0:913c9e982740 449 ptr_t_eps = new Thread(T_EPS);
sakthipriya 0:913c9e982740 450 ptr_t_eps->set_priority(osPriorityAboveNormal);
sakthipriya 0:913c9e982740 451 ptr_t_bcn = new Thread(T_BCN);
sakthipriya 0:913c9e982740 452 ptr_t_bcn->set_priority(osPriorityAboveNormal);
sakthipriya 0:913c9e982740 453
sakthipriya 0:913c9e982740 454 irpt_4m_mstr.enable_irq();
sakthipriya 0:913c9e982740 455 irpt_4m_mstr.rise(&FCTN_I2C_ISR);
sakthipriya 0:913c9e982740 456 RtosTimer t_sc_timer(T_SC,osTimerPeriodic); // Initiating the scheduler thread
sakthipriya 0:913c9e982740 457 t_sc_timer.start(10000);
sakthipriya 0:913c9e982740 458 t_start.start();
sakthipriya 0:913c9e982740 459 pc.printf("\n\rStarted scheduler %f\n\r",t_start.read());
sakthipriya 0:913c9e982740 460
sakthipriya 0:913c9e982740 461 gpo1 = 0; // att sens2 switch is enabled
sakthipriya 0:913c9e982740 462 //FCTN_BAE_INIT();
sakthipriya 0:913c9e982740 463 while(1); //required to prevent main from terminating
sakthipriya 0:913c9e982740 464 }