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
diff -r 98ec6b372a2b -r ba11339fd9c6 LPC824/main.cpp
--- 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;
}