gfgf

Dependencies:   mbed-rtos mbed

Fork of CDMS_tc by sakthi priya amirtharaj

Committer:
raizel_varun
Date:
Fri Dec 19 09:22:33 2014 +0000
Revision:
1:192fbd193467
Parent:
0:252ce694a71e
gdhgd; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:252ce694a71e 1 #include "mbed.h"
sakthipriya 0:252ce694a71e 2 #include "rtos.h"
sakthipriya 0:252ce694a71e 3
sakthipriya 0:252ce694a71e 4 const int addr = 0x20; //slave address
sakthipriya 0:252ce694a71e 5 I2C master (D14,D15); //configure pins p27,p28 as I2C master
sakthipriya 0:252ce694a71e 6 Serial pc (USBTX,USBRX);
sakthipriya 0:252ce694a71e 7 DigitalOut interrupt(D9);
raizel_varun 1:192fbd193467 8 DigitalOut genpin(D8);
sakthipriya 0:252ce694a71e 9 InterruptIn data_ready(D10);
sakthipriya 0:252ce694a71e 10
raizel_varun 1:192fbd193467 11
sakthipriya 0:252ce694a71e 12 int reset;
sakthipriya 0:252ce694a71e 13
sakthipriya 0:252ce694a71e 14 typedef struct
sakthipriya 0:252ce694a71e 15 {
sakthipriya 0:252ce694a71e 16 char data; // To avoid dynamic memory allocation
sakthipriya 0:252ce694a71e 17 int length;
sakthipriya 0:252ce694a71e 18 }i2c_data;
sakthipriya 0:252ce694a71e 19
sakthipriya 0:252ce694a71e 20 //Mail<i2c_data,16> i2c_data_receive;
sakthipriya 0:252ce694a71e 21 Mail<i2c_data,16> i2c_data_send;
sakthipriya 0:252ce694a71e 22
sakthipriya 0:252ce694a71e 23 Thread * ptr_t_i2c;
sakthipriya 0:252ce694a71e 24 void FUNC_I2C_MASTER_FSLAVE(char * data,int length)
sakthipriya 0:252ce694a71e 25 {
sakthipriya 0:252ce694a71e 26 //printf("press backspace for master to start \n\r");
sakthipriya 0:252ce694a71e 27 //while(1){
sakthipriya 0:252ce694a71e 28 //interrupt = 0;
sakthipriya 0:252ce694a71e 29 // if(pc.getc()=='z'){
sakthipriya 0:252ce694a71e 30 wait(0.5);
sakthipriya 0:252ce694a71e 31 interrupt = 1;
sakthipriya 0:252ce694a71e 32 printf("\nMaster executed\n");
sakthipriya 0:252ce694a71e 33
sakthipriya 0:252ce694a71e 34
sakthipriya 0:252ce694a71e 35 bool ack0 =true;
sakthipriya 0:252ce694a71e 36 bool loopvariable0 =true;
sakthipriya 0:252ce694a71e 37 //char *data = new char;
sakthipriya 0:252ce694a71e 38 //*data = 'b';
sakthipriya 0:252ce694a71e 39
sakthipriya 0:252ce694a71e 40
sakthipriya 0:252ce694a71e 41
sakthipriya 0:252ce694a71e 42 master.frequency(100000); //set clock frequency
sakthipriya 0:252ce694a71e 43 //master.start();
sakthipriya 0:252ce694a71e 44 /*while(write2slave)
sakthipriya 0:252ce694a71e 45 { *writedata = pc.getc();
sakthipriya 0:252ce694a71e 46 wait(0.5);
sakthipriya 0:252ce694a71e 47
sakthipriya 0:252ce694a71e 48 printf("master clk freq setup and addressing slave\n\r");
sakthipriya 0:252ce694a71e 49 master.start(); //initiating the data transfer
sakthipriya 0:252ce694a71e 50 master_status_write = (bool) master.write(addr|0x00,writedata,1);
sakthipriya 0:252ce694a71e 51 if(master_status_write==0)
sakthipriya 0:252ce694a71e 52 {
sakthipriya 0:252ce694a71e 53 printf("master has written %c to slave\n\r",*writedata);
sakthipriya 0:252ce694a71e 54 write2slave=false;
sakthipriya 0:252ce694a71e 55 }
sakthipriya 0:252ce694a71e 56
sakthipriya 0:252ce694a71e 57
sakthipriya 0:252ce694a71e 58 }*/
sakthipriya 0:252ce694a71e 59
sakthipriya 0:252ce694a71e 60 while(ack0)
sakthipriya 0:252ce694a71e 61 {
sakthipriya 0:252ce694a71e 62 //printf("2 master clk freq setup and addressing slave\n\r");
sakthipriya 0:252ce694a71e 63
sakthipriya 0:252ce694a71e 64 master.start(); //initiating the data transfer
sakthipriya 0:252ce694a71e 65 ack0 = master.read(addr,data,length);
sakthipriya 0:252ce694a71e 66 }
sakthipriya 0:252ce694a71e 67 if(!ack0)
sakthipriya 0:252ce694a71e 68 {
sakthipriya 0:252ce694a71e 69 printf("\n master has read %s from slave\n\r",data);
sakthipriya 0:252ce694a71e 70 loopvariable0=false;
sakthipriya 0:252ce694a71e 71 }
sakthipriya 0:252ce694a71e 72 //master.stop();
sakthipriya 0:252ce694a71e 73
sakthipriya 0:252ce694a71e 74 //printf("done\n\r");
sakthipriya 0:252ce694a71e 75 //delete data;
sakthipriya 0:252ce694a71e 76 interrupt=0;
sakthipriya 0:252ce694a71e 77 }
sakthipriya 0:252ce694a71e 78
sakthipriya 0:252ce694a71e 79 void T_I2C_MASTER_FSLAVE(void const *args)
sakthipriya 0:252ce694a71e 80 {
sakthipriya 0:252ce694a71e 81 char data_receive[25];
sakthipriya 0:252ce694a71e 82 while(1)
sakthipriya 0:252ce694a71e 83 {
sakthipriya 0:252ce694a71e 84 Thread::signal_wait(0x1);
sakthipriya 0:252ce694a71e 85 FUNC_I2C_MASTER_FSLAVE(data_receive,25);
sakthipriya 0:252ce694a71e 86 /*i2c_data * i2c_data_r = i2c_data_receive.alloc();
sakthipriya 0:252ce694a71e 87 strcpy(i2c_data_r->data , data_receive);
sakthipriya 0:252ce694a71e 88 i2c_data_r->length = 25;
sakthipriya 0:252ce694a71e 89 i2c_data_receive.put(i2c_data_r);*/
sakthipriya 0:252ce694a71e 90 printf("\n Data received from slave is %s\n\r",data_receive);
sakthipriya 0:252ce694a71e 91 }
sakthipriya 0:252ce694a71e 92 }
sakthipriya 0:252ce694a71e 93
sakthipriya 0:252ce694a71e 94 void FUNC_INT()
sakthipriya 0:252ce694a71e 95 {
sakthipriya 0:252ce694a71e 96
sakthipriya 0:252ce694a71e 97 ptr_t_i2c->signal_set(0x1);
sakthipriya 0:252ce694a71e 98
sakthipriya 0:252ce694a71e 99 }
sakthipriya 0:252ce694a71e 100
sakthipriya 0:252ce694a71e 101 char writedata;
sakthipriya 0:252ce694a71e 102 bool write2slave;
sakthipriya 0:252ce694a71e 103 bool master_status_write;
sakthipriya 0:252ce694a71e 104 void FUNC_MASTER_WRITE()
sakthipriya 0:252ce694a71e 105 { //wait(1);
sakthipriya 0:252ce694a71e 106 write2slave=true;
sakthipriya 0:252ce694a71e 107
sakthipriya 0:252ce694a71e 108
sakthipriya 0:252ce694a71e 109
sakthipriya 0:252ce694a71e 110 char data = pc.getc();
sakthipriya 0:252ce694a71e 111 interrupt = 1;
sakthipriya 0:252ce694a71e 112 i2c_data * i2c_data_s = i2c_data_send.alloc();
sakthipriya 0:252ce694a71e 113 i2c_data_s->data = data;
sakthipriya 0:252ce694a71e 114 i2c_data_s->length = 1;
sakthipriya 0:252ce694a71e 115 i2c_data_send.put(i2c_data_s);
sakthipriya 0:252ce694a71e 116 master_status_write = true;
sakthipriya 0:252ce694a71e 117
sakthipriya 0:252ce694a71e 118 // interrupt = 1;
sakthipriya 0:252ce694a71e 119
sakthipriya 0:252ce694a71e 120 osEvent evt = i2c_data_send.get();
sakthipriya 0:252ce694a71e 121 if (evt.status == osEventMail)
sakthipriya 0:252ce694a71e 122 {
sakthipriya 0:252ce694a71e 123 i2c_data *i2c_data_s = (i2c_data*)evt.value.p;
sakthipriya 0:252ce694a71e 124 writedata = i2c_data_s -> data;
sakthipriya 0:252ce694a71e 125 master.frequency(100000); //set clock frequency
sakthipriya 0:252ce694a71e 126 while(write2slave)
sakthipriya 0:252ce694a71e 127 {
sakthipriya 0:252ce694a71e 128 printf("master clk freq setup and addressing slave\n\r");
sakthipriya 0:252ce694a71e 129 master.start(); //initiating the data transfer
sakthipriya 0:252ce694a71e 130 master_status_write = (bool) master.write(addr|0x00,&writedata,1);
sakthipriya 0:252ce694a71e 131 if(master_status_write==0)
sakthipriya 0:252ce694a71e 132 {
sakthipriya 0:252ce694a71e 133 printf("master has written %c to slave\n\r",writedata);
sakthipriya 0:252ce694a71e 134 write2slave=false;
sakthipriya 0:252ce694a71e 135 }
sakthipriya 0:252ce694a71e 136 i2c_data_send.free(i2c_data_s);
sakthipriya 0:252ce694a71e 137 }
sakthipriya 0:252ce694a71e 138 }
sakthipriya 0:252ce694a71e 139 interrupt = 0;
sakthipriya 0:252ce694a71e 140 }
sakthipriya 0:252ce694a71e 141
sakthipriya 0:252ce694a71e 142
sakthipriya 0:252ce694a71e 143
sakthipriya 0:252ce694a71e 144 int main()
sakthipriya 0:252ce694a71e 145 {
raizel_varun 1:192fbd193467 146 genpin = 1;
sakthipriya 0:252ce694a71e 147 ptr_t_i2c = new Thread(T_I2C_MASTER_FSLAVE);
sakthipriya 0:252ce694a71e 148 data_ready.rise(&FUNC_INT);
sakthipriya 0:252ce694a71e 149 printf("\nstarted master\n");
sakthipriya 0:252ce694a71e 150 while(1)
sakthipriya 0:252ce694a71e 151 { //Thread::wait(9000);
sakthipriya 0:252ce694a71e 152 //interrupt = 1;
sakthipriya 0:252ce694a71e 153
sakthipriya 0:252ce694a71e 154 FUNC_MASTER_WRITE();
sakthipriya 0:252ce694a71e 155 //interrupt = 0;
sakthipriya 0:252ce694a71e 156 ;
sakthipriya 0:252ce694a71e 157 }
sakthipriya 0:252ce694a71e 158 }