Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
LPC11UXX/main.cpp@10:b2ffc7117a58, 2014-12-04 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |