bae integrated final (may be)

Dependencies:   mbed-rtos mbed

Fork of BAE_FRDMTESIN2 by Seeker of Truth ,

Committer:
greenroshks
Date:
Mon Dec 15 05:58:23 2014 +0000
Revision:
8:667fbc82d634
Parent:
7:f06840d848e3
BAE FINAL INTEGRATED (may be)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
greenroshks 8:667fbc82d634 1 /*******************Below is an old version**********************************************************************************************/
sakthipriya 3:02b45de29c0f 2 /* Added fault to hk structure and being sent through I2C. Need to verify the format */
greenroshks 8:667fbc82d634 3 /*#include "slave.h"
greenroshks 0:8b0d43fe6c05 4 #include "HK.h"
greenroshks 0:8b0d43fe6c05 5
greenroshks 0:8b0d43fe6c05 6 extern struct SensorData Sensor;
greenroshks 1:b4bb78a9b92e 7 I2CSlave slave(PTC9,PTC8); //configuring pins p27, p28 as I2Cslave
greenroshks 0:8b0d43fe6c05 8 Serial screen (USBTX,USBRX);
greenroshks 0:8b0d43fe6c05 9 void write_to_master(char send) //function to write data to master
greenroshks 0:8b0d43fe6c05 10 {
greenroshks 0:8b0d43fe6c05 11 int acknowledge;
greenroshks 0:8b0d43fe6c05 12 int loopvariable4=1;
greenroshks 0:8b0d43fe6c05 13 while(loopvariable4)
greenroshks 0:8b0d43fe6c05 14 {
greenroshks 0:8b0d43fe6c05 15 acknowledge = slave.write(send); //sending the byte to master
greenroshks 0:8b0d43fe6c05 16 if(acknowledge==1)
greenroshks 0:8b0d43fe6c05 17 {
greenroshks 0:8b0d43fe6c05 18 screen.printf(" acknowledge %d sent %u \n",acknowledge,send);
greenroshks 0:8b0d43fe6c05 19 loopvariable4=0;
greenroshks 0:8b0d43fe6c05 20 }
greenroshks 0:8b0d43fe6c05 21 }
greenroshks 0:8b0d43fe6c05 22 }
greenroshks 0:8b0d43fe6c05 23
greenroshks 0:8b0d43fe6c05 24
greenroshks 0:8b0d43fe6c05 25
greenroshks 0:8b0d43fe6c05 26
greenroshks 0:8b0d43fe6c05 27 void FUNC_I2C_SLAVE_MAIN(int iterations)
greenroshks 0:8b0d43fe6c05 28 {
greenroshks 0:8b0d43fe6c05 29
greenroshks 0:8b0d43fe6c05 30 screen.printf("\nSlave entered\n");
greenroshks 0:8b0d43fe6c05 31 slave.address(slave_address); //assigning slave address
greenroshks 0:8b0d43fe6c05 32 slave.stop();
greenroshks 0:8b0d43fe6c05 33 char Switch_Variable;
greenroshks 0:8b0d43fe6c05 34
greenroshks 0:8b0d43fe6c05 35
greenroshks 0:8b0d43fe6c05 36 int loopvariable1=1;
greenroshks 0:8b0d43fe6c05 37 int loopvariable2=0;
greenroshks 0:8b0d43fe6c05 38 int loopvariable3=1;
greenroshks 0:8b0d43fe6c05 39 //initialising dummy sensor data
greenroshks 0:8b0d43fe6c05 40
greenroshks 0:8b0d43fe6c05 41 while(loopvariable1)
greenroshks 0:8b0d43fe6c05 42 {
greenroshks 0:8b0d43fe6c05 43 //to read data from master
greenroshks 0:8b0d43fe6c05 44 if(slave.receive()==WriteGeneral) //checking if slave is addressed to write
greenroshks 0:8b0d43fe6c05 45 {
greenroshks 1:b4bb78a9b92e 46 slave.stop();
greenroshks 0:8b0d43fe6c05 47 Switch_Variable=slave.read(); //receiving data
greenroshks 0:8b0d43fe6c05 48 screen.printf("switch variable=%d\n",Switch_Variable);
greenroshks 0:8b0d43fe6c05 49 slave.stop(); //reset slave to default receiving state
greenroshks 0:8b0d43fe6c05 50 loopvariable1=0;
greenroshks 0:8b0d43fe6c05 51 //to interpret and write data to master
greenroshks 0:8b0d43fe6c05 52 switch(Switch_Variable)
greenroshks 0:8b0d43fe6c05 53 {
greenroshks 0:8b0d43fe6c05 54
greenroshks 0:8b0d43fe6c05 55
greenroshks 0:8b0d43fe6c05 56 case 1: printf("\nEntered switch\n");
greenroshks 0:8b0d43fe6c05 57 while(loopvariable3)
greenroshks 0:8b0d43fe6c05 58 {
greenroshks 0:8b0d43fe6c05 59 if(slave.receive()==ReadAddressed) //check if slave is addressed to read
greenroshks 0:8b0d43fe6c05 60 {
greenroshks 0:8b0d43fe6c05 61 while(loopvariable2<iterations)
greenroshks 0:8b0d43fe6c05 62 {
greenroshks 0:8b0d43fe6c05 63 if(loopvariable2%3==0)
greenroshks 0:8b0d43fe6c05 64 {
greenroshks 0:8b0d43fe6c05 65 screen.printf("\nvoltage%d\n",loopvariable2/3);
greenroshks 0:8b0d43fe6c05 66 write_to_master(Sensor.Voltage[loopvariable2/3]);
greenroshks 0:8b0d43fe6c05 67 }
greenroshks 0:8b0d43fe6c05 68 else if(loopvariable2%3==1)
greenroshks 0:8b0d43fe6c05 69 {
greenroshks 0:8b0d43fe6c05 70 screen.printf("\ncurrent%d\n",loopvariable2/3);
greenroshks 0:8b0d43fe6c05 71 write_to_master(Sensor.Current[loopvariable2/3]);
greenroshks 0:8b0d43fe6c05 72 }
greenroshks 0:8b0d43fe6c05 73 else if(loopvariable2%3==2)
greenroshks 0:8b0d43fe6c05 74 {
greenroshks 0:8b0d43fe6c05 75 screen.printf("\ntemp%d\n",loopvariable2/3);
greenroshks 0:8b0d43fe6c05 76 write_to_master(Sensor.Temperature[loopvariable2/3]);
greenroshks 0:8b0d43fe6c05 77 }
greenroshks 0:8b0d43fe6c05 78 loopvariable2++;
sakthipriya 3:02b45de29c0f 79 }
raizel_varun 7:f06840d848e3 80 screen.printf("\nfault %c\n",Sensor.faultpoll);
raizel_varun 7:f06840d848e3 81 write_to_master(Sensor.faultpoll);
raizel_varun 7:f06840d848e3 82 screen.printf("\nfault %c\n",Sensor.faultir);
raizel_varun 7:f06840d848e3 83 write_to_master(Sensor.faultir);
sakthipriya 5:255b43e8e21a 84 screen.printf("\npower mode %c\n",Sensor.power_mode);
sakthipriya 5:255b43e8e21a 85 write_to_master(Sensor.power_mode);
greenroshks 0:8b0d43fe6c05 86 printf("\nExited i2c while loop\n");
greenroshks 0:8b0d43fe6c05 87 slave.stop();
greenroshks 0:8b0d43fe6c05 88 loopvariable3=0;
greenroshks 0:8b0d43fe6c05 89 }//if(read addressed)
greenroshks 0:8b0d43fe6c05 90
greenroshks 0:8b0d43fe6c05 91 }//while(loopvariable3)
greenroshks 0:8b0d43fe6c05 92
greenroshks 0:8b0d43fe6c05 93 break;
greenroshks 0:8b0d43fe6c05 94 case 2 : screen.printf(" telecommand 2\n");
greenroshks 0:8b0d43fe6c05 95 break;
greenroshks 0:8b0d43fe6c05 96
greenroshks 0:8b0d43fe6c05 97 }//switch case ends
greenroshks 0:8b0d43fe6c05 98 }
greenroshks 0:8b0d43fe6c05 99 }
greenroshks 0:8b0d43fe6c05 100 screen.printf("\nexited slave function\n");
greenroshks 0:8b0d43fe6c05 101 }
greenroshks 8:667fbc82d634 102 */
greenroshks 8:667fbc82d634 103
greenroshks 8:667fbc82d634 104 //******************The following is a new version********************************************************************************/
greenroshks 8:667fbc82d634 105 #include "HK.h"
greenroshks 8:667fbc82d634 106 #include "slave.h"
greenroshks 8:667fbc82d634 107
greenroshks 8:667fbc82d634 108
greenroshks 8:667fbc82d634 109
greenroshks 8:667fbc82d634 110 I2CSlave slave(D14,D15); //configuring pins p27, p28 as I2Cslave
greenroshks 8:667fbc82d634 111 Serial pc_slave (USBTX,USBRX);
greenroshks 8:667fbc82d634 112 //InterruptIn interrupt(D9); //This should be in the main
greenroshks 8:667fbc82d634 113 //DigitalOut data_ready(D10); //Again in the main function
greenroshks 8:667fbc82d634 114 //int i2c_status=0; //read/write mode for i2c 0 : write2slave, 1 : write2master (Again in tha main)
greenroshks 8:667fbc82d634 115
greenroshks 8:667fbc82d634 116 typedef struct
greenroshks 8:667fbc82d634 117 {
greenroshks 8:667fbc82d634 118 char data; // To avoid dynamic memory allocation
greenroshks 8:667fbc82d634 119 int length;
greenroshks 8:667fbc82d634 120 }i2c_data;
greenroshks 8:667fbc82d634 121
greenroshks 8:667fbc82d634 122 //Mail<i2c_data,16> i2c_data_receive; To be done in the main
greenroshks 8:667fbc82d634 123 //Mail<i2c_data,16> i2c_data_send; To be done in the main
greenroshks 8:667fbc82d634 124
greenroshks 8:667fbc82d634 125 void FUNC_I2C_WRITE2CDMS(char *data, int length=1)
greenroshks 8:667fbc82d634 126 {
greenroshks 8:667fbc82d634 127
greenroshks 8:667fbc82d634 128 int slave_status = 1;
greenroshks 8:667fbc82d634 129 while(slave_status)
greenroshks 8:667fbc82d634 130 {
greenroshks 8:667fbc82d634 131 slave.address(0x20);
greenroshks 8:667fbc82d634 132 if(slave.receive()==1)
greenroshks 8:667fbc82d634 133 {
greenroshks 8:667fbc82d634 134 slave_status=slave.write(data,length);
greenroshks 8:667fbc82d634 135 // printf("\n In the while loop\n");
greenroshks 8:667fbc82d634 136
greenroshks 8:667fbc82d634 137 /*if(!slave_status)
greenroshks 8:667fbc82d634 138 {
greenroshks 8:667fbc82d634 139 printf("slave wrote %c to master\n\r",*data);
greenroshks 8:667fbc82d634 140
greenroshks 8:667fbc82d634 141 }*/
greenroshks 8:667fbc82d634 142
greenroshks 8:667fbc82d634 143 }
greenroshks 8:667fbc82d634 144 else
greenroshks 8:667fbc82d634 145 if(slave.receive()==3 || slave.receive()==2)
greenroshks 8:667fbc82d634 146 {
greenroshks 8:667fbc82d634 147 //i2c_data *i2c_data_r = i2c_data_receive.alloc();
greenroshks 8:667fbc82d634 148 slave_status=slave.read(data,length);
greenroshks 8:667fbc82d634 149 /*if(!slave_status)
greenroshks 8:667fbc82d634 150 {
greenroshks 8:667fbc82d634 151 printf("1 read %c from master\n\r",*data);
greenroshks 8:667fbc82d634 152 }*/
greenroshks 8:667fbc82d634 153 }
greenroshks 8:667fbc82d634 154 //slave.stop();
greenroshks 8:667fbc82d634 155 }
greenroshks 8:667fbc82d634 156 printf("2 done");
greenroshks 8:667fbc82d634 157
greenroshks 8:667fbc82d634 158 }
greenroshks 8:667fbc82d634 159
greenroshks 8:667fbc82d634 160 /*void T_I2C_BAE(void const * args)
greenroshks 8:667fbc82d634 161 {
greenroshks 8:667fbc82d634 162 char data_send,data_receive;
greenroshks 8:667fbc82d634 163 //data_send = 'a';
greenroshks 8:667fbc82d634 164 while(1)
greenroshks 8:667fbc82d634 165 {
greenroshks 8:667fbc82d634 166 Thread::signal_wait(0x1);
greenroshks 8:667fbc82d634 167 printf("\ndetected interrupt\n");
greenroshks 8:667fbc82d634 168 if(i2c_status == 0)
greenroshks 8:667fbc82d634 169 {
greenroshks 8:667fbc82d634 170
greenroshks 8:667fbc82d634 171 FUNC_I2C_WRITE2CDMS(&data_receive);
greenroshks 8:667fbc82d634 172 //printf("\n Data received from CDMS is %c\n",data_receive);
greenroshks 8:667fbc82d634 173 i2c_data * i2c_data_r = i2c_data_receive.alloc();
greenroshks 8:667fbc82d634 174 i2c_data_r->data = data_receive;
greenroshks 8:667fbc82d634 175 i2c_data_r->length = 1;
greenroshks 8:667fbc82d634 176 i2c_data_receive.put(i2c_data_r);
greenroshks 8:667fbc82d634 177 }
greenroshks 8:667fbc82d634 178 else if(i2c_status ==1 )
greenroshks 8:667fbc82d634 179 {
greenroshks 8:667fbc82d634 180 osEvent evt = i2c_data_send.get();
greenroshks 8:667fbc82d634 181 if (evt.status == osEventMail)
greenroshks 8:667fbc82d634 182 {
greenroshks 8:667fbc82d634 183 i2c_data *i2c_data_s = (i2c_data*)evt.value.p;
greenroshks 8:667fbc82d634 184 //printf("\nData read from CDMS is %c\n",i2c_data_r->data);
greenroshks 8:667fbc82d634 185 data_send = i2c_data_s -> data;
greenroshks 8:667fbc82d634 186 FUNC_I2C_WRITE2CDMS(&data_send);
greenroshks 8:667fbc82d634 187 printf("\nData sent to CDMS is %c\n",data_send);
greenroshks 8:667fbc82d634 188 i2c_data_send.free(i2c_data_s);
greenroshks 8:667fbc82d634 189 i2c_status = 0;
greenroshks 8:667fbc82d634 190 //delete i2c_data_r;
greenroshks 8:667fbc82d634 191 }
greenroshks 8:667fbc82d634 192 }
greenroshks 8:667fbc82d634 193 }
greenroshks 8:667fbc82d634 194 }
greenroshks 8:667fbc82d634 195
greenroshks 8:667fbc82d634 196 void FUNC_INT()
greenroshks 8:667fbc82d634 197 {
greenroshks 8:667fbc82d634 198 // char * data = new char;
greenroshks 8:667fbc82d634 199 //*data = 'a';
greenroshks 8:667fbc82d634 200 //printf("\nInterrupt from master detected\n");
greenroshks 8:667fbc82d634 201 ptr_t_i2c->signal_set(0x1);
greenroshks 8:667fbc82d634 202 //
greenroshks 8:667fbc82d634 203 //delete data;
greenroshks 8:667fbc82d634 204 }
greenroshks 8:667fbc82d634 205
greenroshks 8:667fbc82d634 206
greenroshks 8:667fbc82d634 207
greenroshks 8:667fbc82d634 208 void main()
greenroshks 8:667fbc82d634 209 {
greenroshks 8:667fbc82d634 210 printf("\nStarted slave... waiting for master\n");
greenroshks 8:667fbc82d634 211 ptr_t_i2c = new Thread(T_I2C_BAE);
greenroshks 8:667fbc82d634 212 char data='a';
greenroshks 8:667fbc82d634 213 interrupt.rise(&FUNC_INT);
greenroshks 8:667fbc82d634 214
greenroshks 8:667fbc82d634 215 /* i2c_data * i2c_data_s = i2c_data_send.alloc();
greenroshks 8:667fbc82d634 216 i2c_data_s->data = data;
greenroshks 8:667fbc82d634 217 i2c_data_s->length = 1;
greenroshks 8:667fbc82d634 218 i2c_data_send.put(i2c_data_s);
greenroshks 8:667fbc82d634 219 //data_ready=1;
greenroshks 8:667fbc82d634 220 i2c_status=1;*/
greenroshks 8:667fbc82d634 221 // while(1)
greenroshks 8:667fbc82d634 222 //{
greenroshks 8:667fbc82d634 223 //*(data_send)=pc.getc();
greenroshks 8:667fbc82d634 224
greenroshks 8:667fbc82d634 225 //FUNC_I2C_WRITE2CDMS(&data,1);
greenroshks 8:667fbc82d634 226 //printf("\n The data send or received by slave is %c\n",data);
greenroshks 8:667fbc82d634 227 //(data)++;
greenroshks 8:667fbc82d634 228 //wait(1);
greenroshks 8:667fbc82d634 229 //Remove the comments for receiving data
greenroshks 8:667fbc82d634 230 /* osEvent evt = i2c_data_receive.get();
greenroshks 8:667fbc82d634 231 if (evt.status == osEventMail)
greenroshks 8:667fbc82d634 232 {
greenroshks 8:667fbc82d634 233 i2c_data *i2c_data_r = (i2c_data*)evt.value.p;
greenroshks 8:667fbc82d634 234 printf("\nData read from CDMS is %c\n",i2c_data_r->data);
greenroshks 8:667fbc82d634 235
greenroshks 8:667fbc82d634 236 i2c_data_receive.free(i2c_data_r);
greenroshks 8:667fbc82d634 237 //delete i2c_data_r;
greenroshks 8:667fbc82d634 238 }*/
greenroshks 8:667fbc82d634 239 /* //put in comments for receiving data
greenroshks 8:667fbc82d634 240 data_ready=0;
greenroshks 8:667fbc82d634 241 data = pc.getc();
greenroshks 8:667fbc82d634 242 i2c_data * i2c_data_s = i2c_data_send.alloc();
greenroshks 8:667fbc82d634 243 i2c_data_s->data = data;
greenroshks 8:667fbc82d634 244 i2c_data_s->length = 1;
greenroshks 8:667fbc82d634 245 i2c_data_send.put(i2c_data_s);
greenroshks 8:667fbc82d634 246 data_ready=1;
greenroshks 8:667fbc82d634 247 i2c_status=1;
greenroshks 8:667fbc82d634 248
greenroshks 8:667fbc82d634 249 }
greenroshks 8:667fbc82d634 250 }
greenroshks 8:667fbc82d634 251 */
greenroshks 8:667fbc82d634 252
greenroshks 8:667fbc82d634 253 //To be done in the main