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

Dependencies:   mbed

Committer:
k4zuki
Date:
Tue Oct 21 03:41:24 2014 +0000
Revision:
2:096289a04a1f
Parent:
1:5817c3e6ce1e
Child:
3:8e33af9ea1f7
changed pinout SDA+SCL/A0+A1/A2+A3/A4+A5; changed UART speed downto 9600baud

Who changed what in which revision?

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