Seeker of Truth ,
/
TV_MASTER_I2C_RTOS
cdms stnd alone isr i2c
Fork of TV_MASTER_I2C_RTOS by
main.cpp@2:e9b8e19ca9c4, 2015-11-03 (annotated)
- 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?
User | Revision | Line number | New 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 | } |