Seeker of Truth ,
/
TV_MASTER_I2C_RTOS
cdms stnd alone isr i2c
Fork of TV_MASTER_I2C_RTOS by
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include "pin_config.h" 00003 #include "rtos.h" 00004 #define tm_len 1100 00005 #define tc_len 150 00006 #define hk_len 150 00007 00008 Serial pc(USBTX,USBRX); 00009 InterruptIn irpt_4m_slv(PIN39); //I2c interrupt from CDMS 00010 DigitalOut irpt_2_slv(PIN67); //I2C interrupt to CDMS 00011 I2C master(PIN32,PIN31); 00012 DigitalOut led1(PIN46); 00013 DigitalOut led2(PIN95); 00014 const int addr = 0x20; //slave address 00015 char hk_data[hk_len]; 00016 char telecommand[tc_len]; 00017 char telemetry[tm_len]; 00018 Timer test; 00019 Timer t_read; 00020 bool write_ack = true; 00021 bool read_ack = true; 00022 char cmd = 'r'; 00023 00024 Thread *ptr_t_i2c; 00025 00026 void FCTN_I2C_READ(char*,int); 00027 void FCTN_I2C_WRITE(char*,int); 00028 void FCTN_ISR_I2C(); 00029 int count = 0; 00030 void FCTN_MASTER_CMD() 00031 { 00032 switch(cmd) 00033 { 00034 case 'r': 00035 pc.printf("\n \r %d CDMS READ MODE\n",count); 00036 FCTN_I2C_READ(hk_data,hk_len); 00037 cmd = 'w'; 00038 count ++; 00039 break; 00040 00041 case 'w': 00042 pc.printf("\n \r %d CDMS WRITE MODE\n",count); 00043 FCTN_I2C_WRITE(telecommand,tc_len); 00044 //strcat(telecommand,"1"); 00045 cmd = 'r'; 00046 count++; 00047 break; 00048 } 00049 } 00050 00051 void FCTN_I2C_WRITE(char *data,int length) 00052 { 00053 irpt_2_slv = 1; 00054 //t.start(); 00055 write_ack = master.write(addr|0x00,data,length); 00056 //t.stop(); 00057 //if(write_ack == 0) 00058 //pc.printf("\n\r data not sent \n"); 00059 00060 if (write_ack == 1) 00061 { 00062 led2 = 1; 00063 pc.printf("\n\r data not sent \n"); 00064 led2 = 0; 00065 } 00066 irpt_2_slv = 0; 00067 //pc.printf("\n\r %d \n",t.read_us()); 00068 //t.reset(); 00069 } 00070 00071 00072 void FCTN_I2C_READ(char *data,int length) 00073 { 00074 irpt_2_slv = 1; 00075 t_read.start(); 00076 read_ack = master.read(addr|1,data,length); 00077 t_read.stop(); 00078 00079 //if(read_ack == 0) 00080 // pc.printf("\n\rData received from BAE %s \n",data); 00081 if (read_ack == 1) 00082 { 00083 led2 = 1; 00084 pc.printf("\n \r data not received \n"); 00085 led2 = 0; 00086 } 00087 //if(read_ack == 1) 00088 //pc.printf("\n \r data not received \n"); 00089 00090 irpt_2_slv = 0; 00091 //pc.printf("\n\r %d \n",t.read_us()); 00092 //t.reset(); 00093 } 00094 00095 void FCTN_ISR_I2C() 00096 { 00097 //led1 = 1; 00098 //pc.printf("in isr"); 00099 ptr_t_i2c->signal_set(0x1); 00100 //test.start(); 00101 //wait(0.5); 00102 //led1 = 0; 00103 } 00104 00105 void T_TM(void const * args) 00106 { 00107 while(1) 00108 { 00109 Thread::signal_wait(0x1); 00110 // wait(2); 00111 //test.stop(); 00112 led1 = 1; 00113 // wait(3); 00114 FCTN_I2C_READ(telemetry,tm_len); 00115 led1 = 0; 00116 //pc.printf("\n \r %d",test.read_us()); 00117 //test.reset(); 00118 //irpt_2_slv = 1; 00119 // t.start(); 00120 // read_ack = master.read(addr|1,telemetry,150); 00121 // t.stop(); 00122 // if(read_ack == 0) 00123 // pc.printf("\n\rData received from BAE. %s \n",telemetry); 00124 // else 00125 // { 00126 // pc.printf("\n \r data not received \n"); 00127 // } 00128 // irpt_2_slv = 0; 00129 // pc.printf("\n\r %d \n",t.read_us()); 00130 // t.reset(); 00131 // pc.printf("\n\r Telemetry Received \n"); 00132 } 00133 } 00134 00135 int main() 00136 { 00137 pc.printf("\n\r MASTER ACTIVATED\n"); 00138 master.frequency(100000); 00139 ptr_t_i2c = new Thread(T_TM); 00140 ptr_t_i2c->set_priority(osPriorityHigh); 00141 strcpy(telecommand," Telecommand1 : This is test telecommand. Verifying fuctionality. Yippee!!! It is working!!!!!!!!!!!!!"); 00142 irpt_2_slv = 0; 00143 irpt_4m_slv.enable_irq(); 00144 //irpt_4m_slv.mode(PullDown); 00145 irpt_4m_slv.rise(&FCTN_ISR_I2C); 00146 while(1) 00147 { 00148 Thread::wait(2000); 00149 //ptr_t_i2c->signal_set(0x1); 00150 pc.printf("\n\rTELEMETRY received from BAE is %d %s \n",t_read.read_us(),telemetry); 00151 pc.printf("\n\rHK Data received from BAE is %d %s \n",t_read.read_us(),hk_data); 00152 t_read.reset(); 00153 FCTN_MASTER_CMD(); 00154 } 00155 }
Generated on Thu Jul 14 2022 20:13:49 by 1.7.2