diff options
| author | nucho <javatea@it.willcomlive.jp> | 2012-05-13 17:41:15 +0900 |
|---|---|---|
| committer | nucho <javatea@it.willcomlive.jp> | 2012-05-13 18:07:13 +0900 |
| commit | e8f0502cac8cb7d165a59544e79f380f5c848383 (patch) | |
| tree | d6f46dbf100a0f4d551d73218e506929cd304b7b /src/core/gpio.cpp | |
| parent | 9ffce8d3c2674156dd1fcbce928c2b7cae30ff39 (diff) | |
Added the selection of on-chip pull-up or inactive function as input pin
Diffstat (limited to 'src/core/gpio.cpp')
| -rwxr-xr-x | src/core/gpio.cpp | 34 |
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; |
