while loop removed ( master cant send)

Dependencies:   mbed-rtos mbed

Fork of slave_working_obama by sakthi priya amirtharaj

Committer:
greenroshks
Date:
Mon Jan 26 11:12:57 2015 +0000
Revision:
13:fe24dd810078
Parent:
12:f6b6954b65d6
without timeouts and timers

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
greenroshks 12:f6b6954b65d6 4
viswachaitanya 0:24e80ff2c7b1 5 void write_to_master(char); //function to write data to master
greenroshks 4:133b49d51b18 6 Thread * ptr_t_i2c;
viswachaitanya 0:24e80ff2c7b1 7 I2CSlave slave(D14,D15); //configuring pins p27, p28 as I2Cslave
viswachaitanya 0:24e80ff2c7b1 8 Serial pc (USBTX,USBRX);
greenroshks 2:458f9e603814 9 InterruptIn interrupt(D9);
sakthipriya 8:04b912dc2443 10 InterruptIn master_reset(D11);
greenroshks 5:ce0bb4174ca4 11 DigitalOut data_ready(D10);
greenroshks 5:ce0bb4174ca4 12 int i2c_status=0; //read/write mode for i2c 0 : write2slave, 1 : write2master
sakthipriya 8:04b912dc2443 13 int reset=0;
sakthipriya 8:04b912dc2443 14 int temp;
greenroshks 13:fe24dd810078 15 Timer t;
greenroshks 13:fe24dd810078 16 Timer t2;
greenroshks 4:133b49d51b18 17
greenroshks 4:133b49d51b18 18 typedef struct
greenroshks 2:458f9e603814 19 {
greenroshks 4:133b49d51b18 20 char data; // To avoid dynamic memory allocation
greenroshks 4:133b49d51b18 21 int length;
greenroshks 4:133b49d51b18 22 }i2c_data;
viswachaitanya 0:24e80ff2c7b1 23
greenroshks 4:133b49d51b18 24 Mail<i2c_data,16> i2c_data_receive;
greenroshks 4:133b49d51b18 25 Mail<i2c_data,16> i2c_data_send;
sakthipriya 10:f2a8d9ac49d6 26
greenroshks 12:f6b6954b65d6 27 unsigned char* add_reg = (unsigned char*)0x40067000;
greenroshks 12:f6b6954b65d6 28 unsigned char* data_reg = (unsigned char*)0x40067004;
greenroshks 12:f6b6954b65d6 29 unsigned char* status_reg = (unsigned char*)0x40067003;
greenroshks 12:f6b6954b65d6 30 unsigned char* c1_reg = (unsigned char*)0x40067002;
greenroshks 12:f6b6954b65d6 31 unsigned char* c2_reg = (unsigned char*)0x40067005;
greenroshks 12:f6b6954b65d6 32 unsigned char* freq_reg = (unsigned char*)0x40067001;
sakthipriya 10:f2a8d9ac49d6 33 int receive_status =0;
greenroshks 5:ce0bb4174ca4 34 void FUNC_I2C_WRITE2CDMS(char *data, int length=1)
greenroshks 4:133b49d51b18 35 {
raizel_varun 6:8aea752c6eda 36 int slave_status = 1;
sakthipriya 10:f2a8d9ac49d6 37 // printf("\nData is %c\n\r",*data);
sakthipriya 10:f2a8d9ac49d6 38
greenroshks 13:fe24dd810078 39
greenroshks 13:fe24dd810078 40 //wait_ms(10);
greenroshks 12:f6b6954b65d6 41 if(interrupt ==1)
sakthipriya 10:f2a8d9ac49d6 42 {
sakthipriya 10:f2a8d9ac49d6 43 //wait(2);
greenroshks 12:f6b6954b65d6 44 //printf("\nin int loop\n");
greenroshks 13:fe24dd810078 45 //t.stop();
greenroshks 13:fe24dd810078 46 //t2.start();
sakthipriya 10:f2a8d9ac49d6 47 receive_status = slave.receive();
greenroshks 13:fe24dd810078 48 //t2.stop();
greenroshks 13:fe24dd810078 49 //printf("\n%d\n",receive_status);
greenroshks 13:fe24dd810078 50 t.stop();
greenroshks 12:f6b6954b65d6 51 //printf("\n status %d \n",receive_status);
sakthipriya 10:f2a8d9ac49d6 52 if( receive_status==1)
greenroshks 2:458f9e603814 53 {
sakthipriya 10:f2a8d9ac49d6 54 // printf("\nslave receive b4: \n");
greenroshks 13:fe24dd810078 55 //t.stop();
greenroshks 13:fe24dd810078 56 //t2.start();
greenroshks 13:fe24dd810078 57
greenroshks 5:ce0bb4174ca4 58 slave_status=slave.write(data,length);
greenroshks 13:fe24dd810078 59
greenroshks 13:fe24dd810078 60 t2.stop();
sakthipriya 10:f2a8d9ac49d6 61 // printf("\nData sent to CDMS is %c\n\r",*data);
sakthipriya 10:f2a8d9ac49d6 62 // printf("\n\r write");
sakthipriya 10:f2a8d9ac49d6 63 //printf("\nslave receive after: %d \n",slave.receive());
greenroshks 2:458f9e603814 64
viswachaitanya 0:24e80ff2c7b1 65 }
greenroshks 12:f6b6954b65d6 66
greenroshks 12:f6b6954b65d6 67
sakthipriya 10:f2a8d9ac49d6 68 else if( receive_status==3 || receive_status==2)
sakthipriya 8:04b912dc2443 69 {
greenroshks 13:fe24dd810078 70 //t.stop();
greenroshks 13:fe24dd810078 71 //printf("\nh\n");
sakthipriya 8:04b912dc2443 72 slave_status=slave.read(data,length);
greenroshks 12:f6b6954b65d6 73
sakthipriya 8:04b912dc2443 74 }
sakthipriya 10:f2a8d9ac49d6 75 //printf("\n \r done while loop %d \n",slave.receive());
sakthipriya 10:f2a8d9ac49d6 76 //printf("\n\r ahoy drhghhhhhhhhhhh\n");
sakthipriya 11:907c02e9fb00 77 // printf("\n\r %d %d %d %d %d \n",*data_reg,*status_reg,*c1_reg,*c2_reg,*freq_reg);
sakthipriya 8:04b912dc2443 78
greenroshks 2:458f9e603814 79 }
greenroshks 13:fe24dd810078 80 printf("\n%f\r",t.read());
greenroshks 13:fe24dd810078 81 t.reset();
greenroshks 13:fe24dd810078 82 printf("\n%d\r",t2.read_us());
greenroshks 13:fe24dd810078 83 t2.reset();
greenroshks 13:fe24dd810078 84 //printf("\n%f\r",t.read());
greenroshks 2:458f9e603814 85 }
greenroshks 2:458f9e603814 86
greenroshks 4:133b49d51b18 87 void T_I2C_BAE(void const * args)
greenroshks 2:458f9e603814 88 {
greenroshks 4:133b49d51b18 89 char data_send,data_receive;
greenroshks 4:133b49d51b18 90 while(1)
greenroshks 4:133b49d51b18 91 {
greenroshks 4:133b49d51b18 92 Thread::signal_wait(0x1);
sakthipriya 8:04b912dc2443 93 //i2c_status = temp;
sakthipriya 8:04b912dc2443 94 //wait(0.5);
sakthipriya 8:04b912dc2443 95 printf("\n entered thread\n\r");
greenroshks 13:fe24dd810078 96 if(i2c_status == 0 ) //receiving data from cdms
greenroshks 5:ce0bb4174ca4 97 {
greenroshks 5:ce0bb4174ca4 98
greenroshks 5:ce0bb4174ca4 99 FUNC_I2C_WRITE2CDMS(&data_receive);
greenroshks 5:ce0bb4174ca4 100 i2c_data * i2c_data_r = i2c_data_receive.alloc();
greenroshks 5:ce0bb4174ca4 101 i2c_data_r->data = data_receive;
greenroshks 5:ce0bb4174ca4 102 i2c_data_r->length = 1;
greenroshks 5:ce0bb4174ca4 103 i2c_data_receive.put(i2c_data_r);
sakthipriya 8:04b912dc2443 104 printf("\n Data received from CDMS is %c\n\r",data_receive);
sakthipriya 8:04b912dc2443 105 i2c_data_receive.free(i2c_data_r); // This has to be done from a differen thread
raizel_varun 6:8aea752c6eda 106
greenroshks 5:ce0bb4174ca4 107 }
greenroshks 13:fe24dd810078 108 else if(i2c_status ==1 ) //sending data to cdms
greenroshks 5:ce0bb4174ca4 109 {
greenroshks 5:ce0bb4174ca4 110 osEvent evt = i2c_data_send.get();
greenroshks 5:ce0bb4174ca4 111 if (evt.status == osEventMail)
greenroshks 5:ce0bb4174ca4 112 {
greenroshks 5:ce0bb4174ca4 113 i2c_data *i2c_data_s = (i2c_data*)evt.value.p;
greenroshks 5:ce0bb4174ca4 114 data_send = i2c_data_s -> data;
sakthipriya 10:f2a8d9ac49d6 115 //printf("\n1.Data is %c\n\r",data_send);
greenroshks 5:ce0bb4174ca4 116 FUNC_I2C_WRITE2CDMS(&data_send);
sakthipriya 8:04b912dc2443 117 printf("\nData sent to CDMS is %c\n\r",data_send);
greenroshks 5:ce0bb4174ca4 118 i2c_data_send.free(i2c_data_s);
greenroshks 5:ce0bb4174ca4 119 i2c_status = 0;
sakthipriya 8:04b912dc2443 120 //temp = i2c_status;
greenroshks 5:ce0bb4174ca4 121 }
raizel_varun 6:8aea752c6eda 122 }
greenroshks 9:baf5de5828c9 123
greenroshks 9:baf5de5828c9 124 data_ready=0;
greenroshks 4:133b49d51b18 125 }
greenroshks 2:458f9e603814 126 }
greenroshks 4:133b49d51b18 127
greenroshks 4:133b49d51b18 128 void FUNC_INT()
greenroshks 4:133b49d51b18 129 {
greenroshks 13:fe24dd810078 130 //reset = 0;
greenroshks 13:fe24dd810078 131 t.start();
greenroshks 4:133b49d51b18 132 ptr_t_i2c->signal_set(0x1);
sakthipriya 7:debeb7070a54 133
greenroshks 4:133b49d51b18 134 }
sakthipriya 7:debeb7070a54 135
greenroshks 13:fe24dd810078 136
sakthipriya 8:04b912dc2443 137
sakthipriya 7:debeb7070a54 138 void ir2master()
sakthipriya 7:debeb7070a54 139 {
sakthipriya 8:04b912dc2443 140
sakthipriya 8:04b912dc2443 141 char data='a';
greenroshks 9:baf5de5828c9 142 //data_ready=0;
sakthipriya 7:debeb7070a54 143 data = pc.getc();
greenroshks 9:baf5de5828c9 144
sakthipriya 8:04b912dc2443 145 reset =0;
sakthipriya 7:debeb7070a54 146 i2c_status=1;
sakthipriya 7:debeb7070a54 147 i2c_data * i2c_data_s = i2c_data_send.alloc();
sakthipriya 7:debeb7070a54 148 i2c_data_s->data = data;
sakthipriya 7:debeb7070a54 149 i2c_data_s->length = 1;
sakthipriya 7:debeb7070a54 150 i2c_data_send.put(i2c_data_s);
sakthipriya 7:debeb7070a54 151 data_ready=1;
sakthipriya 8:04b912dc2443 152 //temp = i2c_status;
sakthipriya 7:debeb7070a54 153 }
sakthipriya 7:debeb7070a54 154
greenroshks 4:133b49d51b18 155
greenroshks 4:133b49d51b18 156
greenroshks 4:133b49d51b18 157
raizel_varun 6:8aea752c6eda 158 int main()
raizel_varun 6:8aea752c6eda 159 {
greenroshks 12:f6b6954b65d6 160
sakthipriya 8:04b912dc2443 161 printf("\n slave started\n\r");
greenroshks 13:fe24dd810078 162 slave.address(0x20);
greenroshks 4:133b49d51b18 163 ptr_t_i2c = new Thread(T_I2C_BAE);
greenroshks 12:f6b6954b65d6 164
greenroshks 4:133b49d51b18 165 interrupt.rise(&FUNC_INT);
greenroshks 2:458f9e603814 166 while(1)
greenroshks 2:458f9e603814 167 {
sakthipriya 7:debeb7070a54 168 ir2master();
greenroshks 5:ce0bb4174ca4 169
greenroshks 2:458f9e603814 170 }
raizel_varun 6:8aea752c6eda 171
raizel_varun 6:8aea752c6eda 172 }
raizel_varun 6:8aea752c6eda 173
raizel_varun 6:8aea752c6eda 174
raizel_varun 6:8aea752c6eda 175
raizel_varun 6:8aea752c6eda 176