Kazuki Yamamoto
/
uart_i2c_conv_824
only for LPC824 chip to match hardware I2C channels(2->4)
main.cpp
- Committer:
- k4zuki
- Date:
- 2014-10-24
- Revision:
- 5:655e58295f1e
- Parent:
- 4:bbea62f185e1
- Child:
- 6:9368ba5f485c
File content as of revision 5:655e58295f1e:
#include "mbed.h" #include "i2c_api.h" Serial pc(USBTX,USBRX); /* 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);//11,10 hard coded I2C dev2(A0,A1);//6,14 I2C dev3(A2,A3);//23,22 I2C dev4(A4,A5);//21,20 BusOut bus(LED1,LED2,LED3,LED4); 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 //[X] S 0x53 I2C-bus START //[X] 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 //[X] C 0x?? change channel int main() { I2C* dev=&dev1; pc.baud(9600); dev1.frequency(100000);//100k dev2.frequency(100000);//100k dev3.frequency(100000);//100k dev4.frequency(100000);//100k /** debug code pc.printf("assign0: %08X\n\r",LPC_SYSCON->PRESETCTRL );//??_??_??_(?|4)? pc.printf("enable I2C0: %08X\n\r",LPC_SWM->PINENABLE0);//????_(C|?)??? pc.printf("assign1: %08X\n\r",LPC_SWM->PINASSIGN[9] );//23_14_06_?? pc.printf("assign2: %08X\n\r",LPC_SWM->PINASSIGN[10] );//??_20_21_22 pc.printf("clock: %08X\n\r",LPC_SYSCON->SYSAHBCLKCTRL );// ??_(?|E)?_??_(?|2)? pc.printf("dev1: %08X\n\r",dev1 ); pc.printf("LPC_I2C1: %08X, ",LPC_I2C1 ); pc.printf("dev2: %08X\n\r",dev2 ); pc.printf("LPC_I2C2: %08X, ",LPC_I2C2 ); pc.printf("dev3: %08X\n\r",dev3 ); pc.printf("LPC_I2C3: %08X, ",LPC_I2C3 ); pc.printf("dev4: %08X\n\r",dev4 ); pc.printf("dev: %08X\n\r",*dev ); dev=&dev2; pc.printf("dev: %08X\n\r",*dev ); dev=&dev3; pc.printf("dev: %08X\n\r",*dev ); dev=&dev4; pc.printf("dev: %08X\n\r",*dev ); dev=&dev1; */ // 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', }; //"C0P" //"S(0x80)(4)(0xDEADBEAF)P" //"C1P" //"S(0x80)(4)(0xDEADBEAF)P" //"C2P" //"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; //pc.printf("%02X,",read); //debug i++; if(read == 'P') { plength=i; led1=1; //pc.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,"); channel='0'; dev=&dev1; break; case I2C1adr: bus=~0x02; //pc.printf("ch1 is selected,"); channel='1'; dev=&dev2; break; case I2C2adr: bus=~0x04; //pc.printf("ch2 is selected,"); channel='2'; dev=&dev3; break; case I2C3adr: bus=~0x08; //pc.printf("ch3 is selected,"); channel='3'; dev=&dev4; break; default: //pc.printf("ch? is not implemented,"); 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); //dev1.start(); //dev1.write(address); dev->start(); dev->write(address); if( (address&0x01)) {//read //pc.printf("read from ch%c,",channel); for(int j=0; j<length; j++) { pc.printf("%02X,",dev->read(0)); //pc.printf("%02X,",dev1.read(0)); } i+=(3); } else {//write //pc.printf("write to ch%c, ",channel); for(int j=0; j<length; 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"); 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; } } i=0; } }