cdms stnd alone isr i2c

Dependencies:   mbed-rtos mbed

Fork of TV_MASTER_I2C_RTOS by Team Fox

Committer:
sakthipriya
Date:
Tue Nov 03 14:39:32 2015 +0000
Revision:
2:e9b8e19ca9c4
Parent:
1:963697dc5199
I2C in rtos working....!!!

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 2:e9b8e19ca9c4 62 led2 = 1;
sakthipriya 0:abe5247de1be 63 pc.printf("\n\r data not sent \n");
sakthipriya 2:e9b8e19ca9c4 64 led2 = 0;
sakthipriya 0:abe5247de1be 65 }
sakthipriya 0:abe5247de1be 66 irpt_2_slv = 0;
sakthipriya 0:abe5247de1be 67 //pc.printf("\n\r %d \n",t.read_us());
sakthipriya 0:abe5247de1be 68 //t.reset();
sakthipriya 0:abe5247de1be 69 }
sakthipriya 0:abe5247de1be 70
sakthipriya 0:abe5247de1be 71
sakthipriya 1:963697dc5199 72 void FCTN_I2C_READ(char *data,int length)
sakthipriya 0:abe5247de1be 73 {
sakthipriya 0:abe5247de1be 74 irpt_2_slv = 1;
sakthipriya 1:963697dc5199 75 t_read.start();
sakthipriya 0:abe5247de1be 76 read_ack = master.read(addr|1,data,length);
sakthipriya 1:963697dc5199 77 t_read.stop();
sakthipriya 1:963697dc5199 78
sakthipriya 0:abe5247de1be 79 //if(read_ack == 0)
sakthipriya 0:abe5247de1be 80 // pc.printf("\n\rData received from BAE %s \n",data);
sakthipriya 0:abe5247de1be 81 if (read_ack == 1)
sakthipriya 0:abe5247de1be 82 {
sakthipriya 2:e9b8e19ca9c4 83 led2 = 1;
sakthipriya 0:abe5247de1be 84 pc.printf("\n \r data not received \n");
sakthipriya 2:e9b8e19ca9c4 85 led2 = 0;
sakthipriya 0:abe5247de1be 86 }
sakthipriya 0:abe5247de1be 87 //if(read_ack == 1)
sakthipriya 0:abe5247de1be 88 //pc.printf("\n \r data not received \n");
sakthipriya 0:abe5247de1be 89
sakthipriya 0:abe5247de1be 90 irpt_2_slv = 0;
sakthipriya 0:abe5247de1be 91 //pc.printf("\n\r %d \n",t.read_us());
sakthipriya 0:abe5247de1be 92 //t.reset();
sakthipriya 0:abe5247de1be 93 }
sakthipriya 0:abe5247de1be 94
sakthipriya 0:abe5247de1be 95 void FCTN_ISR_I2C()
sakthipriya 0:abe5247de1be 96 {
sakthipriya 2:e9b8e19ca9c4 97 //led1 = 1;
sakthipriya 0:abe5247de1be 98 //pc.printf("in isr");
sakthipriya 0:abe5247de1be 99 ptr_t_i2c->signal_set(0x1);
sakthipriya 0:abe5247de1be 100 //test.start();
sakthipriya 0:abe5247de1be 101 //wait(0.5);
sakthipriya 2:e9b8e19ca9c4 102 //led1 = 0;
sakthipriya 0:abe5247de1be 103 }
sakthipriya 0:abe5247de1be 104
sakthipriya 0:abe5247de1be 105 void T_TM(void const * args)
sakthipriya 0:abe5247de1be 106 {
sakthipriya 0:abe5247de1be 107 while(1)
sakthipriya 0:abe5247de1be 108 {
sakthipriya 0:abe5247de1be 109 Thread::signal_wait(0x1);
sakthipriya 1:963697dc5199 110 // wait(2);
sakthipriya 0:abe5247de1be 111 //test.stop();
sakthipriya 2:e9b8e19ca9c4 112 led1 = 1;
sakthipriya 0:abe5247de1be 113 // wait(3);
sakthipriya 1:963697dc5199 114 FCTN_I2C_READ(telemetry,tm_len);
sakthipriya 2:e9b8e19ca9c4 115 led1 = 0;
sakthipriya 0:abe5247de1be 116 //pc.printf("\n \r %d",test.read_us());
sakthipriya 0:abe5247de1be 117 //test.reset();
sakthipriya 0:abe5247de1be 118 //irpt_2_slv = 1;
sakthipriya 0:abe5247de1be 119 // t.start();
sakthipriya 0:abe5247de1be 120 // read_ack = master.read(addr|1,telemetry,150);
sakthipriya 0:abe5247de1be 121 // t.stop();
sakthipriya 0:abe5247de1be 122 // if(read_ack == 0)
sakthipriya 0:abe5247de1be 123 // pc.printf("\n\rData received from BAE. %s \n",telemetry);
sakthipriya 0:abe5247de1be 124 // else
sakthipriya 0:abe5247de1be 125 // {
sakthipriya 0:abe5247de1be 126 // pc.printf("\n \r data not received \n");
sakthipriya 0:abe5247de1be 127 // }
sakthipriya 0:abe5247de1be 128 // irpt_2_slv = 0;
sakthipriya 0:abe5247de1be 129 // pc.printf("\n\r %d \n",t.read_us());
sakthipriya 0:abe5247de1be 130 // t.reset();
sakthipriya 0:abe5247de1be 131 // pc.printf("\n\r Telemetry Received \n");
sakthipriya 0:abe5247de1be 132 }
sakthipriya 0:abe5247de1be 133 }
sakthipriya 0:abe5247de1be 134
sakthipriya 0:abe5247de1be 135 int main()
sakthipriya 0:abe5247de1be 136 {
sakthipriya 0:abe5247de1be 137 pc.printf("\n\r MASTER ACTIVATED\n");
sakthipriya 0:abe5247de1be 138 master.frequency(100000);
sakthipriya 0:abe5247de1be 139 ptr_t_i2c = new Thread(T_TM);
sakthipriya 0:abe5247de1be 140 ptr_t_i2c->set_priority(osPriorityHigh);
sakthipriya 0:abe5247de1be 141 strcpy(telecommand," Telecommand1 : This is test telecommand. Verifying fuctionality. Yippee!!! It is working!!!!!!!!!!!!!");
sakthipriya 0:abe5247de1be 142 irpt_2_slv = 0;
sakthipriya 0:abe5247de1be 143 irpt_4m_slv.enable_irq();
sakthipriya 0:abe5247de1be 144 //irpt_4m_slv.mode(PullDown);
sakthipriya 0:abe5247de1be 145 irpt_4m_slv.rise(&FCTN_ISR_I2C);
sakthipriya 0:abe5247de1be 146 while(1)
sakthipriya 0:abe5247de1be 147 {
sakthipriya 2:e9b8e19ca9c4 148 Thread::wait(2000);
sakthipriya 0:abe5247de1be 149 //ptr_t_i2c->signal_set(0x1);
sakthipriya 1:963697dc5199 150 pc.printf("\n\rTELEMETRY received from BAE is %d %s \n",t_read.read_us(),telemetry);
sakthipriya 1:963697dc5199 151 pc.printf("\n\rHK Data received from BAE is %d %s \n",t_read.read_us(),hk_data);
sakthipriya 1:963697dc5199 152 t_read.reset();
sakthipriya 0:abe5247de1be 153 FCTN_MASTER_CMD();
sakthipriya 0:abe5247de1be 154 }
sakthipriya 0:abe5247de1be 155 }