Implemented events to PAL driver for Tiva devices.
Most code from the EXT driver could be reused.
This commit is contained in:
parent
f8b91dc682
commit
2977a2bc87
|
@ -144,10 +144,9 @@
|
|||
GPION_BIT | GPIOP_BIT | GPIOQ_BIT | GPIOR_BIT | \
|
||||
GPIOS_BIT | GPIOT_BIT)
|
||||
|
||||
#define GPIOHBCTL_MASK (GPIO_MASK & \
|
||||
(GPIOA_BIT | GPIOB_BIT | GPIOC_BIT | GPIOD_BIT | \
|
||||
#define GPIOHBCTL_MASK (GPIOA_BIT | GPIOB_BIT | GPIOC_BIT | GPIOD_BIT | \
|
||||
GPIOE_BIT | GPIOF_BIT | GPIOG_BIT | GPIOH_BIT | \
|
||||
GPIOJ_BIT))
|
||||
GPIOJ_BIT)
|
||||
|
||||
#define GPIOC_JTAG_MASK (0x0F)
|
||||
#define GPIOD_NMI_MASK (0x80)
|
||||
|
@ -157,6 +156,11 @@
|
|||
/* Driver exported variables. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Event records for all GPIO channels.
|
||||
*/
|
||||
palevent_t _pal_events[TIVA_GPIO_PINS];
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver local variables and types. */
|
||||
/*===========================================================================*/
|
||||
|
@ -202,10 +206,608 @@ static void gpio_unlock(ioportid_t port, ioportmask_t mask)
|
|||
HWREG(port + GPIO_O_CR) = mask;
|
||||
}
|
||||
|
||||
#if PAL_USE_CALLBACKS || PAL_USE_WAIT
|
||||
/**
|
||||
* @brief Enables GPIO IRQ sources.
|
||||
*/
|
||||
static void gpio_irq_enable(void)
|
||||
{
|
||||
#if TIVA_HAS_GPIOA
|
||||
nvicEnableVector(TIVA_GPIOA_NUMBER, TIVA_EXT_GPIOA_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOB
|
||||
nvicEnableVector(TIVA_GPIOB_NUMBER, TIVA_EXT_GPIOB_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOC
|
||||
nvicEnableVector(TIVA_GPIOC_NUMBER, TIVA_EXT_GPIOC_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOD
|
||||
nvicEnableVector(TIVA_GPIOD_NUMBER, TIVA_EXT_GPIOD_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOE
|
||||
nvicEnableVector(TIVA_GPIOE_NUMBER, TIVA_EXT_GPIOE_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOF
|
||||
nvicEnableVector(TIVA_GPIOF_NUMBER, TIVA_EXT_GPIOF_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOG
|
||||
nvicEnableVector(TIVA_GPIOG_NUMBER, TIVA_EXT_GPIOG_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOH
|
||||
nvicEnableVector(TIVA_GPIOH_NUMBER, TIVA_EXT_GPIOH_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOJ
|
||||
nvicEnableVector(TIVA_GPIOJ_NUMBER, TIVA_EXT_GPIOJ_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOK
|
||||
nvicEnableVector(TIVA_GPIOK_NUMBER, TIVA_EXT_GPIOK_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOL
|
||||
nvicEnableVector(TIVA_GPIOL_NUMBER, TIVA_EXT_GPIOL_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOM
|
||||
nvicEnableVector(TIVA_GPIOM_NUMBER, TIVA_EXT_GPIOM_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPION
|
||||
nvicEnableVector(TIVA_GPION_NUMBER, TIVA_EXT_GPION_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOP
|
||||
nvicEnableVector(TIVA_GPIOP0_NUMBER, TIVA_EXT_GPIOP0_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOP1_NUMBER, TIVA_EXT_GPIOP1_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOP2_NUMBER, TIVA_EXT_GPIOP2_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOP3_NUMBER, TIVA_EXT_GPIOP3_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOP4_NUMBER, TIVA_EXT_GPIOP4_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOP5_NUMBER, TIVA_EXT_GPIOP5_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOP6_NUMBER, TIVA_EXT_GPIOP6_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOP7_NUMBER, TIVA_EXT_GPIOP7_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOQ
|
||||
nvicEnableVector(TIVA_GPIOQ0_NUMBER, TIVA_EXT_GPIOQ0_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOQ1_NUMBER, TIVA_EXT_GPIOQ1_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOQ2_NUMBER, TIVA_EXT_GPIOQ2_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOQ3_NUMBER, TIVA_EXT_GPIOQ3_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOQ4_NUMBER, TIVA_EXT_GPIOQ4_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOQ5_NUMBER, TIVA_EXT_GPIOQ5_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOQ6_NUMBER, TIVA_EXT_GPIOQ6_IRQ_PRIORITY);
|
||||
nvicEnableVector(TIVA_GPIOQ7_NUMBER, TIVA_EXT_GPIOQ7_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOR
|
||||
nvicEnableVector(TIVA_GPIOR_NUMBER, TIVA_EXT_GPIOR_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOS
|
||||
nvicEnableVector(TIVA_GPIOS_NUMBER, TIVA_EXT_GPIOS_IRQ_PRIORITY);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOT
|
||||
nvicEnableVector(TIVA_GPIOT_NUMBER, TIVA_EXT_GPIOT_IRQ_PRIORITY);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#define gpio_serve_irq(mask, pin, channel) { \
|
||||
\
|
||||
if ((mask) & (1U << (pin))) { \
|
||||
_pal_isr_code(channel); \
|
||||
} \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Generic interrupt serving code for multiple pins per interrupt
|
||||
* handler.
|
||||
*/
|
||||
#define ext_lld_serve_port_interrupt(gpio, start) \
|
||||
do { \
|
||||
uint32_t mis = HWREG(gpio + GPIO_O_MIS); \
|
||||
\
|
||||
HWREG(gpio + GPIO_O_ICR) = mis; \
|
||||
\
|
||||
gpio_serve_irq(mis, 0, start + 0); \
|
||||
gpio_serve_irq(mis, 1, start + 1); \
|
||||
gpio_serve_irq(mis, 2, start + 2); \
|
||||
gpio_serve_irq(mis, 3, start + 3); \
|
||||
gpio_serve_irq(mis, 4, start + 4); \
|
||||
gpio_serve_irq(mis, 5, start + 5); \
|
||||
gpio_serve_irq(mis, 6, start + 6); \
|
||||
gpio_serve_irq(mis, 7, start + 7); \
|
||||
} while (0);
|
||||
|
||||
/**
|
||||
* @brief Generic interrupt serving code for single pin per interrupt
|
||||
* handler.
|
||||
*/
|
||||
#define ext_lld_serve_pin_interrupt(gpio, start, pin) \
|
||||
do { \
|
||||
HWREG(gpio + GPIO_O_ICR) = (1 << pin); \
|
||||
gpio_serve_irq((1 << pin), pin, start) \
|
||||
} while (0);
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver interrupt handlers. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if TIVA_HAS_GPIOA || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOA interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOA_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOA, 0);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOB || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOB interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOB_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOB, 8);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOC || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOC interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOC_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOC, 16);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOD || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOD interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOD_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOD, 24);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOE || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOE interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOE_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOE, 32);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOF || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOF interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOF_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOF, 40);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOG || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOG interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOG_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOG, 48);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOH || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOH interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOH_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOH, 56);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOJ || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOJ interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOJ_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOJ, 64);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOK || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOK interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOK_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOK, 72);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOL || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOL interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOL_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOL, 80);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOM || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOM interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOM_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOM, 88);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPION || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPION interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPION_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPION, 96);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOP || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOP0 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOP0_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOP, 104, 0);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOP1 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOP1_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOP, 105, 1);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOP2 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOP2_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOP, 106, 2);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOP3 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOP3_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOP, 107, 3);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOP4 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOP4_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOP, 108, 4);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOP5 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOP5_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOP, 109, 5);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOP6 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOP6_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOP, 110, 6);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOP7 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOP7_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOP, 111, 7);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOQ || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOQ0 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOQ0_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOQ, 112, 0);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOQ1 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOQ1_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOQ, 113, 1);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOQ2 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOQ2_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOQ, 114, 2);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOQ3 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOQ3_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOQ, 115, 3);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOQ4 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOQ4_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOQ, 116, 4);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOQ5 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOQ5_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOQ, 117, 5);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOQ6 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOQ6_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOQ, 118, 6);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GPIOQ7 interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOQ7_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_pin_interrupt(GPIOQ, 119, 7);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOR || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOR interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOR_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOR, 120);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOS || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOS interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOS_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOS, 128);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOT || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief GPIOT interrupt handler.
|
||||
*
|
||||
* @isr
|
||||
*/
|
||||
OSAL_IRQ_HANDLER(TIVA_GPIOT_HANDLER)
|
||||
{
|
||||
OSAL_IRQ_PROLOGUE();
|
||||
|
||||
ext_lld_serve_port_interrupt(GPIOT, 132);
|
||||
|
||||
OSAL_IRQ_EPILOGUE();
|
||||
}
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver exported functions. */
|
||||
/*===========================================================================*/
|
||||
|
@ -220,6 +822,14 @@ static void gpio_unlock(ioportid_t port, ioportmask_t mask)
|
|||
*/
|
||||
void _pal_lld_init(const PALConfig *config)
|
||||
{
|
||||
#if PAL_USE_CALLBACKS || PAL_USE_WAIT || defined(__DOXYGEN__)
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < TIVA_GPIO_PINS; i++) {
|
||||
_pal_init_event(i);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Enables all GPIO clocks.
|
||||
*/
|
||||
|
@ -292,6 +902,9 @@ void _pal_lld_init(const PALConfig *config)
|
|||
#if TIVA_HAS_GPIOT || defined(__DOXYGEN__)
|
||||
gpio_init(GPIOT, &config->PTData);
|
||||
#endif
|
||||
#if PAL_USE_CALLBACKS || PAL_USE_WAIT
|
||||
gpio_irq_enable();
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -362,6 +975,159 @@ void _pal_lld_setgroupmode(ioportid_t port, ioportmask_t mask, iomode_t mode)
|
|||
}
|
||||
}
|
||||
|
||||
#if PAL_USE_CALLBACKS || PAL_USE_WAIT || defined(__DOXYGEN__)
|
||||
/**
|
||||
* @brief Pad event enable.
|
||||
* @note Programming an unknown or unsupported mode is silently ignored.
|
||||
*
|
||||
* @param[in] port port identifier
|
||||
* @param[in] pad pad number within the port
|
||||
* @param[in] mode pad event mode
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void _pal_lld_enablepadevent(ioportid_t port,
|
||||
iopadid_t pad,
|
||||
ioeventmode_t mode)
|
||||
{
|
||||
//uint8_t portidx;
|
||||
uint32_t padmask;
|
||||
|
||||
//portidx = (((uint32_t)port - (uint32_t)GPIOA) >> 12) & 0x1FU;
|
||||
padmask = (1 << pad);
|
||||
|
||||
/* Disable interrupt before changing edge configuration.*/
|
||||
HWREG(port + GPIO_O_IM) &= ~padmask;
|
||||
|
||||
/* Configure pin to be edge-sensitive.*/
|
||||
HWREG(port + GPIO_O_IS) &= ~(1 << pad);
|
||||
|
||||
/* Configure edges */
|
||||
switch(mode & PAL_EVENT_MODE_EDGES_MASK) {
|
||||
case PAL_EVENT_MODE_BOTH_EDGES:
|
||||
HWREG(port + GPIO_O_IBE) |= padmask;
|
||||
break;
|
||||
case PAL_EVENT_MODE_RISING_EDGE:
|
||||
HWREG(port + GPIO_O_IBE) &= ~padmask;
|
||||
HWREG(port + GPIO_O_IEV) &= ~padmask;
|
||||
break;
|
||||
case PAL_EVENT_MODE_FALLING_EDGE:
|
||||
HWREG(port + GPIO_O_IBE) &= ~padmask;
|
||||
HWREG(port + GPIO_O_IEV) |= padmask;
|
||||
break;
|
||||
default:
|
||||
/* Interrupt is already disabled */
|
||||
break;
|
||||
}
|
||||
|
||||
if (mode & PAL_EVENT_MODE_EDGES_MASK) {
|
||||
/* Enable interrupt for this pad */
|
||||
HWREG(port + GPIO_O_IM) |= padmask;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Pad event disable.
|
||||
* @details This function disables previously programmed event callbacks.
|
||||
*
|
||||
* @param[in] port port identifier
|
||||
* @param[in] pad pad number within the port
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
void _pal_lld_disablepadevent(ioportid_t port, iopadid_t pad)
|
||||
{
|
||||
uint8_t portidx;
|
||||
uint8_t eventidx;
|
||||
|
||||
portidx = (((uint32_t)port - (uint32_t)GPIOA) >> 12) & 0x1FU;
|
||||
|
||||
eventidx = portidx * 8 + pad;
|
||||
|
||||
HWREG(port + GPIO_O_IM) &= ~(1 << pad);
|
||||
|
||||
#if PAL_USE_CALLBACKS || PAL_USE_WAIT
|
||||
/* Callback cleared and/or thread reset.*/
|
||||
_pal_clear_event(eventidx);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Disables GPIO IRQ sources.
|
||||
*/
|
||||
void pal_lld_disable_irqs(void)
|
||||
{
|
||||
#if TIVA_HAS_GPIOA
|
||||
nvicDisableVector(TIVA_GPIOA_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOB
|
||||
nvicDisableVector(TIVA_GPIOB_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOC
|
||||
nvicDisableVector(TIVA_GPIOC_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOD
|
||||
nvicDisableVector(TIVA_GPIOD_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOE
|
||||
nvicDisableVector(TIVA_GPIOE_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOF
|
||||
nvicDisableVector(TIVA_GPIOF_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOG
|
||||
nvicDisableVector(TIVA_GPIOG_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOH
|
||||
nvicDisableVector(TIVA_GPIOH_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOJ
|
||||
nvicDisableVector(TIVA_GPIOJ_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOK
|
||||
nvicDisableVector(TIVA_GPIOK_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOL
|
||||
nvicDisableVector(TIVA_GPIOL_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOM
|
||||
nvicDisableVector(TIVA_GPIOM_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPION
|
||||
nvicDisableVector(TIVA_GPION_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOP
|
||||
nvicDisableVector(TIVA_GPIOP0_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOP1_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOP2_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOP3_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOP4_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOP5_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOP6_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOP7_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOQ
|
||||
nvicDisableVector(TIVA_GPIOQ0_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOQ1_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOQ2_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOQ3_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOQ4_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOQ5_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOQ6_NUMBER);
|
||||
nvicDisableVector(TIVA_GPIOQ7_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOR
|
||||
nvicDisableVector(TIVA_GPIOR_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOS
|
||||
nvicDisableVector(TIVA_GPIOS_NUMBER);
|
||||
#endif
|
||||
#if TIVA_HAS_GPIOT
|
||||
nvicDisableVector(TIVA_GPIOT_NUMBER);
|
||||
#endif
|
||||
}
|
||||
#endif /* PAL_USE_CALLBACKS || PAL_USE_WAIT */
|
||||
|
||||
#endif /* HAL_USE_PAL */
|
||||
|
||||
/**
|
||||
|
|
|
@ -328,15 +328,255 @@ typedef uint32_t iomode_t;
|
|||
*/
|
||||
typedef uint32_t ioline_t;
|
||||
|
||||
/**
|
||||
* @brief Type of an event mode.
|
||||
*/
|
||||
typedef uint32_t ioeventmode_t;
|
||||
|
||||
/**
|
||||
* @brief Port Identifier.
|
||||
*/
|
||||
typedef uint32_t ioportid_t;
|
||||
|
||||
/**
|
||||
* @brief Type of an pad identifier.
|
||||
*/
|
||||
typedef uint32_t iopadid_t;
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @name Configuration options
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief GPIOA interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOA_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOA_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOB interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOB_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOB_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOC interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOC_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOC_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOD interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOD_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOD_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOE interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOE_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOE_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOF interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOF_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOF_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOG interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOG_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOG_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOH interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOH_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOH_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOJ interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOJ_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOJ_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOK interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOK_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOK_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOL interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOL_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOL_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOM interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOM_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOM_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPION interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPION_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPION_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOP0 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOP0_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOP0_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOP1 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOP1_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOP1_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOP2 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOP2_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOP2_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOP3 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOP3_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOP3_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOP4 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOP4_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOP4_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOP5 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOP5_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOP5_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOP6 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOP6_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOP6_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOP7 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOP7_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOP7_IRQ_PRIORITY 3
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @brief GPIOQ0 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOQ0_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOQ0_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOQ1 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOQ1_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOQ1_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOQ2 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOQ2_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOQ2_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOQ3 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOQ3_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOQ3_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOQ4 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOQ4_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOQ4_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOQ5 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOQ5_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOQ5_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOQ6 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOQ6_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOQ6_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOQ7 interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOQ7_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOQ7_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOR interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOR_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOR_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOS interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOS_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOS_IRQ_PRIORITY 3
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief GPIOT interrupt priority level setting.
|
||||
*/
|
||||
#if !defined(TIVA_EXT_GPIOT_IRQ_PRIORITY) || defined(__DOXYGEN__)
|
||||
#define TIVA_EXT_GPIOT_IRQ_PRIORITY 3
|
||||
#endif
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
@ -360,6 +600,166 @@ typedef uint32_t ioportid_t;
|
|||
#define GPIOS GPIO_PORTS_BASE
|
||||
#define GPIOT GPIO_PORTT_BASE
|
||||
|
||||
#if TIVA_HAS_GPIOA && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOA_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOA"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOB && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOB_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOB"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOC && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOC_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOC"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOD && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOD_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOD"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOE && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOE_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOE"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOF && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOF_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOF"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOG && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOG_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOG"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOH && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOH_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOH"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOJ && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOJ_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOJ"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOK && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOK_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOK"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOL && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOL_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOL"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOM && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOM_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOM"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPION && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPION_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPION"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOP0 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOP0_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOP0"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOP1 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOP1_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOP1"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOP2 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOP2_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOP2"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOP3 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOP3_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOP3"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOP4 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOP4_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOP4"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOP5 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOP5_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOP5"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOP6 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOP6_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOP6"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOP7 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOP7_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOP7"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOQ0 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOQ0_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOQ0"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOQ1 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOQ1_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOQ1"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOQ2 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOQ2_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOQ2"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOQ3 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOQ3_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOQ3"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOQ4 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOQ4_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOQ4"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOQ5 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOQ5_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOQ5"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOQ6 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOQ6_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOQ6"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOQ7 && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOQ7_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOQ7"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOR && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOR_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOR"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOS && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOS_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOS"
|
||||
#endif
|
||||
|
||||
#if TIVA_HAS_GPIOT && \
|
||||
!OSAL_IRQ_IS_VALID_PRIORITY(TIVA_EXT_GPIOT_IRQ_PRIORITY)
|
||||
#error "Invalid IRQ priority assigned to GPIOT"
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* I/O Ports Identifiers. */
|
||||
/*===========================================================================*/
|
||||
|
@ -661,12 +1061,59 @@ typedef uint32_t ioportid_t;
|
|||
#define pal_lld_clearpad(port, pad) \
|
||||
(HWREG((port) + (GPIO_O_DATA + ((1 << (pad)) << 2))) = 0)
|
||||
|
||||
/**
|
||||
* @brief Pad event enable.
|
||||
* @note Programming an unknown or unsupported mode is silently ignored.
|
||||
*
|
||||
* @param[in] port port identifier
|
||||
* @param[in] pad pad number within the port
|
||||
* @param[in] mode pad event mode
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
#define pal_lld_enablepadevent(port, pad, mode) \
|
||||
_pal_lld_enablepadevent(port, pad, mode)
|
||||
|
||||
/**
|
||||
* @brief Pad event disable.
|
||||
* @details This function disables previously programmed event callbacks.
|
||||
*
|
||||
* @param[in] port port identifier
|
||||
* @param[in] pad pad number within the port
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
#define pal_lld_disablepadevent(port, pad) \
|
||||
_pal_lld_disablepadevent(port, pad)
|
||||
|
||||
/**
|
||||
* @brief Returns a PAL event structure associated to a pad.
|
||||
*
|
||||
* @param[in] port port identifier
|
||||
* @param[in] pad pad number within the port
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
#define pal_lld_get_pad_event(port, pad) \
|
||||
&_pal_events[((((((uint32_t)port - (uint32_t)GPIOA) >> 12) & 0x1FU) * 8) + pad)];
|
||||
|
||||
/**
|
||||
* @brief Returns a PAL event structure associated to a line.
|
||||
*
|
||||
* @param[in] line line identifier
|
||||
*
|
||||
* @notapi
|
||||
*/
|
||||
#define pal_lld_get_line_event(line) \
|
||||
&_pal_events[((((((uint32_t)PAL_PORT(line) - (uint32_t)GPIOA) >> 12) & 0x1FU) * 8) + PAL_PAD(line))]
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
extern const PALConfig pal_default_config;
|
||||
extern palevent_t _pal_events[TIVA_GPIO_PINS];
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -676,6 +1123,13 @@ extern "C" {
|
|||
void _pal_lld_setgroupmode(ioportid_t port,
|
||||
ioportmask_t mask,
|
||||
iomode_t mode);
|
||||
#if PAL_USE_CALLBACKS || PAL_USE_WAIT
|
||||
void _pal_lld_enablepadevent(ioportid_t port,
|
||||
iopadid_t pad,
|
||||
ioeventmode_t mode);
|
||||
void _pal_lld_disablepadevent(ioportid_t port, iopadid_t pad);
|
||||
void pal_lld_disable_irqs(void);
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue