From 5c9eb1b24ed4cfa7eae59ffbc24bdbbce814ba35 Mon Sep 17 00:00:00 2001 From: lynxeyed-atsu Date: Tue, 25 Sep 2012 21:32:32 +0900 Subject: apply a patch made by audin to a src/core audin fixed some bugs about Print class and gpio function with interruption for us. thank you! --- src/core/gpio_int.cpp | 306 +++++++++++++++++++++++++------------------------- 1 file changed, 153 insertions(+), 153 deletions(-) (limited to 'src/core/gpio_int.cpp') 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; +} -- cgit v1.2.3