diff options
| author | lynxeyed-atsu <lynxeyed@xj9.so-net.ne.jp> | 2012-09-25 21:32:32 +0900 |
|---|---|---|
| committer | lynxeyed-atsu <lynxeyed@xj9.so-net.ne.jp> | 2012-09-25 21:32:32 +0900 |
| commit | 5c9eb1b24ed4cfa7eae59ffbc24bdbbce814ba35 (patch) | |
| tree | 621f90d90f4a046136411c75b3ebc4889b640f23 /src/core/gpio_int.cpp | |
| parent | edb6aabe187a08cb67947fcfce13fefd26e42bb6 (diff) | |
audin fixed some bugs about Print class and gpio function with
interruption for us. thank you!
Diffstat (limited to 'src/core/gpio_int.cpp')
| -rwxr-xr-x | src/core/gpio_int.cpp | 306 |
1 files changed, 153 insertions, 153 deletions
diff --git a/src/core/gpio_int.cpp b/src/core/gpio_int.cpp index 27e16c6..d2477e3 100755 --- a/src/core/gpio_int.cpp +++ b/src/core/gpio_int.cpp @@ -1,153 +1,153 @@ -#include "gpio.h" - -#define EXTERNAL_NUM_INTERRUPTS 22 -volatile static USER_GPIO_FUNC intFunc[EXTERNAL_NUM_INTERRUPTS]; - -void attachInterrupt(int pin, USER_GPIO_FUNC func, digitalWriteState mode) { - pinMode(pin, INPUT); - - switch (mode) { - case LOW: - GPIOSetInterrupt(pin, 1, 0, 0); - break; - case HIGH: - GPIOSetInterrupt(pin, 1, 0, 1); - break; - case CHANGE: - GPIOSetInterrupt(pin, 0, 1, 0); - break; - case RISING: - GPIOSetInterrupt(pin, 0, 0, 1); - break; - case FALLING: - GPIOSetInterrupt(pin, 0, 0, 0); - break; - default: - break; - } - - - if (pin >= 0 && pin < 22) //arduinoPinAssign(0~22) - { - intFunc[pin] = func; - - switch (arduino_pinAssign[pin * 2]) { - case 0: - NVIC_EnableIRQ(EINT0_IRQn); - break; - case 1: - NVIC_EnableIRQ(EINT1_IRQn); - break; - case 2: - NVIC_EnableIRQ(EINT2_IRQn); - break; - case 3: - NVIC_EnableIRQ(EINT3_IRQn); - break; - } - } else if (pin >= 22 && pin < 100) { - //(22~99:reserved) - } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?) - { - pin = pin - 100; - intFunc[pin] = func; - - switch (mary_pinAssign[pin * 2]) { - case 0: - NVIC_EnableIRQ(EINT0_IRQn); - break; - case 1: - NVIC_EnableIRQ(EINT1_IRQn); - break; - case 2: - NVIC_EnableIRQ(EINT2_IRQn); - break; - case 3: - NVIC_EnableIRQ(EINT3_IRQn); - break; - } - } - - GPIOIntEnable(pin); - - return; -} - -void detachInterrupt(int pin) { - GPIOIntDisable(pin); - - if (pin >= 0 && pin < 22) //arduinoPinAssign(0~22) - { - intFunc[pin] = 0; - if (LPC_GPIO[arduino_pinAssign[pin * 2]]->IE == 0) { - switch (arduino_pinAssign[pin * 2]) { - case 0: - NVIC_DisableIRQ(EINT0_IRQn); - break; - case 1: - NVIC_DisableIRQ(EINT1_IRQn); - break; - case 2: - NVIC_DisableIRQ(EINT2_IRQn); - break; - case 3: - NVIC_DisableIRQ(EINT3_IRQn); - break; - } - } - } - else if (pin >= 22 && pin < 100) {//(22~99:reserved) - } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?) - { - pin = pin - 100; - intFunc[pin] = 0; - if (LPC_GPIO[mary_pinAssign[pin * 2]]->IE == 0) { - switch (mary_pinAssign[pin * 2]) { - case 0: - NVIC_DisableIRQ(EINT0_IRQn); - break; - case 1: - NVIC_DisableIRQ(EINT1_IRQn); - break; - case 2: - NVIC_DisableIRQ(EINT2_IRQn); - break; - case 3: - NVIC_DisableIRQ(EINT3_IRQn); - break; - } - } - } - return; -} - -void GPIO_IRQHandler(void) { - for (int i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) { - if (GPIOIntStatus(i)) { - GPIOIntClear(i); - - if (intFunc[i]) - intFunc[i](); - } - } -} - -void PIOINT0_IRQHandler(void) { - GPIO_IRQHandler(); - return; -} - -void PIOINT1_IRQHandler(void) { - GPIO_IRQHandler(); - return; -} - -void PIOINT2_IRQHandler(void) { - GPIO_IRQHandler(); - return; -} - -void PIOINT3_IRQHandler(void) { - GPIO_IRQHandler(); - return; -} +#include "gpio.h"
+
+#define EXTERNAL_NUM_INTERRUPTS 22
+volatile static USER_GPIO_FUNC intFunc[EXTERNAL_NUM_INTERRUPTS];
+
+void attachInterrupt(int pin, USER_GPIO_FUNC func, digitalWriteState mode) {
+ pinMode(pin, INPUT);
+
+ switch (mode) {
+ case LOW:
+ GPIOSetInterrupt(pin, 1, 0, 0);
+ break;
+ case HIGH:
+ GPIOSetInterrupt(pin, 1, 0, 1);
+ break;
+ case CHANGE:
+ GPIOSetInterrupt(pin, 0, 1, 0);
+ break;
+ case RISING:
+ GPIOSetInterrupt(pin, 0, 0, 1);
+ break;
+ case FALLING:
+ GPIOSetInterrupt(pin, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+
+ if (pin >= 0 && pin < 22) //arduinoPinAssign(0~22)
+ {
+ intFunc[pin] = func;
+
+ switch (arduino_pinAssign[pin * 2]) {
+ case 0:
+ NVIC_EnableIRQ(EINT0_IRQn);
+ break;
+ case 1:
+ NVIC_EnableIRQ(EINT1_IRQn);
+ break;
+ case 2:
+ NVIC_EnableIRQ(EINT2_IRQn);
+ break;
+ case 3:
+ NVIC_EnableIRQ(EINT3_IRQn);
+ break;
+ }
+ } else if (pin >= 22 && pin < 100) {
+ //(22~99:reserved)
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ int _pin = pin - 100;
+ intFunc[_pin] = func;
+
+ switch (mary_pinAssign[_pin * 2]) {
+ case 0:
+ NVIC_EnableIRQ(EINT0_IRQn);
+ break;
+ case 1:
+ NVIC_EnableIRQ(EINT1_IRQn);
+ break;
+ case 2:
+ NVIC_EnableIRQ(EINT2_IRQn);
+ break;
+ case 3:
+ NVIC_EnableIRQ(EINT3_IRQn);
+ break;
+ }
+ }
+
+ GPIOIntEnable(pin);
+
+ return;
+}
+
+void detachInterrupt(int pin) {
+ GPIOIntDisable(pin);
+
+ if (pin >= 0 && pin < 22) //arduinoPinAssign(0~22)
+ {
+ intFunc[pin] = 0;
+ if (LPC_GPIO[arduino_pinAssign[pin * 2]]->IE == 0) {
+ switch (arduino_pinAssign[pin * 2]) {
+ case 0:
+ NVIC_DisableIRQ(EINT0_IRQn);
+ break;
+ case 1:
+ NVIC_DisableIRQ(EINT1_IRQn);
+ break;
+ case 2:
+ NVIC_DisableIRQ(EINT2_IRQn);
+ break;
+ case 3:
+ NVIC_DisableIRQ(EINT3_IRQn);
+ break;
+ }
+ }
+ }
+ else if (pin >= 22 && pin < 100) {//(22~99:reserved)
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+ intFunc[pin] = 0;
+ if (LPC_GPIO[mary_pinAssign[pin * 2]]->IE == 0) {
+ switch (mary_pinAssign[pin * 2]) {
+ case 0:
+ NVIC_DisableIRQ(EINT0_IRQn);
+ break;
+ case 1:
+ NVIC_DisableIRQ(EINT1_IRQn);
+ break;
+ case 2:
+ NVIC_DisableIRQ(EINT2_IRQn);
+ break;
+ case 3:
+ NVIC_DisableIRQ(EINT3_IRQn);
+ break;
+ }
+ }
+ }
+ return;
+}
+
+void GPIO_IRQHandler(void) {
+ for (int i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) {
+ if (GPIOIntStatus(i)) {
+ GPIOIntClear(i);
+
+ if (intFunc[i])
+ intFunc[i]();
+ }
+ }
+}
+
+void PIOINT0_IRQHandler(void) {
+ GPIO_IRQHandler();
+ return;
+}
+
+void PIOINT1_IRQHandler(void) {
+ GPIO_IRQHandler();
+ return;
+}
+
+void PIOINT2_IRQHandler(void) {
+ GPIO_IRQHandler();
+ return;
+}
+
+void PIOINT3_IRQHandler(void) {
+ GPIO_IRQHandler();
+ return;
+}
|
