i2c working version

Dependencies:   mbed-rtos mbed

Committer:
sakthipriya
Date:
Thu Apr 09 22:44:39 2015 +0000
Revision:
0:7882d03f59e2
i2c working version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:7882d03f59e2 1 #include "mbed.h"
sakthipriya 0:7882d03f59e2 2 #include "rtos.h"
sakthipriya 0:7882d03f59e2 3 #include "HK.h"
sakthipriya 0:7882d03f59e2 4 #include "slave.h"
sakthipriya 0:7882d03f59e2 5 #include "beacon.h"
sakthipriya 0:7882d03f59e2 6 #include "ACS.h"
sakthipriya 0:7882d03f59e2 7 #include "fault.h"
sakthipriya 0:7882d03f59e2 8 #include "slave.h"
sakthipriya 0:7882d03f59e2 9 #include "mnm.h"
sakthipriya 0:7882d03f59e2 10
sakthipriya 0:7882d03f59e2 11 Serial pc(USBTX, USBRX);
sakthipriya 0:7882d03f59e2 12
sakthipriya 0:7882d03f59e2 13 //extern DigitalOut DRDY;
sakthipriya 0:7882d03f59e2 14 InterruptIn interrupt(PIN97);
sakthipriya 0:7882d03f59e2 15 //InterruptIn master_reset(D8);
sakthipriya 0:7882d03f59e2 16
sakthipriya 0:7882d03f59e2 17
sakthipriya 0:7882d03f59e2 18 Timer t; //To know the time of execution each thread
sakthipriya 0:7882d03f59e2 19 Timer t1;
sakthipriya 0:7882d03f59e2 20 //To know the time of entering of each thread
sakthipriya 0:7882d03f59e2 21 Timer t2;
sakthipriya 0:7882d03f59e2 22 Timer t3;
sakthipriya 0:7882d03f59e2 23 Timer t4;
sakthipriya 0:7882d03f59e2 24
sakthipriya 0:7882d03f59e2 25
sakthipriya 0:7882d03f59e2 26
sakthipriya 0:7882d03f59e2 27
sakthipriya 0:7882d03f59e2 28
sakthipriya 0:7882d03f59e2 29
sakthipriya 0:7882d03f59e2 30 Thread *ptr_t_hk_acq;
sakthipriya 0:7882d03f59e2 31 Thread *ptr_t_acs;
sakthipriya 0:7882d03f59e2 32 //Thread *ptr_t_acs_write2flash;
sakthipriya 0:7882d03f59e2 33 Thread *ptr_t_bea;
sakthipriya 0:7882d03f59e2 34 //Thread *ptr_t_bea_telecommand;
sakthipriya 0:7882d03f59e2 35 //Thread *ptr_t_fault;
sakthipriya 0:7882d03f59e2 36 Thread *ptr_t_i2c;
sakthipriya 0:7882d03f59e2 37 Thread *ptr_t_wdt;
sakthipriya 0:7882d03f59e2 38
sakthipriya 0:7882d03f59e2 39
sakthipriya 0:7882d03f59e2 40
sakthipriya 0:7882d03f59e2 41 I2CSlave slave(PIN72,PIN71); //configuring pins p27, p28 as I2Cslave
sakthipriya 0:7882d03f59e2 42
sakthipriya 0:7882d03f59e2 43
sakthipriya 0:7882d03f59e2 44 DigitalOut data_ready(PIN90);
sakthipriya 0:7882d03f59e2 45 int i2c_status=0; //read/write mode for i2c 0 : write2slave, 1 : write2master
sakthipriya 0:7882d03f59e2 46 int reset=0;
sakthipriya 0:7882d03f59e2 47 int temp;
sakthipriya 0:7882d03f59e2 48
sakthipriya 0:7882d03f59e2 49 typedef struct
sakthipriya 0:7882d03f59e2 50 {
sakthipriya 0:7882d03f59e2 51 char data[25]; // To avoid dynamic memory allocation
sakthipriya 0:7882d03f59e2 52 int length;
sakthipriya 0:7882d03f59e2 53 }i2c_data;
sakthipriya 0:7882d03f59e2 54
sakthipriya 0:7882d03f59e2 55
sakthipriya 0:7882d03f59e2 56
sakthipriya 0:7882d03f59e2 57
sakthipriya 0:7882d03f59e2 58
sakthipriya 0:7882d03f59e2 59
sakthipriya 0:7882d03f59e2 60 //Mail<i2c_data,16> i2c_data_receive;
sakthipriya 0:7882d03f59e2 61 Mail<i2c_data,16> i2c_data_send;
sakthipriya 0:7882d03f59e2 62
sakthipriya 0:7882d03f59e2 63 //--------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 64 //TASK 2 : HK
sakthipriya 0:7882d03f59e2 65 //--------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 66
sakthipriya 0:7882d03f59e2 67 char hk_data[25];
sakthipriya 0:7882d03f59e2 68 extern SensorDataQuantised SensorQuantised;
sakthipriya 0:7882d03f59e2 69 void T_HK_ACQ(void const *args)
sakthipriya 0:7882d03f59e2 70 {
sakthipriya 0:7882d03f59e2 71
sakthipriya 0:7882d03f59e2 72 while(1)
sakthipriya 0:7882d03f59e2 73 {
sakthipriya 0:7882d03f59e2 74 Thread::signal_wait(0x2);
sakthipriya 0:7882d03f59e2 75 SensorQuantised.power_mode='3';
sakthipriya 0:7882d03f59e2 76 printf("\n\rTHIS IS HK %f\n\r",t1.read());
sakthipriya 0:7882d03f59e2 77 t.start();
sakthipriya 0:7882d03f59e2 78 FUNC_HK_FAULTS();
sakthipriya 0:7882d03f59e2 79 FUNC_HK_POWER(SensorQuantised.power_mode); //The power mode algorithm is yet to be obtained
sakthipriya 0:7882d03f59e2 80 FUNC_HK_MAIN(); //Collecting HK data
sakthipriya 0:7882d03f59e2 81 //thread_2.signal_set(0x4);
sakthipriya 0:7882d03f59e2 82 //FUNC_I2C_SLAVE_MAIN(25);
sakthipriya 0:7882d03f59e2 83 FUNC_I2C_IR2CDMS();
sakthipriya 0:7882d03f59e2 84 t.stop();
sakthipriya 0:7882d03f59e2 85 printf("The time to execute hk_acq is %f seconds\n\r",t.read());
sakthipriya 0:7882d03f59e2 86 t.reset();
sakthipriya 0:7882d03f59e2 87 }
sakthipriya 0:7882d03f59e2 88 }
sakthipriya 0:7882d03f59e2 89
sakthipriya 0:7882d03f59e2 90 //---------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 91 //TASK 1 : ACS
sakthipriya 0:7882d03f59e2 92 //---------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 93
sakthipriya 0:7882d03f59e2 94 int acs_pflag = 1;
sakthipriya 0:7882d03f59e2 95 void T_ACS(void const *args)
sakthipriya 0:7882d03f59e2 96 {
sakthipriya 0:7882d03f59e2 97 float *mag_field;
sakthipriya 0:7882d03f59e2 98 float *omega;
sakthipriya 0:7882d03f59e2 99 float mag_field1[3];
sakthipriya 0:7882d03f59e2 100 float omega1[1];
sakthipriya 0:7882d03f59e2 101 float tauc1[3];
sakthipriya 0:7882d03f59e2 102 float moment[3];
sakthipriya 0:7882d03f59e2 103 float *mnm_data;
sakthipriya 0:7882d03f59e2 104 while(1)
sakthipriya 0:7882d03f59e2 105 {
sakthipriya 0:7882d03f59e2 106 Thread::signal_wait(0x1);
sakthipriya 0:7882d03f59e2 107 printf("\n\rTHIS IS ACS %f\n\r",t1.read());
sakthipriya 0:7882d03f59e2 108 t.start();
sakthipriya 0:7882d03f59e2 109 mag_field= FUNC_ACS_MAG_EXEC(); //actual execution
sakthipriya 0:7882d03f59e2 110 omega = FUNC_ACS_EXEC_GYR();
sakthipriya 0:7882d03f59e2 111 printf("\n\r gyr 1 value %f",omega[0]);
sakthipriya 0:7882d03f59e2 112 mnm_data=EXECUTE_PNI(); //the angular velocity is stored in the first 3 values and magnetic field values in next 3
sakthipriya 0:7882d03f59e2 113 printf("\n\rmnm gyro values\n"); //printing the angular velocity and magnetic field values
sakthipriya 0:7882d03f59e2 114 for(int i=0; i<3; i++)
sakthipriya 0:7882d03f59e2 115 {
sakthipriya 0:7882d03f59e2 116 printf("%f\t",mnm_data[i]);
sakthipriya 0:7882d03f59e2 117 }
sakthipriya 0:7882d03f59e2 118 printf("\n\r mnm mag values\n");
sakthipriya 0:7882d03f59e2 119 for(int i=3; i<6; i++) {
sakthipriya 0:7882d03f59e2 120 printf("%f\t",mnm_data[i]);
sakthipriya 0:7882d03f59e2 121 }
sakthipriya 0:7882d03f59e2 122 for(int i = 0 ; i<3;i++)
sakthipriya 0:7882d03f59e2 123 {
sakthipriya 0:7882d03f59e2 124 omega1[i] = mnm_data[i];
sakthipriya 0:7882d03f59e2 125 }
sakthipriya 0:7882d03f59e2 126 for( int i = 3;i<6;i++)
sakthipriya 0:7882d03f59e2 127 {
sakthipriya 0:7882d03f59e2 128 mag_field1[i-3] = mnm_data[i];
sakthipriya 0:7882d03f59e2 129 }
sakthipriya 0:7882d03f59e2 130 if(acs_pflag == 1)
sakthipriya 0:7882d03f59e2 131 {
sakthipriya 0:7882d03f59e2 132 for(int i=0; i<3; i++)
sakthipriya 0:7882d03f59e2 133 {
sakthipriya 0:7882d03f59e2 134 printf("%f\t",mnm_data[i]);
sakthipriya 0:7882d03f59e2 135 }
sakthipriya 0:7882d03f59e2 136 FUNC_ACS_CNTRLALGO(mag_field1,omega1,tauc1);
sakthipriya 0:7882d03f59e2 137 printf("\n\r control algo values ");
sakthipriya 0:7882d03f59e2 138 for(int i=0; i<3; i++)
sakthipriya 0:7882d03f59e2 139 {
sakthipriya 0:7882d03f59e2 140 printf("%f\t",tauc1[i]);
sakthipriya 0:7882d03f59e2 141 }
sakthipriya 0:7882d03f59e2 142 moment_calc (tauc1, mag_field1,moment);
sakthipriya 0:7882d03f59e2 143 printf("\n\r moment values ");
sakthipriya 0:7882d03f59e2 144 for(int i=0; i<3; i++)
sakthipriya 0:7882d03f59e2 145 {
sakthipriya 0:7882d03f59e2 146 printf("%f\t",moment[i]);
sakthipriya 0:7882d03f59e2 147 }
sakthipriya 0:7882d03f59e2 148
sakthipriya 0:7882d03f59e2 149 FUNC_ACS_GENPWM(moment);
sakthipriya 0:7882d03f59e2 150 }
sakthipriya 0:7882d03f59e2 151
sakthipriya 0:7882d03f59e2 152 t.reset();
sakthipriya 0:7882d03f59e2 153 }
sakthipriya 0:7882d03f59e2 154 }/*
sakthipriya 0:7882d03f59e2 155 void T_ACS_WRITE2FLASH(void const *args)
sakthipriya 0:7882d03f59e2 156 {
sakthipriya 0:7882d03f59e2 157 while(1)
sakthipriya 0:7882d03f59e2 158 {
sakthipriya 0:7882d03f59e2 159 //printf("Writing in the flash\n\r");
sakthipriya 0:7882d03f59e2 160 osEvent evt = q_acs.get();
sakthipriya 0:7882d03f59e2 161 if(evt.status == osEventMail)
sakthipriya 0:7882d03f59e2 162 {
sakthipriya 0:7882d03f59e2 163 sensor_data *ptr = (sensor_data*)evt.value.p;
sakthipriya 0:7882d03f59e2 164 FUNC_ACS_WRITE2FLASH(ptr);
sakthipriya 0:7882d03f59e2 165 q_acs.free(ptr);
sakthipriya 0:7882d03f59e2 166 }
sakthipriya 0:7882d03f59e2 167 printf("Writing acs data in the flash\n\r");
sakthipriya 0:7882d03f59e2 168 }
sakthipriya 0:7882d03f59e2 169 }
sakthipriya 0:7882d03f59e2 170
sakthipriya 0:7882d03f59e2 171 */
sakthipriya 0:7882d03f59e2 172 //---------------------------------------------------BEACON--------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 173
sakthipriya 0:7882d03f59e2 174 int beac_flag=0; //To receive telecommand from ground.
sakthipriya 0:7882d03f59e2 175
sakthipriya 0:7882d03f59e2 176
sakthipriya 0:7882d03f59e2 177 /*void T_BEA_TELECOMMAND(void const *args)
sakthipriya 0:7882d03f59e2 178 {
sakthipriya 0:7882d03f59e2 179 char c = pc.getc();
sakthipriya 0:7882d03f59e2 180 if(c=='a')
sakthipriya 0:7882d03f59e2 181 {
sakthipriya 0:7882d03f59e2 182 printf("Telecommand detected\n\r");
sakthipriya 0:7882d03f59e2 183 beac_flag=1;
sakthipriya 0:7882d03f59e2 184 }
sakthipriya 0:7882d03f59e2 185 }
sakthipriya 0:7882d03f59e2 186 */
sakthipriya 0:7882d03f59e2 187
sakthipriya 0:7882d03f59e2 188 void T_BEA(void const *args)
sakthipriya 0:7882d03f59e2 189 {
sakthipriya 0:7882d03f59e2 190
sakthipriya 0:7882d03f59e2 191 while(1)
sakthipriya 0:7882d03f59e2 192 {
sakthipriya 0:7882d03f59e2 193 Thread::signal_wait(0x3);
sakthipriya 0:7882d03f59e2 194 printf("\n\rTHIS IS BEACON %f\n\r",t1.read());
sakthipriya 0:7882d03f59e2 195 t.start();
sakthipriya 0:7882d03f59e2 196
sakthipriya 0:7882d03f59e2 197
sakthipriya 0:7882d03f59e2 198
sakthipriya 0:7882d03f59e2 199 FUNC_BEA();
sakthipriya 0:7882d03f59e2 200
sakthipriya 0:7882d03f59e2 201
sakthipriya 0:7882d03f59e2 202 if(beac_flag==1)
sakthipriya 0:7882d03f59e2 203 {
sakthipriya 0:7882d03f59e2 204 Thread::wait(600000);
sakthipriya 0:7882d03f59e2 205 beac_flag = 0;
sakthipriya 0:7882d03f59e2 206 }
sakthipriya 0:7882d03f59e2 207
sakthipriya 0:7882d03f59e2 208 printf("The time to execute beacon thread is %f seconds\n\r",t.read());
sakthipriya 0:7882d03f59e2 209 t.reset();
sakthipriya 0:7882d03f59e2 210 }
sakthipriya 0:7882d03f59e2 211 }
sakthipriya 0:7882d03f59e2 212
sakthipriya 0:7882d03f59e2 213 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 214 //TASK 4 : FAULT MANAGEMENT
sakthipriya 0:7882d03f59e2 215 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 216 //Dummy fault rectifier functions
sakthipriya 0:7882d03f59e2 217
sakthipriya 0:7882d03f59e2 218 extern SensorDataQuantised SensorQuantised;
sakthipriya 0:7882d03f59e2 219
sakthipriya 0:7882d03f59e2 220
sakthipriya 0:7882d03f59e2 221 /*void T_FAULT(void const *args)
sakthipriya 0:7882d03f59e2 222 {
sakthipriya 0:7882d03f59e2 223 Sensor.power_mode='0';
sakthipriya 0:7882d03f59e2 224 while(1)
sakthipriya 0:7882d03f59e2 225 {
sakthipriya 0:7882d03f59e2 226 Thread :: signal_wait(0x2);
sakthipriya 0:7882d03f59e2 227 FAULTS();
sakthipriya 0:7882d03f59e2 228 POWER(Sensor.power_mode);
sakthipriya 0:7882d03f59e2 229 //Sensor.power_mode++; //testing ... should be removed
sakthipriya 0:7882d03f59e2 230 }
sakthipriya 0:7882d03f59e2 231 }
sakthipriya 0:7882d03f59e2 232 */
sakthipriya 0:7882d03f59e2 233 /*-------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 234 -------------------------------------------------------WATCHDOG----------------------------------------------------------------------------*/
sakthipriya 0:7882d03f59e2 235 DigitalOut trigger(PIN63); // has to be changed
sakthipriya 0:7882d03f59e2 236 void T_WDT(void const * args)
sakthipriya 0:7882d03f59e2 237 {
sakthipriya 0:7882d03f59e2 238 trigger = 1;
sakthipriya 0:7882d03f59e2 239 while(true)
sakthipriya 0:7882d03f59e2 240 {
sakthipriya 0:7882d03f59e2 241 Thread::signal_wait(0x5); //signal set from scheduler or sthing. r RTOS timer nce the timing is finalized
sakthipriya 0:7882d03f59e2 242 printf("\n\rEntered WD\n\r");
sakthipriya 0:7882d03f59e2 243 trigger = !trigger;
sakthipriya 0:7882d03f59e2 244 }
sakthipriya 0:7882d03f59e2 245 }
sakthipriya 0:7882d03f59e2 246
sakthipriya 0:7882d03f59e2 247 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 248 //TASK 5 : i2c data
sakthipriya 0:7882d03f59e2 249 //---------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 250
sakthipriya 0:7882d03f59e2 251
sakthipriya 0:7882d03f59e2 252
sakthipriya 0:7882d03f59e2 253
sakthipriya 0:7882d03f59e2 254
sakthipriya 0:7882d03f59e2 255
sakthipriya 0:7882d03f59e2 256 void FUNC_I2C_WRITE2CDMS(char *data, int length=1)
sakthipriya 0:7882d03f59e2 257 {
sakthipriya 0:7882d03f59e2 258 int slave_status = 1;
sakthipriya 0:7882d03f59e2 259 //t2.stop();
sakthipriya 0:7882d03f59e2 260 if(interrupt ==1)
sakthipriya 0:7882d03f59e2 261 {
sakthipriya 0:7882d03f59e2 262
sakthipriya 0:7882d03f59e2 263 if(slave.receive() == 0)
sakthipriya 0:7882d03f59e2 264 t2.stop();
sakthipriya 0:7882d03f59e2 265 //t4.stop();
sakthipriya 0:7882d03f59e2 266 //printf("\n\r %d ",slave.receive());
sakthipriya 0:7882d03f59e2 267 if( slave.receive()==1)
sakthipriya 0:7882d03f59e2 268 {
sakthipriya 0:7882d03f59e2 269 t2.stop();
sakthipriya 0:7882d03f59e2 270
sakthipriya 0:7882d03f59e2 271 slave_status=slave.write(data,length);
sakthipriya 0:7882d03f59e2 272 t3.stop();
sakthipriya 0:7882d03f59e2 273
sakthipriya 0:7882d03f59e2 274 }
sakthipriya 0:7882d03f59e2 275 else if( slave.receive()==3 || slave.receive()==2)
sakthipriya 0:7882d03f59e2 276 {
sakthipriya 0:7882d03f59e2 277 t2.stop();
sakthipriya 0:7882d03f59e2 278 //t3.start();
sakthipriya 0:7882d03f59e2 279 slave_status=slave.read(data,length);
sakthipriya 0:7882d03f59e2 280 t3.stop();
sakthipriya 0:7882d03f59e2 281 }
sakthipriya 0:7882d03f59e2 282
sakthipriya 0:7882d03f59e2 283
sakthipriya 0:7882d03f59e2 284 }
sakthipriya 0:7882d03f59e2 285
sakthipriya 0:7882d03f59e2 286 printf("\n\r%d\r",t2.read_us());
sakthipriya 0:7882d03f59e2 287 t2.reset();
sakthipriya 0:7882d03f59e2 288 printf("\n\r%d\r",t3.read_us());
sakthipriya 0:7882d03f59e2 289 t3.reset();
sakthipriya 0:7882d03f59e2 290
sakthipriya 0:7882d03f59e2 291 }
sakthipriya 0:7882d03f59e2 292
sakthipriya 0:7882d03f59e2 293 char data_send[25],data_receive;
sakthipriya 0:7882d03f59e2 294 void T_I2C_BAE(void const * args)
sakthipriya 0:7882d03f59e2 295 {
sakthipriya 0:7882d03f59e2 296 //char data_send,data_receive;
sakthipriya 0:7882d03f59e2 297 while(1)
sakthipriya 0:7882d03f59e2 298 {
sakthipriya 0:7882d03f59e2 299 Thread::signal_wait(0x4);
sakthipriya 0:7882d03f59e2 300 // printf("\n\r entered thread");
sakthipriya 0:7882d03f59e2 301 if(i2c_status == 0 )
sakthipriya 0:7882d03f59e2 302 {
sakthipriya 0:7882d03f59e2 303 wait_ms(23);
sakthipriya 0:7882d03f59e2 304 FUNC_I2C_WRITE2CDMS(&data_receive,1);
sakthipriya 0:7882d03f59e2 305
sakthipriya 0:7882d03f59e2 306 /*i2c_data * i2c_data_r = i2c_data_receive.alloc();
sakthipriya 0:7882d03f59e2 307 i2c_data_r->data = data_receive;
sakthipriya 0:7882d03f59e2 308 i2c_data_r->length = 1;
sakthipriya 0:7882d03f59e2 309 i2c_data_receive.put(i2c_data_r);*/
sakthipriya 0:7882d03f59e2 310 printf("\n\r Data received from CDMS is %c \n\r",data_receive);
sakthipriya 0:7882d03f59e2 311 FUNC_I2C_TC_EXECUTE(data_receive); // This has to be done from a differen thread
sakthipriya 0:7882d03f59e2 312
sakthipriya 0:7882d03f59e2 313 }
sakthipriya 0:7882d03f59e2 314 else if(i2c_status ==1)
sakthipriya 0:7882d03f59e2 315 {
sakthipriya 0:7882d03f59e2 316 osEvent evt = i2c_data_send.get();
sakthipriya 0:7882d03f59e2 317 if (evt.status == osEventMail)
sakthipriya 0:7882d03f59e2 318 {
sakthipriya 0:7882d03f59e2 319 i2c_data *i2c_data_s = (i2c_data*)evt.value.p;
sakthipriya 0:7882d03f59e2 320 strcpy(data_send,i2c_data_s -> data);
sakthipriya 0:7882d03f59e2 321 wait_ms(29);
sakthipriya 0:7882d03f59e2 322 FUNC_I2C_WRITE2CDMS(data_send,25);
sakthipriya 0:7882d03f59e2 323 printf("\n\rData sent to CDMS is %s\n\r",data_send);
sakthipriya 0:7882d03f59e2 324
sakthipriya 0:7882d03f59e2 325 i2c_data_send.free(i2c_data_s);
sakthipriya 0:7882d03f59e2 326 i2c_status = 0;
sakthipriya 0:7882d03f59e2 327
sakthipriya 0:7882d03f59e2 328
sakthipriya 0:7882d03f59e2 329 }
sakthipriya 0:7882d03f59e2 330 }
sakthipriya 0:7882d03f59e2 331
sakthipriya 0:7882d03f59e2 332 }
sakthipriya 0:7882d03f59e2 333 }
sakthipriya 0:7882d03f59e2 334
sakthipriya 0:7882d03f59e2 335
sakthipriya 0:7882d03f59e2 336
sakthipriya 0:7882d03f59e2 337 void FUNC_I2C_INT()
sakthipriya 0:7882d03f59e2 338 {
sakthipriya 0:7882d03f59e2 339
sakthipriya 0:7882d03f59e2 340 t2.start();
sakthipriya 0:7882d03f59e2 341 // t3.start();
sakthipriya 0:7882d03f59e2 342 ptr_t_i2c->signal_set(0x4);
sakthipriya 0:7882d03f59e2 343
sakthipriya 0:7882d03f59e2 344
sakthipriya 0:7882d03f59e2 345 }
sakthipriya 0:7882d03f59e2 346
sakthipriya 0:7882d03f59e2 347 void FUNC_I2C_IR2CDMS()
sakthipriya 0:7882d03f59e2 348 {
sakthipriya 0:7882d03f59e2 349 data_ready=0;
sakthipriya 0:7882d03f59e2 350 //char data[25];
sakthipriya 0:7882d03f59e2 351 //strcpy(data,"sakthi ");
sakthipriya 0:7882d03f59e2 352 strcpy(hk_data,"hk_Data");
sakthipriya 0:7882d03f59e2 353 strcat(hk_data,SensorQuantised.Voltage);
sakthipriya 0:7882d03f59e2 354 strcat(hk_data,SensorQuantised.Current);
sakthipriya 0:7882d03f59e2 355 strcat(hk_data,SensorQuantised.Temperature);
sakthipriya 0:7882d03f59e2 356 strcat(hk_data,SensorQuantised.PanelTemperature);
sakthipriya 0:7882d03f59e2 357 strcat(hk_data,SensorQuantised.AngularSpeed);
sakthipriya 0:7882d03f59e2 358 strcat(hk_data,SensorQuantised.Bnewvalue);
sakthipriya 0:7882d03f59e2 359 char fdata[5] = {SensorQuantised.BatteryTemperature,SensorQuantised.faultpoll,SensorQuantised.faultir,SensorQuantised.power_mode};
sakthipriya 0:7882d03f59e2 360
sakthipriya 0:7882d03f59e2 361 /*strcat(hk_data,sfaultpoll);
sakthipriya 0:7882d03f59e2 362 strcat(hk_data,sfaultir);
sakthipriya 0:7882d03f59e2 363 strcat(hk_data,spower_mode);*/
sakthipriya 0:7882d03f59e2 364 strcat(hk_data,fdata);
sakthipriya 0:7882d03f59e2 365 printf("\n\r hk data being sent %s ",hk_data);
sakthipriya 0:7882d03f59e2 366 //for(int i=0;i<100000000000;i++)
sakthipriya 0:7882d03f59e2 367 //;
sakthipriya 0:7882d03f59e2 368
sakthipriya 0:7882d03f59e2 369 /*for(int d=0;d<23;d++) //was written just to check hk data
sakthipriya 0:7882d03f59e2 370 {
sakthipriya 0:7882d03f59e2 371 if(hk_data[d]>10)
sakthipriya 0:7882d03f59e2 372 printf("\n\rhk data : %d\n\r",hk_data[d]);
sakthipriya 0:7882d03f59e2 373 } */
sakthipriya 0:7882d03f59e2 374
sakthipriya 0:7882d03f59e2 375 //data = pcslave.getc();
sakthipriya 0:7882d03f59e2 376 reset =0;
sakthipriya 0:7882d03f59e2 377 i2c_status=1;
sakthipriya 0:7882d03f59e2 378 i2c_data * i2c_data_s = i2c_data_send.alloc();
sakthipriya 0:7882d03f59e2 379 strcpy(i2c_data_s->data,hk_data);
sakthipriya 0:7882d03f59e2 380 i2c_data_s->length = 25;
sakthipriya 0:7882d03f59e2 381 i2c_data_send.put(i2c_data_s);
sakthipriya 0:7882d03f59e2 382 data_ready=1;
sakthipriya 0:7882d03f59e2 383 //temp = i2c_status;
sakthipriya 0:7882d03f59e2 384 }
sakthipriya 0:7882d03f59e2 385
sakthipriya 0:7882d03f59e2 386
sakthipriya 0:7882d03f59e2 387 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 388 //TELECOMMAND
sakthipriya 0:7882d03f59e2 389 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 390 void FUNC_I2C_TC_EXECUTE (char command)
sakthipriya 0:7882d03f59e2 391 { switch(command)
sakthipriya 0:7882d03f59e2 392 { case '0' : printf("command 0 executed");
sakthipriya 0:7882d03f59e2 393 break;
sakthipriya 0:7882d03f59e2 394 case '1' : printf("command 1 executed");
sakthipriya 0:7882d03f59e2 395 break;
sakthipriya 0:7882d03f59e2 396 case '2' : printf("command 2 executed");
sakthipriya 0:7882d03f59e2 397 break;
sakthipriya 0:7882d03f59e2 398 case '3' : printf("command 3 executed");
sakthipriya 0:7882d03f59e2 399 }
sakthipriya 0:7882d03f59e2 400 }
sakthipriya 0:7882d03f59e2 401
sakthipriya 0:7882d03f59e2 402
sakthipriya 0:7882d03f59e2 403 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 404 //SCHEDULER
sakthipriya 0:7882d03f59e2 405 //------------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 406 int beacon_sc = 3;
sakthipriya 0:7882d03f59e2 407 uint16_t schedcount=1;
sakthipriya 0:7882d03f59e2 408 void T_SC(void const *args)
sakthipriya 0:7882d03f59e2 409 {
sakthipriya 0:7882d03f59e2 410 //DRDY=0;
sakthipriya 0:7882d03f59e2 411 printf("The value of i in scheduler is %d\n\r",schedcount);
sakthipriya 0:7882d03f59e2 412 if(schedcount == 65532) //to reset the counter
sakthipriya 0:7882d03f59e2 413 {
sakthipriya 0:7882d03f59e2 414 schedcount = 0;
sakthipriya 0:7882d03f59e2 415 }
sakthipriya 0:7882d03f59e2 416
sakthipriya 0:7882d03f59e2 417 if(schedcount%1==0)
sakthipriya 0:7882d03f59e2 418 {
sakthipriya 0:7882d03f59e2 419 // ptr_t_acs -> signal_set(0x1);
sakthipriya 0:7882d03f59e2 420 // ptr_t_wdt -> signal_set(0x5);
sakthipriya 0:7882d03f59e2 421 }
sakthipriya 0:7882d03f59e2 422 if(schedcount%2==0)
sakthipriya 0:7882d03f59e2 423 {
sakthipriya 0:7882d03f59e2 424 // ptr_t_fault -> signal_set(0x2);
sakthipriya 0:7882d03f59e2 425 ptr_t_hk_acq -> signal_set(0x2);
sakthipriya 0:7882d03f59e2 426
sakthipriya 0:7882d03f59e2 427 }
sakthipriya 0:7882d03f59e2 428 if(schedcount%beacon_sc==0)
sakthipriya 0:7882d03f59e2 429 {
sakthipriya 0:7882d03f59e2 430 if(beac_flag==0)
sakthipriya 0:7882d03f59e2 431 {
sakthipriya 0:7882d03f59e2 432
sakthipriya 0:7882d03f59e2 433 // ptr_t_bea -> signal_set(0x3);
sakthipriya 0:7882d03f59e2 434 }
sakthipriya 0:7882d03f59e2 435 }
sakthipriya 0:7882d03f59e2 436 schedcount++;
sakthipriya 0:7882d03f59e2 437 }
sakthipriya 0:7882d03f59e2 438
sakthipriya 0:7882d03f59e2 439 //---------------------------------------------------------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 440
sakthipriya 0:7882d03f59e2 441 int main()
sakthipriya 0:7882d03f59e2 442 {
sakthipriya 0:7882d03f59e2 443 t1.start();
sakthipriya 0:7882d03f59e2 444
sakthipriya 0:7882d03f59e2 445 //DRDY=0;
sakthipriya 0:7882d03f59e2 446 printf("\nahoy\n");
sakthipriya 0:7882d03f59e2 447 INIT_PNI();
sakthipriya 0:7882d03f59e2 448
sakthipriya 0:7882d03f59e2 449 FUNC_ACS_MAG_INIT();
sakthipriya 0:7882d03f59e2 450 FUNC_ACS_INIT_GYR();
sakthipriya 0:7882d03f59e2 451 slave.address(0x20);
sakthipriya 0:7882d03f59e2 452
sakthipriya 0:7882d03f59e2 453 ptr_t_hk_acq = new Thread(T_HK_ACQ);
sakthipriya 0:7882d03f59e2 454 ptr_t_acs = new Thread(T_ACS);
sakthipriya 0:7882d03f59e2 455 //ptr_t_acs_write2flash = new Thread(T_ACS_WRITE2FLASH);
sakthipriya 0:7882d03f59e2 456 ptr_t_bea = new Thread(T_BEA);
sakthipriya 0:7882d03f59e2 457 //ptr_t_bea_telecommand = new Thread(T_BEA_TELECOMMAND);
sakthipriya 0:7882d03f59e2 458 //ptr_t_fault = new Thread(T_FAULT);
sakthipriya 0:7882d03f59e2 459 ptr_t_i2c = new Thread(T_I2C_BAE);
sakthipriya 0:7882d03f59e2 460 //ptr_t_sc = new Thread(T_SC);
sakthipriya 0:7882d03f59e2 461 ptr_t_wdt = new Thread(T_WDT);
sakthipriya 0:7882d03f59e2 462
sakthipriya 0:7882d03f59e2 463 interrupt_fault();
sakthipriya 0:7882d03f59e2 464
sakthipriya 0:7882d03f59e2 465 //ptr_t_fault -> set_priority(osPriorityRealtime);
sakthipriya 0:7882d03f59e2 466 ptr_t_acs->set_priority(osPriorityAboveNormal);
sakthipriya 0:7882d03f59e2 467 ptr_t_i2c->set_priority(osPriorityHigh);
sakthipriya 0:7882d03f59e2 468 ptr_t_hk_acq->set_priority(osPriorityAboveNormal);
sakthipriya 0:7882d03f59e2 469 //ptr_t_acs_write2flash->set_priority(osPriorityBelowNormal);
sakthipriya 0:7882d03f59e2 470 ptr_t_bea->set_priority(osPriorityAboveNormal);
sakthipriya 0:7882d03f59e2 471 //ptr_t_bea_telecommand->set_priority(osPriorityIdle);
sakthipriya 0:7882d03f59e2 472 //ptr_t_sc->set_priority(osPriorityAboveNormal);
sakthipriya 0:7882d03f59e2 473 ptr_t_wdt -> set_priority(osPriorityIdle);
sakthipriya 0:7882d03f59e2 474
sakthipriya 0:7882d03f59e2 475
sakthipriya 0:7882d03f59e2 476 // ----------------------------------------------------------------------------------------------
sakthipriya 0:7882d03f59e2 477 //printf("\n\r T_FAULT priority is %d",ptr_t_fault->get_priority());
sakthipriya 0:7882d03f59e2 478 printf("\n\r T_ACS priority is %d",ptr_t_acs->get_priority());
sakthipriya 0:7882d03f59e2 479 printf("\n\r T_HK_ACQ priority is %d",ptr_t_hk_acq->get_priority());
sakthipriya 0:7882d03f59e2 480 //printf("\n\r T_ACS_WRITE2FLASH priority is %d",ptr_t_acs_write2flash->get_priority());
sakthipriya 0:7882d03f59e2 481 printf("\n\r T_BEA priority is %d",ptr_t_bea->get_priority());
sakthipriya 0:7882d03f59e2 482 RtosTimer t_sc_timer(T_SC,osTimerPeriodic);
sakthipriya 0:7882d03f59e2 483 t_sc_timer.start(10000);
sakthipriya 0:7882d03f59e2 484 printf("\n\r%f\n\r",t1.read());
sakthipriya 0:7882d03f59e2 485
sakthipriya 0:7882d03f59e2 486
sakthipriya 0:7882d03f59e2 487
sakthipriya 0:7882d03f59e2 488 //master_reset.fall(&FUNC_I2C_RESET);
sakthipriya 0:7882d03f59e2 489 interrupt.rise(&FUNC_I2C_INT);
sakthipriya 0:7882d03f59e2 490
sakthipriya 0:7882d03f59e2 491 while(1)
sakthipriya 0:7882d03f59e2 492 {
sakthipriya 0:7882d03f59e2 493 //Thread::wait(10000);
sakthipriya 0:7882d03f59e2 494 //ir2master();
sakthipriya 0:7882d03f59e2 495 //DRDY = 0;
sakthipriya 0:7882d03f59e2 496 Thread::wait(5000);
sakthipriya 0:7882d03f59e2 497 }
sakthipriya 0:7882d03f59e2 498
sakthipriya 0:7882d03f59e2 499 }