Team Fox / Mbed 2 deprecated TFOX_i2cslave

Dependencies:   mbed-rtos mbed

Fork of TFOX_i2cslave by sakthi priya amirtharaj

Committer:
sakthipriya
Date:
Wed May 20 11:10:34 2015 +0000
Revision:
0:1d0064af1637
i2c sending data from master to slave works

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:1d0064af1637 1 #include "mbed.h"
sakthipriya 0:1d0064af1637 2 #include "rtos.h"
sakthipriya 0:1d0064af1637 3 Serial pc(USBTX,USBRX);
sakthipriya 0:1d0064af1637 4 InterruptIn irpt_4m_mstr(D11); //I2c interrupt from CDMS
sakthipriya 0:1d0064af1637 5 DigitalOut irpt_2_mstr(D12); //I2C interrupt to CDMS
sakthipriya 0:1d0064af1637 6 I2CSlave slave (D14,D15);
sakthipriya 0:1d0064af1637 7
sakthipriya 0:1d0064af1637 8 const int addr = 0x20; //slave address
sakthipriya 0:1d0064af1637 9 char data_receive;
sakthipriya 0:1d0064af1637 10 char data_send;
sakthipriya 0:1d0064af1637 11 Thread *ptr_t_i2c;
sakthipriya 0:1d0064af1637 12
sakthipriya 0:1d0064af1637 13 Timer t; // time taken from isr to reach i2c function
sakthipriya 0:1d0064af1637 14 Timer t1;
sakthipriya 0:1d0064af1637 15 bool write_ack = 1;
sakthipriya 0:1d0064af1637 16 bool read_ack = 1;
sakthipriya 0:1d0064af1637 17 char data;
sakthipriya 0:1d0064af1637 18 char length = 1;
sakthipriya 0:1d0064af1637 19 void T_I2C_SLAVE(void const * args)
sakthipriya 0:1d0064af1637 20 {
sakthipriya 0:1d0064af1637 21 while(1)
sakthipriya 0:1d0064af1637 22 {
sakthipriya 0:1d0064af1637 23 Thread::signal_wait(0x1);
sakthipriya 0:1d0064af1637 24 wait_us(100); // can be between 38 to 15700
sakthipriya 0:1d0064af1637 25 //printf("\n\r check 1\n");
sakthipriya 0:1d0064af1637 26 t.stop();
sakthipriya 0:1d0064af1637 27 if( slave.receive() == 0)
sakthipriya 0:1d0064af1637 28 //slave.stop();
sakthipriya 0:1d0064af1637 29 if( slave.receive() == 1) // slave writes to master
sakthipriya 0:1d0064af1637 30 {
sakthipriya 0:1d0064af1637 31 t1.start();
sakthipriya 0:1d0064af1637 32 write_ack=slave.write(&data,length);
sakthipriya 0:1d0064af1637 33 t1.stop();
sakthipriya 0:1d0064af1637 34 //slave.stop();
sakthipriya 0:1d0064af1637 35 }
sakthipriya 0:1d0064af1637 36 if( slave.receive()==3 || slave.receive()==2) // slave read
sakthipriya 0:1d0064af1637 37 {
sakthipriya 0:1d0064af1637 38 t1.start();
sakthipriya 0:1d0064af1637 39 read_ack=slave.read(&data,length);
sakthipriya 0:1d0064af1637 40 t1.stop();
sakthipriya 0:1d0064af1637 41 //slave.stop();
sakthipriya 0:1d0064af1637 42 }
sakthipriya 0:1d0064af1637 43 printf("\n \r %d %d\n",t.read_us(),t1.read_us());
sakthipriya 0:1d0064af1637 44 t.reset();
sakthipriya 0:1d0064af1637 45 t1.reset();
sakthipriya 0:1d0064af1637 46
sakthipriya 0:1d0064af1637 47 if(write_ack == 0)
sakthipriya 0:1d0064af1637 48 printf("\n\rData sent to CDMS is %c\n",data);
sakthipriya 0:1d0064af1637 49 if(read_ack == 0)
sakthipriya 0:1d0064af1637 50 printf("\n\r Data received from CDMS is %c \n",data);
sakthipriya 0:1d0064af1637 51 }
sakthipriya 0:1d0064af1637 52 }
sakthipriya 0:1d0064af1637 53
sakthipriya 0:1d0064af1637 54
sakthipriya 0:1d0064af1637 55 void FCTN_ISR_I2C()
sakthipriya 0:1d0064af1637 56 {
sakthipriya 0:1d0064af1637 57 ptr_t_i2c->signal_set(0x1);
sakthipriya 0:1d0064af1637 58 t.start();
sakthipriya 0:1d0064af1637 59 }
sakthipriya 0:1d0064af1637 60
sakthipriya 0:1d0064af1637 61 int main()
sakthipriya 0:1d0064af1637 62 {
sakthipriya 0:1d0064af1637 63 printf("\n\r SLAVE ACTIVATED\n");
sakthipriya 0:1d0064af1637 64 slave.address(addr);
sakthipriya 0:1d0064af1637 65 //slave.frequency(100000);
sakthipriya 0:1d0064af1637 66 ptr_t_i2c = new Thread(T_I2C_SLAVE);
sakthipriya 0:1d0064af1637 67 irpt_4m_mstr.enable_irq();
sakthipriya 0:1d0064af1637 68 //irpt_4m_mstr.mode(PullDown);
sakthipriya 0:1d0064af1637 69 irpt_4m_mstr.rise(&FCTN_ISR_I2C);
sakthipriya 0:1d0064af1637 70
sakthipriya 0:1d0064af1637 71 }