Kazuki Yamamoto
/
uart_i2c_conv_824
only for LPC824 chip to match hardware I2C channels(2->4)
Diff: main.cpp
- Revision:
- 2:096289a04a1f
- Parent:
- 1:5817c3e6ce1e
- Child:
- 3:8e33af9ea1f7
diff -r 5817c3e6ce1e -r 096289a04a1f main.cpp --- 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");