Kazuki Yamamoto
/
uart_i2c_conv_824
only for LPC824 chip to match hardware I2C channels(2->4)
main.cpp
- Committer:
- k4zuki
- Date:
- 2014-10-17
- Revision:
- 0:9d12c615c8ea
- Child:
- 1:5817c3e6ce1e
File content as of revision 0:9d12c615c8ea:
/* #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; } } //*/