Seeker of Truth ,
/
TV_MASTER_I2C_RTOS
cdms stnd alone isr i2c
Fork of TV_MASTER_I2C_RTOS by
Diff: main.cpp
- Revision:
- 0:abe5247de1be
- Child:
- 1:963697dc5199
diff -r 000000000000 -r abe5247de1be main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Nov 01 12:48:34 2015 +0000 @@ -0,0 +1,150 @@ +#include "mbed.h" +#include "pin_config.h" +#include "rtos.h" +#define tm_len 1100 +#define tc_len 150 +#define hk_len 150 + +Serial pc(USBTX,USBRX); +InterruptIn irpt_4m_slv(PIN39); //I2c interrupt from CDMS +DigitalOut irpt_2_slv(PIN67); //I2C interrupt to CDMS +I2C master(PIN32,PIN31); +DigitalOut led1(PIN46); +DigitalOut led2(PIN95); +const int addr = 0x20; //slave address +char hk_data[150]; +char telecommand[150]; +char telemetry[150]; +int length = 150; +//Timer test; +//Timer t; +bool write_ack = true; +bool read_ack = true; +char cmd = 'r'; + +Thread *ptr_t_i2c; + +void FCTN_I2C_READ(char*); +void FCTN_I2C_WRITE(char*); +void FCTN_ISR_I2C(); +int count = 0; +void FCTN_MASTER_CMD() +{ + switch(cmd) + { + case 'r': + pc.printf("\n \r %d CDMS READ MODE\n",count); + FCTN_I2C_READ(hk_data); + cmd = 'w'; + count ++; + break; + + case 'w': + pc.printf("\n \r %d CDMS WRITE MODE\n",count); + FCTN_I2C_WRITE(telecommand); + //strcat(telecommand,"1"); + cmd = 'r'; + count++; + break; + } +} + +void FCTN_I2C_WRITE(char *data) +{ + irpt_2_slv = 1; + //t.start(); + write_ack = master.write(addr|0x00,data,length); + //t.stop(); + //if(write_ack == 0) + //pc.printf("\n\r data not sent \n"); + +if (write_ack == 1) + { + pc.printf("\n\r data not sent \n"); + } + irpt_2_slv = 0; + //pc.printf("\n\r %d \n",t.read_us()); + //t.reset(); +} + + +void FCTN_I2C_READ(char *data) +{ + irpt_2_slv = 1; + //t.start(); + read_ack = master.read(addr|1,data,length); + //t.stop(); + //if(read_ack == 0) + // pc.printf("\n\rData received from BAE %s \n",data); + if (read_ack == 1) + { + pc.printf("\n \r data not received \n"); + } +//if(read_ack == 1) +//pc.printf("\n \r data not received \n"); + + irpt_2_slv = 0; + //pc.printf("\n\r %d \n",t.read_us()); + //t.reset(); +} + +void FCTN_ISR_I2C() +{ + led2 = 1; + //pc.printf("in isr"); + ptr_t_i2c->signal_set(0x1); + //test.start(); + //wait(0.5); + led2 = 0; +} + +void T_TM(void const * args) +{ + while(1) + { + Thread::signal_wait(0x1); + wait(2); + //test.stop(); + led1 = 1; + // wait(3); + FCTN_I2C_READ(telemetry); + led1 = 0; + //pc.printf("\n \r %d",test.read_us()); + //test.reset(); + //irpt_2_slv = 1; +// t.start(); +// read_ack = master.read(addr|1,telemetry,150); +// t.stop(); +// if(read_ack == 0) +// pc.printf("\n\rData received from BAE. %s \n",telemetry); +// else +// { +// pc.printf("\n \r data not received \n"); +// } +// irpt_2_slv = 0; +// pc.printf("\n\r %d \n",t.read_us()); +// t.reset(); +// pc.printf("\n\r Telemetry Received \n"); + } +} + +int main() +{ + pc.printf("\n\r MASTER ACTIVATED\n"); + master.frequency(100000); + ptr_t_i2c = new Thread(T_TM); + ptr_t_i2c->set_priority(osPriorityHigh); + strcpy(telecommand," Telecommand1 : This is test telecommand. Verifying fuctionality. Yippee!!! It is working!!!!!!!!!!!!!"); + irpt_2_slv = 0; + irpt_4m_slv.enable_irq(); + //irpt_4m_slv.mode(PullDown); + irpt_4m_slv.rise(&FCTN_ISR_I2C); + while(1) + { + Thread::wait(10000); + //ptr_t_i2c->signal_set(0x1); + pc.printf("\n\rTELEMETRY received from BAE is %s \n",telemetry); + pc.printf("\n\rHK Data received from BAE is %s \n",hk_data); + FCTN_MASTER_CMD(); + } +} \ No newline at end of file