Kazuki Yamamoto / Mbed 2 deprecated uart_i2c_conv

Dependencies:   mbed

Committer:
Kazuki Yamamoto
Date:
Thu Dec 04 17:39:24 2014 +0900
Revision:
10:b2ffc7117a58
Parent:
7:82b1422b9b09
Child:
17:8e4c490fd639
[ HAL ]cut comment

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kazuki Yamamoto 10:b2ffc7117a58 1 /** uart_i2c_conv for LPC11UXX
Kazuki Yamamoto 10:b2ffc7117a58 2 */
Kazuki Yamamoto 10:b2ffc7117a58 3
Kazuki Yamamoto 7:82b1422b9b09 4 #include "mbed.h"
Kazuki Yamamoto 10:b2ffc7117a58 5 #include "I2C_FmPlus.h"
Kazuki Yamamoto 10:b2ffc7117a58 6
Kazuki Yamamoto 10:b2ffc7117a58 7 #if defined(TARGET_LPC11U35_401) || defined(TARGET_LPC11U35_501)
Kazuki Yamamoto 7:82b1422b9b09 8 #include "USBSerial.h"
Kazuki Yamamoto 10:b2ffc7117a58 9 USBSerial pc;
Kazuki Yamamoto 10:b2ffc7117a58 10 #else
Kazuki Yamamoto 10:b2ffc7117a58 11 Serial pc(USBTX, USBRX);
Kazuki Yamamoto 10:b2ffc7117a58 12 #endif
Kazuki Yamamoto 10:b2ffc7117a58 13 I2C_FmPlus dev1( P0_5, P0_4 );
Kazuki Yamamoto 10:b2ffc7117a58 14 I2C_FmPlus* dev = &dev1;
Kazuki Yamamoto 10:b2ffc7117a58 15
Kazuki Yamamoto 10:b2ffc7117a58 16 int main()
Kazuki Yamamoto 10:b2ffc7117a58 17 {
Kazuki Yamamoto 10:b2ffc7117a58 18 I2C* dev=&dev1;
Kazuki Yamamoto 10:b2ffc7117a58 19 pc.baud(115200);
Kazuki Yamamoto 10:b2ffc7117a58 20
Kazuki Yamamoto 10:b2ffc7117a58 21 bool s = false;
Kazuki Yamamoto 10:b2ffc7117a58 22 dev1.frequency(1000000);//1M
Kazuki Yamamoto 10:b2ffc7117a58 23
Kazuki Yamamoto 10:b2ffc7117a58 24 int ack=0;
Kazuki Yamamoto 10:b2ffc7117a58 25 int plength=0;
Kazuki Yamamoto 10:b2ffc7117a58 26 char recieve[256];
Kazuki Yamamoto 10:b2ffc7117a58 27 char send[256];
Kazuki Yamamoto 10:b2ffc7117a58 28 char read=0;
Kazuki Yamamoto 10:b2ffc7117a58 29 int address=0,length=0,channel=0;
Kazuki Yamamoto 10:b2ffc7117a58 30 enum reg {
Kazuki Yamamoto 10:b2ffc7117a58 31 I2C0adr='0',
Kazuki Yamamoto 10:b2ffc7117a58 32 };
Kazuki Yamamoto 10:b2ffc7117a58 33
Kazuki Yamamoto 10:b2ffc7117a58 34 //"C0P"
Kazuki Yamamoto 10:b2ffc7117a58 35 //"C1P"
Kazuki Yamamoto 10:b2ffc7117a58 36 //"C2P"
Kazuki Yamamoto 10:b2ffc7117a58 37 //"C3P"
Kazuki Yamamoto 10:b2ffc7117a58 38 //"S| 0x_8 _0| 0x_0 _4| 0x_D _E _A _D _B _E _A _F| P"
Kazuki Yamamoto 10:b2ffc7117a58 39 //"S| 0x_8 _0| 0x_0 _4| 0x_D _E _A _D _B _E _A _F| S| 0x_8 _1| 0x_0 _4| P"
Kazuki Yamamoto 10:b2ffc7117a58 40 //"S| 0x_8 _1| 0x_0 _4| P"
Kazuki Yamamoto 7:82b1422b9b09 41
Kazuki Yamamoto 10:b2ffc7117a58 42 int i=0;
Kazuki Yamamoto 10:b2ffc7117a58 43 while(1) {
Kazuki Yamamoto 10:b2ffc7117a58 44 while(true) {
Kazuki Yamamoto 10:b2ffc7117a58 45 read=pc.getc();
Kazuki Yamamoto 10:b2ffc7117a58 46 recieve[i]=read;
Kazuki Yamamoto 10:b2ffc7117a58 47 i++;
Kazuki Yamamoto 10:b2ffc7117a58 48 if(read == 'P') {
Kazuki Yamamoto 10:b2ffc7117a58 49 plength=i;
Kazuki Yamamoto 10:b2ffc7117a58 50 break;
Kazuki Yamamoto 10:b2ffc7117a58 51 }
Kazuki Yamamoto 10:b2ffc7117a58 52 }
Kazuki Yamamoto 10:b2ffc7117a58 53 i=0;
Kazuki Yamamoto 10:b2ffc7117a58 54 while(i < plength) {
Kazuki Yamamoto 10:b2ffc7117a58 55 switch(recieve[i]) {
Kazuki Yamamoto 10:b2ffc7117a58 56 case 'C':
Kazuki Yamamoto 10:b2ffc7117a58 57 {
Kazuki Yamamoto 10:b2ffc7117a58 58 channel=recieve[i+1];
Kazuki Yamamoto 10:b2ffc7117a58 59 switch(channel) {
Kazuki Yamamoto 10:b2ffc7117a58 60 case I2C0adr:
Kazuki Yamamoto 10:b2ffc7117a58 61 {
Kazuki Yamamoto 10:b2ffc7117a58 62 bus=~0x01;
Kazuki Yamamoto 10:b2ffc7117a58 63 channel='0';
Kazuki Yamamoto 10:b2ffc7117a58 64 dev=&dev1;
Kazuki Yamamoto 10:b2ffc7117a58 65 break;
Kazuki Yamamoto 10:b2ffc7117a58 66 }
Kazuki Yamamoto 10:b2ffc7117a58 67 default:
Kazuki Yamamoto 10:b2ffc7117a58 68 {
Kazuki Yamamoto 10:b2ffc7117a58 69 channel='0';
Kazuki Yamamoto 10:b2ffc7117a58 70 dev=&dev1;
Kazuki Yamamoto 10:b2ffc7117a58 71 break;
Kazuki Yamamoto 10:b2ffc7117a58 72 }
Kazuki Yamamoto 10:b2ffc7117a58 73 }
Kazuki Yamamoto 10:b2ffc7117a58 74 i+=(2);
Kazuki Yamamoto 10:b2ffc7117a58 75 break;
Kazuki Yamamoto 10:b2ffc7117a58 76 }
Kazuki Yamamoto 10:b2ffc7117a58 77 case 'S':
Kazuki Yamamoto 10:b2ffc7117a58 78 {
Kazuki Yamamoto 10:b2ffc7117a58 79 s = true;
Kazuki Yamamoto 10:b2ffc7117a58 80 ack = plength - 2 - (i+1) + (recieve[i+2] & 0x01);
Kazuki Yamamoto 10:b2ffc7117a58 81 if( ack >= 4){ //valid packet
Kazuki Yamamoto 10:b2ffc7117a58 82 address = 0xff & (recieve[i+1] << 4 | (recieve[i+2] & 0x0F));
Kazuki Yamamoto 10:b2ffc7117a58 83 length = 0xff & (recieve[i+3] << 4 | (recieve[i+4] & 0x0F));
Kazuki Yamamoto 10:b2ffc7117a58 84 }else{
Kazuki Yamamoto 10:b2ffc7117a58 85 pc.printf("bad packet! %d, %d, %02X, %d\n\r",plength,i,recieve[(i+2)]&0x0F,ack);
Kazuki Yamamoto 10:b2ffc7117a58 86 i = plength + 1;
Kazuki Yamamoto 10:b2ffc7117a58 87 break;
Kazuki Yamamoto 10:b2ffc7117a58 88 }
Kazuki Yamamoto 10:b2ffc7117a58 89 dev->start();
Kazuki Yamamoto 10:b2ffc7117a58 90 ack=dev->write(address);
Kazuki Yamamoto 10:b2ffc7117a58 91 if( (address&0x01)) {//read
Kazuki Yamamoto 10:b2ffc7117a58 92 for(int j=0; j<length; j++) {
Kazuki Yamamoto 10:b2ffc7117a58 93 send[j] = dev->read(1);
Kazuki Yamamoto 10:b2ffc7117a58 94 }
Kazuki Yamamoto 10:b2ffc7117a58 95 i+=(5);
Kazuki Yamamoto 10:b2ffc7117a58 96 } else {//write
Kazuki Yamamoto 10:b2ffc7117a58 97 for(int j=0; j < (length * 2); j+=2) {
Kazuki Yamamoto 10:b2ffc7117a58 98 ack = dev->write( 0xff&(recieve[5+j] << 4 | (recieve[6+j] & 0x0F)) );
Kazuki Yamamoto 10:b2ffc7117a58 99 }
Kazuki Yamamoto 10:b2ffc7117a58 100 i+=(5 + length * 2);
Kazuki Yamamoto 10:b2ffc7117a58 101 length=0;
Kazuki Yamamoto 10:b2ffc7117a58 102 }
Kazuki Yamamoto 10:b2ffc7117a58 103 break;
Kazuki Yamamoto 10:b2ffc7117a58 104 }
Kazuki Yamamoto 10:b2ffc7117a58 105 case 'P':
Kazuki Yamamoto 10:b2ffc7117a58 106 if(s){
Kazuki Yamamoto 10:b2ffc7117a58 107 dev->stop();
Kazuki Yamamoto 10:b2ffc7117a58 108 s=false;
Kazuki Yamamoto 10:b2ffc7117a58 109 }
Kazuki Yamamoto 10:b2ffc7117a58 110 i=plength;
Kazuki Yamamoto 10:b2ffc7117a58 111 for(int j=0; j<length; j++) {
Kazuki Yamamoto 10:b2ffc7117a58 112 pc.printf("%02X,",send[j]);
Kazuki Yamamoto 10:b2ffc7117a58 113 }
Kazuki Yamamoto 10:b2ffc7117a58 114 pc.printf("ok\n\r");
Kazuki Yamamoto 10:b2ffc7117a58 115 break;
Kazuki Yamamoto 10:b2ffc7117a58 116 case 'R':
Kazuki Yamamoto 10:b2ffc7117a58 117 {
Kazuki Yamamoto 10:b2ffc7117a58 118 pc.printf("command R is not implemented\n\r");
Kazuki Yamamoto 10:b2ffc7117a58 119 i=plength;
Kazuki Yamamoto 10:b2ffc7117a58 120 break;
Kazuki Yamamoto 10:b2ffc7117a58 121 }
Kazuki Yamamoto 10:b2ffc7117a58 122 case 'W':
Kazuki Yamamoto 10:b2ffc7117a58 123 {
Kazuki Yamamoto 10:b2ffc7117a58 124 pc.printf("command W is not implemented\n\r");
Kazuki Yamamoto 10:b2ffc7117a58 125 i=plength;
Kazuki Yamamoto 10:b2ffc7117a58 126 break;
Kazuki Yamamoto 10:b2ffc7117a58 127 }
Kazuki Yamamoto 10:b2ffc7117a58 128 case 'I':
Kazuki Yamamoto 10:b2ffc7117a58 129 {
Kazuki Yamamoto 10:b2ffc7117a58 130 pc.printf("command I is not implemented\n\r");
Kazuki Yamamoto 10:b2ffc7117a58 131 i=plength;
Kazuki Yamamoto 10:b2ffc7117a58 132 break;
Kazuki Yamamoto 10:b2ffc7117a58 133 }
Kazuki Yamamoto 10:b2ffc7117a58 134 case 'O':
Kazuki Yamamoto 10:b2ffc7117a58 135 {
Kazuki Yamamoto 10:b2ffc7117a58 136 pc.printf("command O is not implemented\n\r");
Kazuki Yamamoto 10:b2ffc7117a58 137 i=plength;
Kazuki Yamamoto 10:b2ffc7117a58 138 break;
Kazuki Yamamoto 10:b2ffc7117a58 139 }
Kazuki Yamamoto 10:b2ffc7117a58 140 case 'Z':
Kazuki Yamamoto 10:b2ffc7117a58 141 {
Kazuki Yamamoto 10:b2ffc7117a58 142 pc.printf("command Z is not implemented\n\r");
Kazuki Yamamoto 10:b2ffc7117a58 143 i=plength;
Kazuki Yamamoto 10:b2ffc7117a58 144 break;
Kazuki Yamamoto 10:b2ffc7117a58 145 }
Kazuki Yamamoto 10:b2ffc7117a58 146 default:
Kazuki Yamamoto 10:b2ffc7117a58 147 {
Kazuki Yamamoto 10:b2ffc7117a58 148 pc.printf("command ? is not implemented\n\r");
Kazuki Yamamoto 10:b2ffc7117a58 149 i=plength;
Kazuki Yamamoto 10:b2ffc7117a58 150 break;
Kazuki Yamamoto 10:b2ffc7117a58 151 }
Kazuki Yamamoto 10:b2ffc7117a58 152 }
Kazuki Yamamoto 10:b2ffc7117a58 153 }
Kazuki Yamamoto 10:b2ffc7117a58 154 i=0;
Kazuki Yamamoto 10:b2ffc7117a58 155 length=0;
Kazuki Yamamoto 7:82b1422b9b09 156 }
Kazuki Yamamoto 10:b2ffc7117a58 157 }