Kazuki Yamamoto
/
uart_i2c_conv_824
only for LPC824 chip to match hardware I2C channels(2->4)
main.cpp@0:9d12c615c8ea, 2014-10-17 (annotated)
- Committer:
- k4zuki
- Date:
- Fri Oct 17 20:25:23 2014 +0000
- Revision:
- 0:9d12c615c8ea
- Child:
- 1:5817c3e6ce1e
first version to publish; "tested" python code to use this program attached;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
k4zuki | 0:9d12c615c8ea | 1 | /* |
k4zuki | 0:9d12c615c8ea | 2 | #include "mbed.h" |
k4zuki | 0:9d12c615c8ea | 3 | #include "USBSerial.h" |
k4zuki | 0:9d12c615c8ea | 4 | |
k4zuki | 0:9d12c615c8ea | 5 | //Virtual serial port over USB |
k4zuki | 0:9d12c615c8ea | 6 | USBSerial serial; |
k4zuki | 0:9d12c615c8ea | 7 | |
k4zuki | 0:9d12c615c8ea | 8 | int main(void) { |
k4zuki | 0:9d12c615c8ea | 9 | |
k4zuki | 0:9d12c615c8ea | 10 | while(1) |
k4zuki | 0:9d12c615c8ea | 11 | { |
k4zuki | 0:9d12c615c8ea | 12 | serial.printf("I am a virtual serial port!\r\n"); |
k4zuki | 0:9d12c615c8ea | 13 | wait(0.005); |
k4zuki | 0:9d12c615c8ea | 14 | } |
k4zuki | 0:9d12c615c8ea | 15 | } |
k4zuki | 0:9d12c615c8ea | 16 | */ |
k4zuki | 0:9d12c615c8ea | 17 | ///* |
k4zuki | 0:9d12c615c8ea | 18 | #include "mbed.h" |
k4zuki | 0:9d12c615c8ea | 19 | //#define isuse_USB_SERIAL |
k4zuki | 0:9d12c615c8ea | 20 | |
k4zuki | 0:9d12c615c8ea | 21 | #ifdef isuse_USB_SERIAL |
k4zuki | 0:9d12c615c8ea | 22 | #include "USBSerial.h" |
k4zuki | 0:9d12c615c8ea | 23 | USBSerial pc; |
k4zuki | 0:9d12c615c8ea | 24 | #else |
k4zuki | 0:9d12c615c8ea | 25 | Serial pc(USBTX,USBRX); |
k4zuki | 0:9d12c615c8ea | 26 | #endif |
k4zuki | 0:9d12c615c8ea | 27 | I2C dev1(p9,p10); |
k4zuki | 0:9d12c615c8ea | 28 | I2C dev2(p9,p10); |
k4zuki | 0:9d12c615c8ea | 29 | //I2C dev3(A5,A4); |
k4zuki | 0:9d12c615c8ea | 30 | //I2C dev4(A5,A4); |
k4zuki | 0:9d12c615c8ea | 31 | I2C* dev=&dev1; |
k4zuki | 0:9d12c615c8ea | 32 | BusOut bus(LED1,LED2,LED3,LED4); |
k4zuki | 0:9d12c615c8ea | 33 | //InterruptIn adint(D9); |
k4zuki | 0:9d12c615c8ea | 34 | //DigitalOut led1(LED1); |
k4zuki | 0:9d12c615c8ea | 35 | //DigitalOut led2(LED2); |
k4zuki | 0:9d12c615c8ea | 36 | //DigitalOut led3(LED3); |
k4zuki | 0:9d12c615c8ea | 37 | //DigitalOut led4(LED4); |
k4zuki | 0:9d12c615c8ea | 38 | |
k4zuki | 0:9d12c615c8ea | 39 | //Table 3. ASCII commands supported by SC18IM700 |
k4zuki | 0:9d12c615c8ea | 40 | //ASCII command Hex value Command function |
k4zuki | 0:9d12c615c8ea | 41 | //S 0x53 I2C-bus START |
k4zuki | 0:9d12c615c8ea | 42 | //P 0x50 I2C-bus STOP |
k4zuki | 0:9d12c615c8ea | 43 | //R 0x52 read SC18IM700 internal register |
k4zuki | 0:9d12c615c8ea | 44 | //W 0x57 write to SC18IM700 internal register |
k4zuki | 0:9d12c615c8ea | 45 | //I 0x49 read GPIO port |
k4zuki | 0:9d12c615c8ea | 46 | //O 0x4F write to GPIO port |
k4zuki | 0:9d12c615c8ea | 47 | //Z 0x5A power down |
k4zuki | 0:9d12c615c8ea | 48 | void adcomplete() |
k4zuki | 0:9d12c615c8ea | 49 | { |
k4zuki | 0:9d12c615c8ea | 50 | } |
k4zuki | 0:9d12c615c8ea | 51 | |
k4zuki | 0:9d12c615c8ea | 52 | int main() |
k4zuki | 0:9d12c615c8ea | 53 | { |
k4zuki | 0:9d12c615c8ea | 54 | #ifndef isuse_USB_SERIAL |
k4zuki | 0:9d12c615c8ea | 55 | pc.baud(115200); |
k4zuki | 0:9d12c615c8ea | 56 | #endif |
k4zuki | 0:9d12c615c8ea | 57 | // adc.baud(38400); |
k4zuki | 0:9d12c615c8ea | 58 | dev1.frequency(100000);//100k |
k4zuki | 0:9d12c615c8ea | 59 | // adint.fall(&adcomplete); |
k4zuki | 0:9d12c615c8ea | 60 | |
k4zuki | 0:9d12c615c8ea | 61 | int data=0x50; |
k4zuki | 0:9d12c615c8ea | 62 | int ack=0; |
k4zuki | 0:9d12c615c8ea | 63 | int plength=0; |
k4zuki | 0:9d12c615c8ea | 64 | char recieve[256]; |
k4zuki | 0:9d12c615c8ea | 65 | char send[256]; |
k4zuki | 0:9d12c615c8ea | 66 | char read=0; |
k4zuki | 0:9d12c615c8ea | 67 | int address=0,length=0,channel=0; |
k4zuki | 0:9d12c615c8ea | 68 | enum reg { |
k4zuki | 0:9d12c615c8ea | 69 | I2C0adr='0', |
k4zuki | 0:9d12c615c8ea | 70 | I2C1adr='1', |
k4zuki | 0:9d12c615c8ea | 71 | I2C2adr='2', |
k4zuki | 0:9d12c615c8ea | 72 | I2C3adr='3', |
k4zuki | 0:9d12c615c8ea | 73 | }; |
k4zuki | 0:9d12c615c8ea | 74 | // uint8_t registers[]={0x80,0x90,}; |
k4zuki | 0:9d12c615c8ea | 75 | |
k4zuki | 0:9d12c615c8ea | 76 | // reg.start(); |
k4zuki | 0:9d12c615c8ea | 77 | // reg.write(0xD0); |
k4zuki | 0:9d12c615c8ea | 78 | // reg.write(data); |
k4zuki | 0:9d12c615c8ea | 79 | // |
k4zuki | 0:9d12c615c8ea | 80 | // reg.write(0xD0|0x01); |
k4zuki | 0:9d12c615c8ea | 81 | // data=reg.read(ack); |
k4zuki | 0:9d12c615c8ea | 82 | // reg.stop(); |
k4zuki | 0:9d12c615c8ea | 83 | //"C0P" |
k4zuki | 0:9d12c615c8ea | 84 | //"S(0x80)(4)(0xDEADBEAF)P" |
k4zuki | 0:9d12c615c8ea | 85 | //"C1P" |
k4zuki | 0:9d12c615c8ea | 86 | //"S(0x80)(4)(0xDEADBEAF)P" |
k4zuki | 0:9d12c615c8ea | 87 | //"C2P" |
k4zuki | 0:9d12c615c8ea | 88 | //"S(0x80)(4)(0xDEADBEAF)P" |
k4zuki | 0:9d12c615c8ea | 89 | //"C3P" |
k4zuki | 0:9d12c615c8ea | 90 | //"S(0x80)(4)(0xDEADBEAF)P" |
k4zuki | 0:9d12c615c8ea | 91 | |
k4zuki | 0:9d12c615c8ea | 92 | int i=0; |
k4zuki | 0:9d12c615c8ea | 93 | while(1) { |
k4zuki | 0:9d12c615c8ea | 94 | while(true) { |
k4zuki | 0:9d12c615c8ea | 95 | read=pc.getc(); |
k4zuki | 0:9d12c615c8ea | 96 | recieve[i]=read; |
k4zuki | 0:9d12c615c8ea | 97 | // ser.printf("%02X,",read); |
k4zuki | 0:9d12c615c8ea | 98 | i++; |
k4zuki | 0:9d12c615c8ea | 99 | if(read == 'P') { |
k4zuki | 0:9d12c615c8ea | 100 | plength=i; |
k4zuki | 0:9d12c615c8ea | 101 | // ser.printf("P\n\r"); |
k4zuki | 0:9d12c615c8ea | 102 | break; |
k4zuki | 0:9d12c615c8ea | 103 | } |
k4zuki | 0:9d12c615c8ea | 104 | } |
k4zuki | 0:9d12c615c8ea | 105 | i=0; |
k4zuki | 0:9d12c615c8ea | 106 | while(i<plength) { |
k4zuki | 0:9d12c615c8ea | 107 | switch(recieve[i]) { |
k4zuki | 0:9d12c615c8ea | 108 | case 'C': |
k4zuki | 0:9d12c615c8ea | 109 | channel=recieve[i+1]; |
k4zuki | 0:9d12c615c8ea | 110 | switch(channel) { |
k4zuki | 0:9d12c615c8ea | 111 | case I2C0adr: |
k4zuki | 0:9d12c615c8ea | 112 | bus=0x01; |
k4zuki | 0:9d12c615c8ea | 113 | // pc.printf("ch0 is selected,"); |
k4zuki | 0:9d12c615c8ea | 114 | dev=&dev1; |
k4zuki | 0:9d12c615c8ea | 115 | break; |
k4zuki | 0:9d12c615c8ea | 116 | case I2C1adr: |
k4zuki | 0:9d12c615c8ea | 117 | bus=0x02; |
k4zuki | 0:9d12c615c8ea | 118 | // pc.printf("ch1 is selected,"); |
k4zuki | 0:9d12c615c8ea | 119 | // pc.printf("ch1 is not implemented,"); |
k4zuki | 0:9d12c615c8ea | 120 | channel='1'; |
k4zuki | 0:9d12c615c8ea | 121 | dev=&dev2; |
k4zuki | 0:9d12c615c8ea | 122 | break; |
k4zuki | 0:9d12c615c8ea | 123 | case I2C2adr: |
k4zuki | 0:9d12c615c8ea | 124 | bus=0x04; |
k4zuki | 0:9d12c615c8ea | 125 | // pc.printf("ch2 is not implemented,"); |
k4zuki | 0:9d12c615c8ea | 126 | channel='0'; |
k4zuki | 0:9d12c615c8ea | 127 | //dev=&dev3; |
k4zuki | 0:9d12c615c8ea | 128 | break; |
k4zuki | 0:9d12c615c8ea | 129 | case I2C3adr: |
k4zuki | 0:9d12c615c8ea | 130 | bus=0x08; |
k4zuki | 0:9d12c615c8ea | 131 | // pc.printf("ch0 is not implemented,"); |
k4zuki | 0:9d12c615c8ea | 132 | channel='0'; |
k4zuki | 0:9d12c615c8ea | 133 | //dev=&dev4; |
k4zuki | 0:9d12c615c8ea | 134 | break; |
k4zuki | 0:9d12c615c8ea | 135 | default: |
k4zuki | 0:9d12c615c8ea | 136 | channel='0'; |
k4zuki | 0:9d12c615c8ea | 137 | dev=&dev1; |
k4zuki | 0:9d12c615c8ea | 138 | break; |
k4zuki | 0:9d12c615c8ea | 139 | } |
k4zuki | 0:9d12c615c8ea | 140 | i+=(2); |
k4zuki | 0:9d12c615c8ea | 141 | break; |
k4zuki | 0:9d12c615c8ea | 142 | case 'S': |
k4zuki | 0:9d12c615c8ea | 143 | address=recieve[i+1]; |
k4zuki | 0:9d12c615c8ea | 144 | length=recieve[i+2]; |
k4zuki | 0:9d12c615c8ea | 145 | // pc.printf("addr=%02X, length=%d,",address,length); |
k4zuki | 0:9d12c615c8ea | 146 | dev->start(); |
k4zuki | 0:9d12c615c8ea | 147 | dev->write(address); |
k4zuki | 0:9d12c615c8ea | 148 | if( (address&0x01)) {//read |
k4zuki | 0:9d12c615c8ea | 149 | // pc.printf("read from ch%c,",channel); |
k4zuki | 0:9d12c615c8ea | 150 | for(int j=0; j<length; j++) { |
k4zuki | 0:9d12c615c8ea | 151 | pc.putc(dev->read(0)); |
k4zuki | 0:9d12c615c8ea | 152 | // send[j]=dev->read(0); |
k4zuki | 0:9d12c615c8ea | 153 | // pc.printf("%02X,",dev->read(0)); |
k4zuki | 0:9d12c615c8ea | 154 | } |
k4zuki | 0:9d12c615c8ea | 155 | i+=(3); |
k4zuki | 0:9d12c615c8ea | 156 | } else {//write |
k4zuki | 0:9d12c615c8ea | 157 | // pc.printf("write to ch%c, ",channel); |
k4zuki | 0:9d12c615c8ea | 158 | for(int j=0; j<length; j++) { |
k4zuki | 0:9d12c615c8ea | 159 | // send[j]=recieve[4+j]; |
k4zuki | 0:9d12c615c8ea | 160 | // pc.printf("%02X,",recieve[3+j]); |
k4zuki | 0:9d12c615c8ea | 161 | dev->write(recieve[3+j]); |
k4zuki | 0:9d12c615c8ea | 162 | } |
k4zuki | 0:9d12c615c8ea | 163 | i+=(3+length); |
k4zuki | 0:9d12c615c8ea | 164 | } |
k4zuki | 0:9d12c615c8ea | 165 | break; |
k4zuki | 0:9d12c615c8ea | 166 | case 'P': |
k4zuki | 0:9d12c615c8ea | 167 | dev->stop(); |
k4zuki | 0:9d12c615c8ea | 168 | i=plength; |
k4zuki | 0:9d12c615c8ea | 169 | pc.printf("ok\n\r"); |
k4zuki | 0:9d12c615c8ea | 170 | break; |
k4zuki | 0:9d12c615c8ea | 171 | case 'R': |
k4zuki | 0:9d12c615c8ea | 172 | pc.printf("command R is not implemented\n\r"); |
k4zuki | 0:9d12c615c8ea | 173 | i=plength; |
k4zuki | 0:9d12c615c8ea | 174 | break; |
k4zuki | 0:9d12c615c8ea | 175 | case 'W': |
k4zuki | 0:9d12c615c8ea | 176 | pc.printf("command W is not implemented\n\r"); |
k4zuki | 0:9d12c615c8ea | 177 | i=plength; |
k4zuki | 0:9d12c615c8ea | 178 | break; |
k4zuki | 0:9d12c615c8ea | 179 | case 'I': |
k4zuki | 0:9d12c615c8ea | 180 | pc.printf("command I is not implemented\n\r"); |
k4zuki | 0:9d12c615c8ea | 181 | i=plength; |
k4zuki | 0:9d12c615c8ea | 182 | break; |
k4zuki | 0:9d12c615c8ea | 183 | case 'O': |
k4zuki | 0:9d12c615c8ea | 184 | pc.printf("command O is not implemented\n\r"); |
k4zuki | 0:9d12c615c8ea | 185 | i=plength; |
k4zuki | 0:9d12c615c8ea | 186 | break; |
k4zuki | 0:9d12c615c8ea | 187 | case 'Z': |
k4zuki | 0:9d12c615c8ea | 188 | pc.printf("command Z is not implemented\n\r"); |
k4zuki | 0:9d12c615c8ea | 189 | i=plength; |
k4zuki | 0:9d12c615c8ea | 190 | break; |
k4zuki | 0:9d12c615c8ea | 191 | default: |
k4zuki | 0:9d12c615c8ea | 192 | pc.printf("command ? is not implemented\n\r"); |
k4zuki | 0:9d12c615c8ea | 193 | i=plength; |
k4zuki | 0:9d12c615c8ea | 194 | break; |
k4zuki | 0:9d12c615c8ea | 195 | } |
k4zuki | 0:9d12c615c8ea | 196 | } |
k4zuki | 0:9d12c615c8ea | 197 | // pc.printf(send); |
k4zuki | 0:9d12c615c8ea | 198 | i=0; |
k4zuki | 0:9d12c615c8ea | 199 | |
k4zuki | 0:9d12c615c8ea | 200 | } |
k4zuki | 0:9d12c615c8ea | 201 | } |
k4zuki | 0:9d12c615c8ea | 202 | //*/ |