Seeker of Truth ,
/
TV_MASTER_I2C_RTOS
cdms stnd alone isr i2c
Fork of TV_MASTER_I2C_RTOS by
main.cpp
- Committer:
- sakthipriya
- Date:
- 2015-11-01
- Revision:
- 0:abe5247de1be
- Child:
- 1:963697dc5199
File content as of revision 0:abe5247de1be:
#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(); } }