sakthi priya amirtharaj / Mbed 2 deprecated slave_i2c1

Dependencies:   mbed-rtos mbed

Fork of freeslave_write2master_working by green rosh

Committer:
sakthipriya
Date:
Thu Dec 11 11:02:43 2014 +0000
Revision:
6:b024f6ea3b24
Parent:
5:ce0bb4174ca4
master reset not working

Who changed what in which revision?

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