From adddf9e418dffd53405284994cabf4d46820b954 Mon Sep 17 00:00:00 2001 From: Alexandru Gagniuc Date: Fri, 17 May 2013 19:55:08 -0500 Subject: [PATCH] lm4f: Update examples to the new GPIO API We updated the GPIO API to use the AHB bus; however the AHP aperture for GPIO ports A through J needs to be explicitly enabled at runtime. Accessing the AHB aperture otherwise hardfaults. To make the examples work again, we call gpio_enable_ahb_aperture() at the start of main(). Since we're at it, we also take out the ugly register accesses in favor of the new gpio functions. Signed-off-by: Alexandru Gagniuc --- .../miniblink/miniblink.c | 41 +++++++------------ .../uart_echo_interrupt/uart_echo_interrupt.c | 9 ++-- .../uart_echo_simple/uart_echo_simple.c | 11 ++--- 3 files changed, 22 insertions(+), 39 deletions(-) diff --git a/examples/lm4f/stellaris-ek-lm4f120xl/miniblink/miniblink.c b/examples/lm4f/stellaris-ek-lm4f120xl/miniblink/miniblink.c index 89aca4f..aa9e7ba 100644 --- a/examples/lm4f/stellaris-ek-lm4f120xl/miniblink/miniblink.c +++ b/examples/lm4f/stellaris-ek-lm4f120xl/miniblink/miniblink.c @@ -95,8 +95,8 @@ static void gpio_setup(void) periph_clock_enable(RCC_GPIOF); const u32 outpins = (LED_R | LED_G | LED_B); - GPIO_DIR(RGB_PORT) |= outpins; /* Configure outputs. */ - GPIO_DEN(RGB_PORT) |= outpins; /* Enable digital function on outputs. */ + gpio_mode_setup(RGB_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, outpins); + gpio_set_output_config(RGB_PORT, GPIO_OTYPE_PP, GPIO_DRIVE_2MA, outpins); /* * Now take care of our buttons @@ -104,20 +104,12 @@ static void gpio_setup(void) const u32 btnpins = USR_SW1 | USR_SW2; /* - * PF0 is locked by default. We need to unlock the GPIO_CR register, - * then enable PF0 commit. After we do this, we can setup PF0. If we - * don't do this, any configuration done to PF0 is lost, and we will not - * have a PF0 interrupt. + * PF0 is a locked by default. We need to unlock it before we can + * re-purpose it as a GPIO pin. */ - GPIO_LOCK(GPIOF) = 0x4C4F434B; - GPIO_CR(GPIOF) |= USR_SW2; - - /* Configure pins as inputs. */ - GPIO_DIR(GPIOF) &= ~btnpins; - /* Enable digital function on the pins. */ - GPIO_DEN(GPIOF) |= btnpins; - /* Pull-up the pins. We don't have an external pull-up */ - GPIO_PUR(GPIOF) |= btnpins; + gpio_unlock_commit(GPIOF, USR_SW2); + /* Configure pins as inputs, with pull-up. */ + gpio_mode_setup(GPIOF, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, btnpins); } /* @@ -127,14 +119,10 @@ static void gpio_setup(void) static void irq_setup(void) { const u32 btnpins = USR_SW1 | USR_SW2; - /* Configure interrupt as edge-sensitive */ - GPIO_IS(GPIOF) &= ~btnpins; - /* Interrupt only respond to rising or falling edge (single-edge) */ - GPIO_IBE(GPIOF) &= ~btnpins; /* Trigger interrupt on rising-edge (when button is depressed) */ - GPIO_IEV(GPIOF) |= btnpins; + gpio_configure_trigger(GPIOF, GPIO_TRIG_EDGE_RISE, btnpins); /* Finally, Enable interrupt */ - GPIO_IM(GPIOF) |= btnpins; + gpio_enable_interrupts(GPIOF, btnpins); /* Enable the interrupt in the NVIC as well */ nvic_enable_irq(NVIC_GPIOF_IRQ); } @@ -149,6 +137,7 @@ static void delay(void) int main(void) { + gpio_enable_ahb_aperture(); clock_setup(); gpio_setup(); irq_setup(); @@ -185,7 +174,7 @@ int main(void) void gpiof_isr(void) { - if (GPIO_RIS(GPIOF) & USR_SW1) { + if (gpio_is_interrupt_source(GPIOF, USR_SW1)) { /* SW1 was just depressed */ bypass = !bypass; if (bypass) { @@ -201,10 +190,10 @@ void gpiof_isr(void) rcc_change_pll_divisor(plldiv[ipll]); } /* Clear interrupt source */ - GPIO_ICR(GPIOF) = USR_SW1; + gpio_clear_interrupt_flag(GPIOF, USR_SW1); } - - if (GPIO_RIS(GPIOF) & USR_SW2) { + + if (gpio_is_interrupt_source(GPIOF, USR_SW2)) { /* SW2 was just depressed */ if (!bypass) { if (plldiv[++ipll] == 0) @@ -212,6 +201,6 @@ void gpiof_isr(void) rcc_change_pll_divisor(plldiv[ipll]); } /* Clear interrupt source */ - GPIO_ICR(GPIOF) = USR_SW2; + gpio_clear_interrupt_flag(GPIOF, USR_SW2); } } diff --git a/examples/lm4f/stellaris-ek-lm4f120xl/uart_echo_interrupt/uart_echo_interrupt.c b/examples/lm4f/stellaris-ek-lm4f120xl/uart_echo_interrupt/uart_echo_interrupt.c index a6eba2c..79a893e 100644 --- a/examples/lm4f/stellaris-ek-lm4f120xl/uart_echo_interrupt/uart_echo_interrupt.c +++ b/examples/lm4f/stellaris-ek-lm4f120xl/uart_echo_interrupt/uart_echo_interrupt.c @@ -25,14 +25,10 @@ static void uart_setup(void) { - u32 pins; /* Enable GPIOA in run mode. */ periph_clock_enable(RCC_GPIOA); - /* Configure PA0 and PA1 as alternate function pins */ - pins = GPIO0 | GPIO1; - GPIO_AFSEL(GPIOA) |= pins; - GPIO_DEN(GPIOA) |= pins; - /* PA0 and PA1 are muxed to UART0 during power on, by default */ + /* Mux PA0 and PA1 to UART0 (alternate function 1) */ + gpio_set_af(GPIOA, 1, GPIO0 | GPIO1); /* Enable the UART clock */ periph_clock_enable(RCC_UART0); @@ -79,6 +75,7 @@ void uart0_isr(void) int main(void) { + gpio_enable_ahb_aperture(); uart_setup(); uart_irq_setup(); diff --git a/examples/lm4f/stellaris-ek-lm4f120xl/uart_echo_simple/uart_echo_simple.c b/examples/lm4f/stellaris-ek-lm4f120xl/uart_echo_simple/uart_echo_simple.c index 61cbc22..04b355d 100644 --- a/examples/lm4f/stellaris-ek-lm4f120xl/uart_echo_simple/uart_echo_simple.c +++ b/examples/lm4f/stellaris-ek-lm4f120xl/uart_echo_simple/uart_echo_simple.c @@ -24,14 +24,10 @@ static void uart_setup(void) { - u32 pins; /* Enable GPIOA in run mode. */ periph_clock_enable(RCC_GPIOA); - /* Configure PA0 and PA1 as alternate function pins */ - pins = GPIO0 | GPIO1; - GPIO_AFSEL(GPIOA) |= pins; - GPIO_DEN(GPIOA) |= pins; - /* PA0 and PA1 are muxed to UART0 during power on, by default */ + /* Mux PA0 and PA1 to UART0 (alternate function 1) */ + gpio_set_af(GPIOA, 1, GPIO0 | GPIO1); /* Enable the UART clock */ periph_clock_enable(RCC_UART0); @@ -54,7 +50,8 @@ static void uart_setup(void) int main(void) { u8 rx; - + + gpio_enable_ahb_aperture(); uart_setup(); /*