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: LPC11UXX/main.cpp
- Revision:
- 10:b2ffc7117a58
- Parent:
- 7:82b1422b9b09
- Child:
- 17:8e4c490fd639
--- a/LPC11UXX/main.cpp Thu Dec 04 17:39:09 2014 +0900
+++ b/LPC11UXX/main.cpp Thu Dec 04 17:39:24 2014 +0900
@@ -1,14 +1,157 @@
+/** uart_i2c_conv for LPC11UXX
+*/
+
#include "mbed.h"
+#include "I2C_FmPlus.h"
+
+#if defined(TARGET_LPC11U35_401) || defined(TARGET_LPC11U35_501)
#include "USBSerial.h"
-
-//Virtual serial port over USB
-USBSerial serial;
-
-int main(void) {
+USBSerial pc;
+#else
+Serial pc(USBTX, USBRX);
+#endif
+I2C_FmPlus dev1( P0_5, P0_4 );
+I2C_FmPlus* dev = &dev1;
+
+int main()
+{
+ I2C* dev=&dev1;
+ pc.baud(115200);
+
+ bool s = false;
+ dev1.frequency(1000000);//1M
+
+ int ack=0;
+ int plength=0;
+ char recieve[256];
+ char send[256];
+ char read=0;
+ int address=0,length=0,channel=0;
+ enum reg {
+ I2C0adr='0',
+ };
+
+//"C0P"
+//"C1P"
+//"C2P"
+//"C3P"
+//"S| 0x_8 _0| 0x_0 _4| 0x_D _E _A _D _B _E _A _F| P"
+//"S| 0x_8 _0| 0x_0 _4| 0x_D _E _A _D _B _E _A _F| S| 0x_8 _1| 0x_0 _4| P"
+//"S| 0x_8 _1| 0x_0 _4| P"
- while(1)
- {
- serial.printf("I am a virtual serial port\r\n");
- wait(1);
+ int i=0;
+ while(1) {
+ while(true) {
+ read=pc.getc();
+ recieve[i]=read;
+ i++;
+ if(read == 'P') {
+ plength=i;
+ break;
+ }
+ }
+ i=0;
+ while(i < plength) {
+ switch(recieve[i]) {
+ case 'C':
+ {
+ channel=recieve[i+1];
+ switch(channel) {
+ case I2C0adr:
+ {
+ bus=~0x01;
+ channel='0';
+ dev=&dev1;
+ break;
+ }
+ default:
+ {
+ channel='0';
+ dev=&dev1;
+ break;
+ }
+ }
+ i+=(2);
+ break;
+ }
+ case 'S':
+ {
+ s = true;
+ ack = plength - 2 - (i+1) + (recieve[i+2] & 0x01);
+ if( ack >= 4){ //valid packet
+ address = 0xff & (recieve[i+1] << 4 | (recieve[i+2] & 0x0F));
+ length = 0xff & (recieve[i+3] << 4 | (recieve[i+4] & 0x0F));
+ }else{
+ pc.printf("bad packet! %d, %d, %02X, %d\n\r",plength,i,recieve[(i+2)]&0x0F,ack);
+ i = plength + 1;
+ break;
+ }
+ dev->start();
+ ack=dev->write(address);
+ if( (address&0x01)) {//read
+ for(int j=0; j<length; j++) {
+ send[j] = dev->read(1);
+ }
+ i+=(5);
+ } else {//write
+ for(int j=0; j < (length * 2); j+=2) {
+ ack = dev->write( 0xff&(recieve[5+j] << 4 | (recieve[6+j] & 0x0F)) );
+ }
+ i+=(5 + length * 2);
+ length=0;
+ }
+ break;
+ }
+ case 'P':
+ if(s){
+ dev->stop();
+ s=false;
+ }
+ i=plength;
+ for(int j=0; j<length; j++) {
+ pc.printf("%02X,",send[j]);
+ }
+ pc.printf("ok\n\r");
+ break;
+ case 'R':
+ {
+ pc.printf("command R is not implemented\n\r");
+ i=plength;
+ break;
+ }
+ case 'W':
+ {
+ pc.printf("command W is not implemented\n\r");
+ i=plength;
+ break;
+ }
+ case 'I':
+ {
+ pc.printf("command I is not implemented\n\r");
+ i=plength;
+ break;
+ }
+ case 'O':
+ {
+ pc.printf("command O is not implemented\n\r");
+ i=plength;
+ break;
+ }
+ case 'Z':
+ {
+ pc.printf("command Z is not implemented\n\r");
+ i=plength;
+ break;
+ }
+ default:
+ {
+ pc.printf("command ? is not implemented\n\r");
+ i=plength;
+ break;
+ }
+ }
+ }
+ i=0;
+ length=0;
}
-}
\ No newline at end of file
+}