only for LPC824 chip to match hardware I2C channels(2->4)

Dependencies:   mbed

Revision:
2:096289a04a1f
Parent:
1:5817c3e6ce1e
Child:
3:8e33af9ea1f7
--- a/main.cpp	Fri Oct 17 20:48:15 2014 +0000
+++ b/main.cpp	Tue Oct 21 03:41:24 2014 +0000
@@ -1,19 +1,23 @@
 #include "mbed.h"
-//#define isuse_USB_SERIAL
 
-#ifdef isuse_USB_SERIAL
-#include "USBSerial.h"
-USBSerial pc;
-#else
 Serial pc(USBTX,USBRX);
-#endif
-I2C dev1(p9,p10);
-I2C dev2(p28,p27);
-//I2C dev3(A5,A4);
-//I2C dev4(A5,A4);
-I2C* dev=&dev1;
-BusOut bus(LED1,LED2,LED3,LED4);
-//DigitalOut led1(LED1);
+/*
+    D5 = P0_28,
+    D6 = P0_16, // LED_GREEN
+    D7 = P0_17,
+    D8 = P0_13,
+    D9 = P0_27, // LED_BLUE
+    D10 = P0_15,
+    D11 = P0_26,
+    D12 = P0_25,
+    D13 = P0_24,
+*/
+I2C dev1(I2C_SDA,I2C_SCL);
+I2C dev2(A0,A1);
+I2C dev3(A2,A3);
+I2C dev4(A4,A5);
+//BusOut bus(LED1,LED2,LED3,LED4);
+DigitalOut led1(LED1);
 //DigitalOut led2(LED2);
 //DigitalOut led3(LED3);
 //DigitalOut led4(LED4);
@@ -27,20 +31,22 @@
 //[_] I 0x49 read GPIO port
 //[_] O 0x4F write to GPIO port
 //[_] Z 0x5A power down
+//[X] C 0x?? change channel
 
 int main()
 {
-#ifndef isuse_USB_SERIAL
-    pc.baud(115200);
-#endif
+    I2C* dev=&dev1;
+    pc.baud(9600);
     dev1.frequency(100000);//100k
     dev2.frequency(100000);//100k
+    dev3.frequency(100000);//100k
+    dev4.frequency(100000);//100k
 
-    int data=0x50;
-    int ack=0;
+//    int data=0x50;
+//    int ack=0;
     int plength=0;
     char recieve[256];
-    char send[256];
+//    char send[256];
     char read=0;
     int address=0,length=0,channel=0;
     enum reg {
@@ -57,17 +63,22 @@
 //"S(0x80)(4)(0xDEADBEAF)P"
 //"C3P"
 //"S(0x80)(4)(0xDEADBEAF)P"
+//dev1.start();
+//dev1.write(address);
+//dev1.stop();
 
     int i=0;
     while(1) {
         while(true) {
+            led1=0;
             read=pc.getc();
             recieve[i]=read;
-//            ser.printf("%02X,",read);
+//pc.printf("%02X,",read); //debug
             i++;
             if(read == 'P') {
                 plength=i;
-//                ser.printf("P\n\r");
+                led1=1;
+//pc.printf("P\n\r");
                 break;
             }
         }
@@ -78,31 +89,31 @@
                     channel=recieve[i+1];
                     switch(channel) {
                         case I2C0adr:
-                            bus=0x01;
-//                            pc.printf("ch0 is selected,");
+////                            bus=0x01;
+//pc.printf("ch0 is selected,");
                             channel='0';
                             dev=&dev1;
                             break;
                         case I2C1adr:
-                            bus=0x02;
-//                            pc.printf("ch1 is selected,");
-//                            pc.printf("ch1 is not implemented,");
+////                            bus=0x02;
+//pc.printf("ch1 is selected,");
                             channel='1';
                             dev=&dev2;
                             break;
                         case I2C2adr:
-                            bus=0x04;
-//                            pc.printf("ch2 is not implemented,");
-                            channel='0';
-                            //dev=&dev3;
+////                            bus=0x04;
+//pc.printf("ch2 is selected,");
+                            channel='2';
+                            dev=&dev3;
                             break;
                         case I2C3adr:
-                            bus=0x08;
-//                            pc.printf("ch0 is not implemented,");
-                            channel='0';
-                            //dev=&dev4;
+////                            bus=0x08;
+//pc.printf("ch3 is selected,");
+                            channel='3';
+                            dev=&dev4;
                             break;
                         default:
+//pc.printf("ch? is not implemented,");
                             channel='0';
                             dev=&dev1;
                             break;
@@ -112,28 +123,30 @@
                 case 'S':
                     address=recieve[i+1];
                     length=recieve[i+2];
-//                    pc.printf("addr=%02X, length=%d,",address,length);
+//pc.printf("addr=%02X, length=%d,",address,length);
+//dev1.start();
+//dev1.write(address);
                     dev->start();
                     dev->write(address);
                     if( (address&0x01)) {//read
-//                        pc.printf("read from ch%c,",channel);
+//pc.printf("read from ch%c,",channel);
                         for(int j=0; j<length; j++) {
-                            pc.putc(dev->read(0));
-//                            send[j]=dev->read(0);
-//                            pc.printf("%02X,",dev->read(0));
+//pc.putc(dev->read(0));
+                            pc.printf("%02X,",dev->read(0));
                         }
                         i+=(3);
                     } else {//write
-//                        pc.printf("write to ch%c, ",channel);
+//pc.printf("write to ch%c, ",channel);
                         for(int j=0; j<length; j++) {
-//                            send[j]=recieve[4+j];
-//                            pc.printf("%02X,",recieve[3+j]);
+//pc.printf("%02X,",recieve[3+j]);
+//dev1.write(recieve[3+j]);
                             dev->write(recieve[3+j]);
                         }
                         i+=(3+length);
                     }
                     break;
                 case 'P':
+//dev1.stop();
                     dev->stop();
                     i=plength;
                     pc.printf("ok\n\r");