From e8f0502cac8cb7d165a59544e79f380f5c848383 Mon Sep 17 00:00:00 2001 From: nucho Date: Sun, 13 May 2012 17:41:15 +0900 Subject: Added the selection of on-chip pull-up or inactive function as input pin --- src/core/gpio.cpp | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) (limited to 'src/core/gpio.cpp') 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<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<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<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<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; -- cgit v1.2.3