sakthi priya amirtharaj / Mbed 2 deprecated master_i2c4

Dependencies:   mbed-rtos mbed

Committer:
sakthipriya
Date:
Sat Dec 13 07:48:08 2014 +0000
Revision:
0:c8358e319c9f
master 4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:c8358e319c9f 1 #include "mbed.h"
sakthipriya 0:c8358e319c9f 2 #include "rtos.h"
sakthipriya 0:c8358e319c9f 3
sakthipriya 0:c8358e319c9f 4 const int addr = 0x20; //slave address
sakthipriya 0:c8358e319c9f 5 I2C master (D14,D15); //configure pins p27,p28 as I2C master
sakthipriya 0:c8358e319c9f 6 Serial pc (USBTX,USBRX);
sakthipriya 0:c8358e319c9f 7 DigitalOut interrupt(D9);
sakthipriya 0:c8358e319c9f 8 InterruptIn data_ready(D10);
sakthipriya 0:c8358e319c9f 9 Thread * ptr_t_i2cmaster;
sakthipriya 0:c8358e319c9f 10
sakthipriya 0:c8358e319c9f 11 typedef struct
sakthipriya 0:c8358e319c9f 12 {
sakthipriya 0:c8358e319c9f 13 char data; // To avoid dynamic memory allocation
sakthipriya 0:c8358e319c9f 14 int length;
sakthipriya 0:c8358e319c9f 15 }master_data;
sakthipriya 0:c8358e319c9f 16
sakthipriya 0:c8358e319c9f 17 Mail<master_data,16> master_data_receive;
sakthipriya 0:c8358e319c9f 18 Mail<master_data,16> master_data_send;
sakthipriya 0:c8358e319c9f 19 void FUNC_MASTER_WRITE();
sakthipriya 0:c8358e319c9f 20
sakthipriya 0:c8358e319c9f 21 void T_MASTER_READ(void const* args)
sakthipriya 0:c8358e319c9f 22 {
sakthipriya 0:c8358e319c9f 23
sakthipriya 0:c8358e319c9f 24 while(1)
sakthipriya 0:c8358e319c9f 25 {
sakthipriya 0:c8358e319c9f 26 Thread::signal_wait(0x2); //master reading from slave
sakthipriya 0:c8358e319c9f 27 wait(0.5);
sakthipriya 0:c8358e319c9f 28 interrupt = 1;
sakthipriya 0:c8358e319c9f 29 printf("\nMaster executed\n\r");
sakthipriya 0:c8358e319c9f 30 bool ack0 =true;
sakthipriya 0:c8358e319c9f 31 char *data_receive = new char;
sakthipriya 0:c8358e319c9f 32 *data_receive = 'b';
sakthipriya 0:c8358e319c9f 33 master.frequency(100000); //set clock frequency
sakthipriya 0:c8358e319c9f 34
sakthipriya 0:c8358e319c9f 35
sakthipriya 0:c8358e319c9f 36 while(ack0)
sakthipriya 0:c8358e319c9f 37 {
sakthipriya 0:c8358e319c9f 38 master.start(); //initiating the data transfer
sakthipriya 0:c8358e319c9f 39 ack0 = master.read(addr,data_receive,1);
sakthipriya 0:c8358e319c9f 40 }
sakthipriya 0:c8358e319c9f 41
sakthipriya 0:c8358e319c9f 42 master_data * master_data_r = master_data_receive.alloc();
sakthipriya 0:c8358e319c9f 43 master_data_r->data = *data_receive;
sakthipriya 0:c8358e319c9f 44 master_data_r->length = 1;
sakthipriya 0:c8358e319c9f 45 master_data_receive.put(master_data_r);
sakthipriya 0:c8358e319c9f 46 printf("\n Data received from CDMS is %c\n\r",*data_receive);
sakthipriya 0:c8358e319c9f 47 master_data_receive.free(master_data_r);
sakthipriya 0:c8358e319c9f 48
sakthipriya 0:c8358e319c9f 49 delete data_receive;
sakthipriya 0:c8358e319c9f 50 interrupt=0;
sakthipriya 0:c8358e319c9f 51
sakthipriya 0:c8358e319c9f 52 }
sakthipriya 0:c8358e319c9f 53 }
sakthipriya 0:c8358e319c9f 54
sakthipriya 0:c8358e319c9f 55 void FUNC_MASTER_IR()
sakthipriya 0:c8358e319c9f 56 {
sakthipriya 0:c8358e319c9f 57 ptr_t_i2cmaster->signal_set(0x2);
sakthipriya 0:c8358e319c9f 58 }
sakthipriya 0:c8358e319c9f 59
sakthipriya 0:c8358e319c9f 60 /*void FUNC_TELECOMMAND()
sakthipriya 0:c8358e319c9f 61 {
sakthipriya 0:c8358e319c9f 62 interrupt = 0;
sakthipriya 0:c8358e319c9f 63 char writedata = pc.getc();
sakthipriya 0:c8358e319c9f 64 interrupt = 1;
sakthipriya 0:c8358e319c9f 65 master_data * master_data_s = master_data_send.alloc();
sakthipriya 0:c8358e319c9f 66 master_data_s->data = writedata;
sakthipriya 0:c8358e319c9f 67 master_data_s->length = 1;
sakthipriya 0:c8358e319c9f 68 master_data_send.put(master_data_s);
sakthipriya 0:c8358e319c9f 69 FUNC_MASTER_WRITE();
sakthipriya 0:c8358e319c9f 70 }*/
sakthipriya 0:c8358e319c9f 71
sakthipriya 0:c8358e319c9f 72 char* data_send =new char;
sakthipriya 0:c8358e319c9f 73 void FUNC_MASTER_WRITE()
sakthipriya 0:c8358e319c9f 74 {
sakthipriya 0:c8358e319c9f 75 printf("\n entered master write\n\r");
sakthipriya 0:c8358e319c9f 76
sakthipriya 0:c8358e319c9f 77 interrupt = 0;
sakthipriya 0:c8358e319c9f 78 *data_send = pc.getc();
sakthipriya 0:c8358e319c9f 79 //printf("\n %c \n\r",*data_send);
sakthipriya 0:c8358e319c9f 80 interrupt = 1;
sakthipriya 0:c8358e319c9f 81 /*master_data * master_data_s = master_data_send.alloc();
sakthipriya 0:c8358e319c9f 82 master_data_s->data = writedata;
sakthipriya 0:c8358e319c9f 83 master_data_s->length = 1;
sakthipriya 0:c8358e319c9f 84 master_data_send.put(master_data_s); */
sakthipriya 0:c8358e319c9f 85
sakthipriya 0:c8358e319c9f 86 /* osEvent evt = master_data_send.get();
sakthipriya 0:c8358e319c9f 87 if (evt.status == osEventMail)
sakthipriya 0:c8358e319c9f 88 {
sakthipriya 0:c8358e319c9f 89 master_data *master_data_s = (master_data*)evt.value.p;
sakthipriya 0:c8358e319c9f 90 *data_send = master_data_s -> data;*/
sakthipriya 0:c8358e319c9f 91 bool write2slave=true;
sakthipriya 0:c8358e319c9f 92 bool master_status_write = true;
sakthipriya 0:c8358e319c9f 93 master.frequency(100000); //set clock frequency
sakthipriya 0:c8358e319c9f 94 while(write2slave){
sakthipriya 0:c8358e319c9f 95 master.start(); //initiating the data transfer
sakthipriya 0:c8358e319c9f 96 master_status_write = (bool) master.write(addr|0x00,data_send,1);
sakthipriya 0:c8358e319c9f 97 if(master_status_write==0)
sakthipriya 0:c8358e319c9f 98 {
sakthipriya 0:c8358e319c9f 99 printf("master has written %c to slave\n\r",*data_send);
sakthipriya 0:c8358e319c9f 100 write2slave=false;
sakthipriya 0:c8358e319c9f 101 }
sakthipriya 0:c8358e319c9f 102 }
sakthipriya 0:c8358e319c9f 103 // master_data_send.free(master_data_s);
sakthipriya 0:c8358e319c9f 104
sakthipriya 0:c8358e319c9f 105 //}
sakthipriya 0:c8358e319c9f 106 }
sakthipriya 0:c8358e319c9f 107
sakthipriya 0:c8358e319c9f 108 int main()
sakthipriya 0:c8358e319c9f 109 {
sakthipriya 0:c8358e319c9f 110
sakthipriya 0:c8358e319c9f 111 printf("\nstarted master\n\r");
sakthipriya 0:c8358e319c9f 112 ptr_t_i2cmaster = new Thread(T_MASTER_READ);
sakthipriya 0:c8358e319c9f 113 data_ready.rise(&FUNC_MASTER_IR);
sakthipriya 0:c8358e319c9f 114 while(1){
sakthipriya 0:c8358e319c9f 115 FUNC_MASTER_WRITE();
sakthipriya 0:c8358e319c9f 116 }
sakthipriya 0:c8358e319c9f 117 }