Kazuki Yamamoto / Mbed 2 deprecated uart_i2c_conv

Dependencies:   mbed

Committer:
Kazuki Yamamoto
Date:
Wed Dec 03 15:44:33 2014 +0900
Revision:
5:07f7000ec747
Child:
9:844e301ab0fd
[ HAL ] [ LPC824 ] new

copied from mbed.org

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kazuki Yamamoto 5:07f7000ec747 1 #include "mbed.h"
Kazuki Yamamoto 5:07f7000ec747 2
Kazuki Yamamoto 5:07f7000ec747 3 Serial pc(USBTX,USBRX);
Kazuki Yamamoto 5:07f7000ec747 4 //Serial mon(D1,NC);
Kazuki Yamamoto 5:07f7000ec747 5 /*
Kazuki Yamamoto 5:07f7000ec747 6 D5 = P0_28,
Kazuki Yamamoto 5:07f7000ec747 7 D6 = P0_16, // LED_GREEN
Kazuki Yamamoto 5:07f7000ec747 8 D7 = P0_17,
Kazuki Yamamoto 5:07f7000ec747 9 D8 = P0_13,
Kazuki Yamamoto 5:07f7000ec747 10 D9 = P0_27, // LED_BLUE
Kazuki Yamamoto 5:07f7000ec747 11 D10 = P0_15,
Kazuki Yamamoto 5:07f7000ec747 12 D11 = P0_26,
Kazuki Yamamoto 5:07f7000ec747 13 D12 = P0_25,
Kazuki Yamamoto 5:07f7000ec747 14 D13 = P0_24,
Kazuki Yamamoto 5:07f7000ec747 15 */
Kazuki Yamamoto 5:07f7000ec747 16 I2C dev1(I2C_SDA,I2C_SCL);//11,10 hard coded
Kazuki Yamamoto 5:07f7000ec747 17 I2C dev2(A0,A1);//6,14
Kazuki Yamamoto 5:07f7000ec747 18 I2C dev3(A2,A3);//23,22
Kazuki Yamamoto 5:07f7000ec747 19 I2C dev4(A4,A5);//21,20
Kazuki Yamamoto 5:07f7000ec747 20 BusOut bus(LED1,LED2,LED3,LED4);
Kazuki Yamamoto 5:07f7000ec747 21 //DigitalOut led1(LED1);
Kazuki Yamamoto 5:07f7000ec747 22 //DigitalOut led2(LED2);
Kazuki Yamamoto 5:07f7000ec747 23 //DigitalOut led3(LED3);
Kazuki Yamamoto 5:07f7000ec747 24 //DigitalOut led4(LED4);
Kazuki Yamamoto 5:07f7000ec747 25
Kazuki Yamamoto 5:07f7000ec747 26 //Table 3. ASCII commands supported by SC18IM700
Kazuki Yamamoto 5:07f7000ec747 27 //ASCII command Hex value Command function
Kazuki Yamamoto 5:07f7000ec747 28 //[X] S 0x53 I2C-bus START
Kazuki Yamamoto 5:07f7000ec747 29 //[X] P 0x50 I2C-bus STOP
Kazuki Yamamoto 5:07f7000ec747 30 //[_] R 0x52 read SC18IM700 internal register
Kazuki Yamamoto 5:07f7000ec747 31 //[_] W 0x57 write to SC18IM700 internal register
Kazuki Yamamoto 5:07f7000ec747 32 //[_] I 0x49 read GPIO port
Kazuki Yamamoto 5:07f7000ec747 33 //[_] O 0x4F write to GPIO port
Kazuki Yamamoto 5:07f7000ec747 34 //[_] Z 0x5A power down
Kazuki Yamamoto 5:07f7000ec747 35 //[X] C 0x43 change channel
Kazuki Yamamoto 5:07f7000ec747 36
Kazuki Yamamoto 5:07f7000ec747 37 int main()
Kazuki Yamamoto 5:07f7000ec747 38 {
Kazuki Yamamoto 5:07f7000ec747 39 I2C* dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 40 pc.baud(115200);
Kazuki Yamamoto 5:07f7000ec747 41 //mon.baud(115200);
Kazuki Yamamoto 5:07f7000ec747 42 //pc.printf("%08X\n\r",LPC_IOCON->PIO0_11 );
Kazuki Yamamoto 5:07f7000ec747 43 //pc.printf("%08X\n\r",LPC_IOCON->PIO0_10 );
Kazuki Yamamoto 5:07f7000ec747 44 LPC_IOCON->PIO0_11 &= ~(0x02<<8);
Kazuki Yamamoto 5:07f7000ec747 45 LPC_IOCON->PIO0_11 |= (0x02<<8);
Kazuki Yamamoto 5:07f7000ec747 46 LPC_IOCON->PIO0_10 &= ~(0x02<<8);
Kazuki Yamamoto 5:07f7000ec747 47 LPC_IOCON->PIO0_10 |= (0x02<<8);
Kazuki Yamamoto 5:07f7000ec747 48 //pc.printf("%08X\n\r",LPC_IOCON->PIO0_11 );
Kazuki Yamamoto 5:07f7000ec747 49 //pc.printf("%08X\n\r",LPC_IOCON->PIO0_10 );
Kazuki Yamamoto 5:07f7000ec747 50
Kazuki Yamamoto 5:07f7000ec747 51 bool s=false;
Kazuki Yamamoto 5:07f7000ec747 52 dev1.frequency(800000);//100k
Kazuki Yamamoto 5:07f7000ec747 53 dev2.frequency(400000);//100k
Kazuki Yamamoto 5:07f7000ec747 54 dev3.frequency(400000);//100k
Kazuki Yamamoto 5:07f7000ec747 55 dev4.frequency(400000);//100k
Kazuki Yamamoto 5:07f7000ec747 56
Kazuki Yamamoto 5:07f7000ec747 57 pc.printf("%08X\n\r",LPC_IOCON->PIO0_11 );
Kazuki Yamamoto 5:07f7000ec747 58 pc.printf("%08X\n\r",LPC_IOCON->PIO0_10 );
Kazuki Yamamoto 5:07f7000ec747 59 //LPC_I2C0->CLKDIV &= 0xFFFFFF00;
Kazuki Yamamoto 5:07f7000ec747 60 //LPC_I2C0->CLKDIV |= 0x05;
Kazuki Yamamoto 5:07f7000ec747 61 //LPC_I2C0->MSTTIME &= 0xFFFFFF00;
Kazuki Yamamoto 5:07f7000ec747 62 //LPC_I2C0->MSTTIME |= 0x11;
Kazuki Yamamoto 5:07f7000ec747 63 //pc.printf("%08X\n\r",LPC_SYSCON->SYSAHBCLKDIV );
Kazuki Yamamoto 5:07f7000ec747 64 pc.printf("%08X\n\r",LPC_I2C0->CLKDIV );
Kazuki Yamamoto 5:07f7000ec747 65 pc.printf("%08X\n\r",LPC_I2C0->MSTTIME );
Kazuki Yamamoto 5:07f7000ec747 66 // int data=0x50;
Kazuki Yamamoto 5:07f7000ec747 67 int ack=0;
Kazuki Yamamoto 5:07f7000ec747 68 int plength=0;
Kazuki Yamamoto 5:07f7000ec747 69 char recieve[256];
Kazuki Yamamoto 5:07f7000ec747 70 char send[256];
Kazuki Yamamoto 5:07f7000ec747 71 char read=0;
Kazuki Yamamoto 5:07f7000ec747 72 int address=0,length=0,channel=0;
Kazuki Yamamoto 5:07f7000ec747 73 enum reg {
Kazuki Yamamoto 5:07f7000ec747 74 I2C0adr='0',
Kazuki Yamamoto 5:07f7000ec747 75 I2C1adr='1',
Kazuki Yamamoto 5:07f7000ec747 76 I2C2adr='2',
Kazuki Yamamoto 5:07f7000ec747 77 I2C3adr='3',
Kazuki Yamamoto 5:07f7000ec747 78 };
Kazuki Yamamoto 5:07f7000ec747 79 //"C0P"
Kazuki Yamamoto 5:07f7000ec747 80 //"S| 0x08 0x00| 0x00 0x04| 0xD0E0A0D0B0E0A0F|P"
Kazuki Yamamoto 5:07f7000ec747 81 //"C1P"
Kazuki Yamamoto 5:07f7000ec747 82 //"S(0x80)(4)(0xDEADBEAF)P"
Kazuki Yamamoto 5:07f7000ec747 83 //"C2P"
Kazuki Yamamoto 5:07f7000ec747 84 //"S(0x80)(4)(0xDEADBEAF)P"
Kazuki Yamamoto 5:07f7000ec747 85 //"C3P"
Kazuki Yamamoto 5:07f7000ec747 86 //"S(0x80)(4)(0xDEADBEAF)P"
Kazuki Yamamoto 5:07f7000ec747 87 //dev1.start();
Kazuki Yamamoto 5:07f7000ec747 88 //dev1.write(address);
Kazuki Yamamoto 5:07f7000ec747 89 //dev1.stop();
Kazuki Yamamoto 5:07f7000ec747 90
Kazuki Yamamoto 5:07f7000ec747 91 int i=0;
Kazuki Yamamoto 5:07f7000ec747 92 while(1) {
Kazuki Yamamoto 5:07f7000ec747 93 while(true) {
Kazuki Yamamoto 5:07f7000ec747 94 //// led1=0;
Kazuki Yamamoto 5:07f7000ec747 95 read=pc.getc();
Kazuki Yamamoto 5:07f7000ec747 96 recieve[i]=read;
Kazuki Yamamoto 5:07f7000ec747 97 //pc.printf("%02X,",read); //debug
Kazuki Yamamoto 5:07f7000ec747 98 i++;
Kazuki Yamamoto 5:07f7000ec747 99 if(read == 'P') {
Kazuki Yamamoto 5:07f7000ec747 100 plength=i;
Kazuki Yamamoto 5:07f7000ec747 101 //// led1=1;
Kazuki Yamamoto 5:07f7000ec747 102 //pc.printf("P\n\r");
Kazuki Yamamoto 5:07f7000ec747 103 break;
Kazuki Yamamoto 5:07f7000ec747 104 }
Kazuki Yamamoto 5:07f7000ec747 105 }
Kazuki Yamamoto 5:07f7000ec747 106 for(i=0;i<plength;i++){
Kazuki Yamamoto 5:07f7000ec747 107 //mon.printf("%02X,",recieve[i]); //debug
Kazuki Yamamoto 5:07f7000ec747 108 }
Kazuki Yamamoto 5:07f7000ec747 109 i=0;
Kazuki Yamamoto 5:07f7000ec747 110 while(i<plength) {
Kazuki Yamamoto 5:07f7000ec747 111 //mon.printf("%c,",recieve[i]);
Kazuki Yamamoto 5:07f7000ec747 112 switch(recieve[i]) {
Kazuki Yamamoto 5:07f7000ec747 113 case 'C':
Kazuki Yamamoto 5:07f7000ec747 114 {
Kazuki Yamamoto 5:07f7000ec747 115 channel=recieve[i+1];
Kazuki Yamamoto 5:07f7000ec747 116 switch(channel) {
Kazuki Yamamoto 5:07f7000ec747 117 case I2C0adr:
Kazuki Yamamoto 5:07f7000ec747 118 {
Kazuki Yamamoto 5:07f7000ec747 119 bus=~0x01;
Kazuki Yamamoto 5:07f7000ec747 120 //pc.printf("ch0 is selected,");
Kazuki Yamamoto 5:07f7000ec747 121 channel='0';
Kazuki Yamamoto 5:07f7000ec747 122 dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 123 break;
Kazuki Yamamoto 5:07f7000ec747 124 }
Kazuki Yamamoto 5:07f7000ec747 125 case I2C1adr:
Kazuki Yamamoto 5:07f7000ec747 126 {
Kazuki Yamamoto 5:07f7000ec747 127 bus=~0x02;
Kazuki Yamamoto 5:07f7000ec747 128 //pc.printf("ch1 is selected,");
Kazuki Yamamoto 5:07f7000ec747 129 channel='1';
Kazuki Yamamoto 5:07f7000ec747 130 dev=&dev2;
Kazuki Yamamoto 5:07f7000ec747 131 break;
Kazuki Yamamoto 5:07f7000ec747 132 }
Kazuki Yamamoto 5:07f7000ec747 133 case I2C2adr:
Kazuki Yamamoto 5:07f7000ec747 134 {
Kazuki Yamamoto 5:07f7000ec747 135 bus=~0x04;
Kazuki Yamamoto 5:07f7000ec747 136 //pc.printf("ch2 is selected,");
Kazuki Yamamoto 5:07f7000ec747 137 channel='2';
Kazuki Yamamoto 5:07f7000ec747 138 dev=&dev3;
Kazuki Yamamoto 5:07f7000ec747 139 break;
Kazuki Yamamoto 5:07f7000ec747 140 }
Kazuki Yamamoto 5:07f7000ec747 141 case I2C3adr:
Kazuki Yamamoto 5:07f7000ec747 142 {
Kazuki Yamamoto 5:07f7000ec747 143 bus=~0x08;
Kazuki Yamamoto 5:07f7000ec747 144 //pc.printf("ch3 is selected,");
Kazuki Yamamoto 5:07f7000ec747 145 channel='3';
Kazuki Yamamoto 5:07f7000ec747 146 dev=&dev4;
Kazuki Yamamoto 5:07f7000ec747 147 break;
Kazuki Yamamoto 5:07f7000ec747 148 }
Kazuki Yamamoto 5:07f7000ec747 149 default:
Kazuki Yamamoto 5:07f7000ec747 150 {
Kazuki Yamamoto 5:07f7000ec747 151 //pc.printf("ch? is not implemented,");
Kazuki Yamamoto 5:07f7000ec747 152 channel='0';
Kazuki Yamamoto 5:07f7000ec747 153 dev=&dev1;
Kazuki Yamamoto 5:07f7000ec747 154 break;
Kazuki Yamamoto 5:07f7000ec747 155 }
Kazuki Yamamoto 5:07f7000ec747 156 }
Kazuki Yamamoto 5:07f7000ec747 157 i+=(2);
Kazuki Yamamoto 5:07f7000ec747 158 break;
Kazuki Yamamoto 5:07f7000ec747 159 }
Kazuki Yamamoto 5:07f7000ec747 160 // S|0xD0|0x01|0xAA|S|0xD1|0x01|P
Kazuki Yamamoto 5:07f7000ec747 161 case 'S':
Kazuki Yamamoto 5:07f7000ec747 162 {
Kazuki Yamamoto 5:07f7000ec747 163 s=true;
Kazuki Yamamoto 5:07f7000ec747 164 //ack=((plength-i)>>1)+(0x01&recieve[(i+2)]);
Kazuki Yamamoto 5:07f7000ec747 165 ack=plength-2-(i+1)+(0x01&recieve[(i+2)]);
Kazuki Yamamoto 5:07f7000ec747 166 if( ack >=4){
Kazuki Yamamoto 5:07f7000ec747 167 //if(plength>=4){
Kazuki Yamamoto 5:07f7000ec747 168 address=0xff&(recieve[i+1]<<4|(recieve[i+2]&0x0F));
Kazuki Yamamoto 5:07f7000ec747 169 length=0xff&(recieve[i+3]<<4|(recieve[i+4]&0x0F));
Kazuki Yamamoto 5:07f7000ec747 170 }else{
Kazuki Yamamoto 5:07f7000ec747 171 pc.printf("bad packet! %d, %d, %02X, %d\n\r",plength,i,recieve[(i+2)]&0x0F,ack);
Kazuki Yamamoto 5:07f7000ec747 172 //mon.printf("bad packet! %d, %d, %02X, %d\n\r",plength,i,recieve[(i+2)]&0x0F,ack);
Kazuki Yamamoto 5:07f7000ec747 173 i=plength+1;
Kazuki Yamamoto 5:07f7000ec747 174 break;
Kazuki Yamamoto 5:07f7000ec747 175 }
Kazuki Yamamoto 5:07f7000ec747 176 //pc.printf("addr=%02X, length=%d,",address,length);
Kazuki Yamamoto 5:07f7000ec747 177 //dev1.start();
Kazuki Yamamoto 5:07f7000ec747 178 //dev1.write(address);
Kazuki Yamamoto 5:07f7000ec747 179 dev->start();
Kazuki Yamamoto 5:07f7000ec747 180 ack=dev->write(address);
Kazuki Yamamoto 5:07f7000ec747 181 //if(ack==0){
Kazuki Yamamoto 5:07f7000ec747 182 // dev->stop();
Kazuki Yamamoto 5:07f7000ec747 183 // pc.printf("0x%02X returned %d\n\r",address,ack);
Kazuki Yamamoto 5:07f7000ec747 184 // i=plength+1;
Kazuki Yamamoto 5:07f7000ec747 185 // break;
Kazuki Yamamoto 5:07f7000ec747 186 //}
Kazuki Yamamoto 5:07f7000ec747 187 //// dev->write(address);
Kazuki Yamamoto 5:07f7000ec747 188 if( (address&0x01)) {//read
Kazuki Yamamoto 5:07f7000ec747 189 //pc.printf("read from ch%c,",channel);
Kazuki Yamamoto 5:07f7000ec747 190 for(int j=0; j<length; j++) {
Kazuki Yamamoto 5:07f7000ec747 191 send[j]=dev->read(1);
Kazuki Yamamoto 5:07f7000ec747 192 //// pc.printf("%02X,",dev->read(1));
Kazuki Yamamoto 5:07f7000ec747 193 //pc.printf("%02X,",dev1.read(0));
Kazuki Yamamoto 5:07f7000ec747 194 }
Kazuki Yamamoto 5:07f7000ec747 195 i+=(5);
Kazuki Yamamoto 5:07f7000ec747 196 } else {//write
Kazuki Yamamoto 5:07f7000ec747 197 //pc.printf("write to ch%c, ",channel);
Kazuki Yamamoto 5:07f7000ec747 198 for(int j=0; j<(length*2); j+=2) {
Kazuki Yamamoto 5:07f7000ec747 199 //pc.printf("%02X,",recieve[3+j]);
Kazuki Yamamoto 5:07f7000ec747 200 //dev1.write(recieve[3+j]);
Kazuki Yamamoto 5:07f7000ec747 201 ack=dev->write( 0xff&(recieve[5+j] << 4 | (recieve[6+j] & 0x0F)) );
Kazuki Yamamoto 5:07f7000ec747 202 //pc.printf("ack=%d\n\r",ack);
Kazuki Yamamoto 5:07f7000ec747 203 }
Kazuki Yamamoto 5:07f7000ec747 204 i+=(5+length*2);
Kazuki Yamamoto 5:07f7000ec747 205 length=0;
Kazuki Yamamoto 5:07f7000ec747 206 }
Kazuki Yamamoto 5:07f7000ec747 207 break;
Kazuki Yamamoto 5:07f7000ec747 208 }
Kazuki Yamamoto 5:07f7000ec747 209 case 'P':
Kazuki Yamamoto 5:07f7000ec747 210 //dev1.stop();
Kazuki Yamamoto 5:07f7000ec747 211 if(s){
Kazuki Yamamoto 5:07f7000ec747 212 dev->stop();
Kazuki Yamamoto 5:07f7000ec747 213 s=false;
Kazuki Yamamoto 5:07f7000ec747 214 }
Kazuki Yamamoto 5:07f7000ec747 215 i=plength;
Kazuki Yamamoto 5:07f7000ec747 216 for(int j=0; j<length; j++) {
Kazuki Yamamoto 5:07f7000ec747 217 pc.printf("%02X,",send[j]);
Kazuki Yamamoto 5:07f7000ec747 218 //mon.printf("%02X,",send[j]);
Kazuki Yamamoto 5:07f7000ec747 219 }
Kazuki Yamamoto 5:07f7000ec747 220 pc.printf("ok\n\r");
Kazuki Yamamoto 5:07f7000ec747 221 //mon.printf("ok\n\r");
Kazuki Yamamoto 5:07f7000ec747 222 break;
Kazuki Yamamoto 5:07f7000ec747 223 case 'R':
Kazuki Yamamoto 5:07f7000ec747 224 pc.printf("command R is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 225 //mon.printf("command R is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 226 i=plength;
Kazuki Yamamoto 5:07f7000ec747 227 break;
Kazuki Yamamoto 5:07f7000ec747 228 case 'W':
Kazuki Yamamoto 5:07f7000ec747 229 pc.printf("command W is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 230 //mon.printf("command W is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 231 i=plength;
Kazuki Yamamoto 5:07f7000ec747 232 break;
Kazuki Yamamoto 5:07f7000ec747 233 case 'I':
Kazuki Yamamoto 5:07f7000ec747 234 pc.printf("command I is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 235 //mon.printf("command I is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 236 i=plength;
Kazuki Yamamoto 5:07f7000ec747 237 break;
Kazuki Yamamoto 5:07f7000ec747 238 case 'O':
Kazuki Yamamoto 5:07f7000ec747 239 pc.printf("command O is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 240 //mon.printf("command O is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 241 i=plength;
Kazuki Yamamoto 5:07f7000ec747 242 break;
Kazuki Yamamoto 5:07f7000ec747 243 case 'Z':
Kazuki Yamamoto 5:07f7000ec747 244 pc.printf("command Z is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 245 //mon.printf("command Z is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 246 i=plength;
Kazuki Yamamoto 5:07f7000ec747 247 break;
Kazuki Yamamoto 5:07f7000ec747 248 default:
Kazuki Yamamoto 5:07f7000ec747 249 pc.printf("command ? is not implemented\n\r");
Kazuki Yamamoto 5:07f7000ec747 250 //mon.printf("command %02X is not implemented\n\r",recieve[i]);
Kazuki Yamamoto 5:07f7000ec747 251 i=plength;
Kazuki Yamamoto 5:07f7000ec747 252 break;
Kazuki Yamamoto 5:07f7000ec747 253 }
Kazuki Yamamoto 5:07f7000ec747 254 }
Kazuki Yamamoto 5:07f7000ec747 255 i=0;
Kazuki Yamamoto 5:07f7000ec747 256 length=0;
Kazuki Yamamoto 5:07f7000ec747 257 }
Kazuki Yamamoto 5:07f7000ec747 258 }