QITH FLAGS

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of TF_conops_BAE1_3 by Team Fox

Committer:
raizel_varun
Date:
Fri Jul 10 10:09:56 2015 +0000
Revision:
2:3c6c33509772
Parent:
1:7185136654ce
WITH FLAGS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:246d1b5f11ae 1 /************************************************************Header files*****************************************************************/
sakthipriya 0:246d1b5f11ae 2
sakthipriya 0:246d1b5f11ae 3 #include "mbed.h"
sakthipriya 0:246d1b5f11ae 4 #include "rtos.h"
sakthipriya 0:246d1b5f11ae 5 #include "pin_config.h"
sakthipriya 0:246d1b5f11ae 6 #include "EPS.h"
sakthipriya 0:246d1b5f11ae 7 #include "beacon.h"
sakthipriya 0:246d1b5f11ae 8 #include "ACS.h"
sakthipriya 0:246d1b5f11ae 9 #include "FreescaleIAP.h" //required for r/w to flash
sakthipriya 0:246d1b5f11ae 10
sakthipriya 0:246d1b5f11ae 11 /***********************************************************For Testing - TO BE REMOVED***************************************************/
sakthipriya 0:246d1b5f11ae 12
sakthipriya 0:246d1b5f11ae 13 Serial pc(USBTX, USBRX); //for debugging purpose. will be removed along with printf
sakthipriya 0:246d1b5f11ae 14 Timer t_exec; //To know the time of execution each thread
sakthipriya 0:246d1b5f11ae 15 Timer t_start; //To know the time of entering of each thread
sakthipriya 0:246d1b5f11ae 16 Timer t_i2c_start; //To check the time sync in i2c communication
sakthipriya 0:246d1b5f11ae 17 Timer t_i2c_exec; //To know the time taken by i2c read/write function
sakthipriya 0:246d1b5f11ae 18
sakthipriya 0:246d1b5f11ae 19 /**********************************************************configuring peripherals********************************************************/
sakthipriya 0:246d1b5f11ae 20 I2CSlave slave(PIN1,PIN2); //configuring pins as I2Cslave (sda ,scl)
sakthipriya 0:246d1b5f11ae 21 InterruptIn irpt_4m_cdms(PIN97); //I2c interrupt from CDMS
sakthipriya 0:246d1b5f11ae 22 DigitalOut irpt_2_bae(PIN90); //Sets interrupt to CDMS
sakthipriya 1:7185136654ce 23
sakthipriya 1:7185136654ce 24 extern PwmOut PWM1;
sakthipriya 1:7185136654ce 25 extern PwmOut PWM2;
sakthipriya 1:7185136654ce 26 extern PwmOut PWM3;
sakthipriya 0:246d1b5f11ae 27
sakthipriya 0:246d1b5f11ae 28
sakthipriya 0:246d1b5f11ae 29 /****************************************************global variables*********************************************************************/
sakthipriya 0:246d1b5f11ae 30 // flags---------------------------------------------
sakthipriya 0:246d1b5f11ae 31 uint32_t BAE_STATUS = 0x00000000;
sakthipriya 0:246d1b5f11ae 32 uint32_t BAE_ENABLE = 0xFFFFFFFF;
sakthipriya 0:246d1b5f11ae 33 //---------------------------------------------------
sakthipriya 0:246d1b5f11ae 34 char hk_data[25];
sakthipriya 1:7185136654ce 35 extern SensorDataQuantised SensorQuantised;
sakthipriya 0:246d1b5f11ae 36 /*****************************************************************Threads USed***********************************************************************************/
sakthipriya 0:246d1b5f11ae 37 Thread *ptr_t_eps;
sakthipriya 0:246d1b5f11ae 38 Thread *ptr_t_acs;
sakthipriya 0:246d1b5f11ae 39 Thread *ptr_t_bea;
sakthipriya 0:246d1b5f11ae 40 Thread *ptr_t_i2c;
sakthipriya 0:246d1b5f11ae 41 //Thread *ptr_t_wdt;
sakthipriya 0:246d1b5f11ae 42
sakthipriya 0:246d1b5f11ae 43
sakthipriya 0:246d1b5f11ae 44 /**************************************************************funtion header**********************************************************************************/
sakthipriya 0:246d1b5f11ae 45
sakthipriya 0:246d1b5f11ae 46 void FCTN_HK_DATA_CATENATE(); //combines hk structure into a string
sakthipriya 0:246d1b5f11ae 47
sakthipriya 0:246d1b5f11ae 48
sakthipriya 1:7185136654ce 49 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 1:7185136654ce 50 //BEACON THREAD
sakthipriya 1:7185136654ce 51 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 1:7185136654ce 52
sakthipriya 1:7185136654ce 53 int beac_flag=0; //To receive telecommand from ground.
sakthipriya 1:7185136654ce 54
sakthipriya 1:7185136654ce 55 void T_BEA(void const *args)
sakthipriya 0:246d1b5f11ae 56 {
sakthipriya 0:246d1b5f11ae 57
sakthipriya 0:246d1b5f11ae 58 while(1)
sakthipriya 0:246d1b5f11ae 59 {
sakthipriya 1:7185136654ce 60 Thread::signal_wait(0x3);
sakthipriya 1:7185136654ce 61 printf("\n\rTHIS IS BEACON %f\n\r",t_start.read());
sakthipriya 0:246d1b5f11ae 62 t_exec.start();
sakthipriya 1:7185136654ce 63 FCTN_BEA_TX_MAIN();
sakthipriya 1:7185136654ce 64 if(beac_flag==1)
sakthipriya 1:7185136654ce 65 {
sakthipriya 1:7185136654ce 66 Thread::wait(600000);
sakthipriya 1:7185136654ce 67 beac_flag = 0;
sakthipriya 1:7185136654ce 68 }
sakthipriya 0:246d1b5f11ae 69 t_exec.stop();
sakthipriya 1:7185136654ce 70 printf("The time to execute beacon thread is %f seconds\n\r",t_exec.read());
sakthipriya 0:246d1b5f11ae 71 t_exec.reset();
sakthipriya 0:246d1b5f11ae 72 }
sakthipriya 0:246d1b5f11ae 73 }
sakthipriya 1:7185136654ce 74
sakthipriya 1:7185136654ce 75
sakthipriya 0:246d1b5f11ae 76
sakthipriya 0:246d1b5f11ae 77 //---------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 1:7185136654ce 78 //ACS THREAD
sakthipriya 0:246d1b5f11ae 79 //---------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 80 int power_flag = 4; //temporary dummy flag
sakthipriya 0:246d1b5f11ae 81 int acs_pflag = 1;
sakthipriya 0:246d1b5f11ae 82 void T_ACS(void const *args)
sakthipriya 0:246d1b5f11ae 83 {
sakthipriya 0:246d1b5f11ae 84 float mag_field1[3];
sakthipriya 0:246d1b5f11ae 85 float omega1[3];
sakthipriya 0:246d1b5f11ae 86 //float tauc1[3];
sakthipriya 0:246d1b5f11ae 87 float moment[3];
sakthipriya 0:246d1b5f11ae 88 //float *mnm_data;
sakthipriya 0:246d1b5f11ae 89 while(1)
sakthipriya 0:246d1b5f11ae 90 {
sakthipriya 0:246d1b5f11ae 91 Thread::signal_wait(0x1);
sakthipriya 0:246d1b5f11ae 92 printf("\n\rEntered ACS %f\n",t_start.read());
sakthipriya 0:246d1b5f11ae 93 t_exec.start();
raizel_varun 2:3c6c33509772 94 BAE_STATUS = (BAE_STATUS & 0xFFFEFFFF) + 0x00001000; //set ACS_MAIN_STATUS flag to 1
sakthipriya 0:246d1b5f11ae 95 PWM1 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 96 PWM2 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 97 PWM3 = 0; //clear pwm pins
sakthipriya 1:7185136654ce 98 //---------------------------------------
sakthipriya 1:7185136654ce 99 omega1[0] = 1 ; //for testing - to be removed
sakthipriya 0:246d1b5f11ae 100 omega1[1] = 2 ;
sakthipriya 0:246d1b5f11ae 101 omega1[2] = 3 ;
sakthipriya 0:246d1b5f11ae 102 mag_field1[0] = 10;
sakthipriya 0:246d1b5f11ae 103 mag_field1[1] = 20;
sakthipriya 0:246d1b5f11ae 104 mag_field1[2] = 30;
sakthipriya 1:7185136654ce 105 //--------------------------------------
raizel_varun 2:3c6c33509772 106 if (BAE_ENABLE & 0x00000008 == 0x00000008) // check if ACS_DATA_ACQ_ENABLE = 1?
sakthipriya 0:246d1b5f11ae 107 {
sakthipriya 0:246d1b5f11ae 108 FCTN_ACS_DATA_ACQ(omega1,mag_field1);
sakthipriya 0:246d1b5f11ae 109 printf("\n\rmnm gyro values\n"); //printing the angular velocity and magnetic field values
sakthipriya 0:246d1b5f11ae 110 for(int i=0; i<3; i++)
sakthipriya 0:246d1b5f11ae 111 {
sakthipriya 0:246d1b5f11ae 112 printf("%f\t",omega1[i]);
sakthipriya 0:246d1b5f11ae 113 }
sakthipriya 0:246d1b5f11ae 114 printf("\n\r mnm mag values\n");
sakthipriya 0:246d1b5f11ae 115 for(int i=0; i<3; i++)
sakthipriya 0:246d1b5f11ae 116 {
sakthipriya 0:246d1b5f11ae 117 printf("%f\t",mag_field1[i]);
sakthipriya 0:246d1b5f11ae 118 }
sakthipriya 0:246d1b5f11ae 119 }
raizel_varun 2:3c6c33509772 120 if(BAE_ENABLE & 0x00000000 == 0x00000000) // check ACS_STATE = ACS_CONTROL_OFF?
sakthipriya 0:246d1b5f11ae 121 {
raizel_varun 2:3c6c33509772 122 BAE_STATUS = (BAE_STATUS & 0xFFF1FFFF) + 0x00000000; // set ACS_STATUS = ACS_CONTROL_OFF
sakthipriya 0:246d1b5f11ae 123 PWM1 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 124 PWM2 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 125 PWM3 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 126 }
sakthipriya 0:246d1b5f11ae 127 else
sakthipriya 0:246d1b5f11ae 128 {
sakthipriya 0:246d1b5f11ae 129 if(power_flag > 1)
sakthipriya 0:246d1b5f11ae 130 {
raizel_varun 2:3c6c33509772 131 if(BAE_ENABLE & 0x00000020 == 0x00000020) // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:246d1b5f11ae 132 {
raizel_varun 2:3c6c33509772 133 BAE_STATUS = (BAE_STATUS & 0xFFF1FFFF) + 0x00004000; // set ACS_STATUS = ACS_ZAXIS_MOMENT_ONLY
sakthipriya 0:246d1b5f11ae 134 FCTN_ACS_CNTRLALGO(mag_field1,omega1,moment);
sakthipriya 0:246d1b5f11ae 135 printf("\n\r moment values returned by control algo \n");
sakthipriya 0:246d1b5f11ae 136 moment[0] = 0;
sakthipriya 0:246d1b5f11ae 137 moment[1] = 0;
sakthipriya 1:7185136654ce 138 printf("\n\r z axis moment %f \n",moment[2]);
sakthipriya 0:246d1b5f11ae 139 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:246d1b5f11ae 140 }
sakthipriya 0:246d1b5f11ae 141 else
sakthipriya 0:246d1b5f11ae 142 {
raizel_varun 2:3c6c33509772 143 if(BAE_ENABLE & 0x00000030 == 0x00000030) // check ACS_STATE = ACS_DATA_ACQ_FAILURE
sakthipriya 0:246d1b5f11ae 144 {
raizel_varun 2:3c6c33509772 145 BAE_STATUS = (BAE_STATUS & 0xFFF1FFFF) + 0x00006000; // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
sakthipriya 0:246d1b5f11ae 146 PWM1 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 147 PWM2 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 148 PWM3 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 149 }
sakthipriya 0:246d1b5f11ae 150 else
sakthipriya 0:246d1b5f11ae 151 {
raizel_varun 2:3c6c33509772 152 if(BAE_ENABLE & 0x00000040 == 0x00000040) // check ACS_STATE = ACS_NOMINAL_ONLY
sakthipriya 0:246d1b5f11ae 153 {
raizel_varun 2:3c6c33509772 154 BAE_STATUS = (BAE_STATUS & 0xFFF1FFFF) + 0x00008000; // set ACS_STATUS = ACS_NOMINAL_ONLY
sakthipriya 0:246d1b5f11ae 155 FCTN_ACS_CNTRLALGO(mag_field1,omega1,moment);
sakthipriya 0:246d1b5f11ae 156 printf("\n\r moment values returned by control algo \n");
sakthipriya 0:246d1b5f11ae 157 for(int i=0; i<3; i++)
sakthipriya 0:246d1b5f11ae 158 {
sakthipriya 0:246d1b5f11ae 159 printf("%f\t",moment[i]);
sakthipriya 0:246d1b5f11ae 160 }
sakthipriya 0:246d1b5f11ae 161 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:246d1b5f11ae 162 }
sakthipriya 0:246d1b5f11ae 163 else
sakthipriya 0:246d1b5f11ae 164 {
raizel_varun 2:3c6c33509772 165 if(BAE_ENABLE & 0x00000050 == 0x00000050) // check ACS_STATE = ACS_AUTO_CONTROL
sakthipriya 0:246d1b5f11ae 166 {
raizel_varun 2:3c6c33509772 167 BAE_STATUS =(BAE_STATUS & 0xFFF1FFFF) + 0x0000A000; // set ACS_STATUS = ACS_AUTO_CONTROL
sakthipriya 0:246d1b5f11ae 168 //FCTN_ACS_AUTOCTRL_LOGIC // gotta include this code
sakthipriya 0:246d1b5f11ae 169 }
sakthipriya 0:246d1b5f11ae 170 else
sakthipriya 0:246d1b5f11ae 171 {
raizel_varun 2:3c6c33509772 172 if(BAE_ENABLE & 0x00000060 == 0x00000060) // check ACS_STATE = ACS_DETUMBLING_ONLY
sakthipriya 0:246d1b5f11ae 173 {
raizel_varun 2:3c6c33509772 174 BAE_STATUS =(BAE_STATUS & 0xFFF1FFFF) + 0x0000C000; // set ACS_STATUS = ACS_DETUMBLING_ONLY
sakthipriya 0:246d1b5f11ae 175 FCTN_ACS_CNTRLALGO(mag_field1,omega1,moment); // detumbling code has to be included
sakthipriya 0:246d1b5f11ae 176 FCTN_ACS_GENPWM_MAIN(moment) ;
sakthipriya 0:246d1b5f11ae 177 }
sakthipriya 0:246d1b5f11ae 178 else
sakthipriya 0:246d1b5f11ae 179 {
raizel_varun 2:3c6c33509772 180 BAE_STATUS =(BAE_STATUS & 0xFFF1FFFF) + 0x0000E000; // set ACS_STATUS = INVALID STATE
sakthipriya 0:246d1b5f11ae 181 PWM1 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 182 PWM2 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 183 PWM3 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 184 }
sakthipriya 0:246d1b5f11ae 185 }
sakthipriya 0:246d1b5f11ae 186 }
sakthipriya 0:246d1b5f11ae 187 }
sakthipriya 0:246d1b5f11ae 188 }
sakthipriya 0:246d1b5f11ae 189 }
sakthipriya 0:246d1b5f11ae 190 else
sakthipriya 0:246d1b5f11ae 191 {
raizel_varun 2:3c6c33509772 192 BAE_STATUS =(BAE_STATUS & 0xFFF1FFFF) + 0x00000004; // set ACS_STATUS = ACS_LOW_POWER
sakthipriya 0:246d1b5f11ae 193 PWM1 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 194 PWM2 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 195 PWM3 = 0; //clear pwm pins
sakthipriya 0:246d1b5f11ae 196 }
sakthipriya 0:246d1b5f11ae 197 }
sakthipriya 0:246d1b5f11ae 198
sakthipriya 1:7185136654ce 199 BAE_STATUS &= 0xFFFFEFFF; //clear ACS_MAIN_STATUS flag
sakthipriya 1:7185136654ce 200 t_exec.stop();
sakthipriya 0:246d1b5f11ae 201 printf("\n exited acs main %f ",t_exec.read());
sakthipriya 0:246d1b5f11ae 202 t_exec.reset();
sakthipriya 0:246d1b5f11ae 203 }
sakthipriya 0:246d1b5f11ae 204 }
sakthipriya 0:246d1b5f11ae 205
sakthipriya 1:7185136654ce 206 //--------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 1:7185136654ce 207 //EPS THREAD
sakthipriya 1:7185136654ce 208 //--------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 209
sakthipriya 1:7185136654ce 210 void T_EPS(void const *args)
sakthipriya 0:246d1b5f11ae 211 {
sakthipriya 0:246d1b5f11ae 212
sakthipriya 0:246d1b5f11ae 213 while(1)
sakthipriya 0:246d1b5f11ae 214 {
sakthipriya 1:7185136654ce 215 Thread::signal_wait(0x2);
sakthipriya 1:7185136654ce 216 printf("\n\rTHIS IS EPS %f\n\r",t_start.read());
sakthipriya 0:246d1b5f11ae 217 t_exec.start();
sakthipriya 1:7185136654ce 218 BAE_STATUS |= 0x00040000; //set EPS_MAIN_STATUS flag
sakthipriya 1:7185136654ce 219 FCTN_EPS_HK_MAIN() ; //Collecting HK data
sakthipriya 1:7185136654ce 220 //FUNC_EPS_FAULTS(); //Actual fault management is not implemented
sakthipriya 1:7185136654ce 221 FCTN_EPS_BG_MAIN(); //requesting soc and power mode
sakthipriya 1:7185136654ce 222 //FUNC_HK_POWER(SensorQuantised.power_mode); // !The power mode algorithm is yet to be obtained
sakthipriya 1:7185136654ce 223
sakthipriya 1:7185136654ce 224 FCTN_HK_DATA_CATENATE(); //sending HK data to CDMS
sakthipriya 1:7185136654ce 225 BAE_STATUS &= 0xFFFBFFFF; //clear EPS_MAIN_STATUS flag
sakthipriya 1:7185136654ce 226 t_exec.stop();
sakthipriya 1:7185136654ce 227 printf("The time to execute hk_acq is %f seconds\n\r",t_exec.read());
sakthipriya 0:246d1b5f11ae 228 t_exec.reset();
sakthipriya 0:246d1b5f11ae 229 }
sakthipriya 0:246d1b5f11ae 230 }
sakthipriya 0:246d1b5f11ae 231
sakthipriya 0:246d1b5f11ae 232 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 1:7185136654ce 233 //I2C THREAD
sakthipriya 0:246d1b5f11ae 234 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 235
sakthipriya 0:246d1b5f11ae 236
sakthipriya 0:246d1b5f11ae 237 //....................................................................................................................................
sakthipriya 0:246d1b5f11ae 238
sakthipriya 0:246d1b5f11ae 239 void FCTN_I2C_READ(char *data,int length = 1);
sakthipriya 0:246d1b5f11ae 240 void FCTN_I2C_WRITE(char *data,int length = 1);
sakthipriya 0:246d1b5f11ae 241
sakthipriya 0:246d1b5f11ae 242 Timer t; // time taken from isr to reach i2c function
sakthipriya 0:246d1b5f11ae 243 Timer t1; //time taken by read or write function in i2c function
sakthipriya 0:246d1b5f11ae 244 Timer t2; //time taken by read function when first command from master comes
sakthipriya 0:246d1b5f11ae 245 bool write_ack = 1;
sakthipriya 0:246d1b5f11ae 246 bool read_ack = 1;
sakthipriya 0:246d1b5f11ae 247 char short_tc[10];
sakthipriya 0:246d1b5f11ae 248 char long_tc[134];
sakthipriya 0:246d1b5f11ae 249 char mstr_cmd;
sakthipriya 0:246d1b5f11ae 250 bool cmd_flag = 1;
sakthipriya 0:246d1b5f11ae 251 int length;
sakthipriya 0:246d1b5f11ae 252 //char* data;
sakthipriya 0:246d1b5f11ae 253 bool cmd_err = 1;
sakthipriya 0:246d1b5f11ae 254
sakthipriya 0:246d1b5f11ae 255
sakthipriya 0:246d1b5f11ae 256 void T_I2C(void const * args)
sakthipriya 0:246d1b5f11ae 257 {
sakthipriya 0:246d1b5f11ae 258 while(1)
sakthipriya 0:246d1b5f11ae 259 {
sakthipriya 0:246d1b5f11ae 260 Thread::signal_wait(0x1);
sakthipriya 0:246d1b5f11ae 261 // printf("\n\r check2\n");
sakthipriya 0:246d1b5f11ae 262 wait_us(100);
sakthipriya 0:246d1b5f11ae 263
sakthipriya 0:246d1b5f11ae 264 if(cmd_flag == 1)
sakthipriya 0:246d1b5f11ae 265 {
sakthipriya 0:246d1b5f11ae 266 t.stop();
sakthipriya 0:246d1b5f11ae 267 if( slave.receive()==3 || slave.receive()==2) // slave read
sakthipriya 0:246d1b5f11ae 268 {
sakthipriya 0:246d1b5f11ae 269
sakthipriya 0:246d1b5f11ae 270 t1.start();
sakthipriya 0:246d1b5f11ae 271 read_ack=slave.read(&mstr_cmd,1);
sakthipriya 0:246d1b5f11ae 272 t1.stop();
sakthipriya 0:246d1b5f11ae 273 if(read_ack == 0)
sakthipriya 0:246d1b5f11ae 274 printf("\n\r Data received from CDMS is %c \n",mstr_cmd);
sakthipriya 0:246d1b5f11ae 275
sakthipriya 0:246d1b5f11ae 276 switch(mstr_cmd)
sakthipriya 0:246d1b5f11ae 277 {
sakthipriya 0:246d1b5f11ae 278 case 's':
sakthipriya 0:246d1b5f11ae 279 length = 10;
sakthipriya 0:246d1b5f11ae 280 cmd_flag = 0;
sakthipriya 0:246d1b5f11ae 281 break;
sakthipriya 0:246d1b5f11ae 282
sakthipriya 0:246d1b5f11ae 283
sakthipriya 0:246d1b5f11ae 284 case 'l':
sakthipriya 0:246d1b5f11ae 285 length = 134;
sakthipriya 0:246d1b5f11ae 286 cmd_flag = 0;
sakthipriya 0:246d1b5f11ae 287 break;
sakthipriya 0:246d1b5f11ae 288
sakthipriya 0:246d1b5f11ae 289 case 'h':
sakthipriya 0:246d1b5f11ae 290 length = 25;
sakthipriya 0:246d1b5f11ae 291 cmd_flag = 0;
sakthipriya 0:246d1b5f11ae 292 break;
sakthipriya 0:246d1b5f11ae 293
sakthipriya 0:246d1b5f11ae 294 default:
sakthipriya 0:246d1b5f11ae 295 printf("\n\r invalid command \n");
sakthipriya 0:246d1b5f11ae 296 //cmd_err = 0;
sakthipriya 0:246d1b5f11ae 297 cmd_flag = 1;
sakthipriya 0:246d1b5f11ae 298 }
sakthipriya 0:246d1b5f11ae 299
sakthipriya 0:246d1b5f11ae 300
sakthipriya 0:246d1b5f11ae 301 }
sakthipriya 0:246d1b5f11ae 302 }
sakthipriya 0:246d1b5f11ae 303 else if(cmd_flag ==0 )
sakthipriya 0:246d1b5f11ae 304 {
sakthipriya 0:246d1b5f11ae 305 t.stop();
sakthipriya 0:246d1b5f11ae 306 if( slave.receive()==3 || slave.receive()==2) // slave read
sakthipriya 0:246d1b5f11ae 307 {
sakthipriya 0:246d1b5f11ae 308
sakthipriya 0:246d1b5f11ae 309 char* data=(char*)malloc(length*sizeof(char));
sakthipriya 0:246d1b5f11ae 310 FCTN_I2C_READ(data,length);
sakthipriya 0:246d1b5f11ae 311 free(data);
sakthipriya 0:246d1b5f11ae 312 cmd_flag = 1;
sakthipriya 0:246d1b5f11ae 313 }
sakthipriya 0:246d1b5f11ae 314 if( slave.receive() == 1) // slave writes to master
sakthipriya 0:246d1b5f11ae 315 {
sakthipriya 0:246d1b5f11ae 316 FCTN_I2C_WRITE(hk_data,length );
sakthipriya 0:246d1b5f11ae 317 cmd_flag = 1;
sakthipriya 0:246d1b5f11ae 318 }
sakthipriya 0:246d1b5f11ae 319 }
sakthipriya 0:246d1b5f11ae 320 printf("\n \r %d %d\n",t.read_us(),t1.read_us());
sakthipriya 0:246d1b5f11ae 321 t.reset();
sakthipriya 0:246d1b5f11ae 322 t1.reset();
sakthipriya 0:246d1b5f11ae 323
sakthipriya 0:246d1b5f11ae 324
sakthipriya 0:246d1b5f11ae 325 }
sakthipriya 0:246d1b5f11ae 326 }
sakthipriya 0:246d1b5f11ae 327
sakthipriya 0:246d1b5f11ae 328 void FCTN_I2C_READ(char *data, int length )
sakthipriya 0:246d1b5f11ae 329 {
sakthipriya 0:246d1b5f11ae 330 t1.start();
sakthipriya 0:246d1b5f11ae 331 read_ack=slave.read(data,length);
sakthipriya 0:246d1b5f11ae 332 t1.stop();
sakthipriya 0:246d1b5f11ae 333 if(read_ack == 0)
sakthipriya 0:246d1b5f11ae 334 printf("\n\rData received from CDMS is %s \n",data);
sakthipriya 0:246d1b5f11ae 335 else
sakthipriya 0:246d1b5f11ae 336 printf("\n\r data not received \n");
sakthipriya 0:246d1b5f11ae 337 }
sakthipriya 0:246d1b5f11ae 338
sakthipriya 0:246d1b5f11ae 339 void FCTN_I2C_WRITE(char *data,int length)
sakthipriya 0:246d1b5f11ae 340 {
sakthipriya 0:246d1b5f11ae 341 t1.start();
sakthipriya 0:246d1b5f11ae 342 write_ack=slave.write(data,length);
sakthipriya 0:246d1b5f11ae 343 t1.stop();
sakthipriya 0:246d1b5f11ae 344 if(write_ack == 0)
sakthipriya 0:246d1b5f11ae 345 printf("\n\rData sent to CDMS is %s \n",data);
sakthipriya 0:246d1b5f11ae 346 else
sakthipriya 0:246d1b5f11ae 347 printf("\n\r data not sent\n");
sakthipriya 0:246d1b5f11ae 348 }
sakthipriya 0:246d1b5f11ae 349
sakthipriya 0:246d1b5f11ae 350 void FCTN_ISR_I2C()
sakthipriya 0:246d1b5f11ae 351 {
sakthipriya 0:246d1b5f11ae 352 ptr_t_i2c->signal_set(0x1);
sakthipriya 0:246d1b5f11ae 353 t.start();
sakthipriya 0:246d1b5f11ae 354 }
sakthipriya 0:246d1b5f11ae 355
sakthipriya 0:246d1b5f11ae 356 void FCTN_HK_DATA_CATENATE()
sakthipriya 0:246d1b5f11ae 357 {
sakthipriya 0:246d1b5f11ae 358 strcpy(hk_data,"hk_Data");
sakthipriya 0:246d1b5f11ae 359 strcat(hk_data,SensorQuantised.Voltage);
sakthipriya 0:246d1b5f11ae 360 strcat(hk_data,SensorQuantised.Current);
sakthipriya 1:7185136654ce 361 strcat(hk_data,SensorQuantised.Temperature);
sakthipriya 0:246d1b5f11ae 362 strcat(hk_data,SensorQuantised.AngularSpeed);
sakthipriya 0:246d1b5f11ae 363 strcat(hk_data,SensorQuantised.Bnewvalue);
sakthipriya 0:246d1b5f11ae 364 char fdata[5] = {SensorQuantised.BatteryTemperature,SensorQuantised.faultpoll,SensorQuantised.faultir,SensorQuantised.power_mode};
sakthipriya 0:246d1b5f11ae 365 /*strcat(hk_data,sfaultpoll);
sakthipriya 0:246d1b5f11ae 366 strcat(hk_data,sfaultir);
sakthipriya 0:246d1b5f11ae 367 strcat(hk_data,spower_mode);*/
sakthipriya 0:246d1b5f11ae 368 strcat(hk_data,fdata);
sakthipriya 0:246d1b5f11ae 369 printf("\n\r hk data being sent %s ",hk_data);
sakthipriya 0:246d1b5f11ae 370 }
sakthipriya 0:246d1b5f11ae 371
sakthipriya 0:246d1b5f11ae 372
sakthipriya 0:246d1b5f11ae 373 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 1:7185136654ce 374 //SCHEDULER THREAD
sakthipriya 0:246d1b5f11ae 375 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 376 int beacon_sc = 3;
sakthipriya 0:246d1b5f11ae 377 uint8_t schedcount=1;
sakthipriya 0:246d1b5f11ae 378 void T_SC(void const *args)
sakthipriya 0:246d1b5f11ae 379 {
sakthipriya 0:246d1b5f11ae 380
sakthipriya 0:246d1b5f11ae 381
sakthipriya 0:246d1b5f11ae 382 if(schedcount == 4) //to reset the counter
sakthipriya 0:246d1b5f11ae 383 {
sakthipriya 0:246d1b5f11ae 384 schedcount = 1;
sakthipriya 0:246d1b5f11ae 385 }
sakthipriya 0:246d1b5f11ae 386 printf("\n\rThe value of i in scheduler is %d\n\r",schedcount);
sakthipriya 0:246d1b5f11ae 387 if(schedcount%1==0)
sakthipriya 0:246d1b5f11ae 388 {
sakthipriya 0:246d1b5f11ae 389 ptr_t_acs -> signal_set(0x1);
sakthipriya 0:246d1b5f11ae 390 }
sakthipriya 0:246d1b5f11ae 391
sakthipriya 0:246d1b5f11ae 392 if(schedcount%2==0)
sakthipriya 0:246d1b5f11ae 393 {
sakthipriya 0:246d1b5f11ae 394 ptr_t_eps -> signal_set(0x2);
sakthipriya 0:246d1b5f11ae 395
sakthipriya 0:246d1b5f11ae 396 }
sakthipriya 0:246d1b5f11ae 397 if(schedcount%beacon_sc==0)
sakthipriya 0:246d1b5f11ae 398 {
sakthipriya 0:246d1b5f11ae 399 if(beac_flag==0)
sakthipriya 0:246d1b5f11ae 400 {
sakthipriya 0:246d1b5f11ae 401 ptr_t_bea -> signal_set(0x3);
sakthipriya 0:246d1b5f11ae 402 }
sakthipriya 0:246d1b5f11ae 403 }
sakthipriya 0:246d1b5f11ae 404 schedcount++;
sakthipriya 0:246d1b5f11ae 405 }
sakthipriya 0:246d1b5f11ae 406
sakthipriya 0:246d1b5f11ae 407 //--------------------------------------------------------------BAE_INIT------------------------------------------------------------------//
sakthipriya 0:246d1b5f11ae 408
sakthipriya 0:246d1b5f11ae 409 void FCTN_BAE_INIT()
sakthipriya 0:246d1b5f11ae 410 {
sakthipriya 0:246d1b5f11ae 411 BAE_STATUS |= 0x00000001; // set BAE_INIT_STATUS to 1
sakthipriya 0:246d1b5f11ae 412 irpt_4m_cdms.disable_irq(); // disable interrupts
sakthipriya 0:246d1b5f11ae 413 slave.address(0x20); // setting slave address for BAE for I2C communication
sakthipriya 0:246d1b5f11ae 414 RtosTimer t_sc_timer(T_SC,osTimerPeriodic); // Initiating the scheduler thread - starting RTOS Timer
sakthipriya 0:246d1b5f11ae 415 t_sc_timer.start(10000);
sakthipriya 0:246d1b5f11ae 416 printf("\n\rStarted scheduler %f\n\r",t_start.read());
sakthipriya 0:246d1b5f11ae 417 FCTN_EPS_INIT(); // EPS INIT
sakthipriya 0:246d1b5f11ae 418 FCTN_ACS_INIT(); // ACS INIT
sakthipriya 0:246d1b5f11ae 419 FCTN_BEA_INIT(); // Beacon INIT
sakthipriya 0:246d1b5f11ae 420 //read bootup_count from flash
sakthipriya 0:246d1b5f11ae 421 //bootup_count++;
sakthipriya 0:246d1b5f11ae 422 //update bootup_count in flash
sakthipriya 0:246d1b5f11ae 423 irpt_4m_cdms.enable_irq();
sakthipriya 0:246d1b5f11ae 424 BAE_STATUS &= 0xFFFFFFFE; // clear BAE_INIT_STATUS to 0
sakthipriya 0:246d1b5f11ae 425 }
sakthipriya 0:246d1b5f11ae 426
sakthipriya 0:246d1b5f11ae 427
sakthipriya 1:7185136654ce 428 //-------------------------------------------------------------------BAE_MAIN-------------------------------------------------------------//
sakthipriya 0:246d1b5f11ae 429
sakthipriya 0:246d1b5f11ae 430 int main()
sakthipriya 0:246d1b5f11ae 431 {
sakthipriya 0:246d1b5f11ae 432 t_start.start();
sakthipriya 0:246d1b5f11ae 433 printf("\n\rIITMSAT BAE Activated \n");
sakthipriya 0:246d1b5f11ae 434
sakthipriya 0:246d1b5f11ae 435 //INITIALISING THREADS
sakthipriya 0:246d1b5f11ae 436 ptr_t_eps = new Thread(T_EPS);
sakthipriya 0:246d1b5f11ae 437 ptr_t_acs = new Thread(T_ACS);
sakthipriya 0:246d1b5f11ae 438 ptr_t_bea = new Thread(T_BEA);
sakthipriya 0:246d1b5f11ae 439 ptr_t_i2c = new Thread(T_I2C);
sakthipriya 0:246d1b5f11ae 440
sakthipriya 0:246d1b5f11ae 441 //INITIALISING INTERRUPTS
sakthipriya 0:246d1b5f11ae 442 //interrupt_fault(); //*to be included-function called when a fault interrupt is detected
sakthipriya 0:246d1b5f11ae 443 irpt_4m_cdms.fall(&FCTN_ISR_I2C); //interrupt received from CDMS
sakthipriya 0:246d1b5f11ae 444
sakthipriya 0:246d1b5f11ae 445 //Setting priority to threads
sakthipriya 0:246d1b5f11ae 446 ptr_t_acs->set_priority(osPriorityAboveNormal);
sakthipriya 0:246d1b5f11ae 447 ptr_t_eps->set_priority(osPriorityAboveNormal);
sakthipriya 0:246d1b5f11ae 448 ptr_t_bea->set_priority(osPriorityAboveNormal);
sakthipriya 0:246d1b5f11ae 449 ptr_t_i2c->set_priority(osPriorityHigh);
sakthipriya 0:246d1b5f11ae 450
sakthipriya 0:246d1b5f11ae 451 //----------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 452 printf("\n\r T_ACS priority is %d",ptr_t_acs->get_priority());
sakthipriya 0:246d1b5f11ae 453 printf("\n\r T_EPS priority is %d",ptr_t_eps->get_priority());
sakthipriya 0:246d1b5f11ae 454 printf("\n\r T_BEA priority is %d",ptr_t_bea->get_priority());
sakthipriya 0:246d1b5f11ae 455 printf("\n\r T_I2C priority is %d",ptr_t_i2c->get_priority());
sakthipriya 0:246d1b5f11ae 456 //----------------------------------------------------------------------------------------------
sakthipriya 0:246d1b5f11ae 457 FCTN_BAE_INIT();
sakthipriya 0:246d1b5f11ae 458 while(1) //required to prevent main from terminating
sakthipriya 0:246d1b5f11ae 459 {
sakthipriya 0:246d1b5f11ae 460 ;
sakthipriya 0:246d1b5f11ae 461 }
sakthipriya 0:246d1b5f11ae 462
sakthipriya 0:246d1b5f11ae 463 }