|
|
|
@ -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); |
|
|
|
|