cdms stnd alone isr i2c

Dependencies:   mbed-rtos mbed

Fork of TV_MASTER_I2C_RTOS by Team Fox

Committer:
sakthipriya
Date:
Sun Nov 01 13:13:05 2015 +0000
Revision:
1:963697dc5199
Parent:
0:abe5247de1be
Child:
2:e9b8e19ca9c4
tc-tm loop working i2c

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:abe5247de1be 1 #include "mbed.h"
sakthipriya 0:abe5247de1be 2 #include "pin_config.h"
sakthipriya 0:abe5247de1be 3 #include "rtos.h"
sakthipriya 0:abe5247de1be 4 #define tm_len 1100
sakthipriya 0:abe5247de1be 5 #define tc_len 150
sakthipriya 0:abe5247de1be 6 #define hk_len 150
sakthipriya 0:abe5247de1be 7
sakthipriya 0:abe5247de1be 8 Serial pc(USBTX,USBRX);
sakthipriya 0:abe5247de1be 9 InterruptIn irpt_4m_slv(PIN39); //I2c interrupt from CDMS
sakthipriya 0:abe5247de1be 10 DigitalOut irpt_2_slv(PIN67); //I2C interrupt to CDMS
sakthipriya 0:abe5247de1be 11 I2C master(PIN32,PIN31);
sakthipriya 0:abe5247de1be 12 DigitalOut led1(PIN46);
sakthipriya 0:abe5247de1be 13 DigitalOut led2(PIN95);
sakthipriya 0:abe5247de1be 14 const int addr = 0x20; //slave address
sakthipriya 1:963697dc5199 15 char hk_data[hk_len];
sakthipriya 1:963697dc5199 16 char telecommand[tc_len];
sakthipriya 1:963697dc5199 17 char telemetry[tm_len];
sakthipriya 1:963697dc5199 18 Timer test;
sakthipriya 1:963697dc5199 19 Timer t_read;
sakthipriya 0:abe5247de1be 20 bool write_ack = true;
sakthipriya 0:abe5247de1be 21 bool read_ack = true;
sakthipriya 0:abe5247de1be 22 char cmd = 'r';
sakthipriya 0:abe5247de1be 23
sakthipriya 0:abe5247de1be 24 Thread *ptr_t_i2c;
sakthipriya 0:abe5247de1be 25
sakthipriya 1:963697dc5199 26 void FCTN_I2C_READ(char*,int);
sakthipriya 1:963697dc5199 27 void FCTN_I2C_WRITE(char*,int);
sakthipriya 0:abe5247de1be 28 void FCTN_ISR_I2C();
sakthipriya 0:abe5247de1be 29 int count = 0;
sakthipriya 0:abe5247de1be 30 void FCTN_MASTER_CMD()
sakthipriya 0:abe5247de1be 31 {
sakthipriya 0:abe5247de1be 32 switch(cmd)
sakthipriya 0:abe5247de1be 33 {
sakthipriya 0:abe5247de1be 34 case 'r':
sakthipriya 0:abe5247de1be 35 pc.printf("\n \r %d CDMS READ MODE\n",count);
sakthipriya 1:963697dc5199 36 FCTN_I2C_READ(hk_data,hk_len);
sakthipriya 0:abe5247de1be 37 cmd = 'w';
sakthipriya 0:abe5247de1be 38 count ++;
sakthipriya 0:abe5247de1be 39 break;
sakthipriya 0:abe5247de1be 40
sakthipriya 0:abe5247de1be 41 case 'w':
sakthipriya 0:abe5247de1be 42 pc.printf("\n \r %d CDMS WRITE MODE\n",count);
sakthipriya 1:963697dc5199 43 FCTN_I2C_WRITE(telecommand,tc_len);
sakthipriya 0:abe5247de1be 44 //strcat(telecommand,"1");
sakthipriya 0:abe5247de1be 45 cmd = 'r';
sakthipriya 0:abe5247de1be 46 count++;
sakthipriya 0:abe5247de1be 47 break;
sakthipriya 0:abe5247de1be 48 }
sakthipriya 0:abe5247de1be 49 }
sakthipriya 0:abe5247de1be 50
sakthipriya 1:963697dc5199 51 void FCTN_I2C_WRITE(char *data,int length)
sakthipriya 0:abe5247de1be 52 {
sakthipriya 0:abe5247de1be 53 irpt_2_slv = 1;
sakthipriya 0:abe5247de1be 54 //t.start();
sakthipriya 0:abe5247de1be 55 write_ack = master.write(addr|0x00,data,length);
sakthipriya 0:abe5247de1be 56 //t.stop();
sakthipriya 0:abe5247de1be 57 //if(write_ack == 0)
sakthipriya 0:abe5247de1be 58 //pc.printf("\n\r data not sent \n");
sakthipriya 0:abe5247de1be 59
sakthipriya 0:abe5247de1be 60 if (write_ack == 1)
sakthipriya 0:abe5247de1be 61 {
sakthipriya 0:abe5247de1be 62 pc.printf("\n\r data not sent \n");
sakthipriya 0:abe5247de1be 63 }
sakthipriya 0:abe5247de1be 64 irpt_2_slv = 0;
sakthipriya 0:abe5247de1be 65 //pc.printf("\n\r %d \n",t.read_us());
sakthipriya 0:abe5247de1be 66 //t.reset();
sakthipriya 0:abe5247de1be 67 }
sakthipriya 0:abe5247de1be 68
sakthipriya 0:abe5247de1be 69
sakthipriya 1:963697dc5199 70 void FCTN_I2C_READ(char *data,int length)
sakthipriya 0:abe5247de1be 71 {
sakthipriya 0:abe5247de1be 72 irpt_2_slv = 1;
sakthipriya 1:963697dc5199 73 t_read.start();
sakthipriya 0:abe5247de1be 74 read_ack = master.read(addr|1,data,length);
sakthipriya 1:963697dc5199 75 t_read.stop();
sakthipriya 1:963697dc5199 76
sakthipriya 0:abe5247de1be 77 //if(read_ack == 0)
sakthipriya 0:abe5247de1be 78 // pc.printf("\n\rData received from BAE %s \n",data);
sakthipriya 0:abe5247de1be 79 if (read_ack == 1)
sakthipriya 0:abe5247de1be 80 {
sakthipriya 0:abe5247de1be 81 pc.printf("\n \r data not received \n");
sakthipriya 0:abe5247de1be 82 }
sakthipriya 0:abe5247de1be 83 //if(read_ack == 1)
sakthipriya 0:abe5247de1be 84 //pc.printf("\n \r data not received \n");
sakthipriya 0:abe5247de1be 85
sakthipriya 0:abe5247de1be 86 irpt_2_slv = 0;
sakthipriya 0:abe5247de1be 87 //pc.printf("\n\r %d \n",t.read_us());
sakthipriya 0:abe5247de1be 88 //t.reset();
sakthipriya 0:abe5247de1be 89 }
sakthipriya 0:abe5247de1be 90
sakthipriya 0:abe5247de1be 91 void FCTN_ISR_I2C()
sakthipriya 0:abe5247de1be 92 {
sakthipriya 1:963697dc5199 93 led1 = 1;
sakthipriya 0:abe5247de1be 94 //pc.printf("in isr");
sakthipriya 0:abe5247de1be 95 ptr_t_i2c->signal_set(0x1);
sakthipriya 0:abe5247de1be 96 //test.start();
sakthipriya 0:abe5247de1be 97 //wait(0.5);
sakthipriya 1:963697dc5199 98 led1 = 0;
sakthipriya 0:abe5247de1be 99 }
sakthipriya 0:abe5247de1be 100
sakthipriya 0:abe5247de1be 101 void T_TM(void const * args)
sakthipriya 0:abe5247de1be 102 {
sakthipriya 0:abe5247de1be 103 while(1)
sakthipriya 0:abe5247de1be 104 {
sakthipriya 0:abe5247de1be 105 Thread::signal_wait(0x1);
sakthipriya 1:963697dc5199 106 // wait(2);
sakthipriya 0:abe5247de1be 107 //test.stop();
sakthipriya 1:963697dc5199 108 led2 = 1;
sakthipriya 0:abe5247de1be 109 // wait(3);
sakthipriya 1:963697dc5199 110 FCTN_I2C_READ(telemetry,tm_len);
sakthipriya 1:963697dc5199 111 led2 = 0;
sakthipriya 0:abe5247de1be 112 //pc.printf("\n \r %d",test.read_us());
sakthipriya 0:abe5247de1be 113 //test.reset();
sakthipriya 0:abe5247de1be 114 //irpt_2_slv = 1;
sakthipriya 0:abe5247de1be 115 // t.start();
sakthipriya 0:abe5247de1be 116 // read_ack = master.read(addr|1,telemetry,150);
sakthipriya 0:abe5247de1be 117 // t.stop();
sakthipriya 0:abe5247de1be 118 // if(read_ack == 0)
sakthipriya 0:abe5247de1be 119 // pc.printf("\n\rData received from BAE. %s \n",telemetry);
sakthipriya 0:abe5247de1be 120 // else
sakthipriya 0:abe5247de1be 121 // {
sakthipriya 0:abe5247de1be 122 // pc.printf("\n \r data not received \n");
sakthipriya 0:abe5247de1be 123 // }
sakthipriya 0:abe5247de1be 124 // irpt_2_slv = 0;
sakthipriya 0:abe5247de1be 125 // pc.printf("\n\r %d \n",t.read_us());
sakthipriya 0:abe5247de1be 126 // t.reset();
sakthipriya 0:abe5247de1be 127 // pc.printf("\n\r Telemetry Received \n");
sakthipriya 0:abe5247de1be 128 }
sakthipriya 0:abe5247de1be 129 }
sakthipriya 0:abe5247de1be 130
sakthipriya 0:abe5247de1be 131 int main()
sakthipriya 0:abe5247de1be 132 {
sakthipriya 0:abe5247de1be 133 pc.printf("\n\r MASTER ACTIVATED\n");
sakthipriya 0:abe5247de1be 134 master.frequency(100000);
sakthipriya 0:abe5247de1be 135 ptr_t_i2c = new Thread(T_TM);
sakthipriya 0:abe5247de1be 136 ptr_t_i2c->set_priority(osPriorityHigh);
sakthipriya 0:abe5247de1be 137 strcpy(telecommand," Telecommand1 : This is test telecommand. Verifying fuctionality. Yippee!!! It is working!!!!!!!!!!!!!");
sakthipriya 0:abe5247de1be 138 irpt_2_slv = 0;
sakthipriya 0:abe5247de1be 139 irpt_4m_slv.enable_irq();
sakthipriya 0:abe5247de1be 140 //irpt_4m_slv.mode(PullDown);
sakthipriya 0:abe5247de1be 141 irpt_4m_slv.rise(&FCTN_ISR_I2C);
sakthipriya 0:abe5247de1be 142 while(1)
sakthipriya 0:abe5247de1be 143 {
sakthipriya 0:abe5247de1be 144 Thread::wait(10000);
sakthipriya 0:abe5247de1be 145 //ptr_t_i2c->signal_set(0x1);
sakthipriya 1:963697dc5199 146 pc.printf("\n\rTELEMETRY received from BAE is %d %s \n",t_read.read_us(),telemetry);
sakthipriya 1:963697dc5199 147 pc.printf("\n\rHK Data received from BAE is %d %s \n",t_read.read_us(),hk_data);
sakthipriya 1:963697dc5199 148 t_read.reset();
sakthipriya 0:abe5247de1be 149 FCTN_MASTER_CMD();
sakthipriya 0:abe5247de1be 150 }
sakthipriya 0:abe5247de1be 151 }