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.
Diff: LPC824/main.cpp
- Revision:
- 16:ba11339fd9c6
- Parent:
- 15:98ec6b372a2b
- Child:
- 18:e3286a42cf0e
--- a/LPC824/main.cpp Mon Dec 08 18:56:36 2014 +0900 +++ b/LPC824/main.cpp Tue Dec 09 17:52:26 2014 +0900 @@ -9,7 +9,6 @@ I2C dev3(P0_23, P0_22);//23,22 I2C dev4(P0_21, P0_20);//21,20 -/* DigitalInOut _GPIO0(D0); DigitalInOut _GPIO1(D1); DigitalInOut _GPIO2(D2); @@ -18,7 +17,6 @@ DigitalInOut _GPIO5(D5); DigitalInOut _GPIO6(D6); DigitalInOut _GPIO7(D7); -*/ //Table 3. ASCII commands supported by SC18IM700 //ASCII command Hex value Command function @@ -63,7 +61,7 @@ dev2.frequency(400000);//400k dev3.frequency(400000);//400k dev4.frequency(400000);//400k -/* + DigitalInOut* gpio[]={ &_GPIO0, &_GPIO1, @@ -74,7 +72,11 @@ &_GPIO6, &_GPIO7, }; -*/ + for(int k=0; k<8; k++){ + gpio[k]->input(); + gpio[k]->mode(PullNone); + } + int ack = 0; int plength = 0; char recieve[] = { @@ -260,35 +262,44 @@ case CMD_R: { length = plength - 2; - for(int j=0; j<length; j++){ - address = recieve[i+1+j]; - switch(address){ - case CHIP_ID: - { - send[j] = chip_id; - break; - } - case GPIO_STAT: - { - data=registers[GPIO_STAT-'0']; - send[j] = (char)data; - break; + if(length<1){ + pc.printf("bad packet! %d\n\r",length); + i = plength + 1; + length = 0; + }else{ + for(int j=0; j<length; j++){ + address = recieve[i+1+j]; + switch(address){ + case CHIP_ID: + { + data = chip_id; +// send[j] = chip_id; + break; + } + case GPIO_STAT: + { + data = registers[GPIO_STAT-'0']; +// send[j] = (char)data; + break; + } + case GPIO_CONF: + { + data = registers[GPIO_CONF-'0']; +// send[j] = (char)data; + break; + } + default: + { + data = 0xAA; +// send[j] = 0xAA; + break; + } } - case GPIO_CONF: - { - data=registers[GPIO_CONF-'0']; - send[j] = (char)data; - break; - } - default: - { - send[j] = 0xAA; - break; - } + send[j] = (char)data; } + i += (length+1); +// pc.printf("command R is not implemented, "); } - i += (length+1); -// pc.printf("command R is not implemented, "); break; } case CMD_W: @@ -297,6 +308,7 @@ if(length < 3){ pc.printf("bad packet! %d\n\r",length); i = plength + 1; + length = 0; }else{ for(int j=0; j<length; j+=3){ address = recieve[i+1+j]; @@ -305,19 +317,32 @@ case CHIP_ID: { //READ ONLY: do nothing - *(send+j) = registers[CHIP_ID-'0']; + data = registers[CHIP_ID-'0']; +// *(send+j) = registers[CHIP_ID-'0']; break; } case GPIO_STAT: { //READ ONLY from this command: do nothing - *(send+j) = registers[GPIO_STAT-'0']; + data = registers[GPIO_STAT-'0']; +// *(send+j) = registers[GPIO_STAT-'0']; break; } case GPIO_CONF: { registers[GPIO_CONF-'0'] = data; - *(send+j) = registers[GPIO_CONF-'0']; +// data = 0; + for(int k=0; k<8; k++){ + if(data&0x01){//output + gpio[k]->output(); + }else{//input + gpio[k]->input(); + gpio[k]->mode(PullNone); + } + data >>= 1; + } + data = registers[GPIO_CONF-'0']; +// *(send+j) = registers[GPIO_CONF-'0']; break; } default: @@ -325,9 +350,11 @@ break; } } + send[j/3] = (char)data; } + i += length+1; + length /= 3; } - i += length+1; // pc.printf("command W is not implemented, "); break; } @@ -363,7 +390,7 @@ } default: { - pc.printf("command %s is not implemented\n\r", recieve[i]); + pc.printf("command %c is not implemented\n\r", recieve[i]); i=plength; break; }