From eaa61e50af3b52a078543b2574d0cee0f63eb06a Mon Sep 17 00:00:00 2001 From: "S.J.R. van Schaik" Date: Tue, 18 Jul 2017 13:30:35 +0200 Subject: [PATCH] stm32f0: usart: generalise initialisation --- source/drivers/usart_console.c | 47 ++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/source/drivers/usart_console.c b/source/drivers/usart_console.c index 65794aa..e29a947 100644 --- a/source/drivers/usart_console.c +++ b/source/drivers/usart_console.c @@ -130,28 +130,43 @@ static ssize_t usart_write(void *cookie, const char *buf, size_t n) return i; } -static void usart_init(void) +static int usart_get_irq_no(unsigned *irq_no, unsigned dev) { + if (irq_no) + return -1; + + switch (dev) { + case USART1: *irq_no = NVIC_USART1_IRQ; break; + case USART2: *irq_no = NVIC_USART2_IRQ; break; + default: return -1; + } + + return 0; +} + +static int usart_init(struct usart_console *console) +{ + unsigned irq_no; + + if (usart_get_irq_no(&irq_no, console->dev) < 0) + return -1; + /* Set up clocks for USART 1 */ rcc_periph_clock_enable(RCC_GPIOA); rcc_periph_clock_enable(RCC_USART1); - /* Set up GPIOs for USART 1 */ - gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO9 | GPIO10); - gpio_set_af(GPIOA, GPIO_AF1, GPIO9 | GPIO10); - gpio_set_af(GPIOA, GPIO_AF1, GPIO10); - - usart_set_baudrate(USART1, 115200); - usart_set_databits(USART1, 8); - usart_set_parity(USART1, USART_PARITY_NONE); - usart_set_stopbits(USART1, USART_CR2_STOP_1_0BIT); - usart_set_mode(USART1, USART_MODE_TX_RX); - usart_set_flow_control(USART1, USART_FLOWCONTROL_NONE); + usart_set_baudrate(console->dev, 115200); + usart_set_databits(console->dev, 8); + usart_set_parity(console->dev, USART_PARITY_NONE); + usart_set_stopbits(console->dev, USART_CR2_STOP_1_0BIT); + usart_set_mode(console->dev, USART_MODE_TX_RX); + usart_set_flow_control(console->dev, USART_FLOWCONTROL_NONE); - nvic_enable_irq(NVIC_USART1_IRQ); + nvic_enable_irq(irq_no); + usart_enable(console->dev); + usart_enable_rx_interrupt(console->dev); - usart_enable(USART1); - usart_enable_rx_interrupt(USART1); + return 0; } void console_init(void) @@ -173,7 +188,7 @@ void console_init(void) user_console.cur = 0; user_console.next = 0; usart1 = &user_console; - usart_init(); + usart_init(&user_console); stdin = fopencookie(&user_console, "r", console_in); stdout = fopencookie(&user_console, "w", console_out);