stm32f0: usart: generalise initialisation

tags/0.1.0
S.J.R. van Schaik 7 years ago
parent 652a90aab8
commit eaa61e50af
  1. 47
      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);

Loading…
Cancel
Save