aboutsummaryrefslogtreecommitdiff
path: root/src/core/gpio.cpp
diff options
context:
space:
mode:
authornucho <javatea@it.willcomlive.jp>2012-05-13 17:41:15 +0900
committernucho <javatea@it.willcomlive.jp>2012-05-13 18:07:13 +0900
commite8f0502cac8cb7d165a59544e79f380f5c848383 (patch)
treed6f46dbf100a0f4d551d73218e506929cd304b7b /src/core/gpio.cpp
parent9ffce8d3c2674156dd1fcbce928c2b7cae30ff39 (diff)
Added the selection of on-chip pull-up or inactive function as input pin
Diffstat (limited to 'src/core/gpio.cpp')
-rwxr-xr-xsrc/core/gpio.cpp34
1 files changed, 30 insertions, 4 deletions
diff --git a/src/core/gpio.cpp b/src/core/gpio.cpp
index d696537..6cfe41e 100755
--- a/src/core/gpio.cpp
+++ b/src/core/gpio.cpp
@@ -133,14 +133,28 @@ void digitalWrite(int pin,digitalWriteState state)
{
if(state == HIGH) //HIGH
{
- LPC_GPIO[ arduino_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << arduino_pinAssign[pin * 2 + 1]) ] = (1 << arduino_pinAssign[pin * 2 + 1]);
+ if(LPC_GPIO[ arduino_pinAssign[pin * 2] ]->DIR & 1<<arduino_pinAssign[pin * 2 + 1])//pin is output
+ {
+ LPC_GPIO[ arduino_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << arduino_pinAssign[pin * 2 + 1]) ] = (1 << arduino_pinAssign[pin * 2 + 1]);
+ }else//pin is input
+ {
+ SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_MODE_MASK, IOCON_MODE_PULLUP);
+ }
}else //LOW
{
- LPC_GPIO[ arduino_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << arduino_pinAssign[pin * 2 + 1]) ] &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
+ if(LPC_GPIO[ arduino_pinAssign[pin * 2] ]->DIR & 1<<arduino_pinAssign[pin * 2 + 1])//pin is output
+ {
+ LPC_GPIO[ arduino_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << arduino_pinAssign[pin * 2 + 1]) ] &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
+ }else // pin is input
+ {
+ SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_MODE_MASK, IOCON_MODE_INACTIVE);
+ }
}
+
return;
}
+
if(pin < 100) return; //arduinoPinAssign(20~99:reserved)
if(pin < 200) //maryPinAssign(100~119?)
@@ -148,10 +162,22 @@ void digitalWrite(int pin,digitalWriteState state)
pin = pin - 100;
if(state == HIGH) //HIGH
{
- LPC_GPIO[ mary_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << mary_pinAssign[pin * 2 + 1]) ] = (1 << mary_pinAssign[pin * 2 + 1]);
+ if(LPC_GPIO[ mary_pinAssign[pin * 2] ]->DIR & 1<<mary_pinAssign[pin * 2 + 1])//pin is output
+ {
+ LPC_GPIO[ mary_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << mary_pinAssign[pin * 2 + 1]) ] = (1 << mary_pinAssign[pin * 2 + 1]);
+ }else//pin is input
+ {
+ SetIOCON(mary_pinAssign[pin * 2], mary_pinAssign[pin * 2 + 1], IOCON_MODE_MASK, IOCON_MODE_PULLUP);
+ }
}else //LOW
{
- LPC_GPIO[ mary_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << mary_pinAssign[pin * 2 + 1]) ] &= ~((1 << mary_pinAssign[pin * 2 + 1]));
+ if(LPC_GPIO[ mary_pinAssign[pin * 2] ]->DIR & 1<<mary_pinAssign[pin * 2 + 1])//pin is output
+ {
+ LPC_GPIO[ mary_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << mary_pinAssign[pin * 2 + 1]) ] &= ~((1 << mary_pinAssign[pin * 2 + 1]));
+ }else // pin is input
+ {
+ SetIOCON(mary_pinAssign[pin * 2], mary_pinAssign[pin * 2 + 1], IOCON_MODE_MASK, IOCON_MODE_INACTIVE);
+ }
}
}
return;