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.
Fork of mbed-RtosI2cDriver by
I2CDriverTest02.h
00001 // exchange messages betwen the LPC1768's two i2c ports using high level reead/write commands 00002 // changing master and slave mode on the fly 00003 00004 #include "mbed.h" 00005 #include "rtos.h" 00006 #include "I2CMasterRtos.h" 00007 #include "I2CSlaveRtos.h" 00008 00009 const int freq = 400000; 00010 const int adr = 42<<1; 00011 const int len=34; 00012 const char mstMsg[len]="We are mbed, resistance is futile"; 00013 const char slvMsg[len]="Fine with me, let's get addicted "; 00014 00015 static void slvRxMsg(I2CSlaveRtos& slv) 00016 { 00017 char rxMsg[len]; 00018 memset(rxMsg,0,len); 00019 if ( slv.receive() == I2CSlave::WriteAddressed) { 00020 slv.read(rxMsg, len); 00021 printf("thread %X received message as i2c slave: '%s'\n",Thread::gettid(),rxMsg); 00022 } else 00023 printf("Ouch slv rx failure\n"); 00024 } 00025 00026 static void slvTxMsg(I2CSlaveRtos& slv) 00027 { 00028 if ( slv.receive() == I2CSlave::ReadAddressed) { 00029 slv.write(slvMsg, len); 00030 } else 00031 printf("Ouch slv tx failure\n"); 00032 } 00033 00034 static void mstTxMsg(I2CMasterRtos& mst) 00035 { 00036 mst.write(adr,mstMsg,len); 00037 } 00038 00039 static void mstRxMsg(I2CMasterRtos& mst) 00040 { 00041 char rxMsg[len]; 00042 memset(rxMsg,0,len); 00043 mst.read(adr,rxMsg,len); 00044 printf("thread %X received message as i2c master: '%s'\n",Thread::gettid(),rxMsg); 00045 } 00046 00047 static void channel1(void const *args) 00048 { 00049 I2CMasterRtos mst(p9,p10,freq); 00050 I2CSlaveRtos slv(p9,p10,freq,adr); 00051 while(1) { 00052 slvRxMsg(slv); 00053 slvTxMsg(slv); 00054 Thread::wait(100); 00055 mstTxMsg(mst); 00056 Thread::wait(100); 00057 mstRxMsg(mst); 00058 } 00059 } 00060 00061 void channel2(void const *args) 00062 { 00063 I2CMasterRtos mst(p28,p27,freq); 00064 I2CSlaveRtos slv(p28,p27,freq,adr); 00065 while(1) { 00066 Thread::wait(100); 00067 mstTxMsg(mst); 00068 Thread::wait(100); 00069 mstRxMsg(mst); 00070 slvRxMsg(slv); 00071 slvTxMsg(slv); 00072 } 00073 } 00074 00075 int doit() 00076 { 00077 Thread selftalk01(channel1,0,osPriorityAboveNormal); 00078 Thread selftalk02(channel2,0,osPriorityAboveNormal); 00079 00080 Thread::wait(10000); 00081 00082 return 0; 00083 } 00084
Generated on Wed Jul 13 2022 17:20:05 by
1.7.2
