[realtek-ambz] Implement attachInterruptParam
This commit is contained in:
@@ -18,6 +18,9 @@
|
||||
#define FPSTR(pstr_pointer) (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))
|
||||
#define PGM_VOID_P const void *
|
||||
#define vsnprintf_P vsnprintf
|
||||
#define OUTPUT_OPEN_DRAIN OUTPUT_OPENDRAIN
|
||||
#define attachInterruptArg attachInterruptParam
|
||||
#define voidFuncPtrArg voidFuncPtrParam
|
||||
|
||||
// FreeRTOS utilities
|
||||
#if LT_HAS_FREERTOS
|
||||
|
||||
@@ -4,22 +4,31 @@
|
||||
#include <gpio_irq_ex_api.h>
|
||||
|
||||
extern void *gpio_pin_struct[PINS_COUNT];
|
||||
extern void *gpio_irq_handler_list[PINS_COUNT];
|
||||
static void *gpio_irq_handler_list[PINS_COUNT] = {NULL};
|
||||
static void *gpio_irq_handler_args[PINS_COUNT] = {NULL};
|
||||
|
||||
extern bool pinInvalid(pin_size_t pinNumber);
|
||||
extern void pinRemoveMode(pin_size_t pinNumber);
|
||||
|
||||
void gpioIrqHandler(uint32_t id, gpio_irq_event event) {
|
||||
if (gpio_irq_handler_list[id] != NULL) {
|
||||
((void (*)(uint32_t, uint32_t))gpio_irq_handler_list[id])(id, (uint32_t)event);
|
||||
if (gpio_irq_handler_args[id] != NULL)
|
||||
((voidFuncPtr)gpio_irq_handler_list[id])();
|
||||
else
|
||||
((voidFuncPtrParam)gpio_irq_handler_list[id])(gpio_irq_handler_args[id]);
|
||||
}
|
||||
}
|
||||
|
||||
void attachInterrupt(pin_size_t interruptNumber, voidFuncPtr callback, PinStatus mode) {
|
||||
attachInterruptParam(interruptNumber, callback, mode, NULL);
|
||||
}
|
||||
|
||||
void attachInterruptParam(pin_size_t interruptNumber, voidFuncPtrParam callback, PinStatus mode, void *param) {
|
||||
if (pinInvalid(interruptNumber))
|
||||
return;
|
||||
|
||||
gpio_irq_handler_list[interruptNumber] = callback;
|
||||
gpio_irq_handler_args[interruptNumber] = param;
|
||||
|
||||
if (g_APinDescription[interruptNumber].ulPinType == PIO_GPIO_IRQ &&
|
||||
g_APinDescription[interruptNumber].ulPinMode == mode)
|
||||
|
||||
@@ -31,6 +31,8 @@ static __inline uint32_t __get_ipsr__(void) {
|
||||
return (__regIPSR);
|
||||
}
|
||||
|
||||
void *gpio_pin_struct[PINS_COUNT] = {NULL};
|
||||
|
||||
__attribute__((weak)) void init(void) {
|
||||
// nop
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
#include <pwmout_api.h>
|
||||
|
||||
extern void *gpio_pin_struct[PINS_COUNT];
|
||||
extern void *gpio_irq_handler_list[PINS_COUNT];
|
||||
|
||||
bool pinInvalid(pin_size_t pinNumber) {
|
||||
return pinNumber < 0 || pinNumber >= PINS_COUNT || g_APinDescription[pinNumber].pinname == NC;
|
||||
|
||||
@@ -19,24 +19,21 @@ PinDescription g_APinDescription[PINS_COUNT] = {
|
||||
{PA_15, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM, NOT_INITIAL},
|
||||
// D4: PWM2, ext_32K
|
||||
{PA_0, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM, NOT_INITIAL},
|
||||
// D6: UART2_log_RXD, I2C0_SCL, PWM4
|
||||
// D5: UART2_log_RXD, I2C0_SCL, PWM4
|
||||
{PA_29, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM, NOT_INITIAL},
|
||||
// D7: UART2_log_TXD, I2C0_SDA, PWM3, RTC_OUT
|
||||
// D6: UART2_log_TXD, I2C0_SDA, PWM3, RTC_OUT
|
||||
{PA_30, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM, NOT_INITIAL},
|
||||
// D8: SDIO_SIDEBAND_INT, PWM4, WAKEUP_1
|
||||
// D7: SDIO_SIDEBAND_INT, PWM4, WAKEUP_1
|
||||
{PA_5, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM, NOT_INITIAL},
|
||||
// D9: PWM3
|
||||
// D8: PWM3
|
||||
{PA_12, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM, NOT_INITIAL},
|
||||
// D10: UART0_RXD, SPI1_CLK, SPI0_SCK, I2C1_SCL, SD_D2, TIMER4_TRIG, I2S_MCK, WAKEUP_0
|
||||
// D9: UART0_RXD, SPI1_CLK, SPI0_SCK, I2C1_SCL, SD_D2, TIMER4_TRIG, I2S_MCK, WAKEUP_0
|
||||
{PA_18, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ, NOT_INITIAL},
|
||||
// D11: UART0_TXD, SPI1_MOSI, SPI0_MOSI, I2C1_SDA, SD_D1, PWM0, WAKEUP_3
|
||||
// D10: UART0_TXD, SPI1_MOSI, SPI0_MOSI, I2C1_SDA, SD_D1, PWM0, WAKEUP_3
|
||||
{PA_23, NOT_INITIAL, PIO_GPIO | PIO_GPIO_IRQ | PIO_PWM, NOT_INITIAL},
|
||||
// A1: VBAT_MEAS, ADC2
|
||||
{AD_2, NOT_INITIAL, PIO_ADC, NOT_INITIAL},
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
void *gpio_pin_struct[PINS_COUNT] = {NULL};
|
||||
void *gpio_irq_handler_list[PINS_COUNT] = {NULL};
|
||||
|
||||
} // extern C
|
||||
|
||||
Reference in New Issue
Block a user