![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
not workin
Fork of BAE_FRDM_INTEGRATION by
Revision 9:6bcc165ee457, committed 2014-12-16
- Comitter:
- sakthipriya
- Date:
- Tue Dec 16 11:37:09 2014 +0000
- Parent:
- 8:667fbc82d634
- Commit message:
- i2c not workin new integ.
Changed in this revision
diff -r 667fbc82d634 -r 6bcc165ee457 main.cpp --- a/main.cpp Mon Dec 15 05:58:23 2014 +0000 +++ b/main.cpp Tue Dec 16 11:37:09 2014 +0000 @@ -220,6 +220,105 @@ } } */ + +//------------------------------------------------------------------------------------------------------------------------------------------------ +//I2C SLAVE +//------------------------------------------------------------------------------------------------------------------------------------------------ +typedef struct +{ + char data; // To avoid dynamic memory allocation + int length; +}i2c_data; + +Mail<i2c_data,16> i2c_data_receive; +Mail<i2c_data,16> i2c_data_send; + +InterruptIn interrupt(D9); +InterruptIn master_reset(D11); +DigitalOut data_ready(D10); +int reset =0; +int i2c_status = 0; + + + +void FUNC_INT() +{ + // char * data = new char; + //*data = 'a'; + //printf("\nInterrupt from master detected\n"); + reset =0; + ptr_t_i2c->signal_set(0x1); + // + //delete data; +} + +void FUNC_RESET() +{ + reset =1; +} + +void ir2master() +{ + + char data = 'a'; + //strcpy(data,"sakthi "); + //strcat(data,"priya"); + /* + strcpy(hk_data,Sensor.Temperature); //Sending to CDMS via I2C + strcat(hk_data,Sensor.Current); + strcat(hk_data,Sensor.Voltage); + strcat(hk_data,sfaultpoll); + strcat(hk_data,sfaultir); + strcat(hk_data,spower_mode); + strcat(hk_data,ffp);*/ + data_ready=0; + //data = pcslave.getc(); + reset =0; + i2c_status=1; + i2c_data * i2c_data_s = i2c_data_send.alloc(); + i2c_data_s->data = data; + i2c_data_s->length = 1; + i2c_data_send.put(i2c_data_s); + data_ready=1; + //temp = i2c_status; +} + +void T_I2C_BAE(void const * args) +{ + char data_send,data_receive; + //data_send = 'a'; + while(1) + { + Thread::signal_wait(0x1); + printf("\ndetected interrupt\n"); + if(i2c_status == 0 && reset==0) + { + + FUNC_I2C_WRITE2CDMS(&data_receive,1); + //printf("\n Data received from CDMS is %c\n",data_receive); + i2c_data * i2c_data_r = i2c_data_receive.alloc(); + i2c_data_r->data = data_receive; + i2c_data_r->length = 1; + i2c_data_receive.put(i2c_data_r); + } + else if(i2c_status ==1 && reset ==1) + { + osEvent evt = i2c_data_send.get(); + if (evt.status == osEventMail) + { + i2c_data *i2c_data_s = (i2c_data*)evt.value.p; + //printf("\nData read from CDMS is %c\n",i2c_data_r->data); + data_send = i2c_data_s -> data; + FUNC_I2C_WRITE2CDMS(&data_send,1); + printf("\nData sent to CDMS is %c\n",data_send); + i2c_data_send.free(i2c_data_s); + i2c_status = 0; + //delete i2c_data_r; + } + } + } +} + //------------------------------------------------------------------------------------------------------------------------------------------------ //SCHEDULER //------------------------------------------------------------------------------------------------------------------------------------------------ @@ -236,7 +335,7 @@ if(schedcount%1==0) { - ptr_t_acs -> signal_set(0x1); + //ptr_t_acs -> signal_set(0x1); } if(schedcount%2==0) { @@ -249,7 +348,7 @@ if(beac_flag==0) { - ptr_t_bea -> signal_set(0x3); + // ptr_t_bea -> signal_set(0x3); } } schedcount++; @@ -288,8 +387,11 @@ t_sc_timer.start(10000); printf("\n%f\n",t1.read()); + master_reset.fall(&FUNC_RESET); + interrupt.rise(&FUNC_INT); while(1) { + ir2master(); Thread::wait(10000); ; }
diff -r 667fbc82d634 -r 6bcc165ee457 slave.cpp --- a/slave.cpp Mon Dec 15 05:58:23 2014 +0000 +++ b/slave.cpp Tue Dec 16 11:37:09 2014 +0000 @@ -113,16 +113,12 @@ //DigitalOut data_ready(D10); //Again in the main function //int i2c_status=0; //read/write mode for i2c 0 : write2slave, 1 : write2master (Again in tha main) -typedef struct -{ - char data; // To avoid dynamic memory allocation - int length; -}i2c_data; + //Mail<i2c_data,16> i2c_data_receive; To be done in the main //Mail<i2c_data,16> i2c_data_send; To be done in the main -void FUNC_I2C_WRITE2CDMS(char *data, int length=1) +void FUNC_I2C_WRITE2CDMS(char *data, int length) { int slave_status = 1; @@ -157,61 +153,12 @@ } -/*void T_I2C_BAE(void const * args) -{ - char data_send,data_receive; - //data_send = 'a'; - while(1) - { - Thread::signal_wait(0x1); - printf("\ndetected interrupt\n"); - if(i2c_status == 0) - { - - FUNC_I2C_WRITE2CDMS(&data_receive); - //printf("\n Data received from CDMS is %c\n",data_receive); - i2c_data * i2c_data_r = i2c_data_receive.alloc(); - i2c_data_r->data = data_receive; - i2c_data_r->length = 1; - i2c_data_receive.put(i2c_data_r); - } - else if(i2c_status ==1 ) - { - osEvent evt = i2c_data_send.get(); - if (evt.status == osEventMail) - { - i2c_data *i2c_data_s = (i2c_data*)evt.value.p; - //printf("\nData read from CDMS is %c\n",i2c_data_r->data); - data_send = i2c_data_s -> data; - FUNC_I2C_WRITE2CDMS(&data_send); - printf("\nData sent to CDMS is %c\n",data_send); - i2c_data_send.free(i2c_data_s); - i2c_status = 0; - //delete i2c_data_r; - } - } - } -} -void FUNC_INT() -{ - // char * data = new char; - //*data = 'a'; - //printf("\nInterrupt from master detected\n"); - ptr_t_i2c->signal_set(0x1); - // - //delete data; -} + -void main() -{ - printf("\nStarted slave... waiting for master\n"); - ptr_t_i2c = new Thread(T_I2C_BAE); - char data='a'; - interrupt.rise(&FUNC_INT); - + /* i2c_data * i2c_data_s = i2c_data_send.alloc(); i2c_data_s->data = data; i2c_data_s->length = 1;
diff -r 667fbc82d634 -r 6bcc165ee457 slave.h --- a/slave.h Mon Dec 15 05:58:23 2014 +0000 +++ b/slave.h Tue Dec 16 11:37:09 2014 +0000 @@ -2,5 +2,5 @@ #define WriteGeneral 3 #define ReadAddressed 1 #define slave_address 0x20 -void write_to_master(char); //function to write data to master -void FUNC_I2C_SLAVE_MAIN(int iterations); \ No newline at end of file + +void FUNC_I2C_WRITE2CDMS(char *data, int length); \ No newline at end of file