Kazuki Yamamoto
/
uart_i2c_conv_824
only for LPC824 chip to match hardware I2C channels(2->4)
Diff: main.cpp
- 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; + + } +} +//*/