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

Dependencies:   mbed

Revision:
0:9d12c615c8ea
Child:
1:5817c3e6ce1e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Oct 17 20:25:23 2014 +0000
@@ -0,0 +1,202 @@
+/*
+#include "mbed.h"
+#include "USBSerial.h"
+ 
+//Virtual serial port over USB
+USBSerial serial;
+ 
+int main(void) {
+ 
+    while(1)
+    {
+        serial.printf("I am a virtual serial port!\r\n");
+        wait(0.005);
+    }
+}
+*/
+///*
+#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(p9,p10);
+//I2C dev3(A5,A4);
+//I2C dev4(A5,A4);
+I2C* dev=&dev1;
+BusOut bus(LED1,LED2,LED3,LED4);
+//InterruptIn adint(D9);
+//DigitalOut led1(LED1);
+//DigitalOut led2(LED2);
+//DigitalOut led3(LED3);
+//DigitalOut led4(LED4);
+
+//Table 3. ASCII commands supported by SC18IM700
+//ASCII command Hex value Command function
+//S 0x53 I2C-bus START
+//P 0x50 I2C-bus STOP
+//R 0x52 read SC18IM700 internal register
+//W 0x57 write to SC18IM700 internal register
+//I 0x49 read GPIO port
+//O 0x4F write to GPIO port
+//Z 0x5A power down
+void adcomplete()
+{
+}
+
+int main()
+{
+#ifndef isuse_USB_SERIAL
+    pc.baud(115200);
+#endif
+//    adc.baud(38400);
+    dev1.frequency(100000);//100k
+//    adint.fall(&adcomplete);
+
+    int data=0x50;
+    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',
+        I2C1adr='1',
+        I2C2adr='2',
+        I2C3adr='3',
+    };
+//    uint8_t registers[]={0x80,0x90,};
+
+//    reg.start();
+//    reg.write(0xD0);
+//    reg.write(data);
+//
+//    reg.write(0xD0|0x01);
+//    data=reg.read(ack);
+//    reg.stop();
+//"C0P"
+//"S(0x80)(4)(0xDEADBEAF)P"
+//"C1P"
+//"S(0x80)(4)(0xDEADBEAF)P"
+//"C2P"
+//"S(0x80)(4)(0xDEADBEAF)P"
+//"C3P"
+//"S(0x80)(4)(0xDEADBEAF)P"
+
+    int i=0;
+    while(1) {
+        while(true) {
+            read=pc.getc();
+            recieve[i]=read;
+//            ser.printf("%02X,",read);
+            i++;
+            if(read == 'P') {
+                plength=i;
+//                ser.printf("P\n\r");
+                break;
+            }
+        }
+        i=0;
+        while(i<plength) {
+            switch(recieve[i]) {
+                case 'C':
+                    channel=recieve[i+1];
+                    switch(channel) {
+                        case I2C0adr:
+                            bus=0x01;
+//                            pc.printf("ch0 is selected,");
+                            dev=&dev1;
+                            break;
+                        case I2C1adr:
+                            bus=0x02;
+//                            pc.printf("ch1 is selected,");
+//                            pc.printf("ch1 is not implemented,");
+                            channel='1';
+                            dev=&dev2;
+                            break;
+                        case I2C2adr:
+                            bus=0x04;
+//                            pc.printf("ch2 is not implemented,");
+                            channel='0';
+                            //dev=&dev3;
+                            break;
+                        case I2C3adr:
+                            bus=0x08;
+//                            pc.printf("ch0 is not implemented,");
+                            channel='0';
+                            //dev=&dev4;
+                            break;
+                        default:
+                            channel='0';
+                            dev=&dev1;
+                            break;
+                    }
+                    i+=(2);
+                    break;
+                case 'S':
+                    address=recieve[i+1];
+                    length=recieve[i+2];
+//                    pc.printf("addr=%02X, length=%d,",address,length);
+                    dev->start();
+                    dev->write(address);
+                    if( (address&0x01)) {//read
+//                        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));
+                        }
+                        i+=(3);
+                    } else {//write
+//                        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]);
+                            dev->write(recieve[3+j]);
+                        }
+                        i+=(3+length);
+                    }
+                    break;
+                case 'P':
+                    dev->stop();
+                    i=plength;
+                    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;
+            }
+        }
+//        pc.printf(send);
+        i=0;
+
+    }
+}
+//*/