Seeker of Truth ,
/
TV_MASTER_I2C_RTOS
cdms stnd alone isr i2c
Fork of TV_MASTER_I2C_RTOS by
main.cpp@1:963697dc5199, 2015-11-01 (annotated)
- 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?
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 | 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 | } |