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.
Diff: main.cpp
- Revision:
- 0:c8358e319c9f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Dec 13 07:48:08 2014 +0000 @@ -0,0 +1,117 @@ +#include "mbed.h" +#include "rtos.h" + +const int addr = 0x20; //slave address +I2C master (D14,D15); //configure pins p27,p28 as I2C master +Serial pc (USBTX,USBRX); +DigitalOut interrupt(D9); +InterruptIn data_ready(D10); +Thread * ptr_t_i2cmaster; + +typedef struct +{ + char data; // To avoid dynamic memory allocation + int length; +}master_data; + +Mail<master_data,16> master_data_receive; +Mail<master_data,16> master_data_send; +void FUNC_MASTER_WRITE(); + +void T_MASTER_READ(void const* args) +{ + + while(1) + { + Thread::signal_wait(0x2); //master reading from slave + wait(0.5); + interrupt = 1; + printf("\nMaster executed\n\r"); + bool ack0 =true; + char *data_receive = new char; + *data_receive = 'b'; + master.frequency(100000); //set clock frequency + + + while(ack0) + { + master.start(); //initiating the data transfer + ack0 = master.read(addr,data_receive,1); + } + + master_data * master_data_r = master_data_receive.alloc(); + master_data_r->data = *data_receive; + master_data_r->length = 1; + master_data_receive.put(master_data_r); + printf("\n Data received from CDMS is %c\n\r",*data_receive); + master_data_receive.free(master_data_r); + + delete data_receive; + interrupt=0; + + } +} + +void FUNC_MASTER_IR() +{ + ptr_t_i2cmaster->signal_set(0x2); +} + +/*void FUNC_TELECOMMAND() +{ + interrupt = 0; + char writedata = pc.getc(); + interrupt = 1; + master_data * master_data_s = master_data_send.alloc(); + master_data_s->data = writedata; + master_data_s->length = 1; + master_data_send.put(master_data_s); + FUNC_MASTER_WRITE(); +}*/ + +char* data_send =new char; +void FUNC_MASTER_WRITE() +{ + printf("\n entered master write\n\r"); + + interrupt = 0; + *data_send = pc.getc(); + //printf("\n %c \n\r",*data_send); + interrupt = 1; + /*master_data * master_data_s = master_data_send.alloc(); + master_data_s->data = writedata; + master_data_s->length = 1; + master_data_send.put(master_data_s); */ + + /* osEvent evt = master_data_send.get(); + if (evt.status == osEventMail) + { + master_data *master_data_s = (master_data*)evt.value.p; + *data_send = master_data_s -> data;*/ + bool write2slave=true; + bool master_status_write = true; + master.frequency(100000); //set clock frequency + while(write2slave){ + master.start(); //initiating the data transfer + master_status_write = (bool) master.write(addr|0x00,data_send,1); + if(master_status_write==0) + { + printf("master has written %c to slave\n\r",*data_send); + write2slave=false; + } + } + // master_data_send.free(master_data_s); + + //} +} + +int main() +{ + + printf("\nstarted master\n\r"); + ptr_t_i2cmaster = new Thread(T_MASTER_READ); + data_ready.rise(&FUNC_MASTER_IR); + while(1){ + FUNC_MASTER_WRITE(); + } +} \ No newline at end of file