Updated ext_lld to use TivaWare.

This commit is contained in:
marcoveeneman 2016-10-08 21:08:40 +02:00
parent 51abe9fbeb
commit b6d9cd409f
1 changed files with 36 additions and 36 deletions

View File

@ -34,11 +34,11 @@
* @brief Generic interrupt serving code for multiple pins per interrupt * @brief Generic interrupt serving code for multiple pins per interrupt
* handler. * handler.
*/ */
#define ext_lld_serve_port_interrupt(gpiop, start) \ #define ext_lld_serve_port_interrupt(gpio, start) \
do { \ do { \
uint32_t mis = gpiop->MIS; \ uint32_t mis = HWREG(gpio + GPIO_O_MIS); \
\ \
gpiop->ICR = mis; \ HWREG(gpio + GPIO_O_ICR) = mis; \
\ \
if (mis & (1 << 0)) { \ if (mis & (1 << 0)) { \
EXTD1.config->channels[start + 0].cb(&EXTD1, start + 0); \ EXTD1.config->channels[start + 0].cb(&EXTD1, start + 0); \
@ -89,7 +89,7 @@ EXTDriver EXTD1;
/* Driver local variables and types. */ /* Driver local variables and types. */
/*===========================================================================*/ /*===========================================================================*/
const ioportid_t gpio[] = const ioportid_t gpio_table[] =
{ {
#if TIVA_HAS_GPIOA #if TIVA_HAS_GPIOA
GPIOA, GPIOA,
@ -847,58 +847,58 @@ void ext_lld_stop(EXTDriver *extp)
} }
#if TIVA_HAS_GPIOA #if TIVA_HAS_GPIOA
GPIOA->IM = 0; HWREG(GPIOA + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOB #if TIVA_HAS_GPIOB
GPIOB->IM = 0; HWREG(GPIOB + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOC #if TIVA_HAS_GPIOC
GPIOC->IM = 0; HWREG(GPIOC + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOD #if TIVA_HAS_GPIOD
GPIOD->IM = 0; HWREG(GPIOD + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOE #if TIVA_HAS_GPIOE
GPIOE->IM = 0; HWREG(GPIOE + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOF #if TIVA_HAS_GPIOF
GPIOF->IM = 0; HWREG(GPIOF + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOG #if TIVA_HAS_GPIOG
GPIOG->IM = 0; HWREG(GPIOG + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOH #if TIVA_HAS_GPIOH
GPIOH->IM = 0; HWREG(GPIOH + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOJ #if TIVA_HAS_GPIOJ
GPIOJ->IM = 0; HWREG(GPIOJ + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOK #if TIVA_HAS_GPIOK
GPIOK->IM = 0; HWREG(GPIOK + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOL #if TIVA_HAS_GPIOL
GPIOL->IM = 0; HWREG(GPIOL + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOM #if TIVA_HAS_GPIOM
GPIOM->IM = 0; HWREG(GPIOM + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPION #if TIVA_HAS_GPION
GPION->IM = 0; HWREG(GPION + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOP #if TIVA_HAS_GPIOP
GPIOP->IM = 0; HWREG(GPIOP + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOQ #if TIVA_HAS_GPIOQ
GPIOQ->IM = 0; HWREG(GPIOQ + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOR #if TIVA_HAS_GPIOR
GPIOR->IM = 0; HWREG(GPIOR + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOS #if TIVA_HAS_GPIOS
GPIOS->IM = 0; HWREG(GPIOS + GPIO_O_IM) = 0;
#endif #endif
#if TIVA_HAS_GPIOT #if TIVA_HAS_GPIOT
GPIOT->IM = 0; HWREG(GPIOT + GPIO_O_IM) = 0;
#endif #endif
} }
@ -912,34 +912,34 @@ void ext_lld_stop(EXTDriver *extp)
*/ */
void ext_lld_channel_enable(EXTDriver *extp, expchannel_t channel) void ext_lld_channel_enable(EXTDriver *extp, expchannel_t channel)
{ {
GPIO_TypeDef *gpiop; uint32_t gpio;
uint8_t pin; uint8_t pin;
uint32_t im; uint32_t im;
pin = channel & 0x07; pin = channel & 0x07;
gpiop = gpio[channel >> 3]; gpio = gpio_table[channel >> 3];
/* Disable interrupts */ /* Disable interrupts */
im = gpiop->IM; im = HWREG(gpio + GPIO_O_IM);
gpiop->IM = 0; HWREG(gpio + GPIO_O_IM) = 0;
/* Configure pin to be edge-sensitive.*/ /* Configure pin to be edge-sensitive.*/
gpiop->IS &= ~(1 << pin); HWREG(gpio + GPIO_O_IS) &= ~(1 << pin);
/* Programming edge registers.*/ /* Programming edge registers.*/
if ((extp->config->channels[channel].mode & EXT_CH_MODE_EDGES_MASK) == if ((extp->config->channels[channel].mode & EXT_CH_MODE_EDGES_MASK) ==
EXT_CH_MODE_BOTH_EDGES) { EXT_CH_MODE_BOTH_EDGES) {
gpiop->IBE |= (1 << pin); HWREG(gpio + GPIO_O_IBE) |= (1 << pin);
} }
else if ((extp->config->channels[channel].mode & EXT_CH_MODE_EDGES_MASK) == else if ((extp->config->channels[channel].mode & EXT_CH_MODE_EDGES_MASK) ==
EXT_CH_MODE_FALLING_EDGE) { EXT_CH_MODE_FALLING_EDGE) {
gpiop->IBE &= ~(1 << pin); HWREG(gpio + GPIO_O_IBE) &= ~(1 << pin);
gpiop->IEV &= ~(1 << pin); HWREG(gpio + GPIO_O_IEV) &= ~(1 << pin);
} }
else if ((extp->config->channels[channel].mode & EXT_CH_MODE_EDGES_MASK) == else if ((extp->config->channels[channel].mode & EXT_CH_MODE_EDGES_MASK) ==
EXT_CH_MODE_RISING_EDGE) { EXT_CH_MODE_RISING_EDGE) {
gpiop->IBE &= ~(1 << pin); HWREG(gpio + GPIO_O_IBE) &= ~(1 << pin);
gpiop->IEV |= (1 << pin); HWREG(gpio + GPIO_O_IEV) |= (1 << pin);
} }
/* Programming interrupt and event registers.*/ /* Programming interrupt and event registers.*/
@ -953,7 +953,7 @@ void ext_lld_channel_enable(EXTDriver *extp, expchannel_t channel)
} }
/* Restore interrupts */ /* Restore interrupts */
gpiop->IM = im; HWREG(gpio + GPIO_O_IM) = im;
} }
/** /**
@ -967,13 +967,13 @@ void ext_lld_channel_enable(EXTDriver *extp, expchannel_t channel)
void ext_lld_channel_disable(EXTDriver *extp, expchannel_t channel) void ext_lld_channel_disable(EXTDriver *extp, expchannel_t channel)
{ {
(void)extp; (void)extp;
GPIO_TypeDef *gpiop; uint32_t gpio;
uint8_t pin; uint8_t pin;
pin = channel & 0x07; pin = channel & 0x07;
gpiop = gpio[channel >> 3]; gpio = gpio_table[channel >> 3];
gpiop->IM &= ~(1 << pin); HWREG(gpio + GPIO_O_IM) &= ~(1 << pin);
} }
#endif /* HAL_USE_EXT */ #endif /* HAL_USE_EXT */