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

Dependencies:   mbed

Committer:
k4zuki
Date:
Fri Oct 17 20:48:15 2014 +0000
Revision:
1:5817c3e6ce1e
Parent:
0:9d12c615c8ea
Child:
2:096289a04a1f
formatting code only S and P commands implemented

Who changed what in which revision?

UserRevisionLine numberNew contents of line
k4zuki 0:9d12c615c8ea 1 #include "mbed.h"
k4zuki 0:9d12c615c8ea 2 //#define isuse_USB_SERIAL
k4zuki 0:9d12c615c8ea 3
k4zuki 0:9d12c615c8ea 4 #ifdef isuse_USB_SERIAL
k4zuki 0:9d12c615c8ea 5 #include "USBSerial.h"
k4zuki 0:9d12c615c8ea 6 USBSerial pc;
k4zuki 1:5817c3e6ce1e 7 #else
k4zuki 0:9d12c615c8ea 8 Serial pc(USBTX,USBRX);
k4zuki 0:9d12c615c8ea 9 #endif
k4zuki 0:9d12c615c8ea 10 I2C dev1(p9,p10);
k4zuki 1:5817c3e6ce1e 11 I2C dev2(p28,p27);
k4zuki 0:9d12c615c8ea 12 //I2C dev3(A5,A4);
k4zuki 0:9d12c615c8ea 13 //I2C dev4(A5,A4);
k4zuki 0:9d12c615c8ea 14 I2C* dev=&dev1;
k4zuki 0:9d12c615c8ea 15 BusOut bus(LED1,LED2,LED3,LED4);
k4zuki 0:9d12c615c8ea 16 //DigitalOut led1(LED1);
k4zuki 0:9d12c615c8ea 17 //DigitalOut led2(LED2);
k4zuki 0:9d12c615c8ea 18 //DigitalOut led3(LED3);
k4zuki 0:9d12c615c8ea 19 //DigitalOut led4(LED4);
k4zuki 0:9d12c615c8ea 20
k4zuki 0:9d12c615c8ea 21 //Table 3. ASCII commands supported by SC18IM700
k4zuki 0:9d12c615c8ea 22 //ASCII command Hex value Command function
k4zuki 1:5817c3e6ce1e 23 //[X] S 0x53 I2C-bus START
k4zuki 1:5817c3e6ce1e 24 //[X] P 0x50 I2C-bus STOP
k4zuki 1:5817c3e6ce1e 25 //[_] R 0x52 read SC18IM700 internal register
k4zuki 1:5817c3e6ce1e 26 //[_] W 0x57 write to SC18IM700 internal register
k4zuki 1:5817c3e6ce1e 27 //[_] I 0x49 read GPIO port
k4zuki 1:5817c3e6ce1e 28 //[_] O 0x4F write to GPIO port
k4zuki 1:5817c3e6ce1e 29 //[_] Z 0x5A power down
k4zuki 0:9d12c615c8ea 30
k4zuki 0:9d12c615c8ea 31 int main()
k4zuki 0:9d12c615c8ea 32 {
k4zuki 0:9d12c615c8ea 33 #ifndef isuse_USB_SERIAL
k4zuki 0:9d12c615c8ea 34 pc.baud(115200);
k4zuki 0:9d12c615c8ea 35 #endif
k4zuki 0:9d12c615c8ea 36 dev1.frequency(100000);//100k
k4zuki 1:5817c3e6ce1e 37 dev2.frequency(100000);//100k
k4zuki 0:9d12c615c8ea 38
k4zuki 0:9d12c615c8ea 39 int data=0x50;
k4zuki 0:9d12c615c8ea 40 int ack=0;
k4zuki 0:9d12c615c8ea 41 int plength=0;
k4zuki 0:9d12c615c8ea 42 char recieve[256];
k4zuki 0:9d12c615c8ea 43 char send[256];
k4zuki 0:9d12c615c8ea 44 char read=0;
k4zuki 0:9d12c615c8ea 45 int address=0,length=0,channel=0;
k4zuki 0:9d12c615c8ea 46 enum reg {
k4zuki 0:9d12c615c8ea 47 I2C0adr='0',
k4zuki 0:9d12c615c8ea 48 I2C1adr='1',
k4zuki 0:9d12c615c8ea 49 I2C2adr='2',
k4zuki 0:9d12c615c8ea 50 I2C3adr='3',
k4zuki 0:9d12c615c8ea 51 };
k4zuki 0:9d12c615c8ea 52 //"C0P"
k4zuki 0:9d12c615c8ea 53 //"S(0x80)(4)(0xDEADBEAF)P"
k4zuki 0:9d12c615c8ea 54 //"C1P"
k4zuki 0:9d12c615c8ea 55 //"S(0x80)(4)(0xDEADBEAF)P"
k4zuki 0:9d12c615c8ea 56 //"C2P"
k4zuki 0:9d12c615c8ea 57 //"S(0x80)(4)(0xDEADBEAF)P"
k4zuki 0:9d12c615c8ea 58 //"C3P"
k4zuki 0:9d12c615c8ea 59 //"S(0x80)(4)(0xDEADBEAF)P"
k4zuki 0:9d12c615c8ea 60
k4zuki 0:9d12c615c8ea 61 int i=0;
k4zuki 0:9d12c615c8ea 62 while(1) {
k4zuki 0:9d12c615c8ea 63 while(true) {
k4zuki 0:9d12c615c8ea 64 read=pc.getc();
k4zuki 0:9d12c615c8ea 65 recieve[i]=read;
k4zuki 0:9d12c615c8ea 66 // ser.printf("%02X,",read);
k4zuki 0:9d12c615c8ea 67 i++;
k4zuki 0:9d12c615c8ea 68 if(read == 'P') {
k4zuki 0:9d12c615c8ea 69 plength=i;
k4zuki 0:9d12c615c8ea 70 // ser.printf("P\n\r");
k4zuki 0:9d12c615c8ea 71 break;
k4zuki 0:9d12c615c8ea 72 }
k4zuki 0:9d12c615c8ea 73 }
k4zuki 0:9d12c615c8ea 74 i=0;
k4zuki 0:9d12c615c8ea 75 while(i<plength) {
k4zuki 0:9d12c615c8ea 76 switch(recieve[i]) {
k4zuki 0:9d12c615c8ea 77 case 'C':
k4zuki 0:9d12c615c8ea 78 channel=recieve[i+1];
k4zuki 0:9d12c615c8ea 79 switch(channel) {
k4zuki 0:9d12c615c8ea 80 case I2C0adr:
k4zuki 0:9d12c615c8ea 81 bus=0x01;
k4zuki 0:9d12c615c8ea 82 // pc.printf("ch0 is selected,");
k4zuki 1:5817c3e6ce1e 83 channel='0';
k4zuki 0:9d12c615c8ea 84 dev=&dev1;
k4zuki 0:9d12c615c8ea 85 break;
k4zuki 0:9d12c615c8ea 86 case I2C1adr:
k4zuki 0:9d12c615c8ea 87 bus=0x02;
k4zuki 0:9d12c615c8ea 88 // pc.printf("ch1 is selected,");
k4zuki 0:9d12c615c8ea 89 // pc.printf("ch1 is not implemented,");
k4zuki 0:9d12c615c8ea 90 channel='1';
k4zuki 0:9d12c615c8ea 91 dev=&dev2;
k4zuki 0:9d12c615c8ea 92 break;
k4zuki 0:9d12c615c8ea 93 case I2C2adr:
k4zuki 0:9d12c615c8ea 94 bus=0x04;
k4zuki 0:9d12c615c8ea 95 // pc.printf("ch2 is not implemented,");
k4zuki 0:9d12c615c8ea 96 channel='0';
k4zuki 0:9d12c615c8ea 97 //dev=&dev3;
k4zuki 0:9d12c615c8ea 98 break;
k4zuki 0:9d12c615c8ea 99 case I2C3adr:
k4zuki 0:9d12c615c8ea 100 bus=0x08;
k4zuki 0:9d12c615c8ea 101 // pc.printf("ch0 is not implemented,");
k4zuki 0:9d12c615c8ea 102 channel='0';
k4zuki 0:9d12c615c8ea 103 //dev=&dev4;
k4zuki 0:9d12c615c8ea 104 break;
k4zuki 0:9d12c615c8ea 105 default:
k4zuki 0:9d12c615c8ea 106 channel='0';
k4zuki 0:9d12c615c8ea 107 dev=&dev1;
k4zuki 0:9d12c615c8ea 108 break;
k4zuki 0:9d12c615c8ea 109 }
k4zuki 0:9d12c615c8ea 110 i+=(2);
k4zuki 0:9d12c615c8ea 111 break;
k4zuki 0:9d12c615c8ea 112 case 'S':
k4zuki 0:9d12c615c8ea 113 address=recieve[i+1];
k4zuki 0:9d12c615c8ea 114 length=recieve[i+2];
k4zuki 0:9d12c615c8ea 115 // pc.printf("addr=%02X, length=%d,",address,length);
k4zuki 0:9d12c615c8ea 116 dev->start();
k4zuki 0:9d12c615c8ea 117 dev->write(address);
k4zuki 0:9d12c615c8ea 118 if( (address&0x01)) {//read
k4zuki 0:9d12c615c8ea 119 // pc.printf("read from ch%c,",channel);
k4zuki 0:9d12c615c8ea 120 for(int j=0; j<length; j++) {
k4zuki 0:9d12c615c8ea 121 pc.putc(dev->read(0));
k4zuki 0:9d12c615c8ea 122 // send[j]=dev->read(0);
k4zuki 0:9d12c615c8ea 123 // pc.printf("%02X,",dev->read(0));
k4zuki 0:9d12c615c8ea 124 }
k4zuki 0:9d12c615c8ea 125 i+=(3);
k4zuki 0:9d12c615c8ea 126 } else {//write
k4zuki 0:9d12c615c8ea 127 // pc.printf("write to ch%c, ",channel);
k4zuki 0:9d12c615c8ea 128 for(int j=0; j<length; j++) {
k4zuki 0:9d12c615c8ea 129 // send[j]=recieve[4+j];
k4zuki 0:9d12c615c8ea 130 // pc.printf("%02X,",recieve[3+j]);
k4zuki 0:9d12c615c8ea 131 dev->write(recieve[3+j]);
k4zuki 0:9d12c615c8ea 132 }
k4zuki 0:9d12c615c8ea 133 i+=(3+length);
k4zuki 0:9d12c615c8ea 134 }
k4zuki 0:9d12c615c8ea 135 break;
k4zuki 0:9d12c615c8ea 136 case 'P':
k4zuki 0:9d12c615c8ea 137 dev->stop();
k4zuki 0:9d12c615c8ea 138 i=plength;
k4zuki 0:9d12c615c8ea 139 pc.printf("ok\n\r");
k4zuki 0:9d12c615c8ea 140 break;
k4zuki 0:9d12c615c8ea 141 case 'R':
k4zuki 0:9d12c615c8ea 142 pc.printf("command R is not implemented\n\r");
k4zuki 0:9d12c615c8ea 143 i=plength;
k4zuki 0:9d12c615c8ea 144 break;
k4zuki 0:9d12c615c8ea 145 case 'W':
k4zuki 0:9d12c615c8ea 146 pc.printf("command W is not implemented\n\r");
k4zuki 0:9d12c615c8ea 147 i=plength;
k4zuki 0:9d12c615c8ea 148 break;
k4zuki 0:9d12c615c8ea 149 case 'I':
k4zuki 0:9d12c615c8ea 150 pc.printf("command I is not implemented\n\r");
k4zuki 0:9d12c615c8ea 151 i=plength;
k4zuki 0:9d12c615c8ea 152 break;
k4zuki 0:9d12c615c8ea 153 case 'O':
k4zuki 0:9d12c615c8ea 154 pc.printf("command O is not implemented\n\r");
k4zuki 0:9d12c615c8ea 155 i=plength;
k4zuki 0:9d12c615c8ea 156 break;
k4zuki 0:9d12c615c8ea 157 case 'Z':
k4zuki 0:9d12c615c8ea 158 pc.printf("command Z is not implemented\n\r");
k4zuki 0:9d12c615c8ea 159 i=plength;
k4zuki 0:9d12c615c8ea 160 break;
k4zuki 0:9d12c615c8ea 161 default:
k4zuki 0:9d12c615c8ea 162 pc.printf("command ? is not implemented\n\r");
k4zuki 0:9d12c615c8ea 163 i=plength;
k4zuki 0:9d12c615c8ea 164 break;
k4zuki 0:9d12c615c8ea 165 }
k4zuki 0:9d12c615c8ea 166 }
k4zuki 0:9d12c615c8ea 167 i=0;
k4zuki 0:9d12c615c8ea 168
k4zuki 0:9d12c615c8ea 169 }
k4zuki 0:9d12c615c8ea 170 }