lkjhgfdsaqwertyuiopmnbvcxzaqwsxcderfvbgtyhnmjuiklop

Dependencies:   mbed-rtos mbed

Committer:
raizel_varun
Date:
Tue Jan 20 16:59:30 2015 +0000
Revision:
0:fc82140da5f9
tan tana tan vr tada;

Who changed what in which revision?

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