aboutsummaryrefslogtreecommitdiff
path: root/src/core/gpio.cpp
diff options
context:
space:
mode:
authornucho <javatea@it.willcomlive.jp>2012-03-14 21:19:07 +0900
committernucho <javatea@it.willcomlive.jp>2012-03-14 21:19:07 +0900
commit29dde24b94a621d53712ae2b01d0609a4951b9f9 (patch)
tree77887e601fedf7a84269f5b44c8928c2f27a7daf /src/core/gpio.cpp
parent00e50e29e28594f0920828f241f9372fe844c445 (diff)
added attachInterrupt function
Diffstat (limited to 'src/core/gpio.cpp')
-rwxr-xr-xsrc/core/gpio.cpp135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/core/gpio.cpp b/src/core/gpio.cpp
index 1a7b18e..b4e6b76 100755
--- a/src/core/gpio.cpp
+++ b/src/core/gpio.cpp
@@ -99,4 +99,139 @@ int digitalRead(int pin)
return 0;
}
+/*****************************************************************************
+ ** Function name: GPIOSetInterrupt
+ **
+ ** Descriptions: Set interrupt sense, event, etc.
+ ** edge or level, 0 is edge, 1 is level
+ ** single or double edge, 0 is single, 1 is double
+ ** active high or low, etc.
+ **
+ ** parameters: pin num, bit position, sense, single/doube, polarity
+ ** Returned value: None
+ **
+ *****************************************************************************/
+void GPIOSetInterrupt(int pin, int sense, int single, int event) {
+ if (pin >= 0 && pin < 20) //arduinoPinAssign(0~19)
+ {
+ if (sense == 0) {
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IS &= ~(arduino_pinAssign[pin
+ * 2 + 1]);
+ /* single or double only applies when sense is 0(edge trigger). */
+ if (single == 0)
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IBE
+ &= ~(arduino_pinAssign[pin * 2 + 1]);
+ else
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IBE
+ |= (arduino_pinAssign[pin * 2 + 1]);
+ } else
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IS |= (arduino_pinAssign[pin
+ * 2 + 1]);
+
+ if (event == 0)
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IEV
+ &= ~(arduino_pinAssign[pin * 2 + 1]);
+ else
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IEV |= (arduino_pinAssign[pin
+ * 2 + 1]);
+ } else if (pin >= 20 && pin < 100) {
+ //(20~99:reserved)
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+ if (sense == 0) {
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IS &= ~(mary_pinAssign[pin * 2
+ + 1]);
+ /* single or double only applies when sense is 0(edge trigger). */
+ if (single == 0)
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IBE &= ~(mary_pinAssign[pin
+ * 2 + 1]);
+ else
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IBE |= (mary_pinAssign[pin
+ * 2 + 1]);
+ } else
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IS |= (mary_pinAssign[pin * 2
+ + 1]);
+
+ if (event == 0)
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IEV &= ~(mary_pinAssign[pin * 2
+ + 1]);
+ else
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IEV |= (mary_pinAssign[pin * 2
+ + 1]);
+ }
+
+ return;
+}
+
+void GPIOIntEnable(int pin) {
+ if (pin >= 0 && pin < 20) //arduinoPinAssign(0~19)
+ {
+
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IE |= arduino_pinAssign[pin * 2
+ + 1];
+ } else if (pin >= 20 && pin < 100) { //(20~99:reserved)
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IE |= mary_pinAssign[pin * 2 + 1];
+ }
+
+ return;
+}
+
+void GPIOIntDisable(int pin) {
+ if (pin >= 0 && pin < 20) //arduinoPinAssign(0~19)
+ {
+
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IE &= ~(arduino_pinAssign[pin * 2
+ + 1]);
+ } else if (pin >= 20 && pin < 100) {//(20~99:reserved)
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IE &= ~(mary_pinAssign[pin * 2 + 1]);
+ }
+ return;
+}
+
+int GPIOIntStatus(int pin) {
+ int regVal = 0;
+
+ if (pin >= 0 && pin < 20) //arduinoPinAssign(0~19)
+ {
+ if (LPC_GPIO[arduino_pinAssign[pin * 2]]->MIS
+ & arduino_pinAssign[pin * 2 + 1]) {
+ regVal = 1;
+ }
+ } else if (pin >= 20 && pin < 100) { //(20~99:reserved)
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+
+ if (LPC_GPIO[mary_pinAssign[pin * 2]]->MIS
+ & mary_pinAssign[pin * 2 + 1]) {
+ regVal = 1;
+ }
+ }
+
+ return regVal;
+}
+
+void GPIOIntClear(int pin) {
+ if (pin >= 0 && pin < 20) //arduinoPinAssign(0~19)
+ {
+
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IC |= arduino_pinAssign[pin * 2
+ + 1];
+ } else if (pin >= 20 && pin < 100) { //(20~99:reserved)
+
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IC |= mary_pinAssign[pin * 2 + 1];
+ }
+
+ return;
+}