Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:c8358e319c9f, 2014-12-13 (annotated)
- Committer:
- sakthipriya
- Date:
- Sat Dec 13 07:48:08 2014 +0000
- Revision:
- 0:c8358e319c9f
master 4
Who changed what in which revision?
User | Revision | Line number | New 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 | } |