sakthi priya amirtharaj / Mbed 2 deprecated slave_i2c4

Dependencies:   mbed-rtos mbed

Committer:
sakthipriya
Date:
Sat Dec 13 07:47:06 2014 +0000
Revision:
0:3676273fc394
slave 4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:3676273fc394 1 #include "mbed.h"
sakthipriya 0:3676273fc394 2 #include "rtos.h"
sakthipriya 0:3676273fc394 3
sakthipriya 0:3676273fc394 4 void write_to_master(char); //function to write data to master
sakthipriya 0:3676273fc394 5 Thread * ptr_t_i2c;
sakthipriya 0:3676273fc394 6 I2CSlave slave(D14,D15); //configuring pins p27, p28 as I2Cslave
sakthipriya 0:3676273fc394 7 Serial pc (USBTX,USBRX);
sakthipriya 0:3676273fc394 8 InterruptIn interrupt(D9);
sakthipriya 0:3676273fc394 9 DigitalOut data_ready(D10);
sakthipriya 0:3676273fc394 10 int i2c_status=0; //read/write mode for i2c 0 : write2slave, 1 : write2master
sakthipriya 0:3676273fc394 11
sakthipriya 0:3676273fc394 12 int temp;
sakthipriya 0:3676273fc394 13
sakthipriya 0:3676273fc394 14 typedef struct
sakthipriya 0:3676273fc394 15 {
sakthipriya 0:3676273fc394 16 char data; // To avoid dynamic memory allocation
sakthipriya 0:3676273fc394 17 int length;
sakthipriya 0:3676273fc394 18 }i2c_data;
sakthipriya 0:3676273fc394 19
sakthipriya 0:3676273fc394 20 Mail<i2c_data,16> i2c_data_receive;
sakthipriya 0:3676273fc394 21 Mail<i2c_data,16> i2c_data_send;
sakthipriya 0:3676273fc394 22
sakthipriya 0:3676273fc394 23
sakthipriya 0:3676273fc394 24 void FUNC_I2C_WRITE2CDMS(char *data, int length=1)
sakthipriya 0:3676273fc394 25 {
sakthipriya 0:3676273fc394 26 int slave_status = 1;
sakthipriya 0:3676273fc394 27
sakthipriya 0:3676273fc394 28 while(slave_status)
sakthipriya 0:3676273fc394 29 {
sakthipriya 0:3676273fc394 30 slave.address(0x20);
sakthipriya 0:3676273fc394 31 if(slave.receive()==1)
sakthipriya 0:3676273fc394 32 {
sakthipriya 0:3676273fc394 33 slave_status=slave.write(data,length);
sakthipriya 0:3676273fc394 34
sakthipriya 0:3676273fc394 35
sakthipriya 0:3676273fc394 36 }
sakthipriya 0:3676273fc394 37 else if(slave.receive()==3 || slave.receive()==2)
sakthipriya 0:3676273fc394 38 {
sakthipriya 0:3676273fc394 39 slave_status=slave.read(data,length);
sakthipriya 0:3676273fc394 40 }
sakthipriya 0:3676273fc394 41
sakthipriya 0:3676273fc394 42 }
sakthipriya 0:3676273fc394 43 printf("\ndone\n\r");
sakthipriya 0:3676273fc394 44
sakthipriya 0:3676273fc394 45 }
sakthipriya 0:3676273fc394 46
sakthipriya 0:3676273fc394 47 void T_I2C_BAE(void const * args)
sakthipriya 0:3676273fc394 48 {
sakthipriya 0:3676273fc394 49 char data_send,data_receive;
sakthipriya 0:3676273fc394 50 while(1)
sakthipriya 0:3676273fc394 51 {
sakthipriya 0:3676273fc394 52 Thread::signal_wait(0x1);
sakthipriya 0:3676273fc394 53 //i2c_status = temp;
sakthipriya 0:3676273fc394 54 //wait(0.5);
sakthipriya 0:3676273fc394 55 printf("\n entered thread\n\r");
sakthipriya 0:3676273fc394 56 if(i2c_status == 0)
sakthipriya 0:3676273fc394 57 {
sakthipriya 0:3676273fc394 58
sakthipriya 0:3676273fc394 59 FUNC_I2C_WRITE2CDMS(&data_receive);
sakthipriya 0:3676273fc394 60 i2c_data * i2c_data_r = i2c_data_receive.alloc();
sakthipriya 0:3676273fc394 61 i2c_data_r->data = data_receive;
sakthipriya 0:3676273fc394 62 i2c_data_r->length = 1;
sakthipriya 0:3676273fc394 63 i2c_data_receive.put(i2c_data_r);
sakthipriya 0:3676273fc394 64 printf("\n Data received from CDMS is %c\n\r",data_receive);
sakthipriya 0:3676273fc394 65 i2c_data_receive.free(i2c_data_r);
sakthipriya 0:3676273fc394 66
sakthipriya 0:3676273fc394 67 }
sakthipriya 0:3676273fc394 68 else if(i2c_status ==1 )
sakthipriya 0:3676273fc394 69 {
sakthipriya 0:3676273fc394 70 osEvent evt = i2c_data_send.get();
sakthipriya 0:3676273fc394 71 if (evt.status == osEventMail)
sakthipriya 0:3676273fc394 72 {
sakthipriya 0:3676273fc394 73 i2c_data *i2c_data_s = (i2c_data*)evt.value.p;
sakthipriya 0:3676273fc394 74 data_send = i2c_data_s -> data;
sakthipriya 0:3676273fc394 75 FUNC_I2C_WRITE2CDMS(&data_send);
sakthipriya 0:3676273fc394 76 printf("\nData sent to CDMS is %c\n\r",data_send);
sakthipriya 0:3676273fc394 77 i2c_data_send.free(i2c_data_s);
sakthipriya 0:3676273fc394 78 i2c_status = 0;
sakthipriya 0:3676273fc394 79 //temp = i2c_status;
sakthipriya 0:3676273fc394 80 }
sakthipriya 0:3676273fc394 81 }
sakthipriya 0:3676273fc394 82
sakthipriya 0:3676273fc394 83 }
sakthipriya 0:3676273fc394 84 }
sakthipriya 0:3676273fc394 85
sakthipriya 0:3676273fc394 86 void FUNC_INT()
sakthipriya 0:3676273fc394 87 {
sakthipriya 0:3676273fc394 88
sakthipriya 0:3676273fc394 89 ptr_t_i2c->signal_set(0x1);
sakthipriya 0:3676273fc394 90
sakthipriya 0:3676273fc394 91 }
sakthipriya 0:3676273fc394 92
sakthipriya 0:3676273fc394 93 void ir2master()
sakthipriya 0:3676273fc394 94 {
sakthipriya 0:3676273fc394 95
sakthipriya 0:3676273fc394 96 char data='a';
sakthipriya 0:3676273fc394 97 data_ready=0;
sakthipriya 0:3676273fc394 98 data = pc.getc();
sakthipriya 0:3676273fc394 99 i2c_status=1;
sakthipriya 0:3676273fc394 100 i2c_data * i2c_data_s = i2c_data_send.alloc();
sakthipriya 0:3676273fc394 101 i2c_data_s->data = data;
sakthipriya 0:3676273fc394 102 i2c_data_s->length = 1;
sakthipriya 0:3676273fc394 103 i2c_data_send.put(i2c_data_s);
sakthipriya 0:3676273fc394 104 data_ready=1;
sakthipriya 0:3676273fc394 105 //temp = i2c_status;
sakthipriya 0:3676273fc394 106 }
sakthipriya 0:3676273fc394 107
sakthipriya 0:3676273fc394 108
sakthipriya 0:3676273fc394 109
sakthipriya 0:3676273fc394 110
sakthipriya 0:3676273fc394 111 int main()
sakthipriya 0:3676273fc394 112 {
sakthipriya 0:3676273fc394 113 printf("\n slave started\n\r");
sakthipriya 0:3676273fc394 114 ptr_t_i2c = new Thread(T_I2C_BAE);
sakthipriya 0:3676273fc394 115 interrupt.rise(&FUNC_INT);
sakthipriya 0:3676273fc394 116 while(1)
sakthipriya 0:3676273fc394 117 {
sakthipriya 0:3676273fc394 118 ir2master();
sakthipriya 0:3676273fc394 119
sakthipriya 0:3676273fc394 120 }
sakthipriya 0:3676273fc394 121
sakthipriya 0:3676273fc394 122 }
sakthipriya 0:3676273fc394 123
sakthipriya 0:3676273fc394 124
sakthipriya 0:3676273fc394 125