From 035ad220df784f71e2424c86d5ffe015c764ae69 Mon Sep 17 00:00:00 2001 From: Paul Selkirk Date: Tue, 21 Jun 2016 16:05:48 -0400 Subject: Sudden realization that initializing the uart from the ekermit library is Just Wrong. --- libraries/thirdparty/ekermit/stm-kermit.c | 24 ++---------------------- projects/ekermit-test/ekermit-test.c | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/libraries/thirdparty/ekermit/stm-kermit.c b/libraries/thirdparty/ekermit/stm-kermit.c index 09eca96..870730e 100644 --- a/libraries/thirdparty/ekermit/stm-kermit.c +++ b/libraries/thirdparty/ekermit/stm-kermit.c @@ -55,27 +55,8 @@ #undef SUCCESS #include "stm-uart.h" -#include "ringbuf.h" #include "stm-kermit.h" -static ringbuf_t uart_ringbuf; - -/* current character received from UART */ -static uint8_t uart_rx; - -/* Callback for HAL_UART_Receive_IT(). Must be public. */ -void HAL_UART1_RxCpltCallback(UART_HandleTypeDef *huart) -{ - ringbuf_write_char(&uart_ringbuf, uart_rx); - HAL_UART_Receive_IT(huart, &uart_rx, 1); -} - -static void uart_init(void) -{ - ringbuf_init(&uart_ringbuf); - HAL_UART_Receive_IT(&huart_mgmt, &uart_rx, 1); -} - #ifdef DEBUG /* This is public because it's prototyped in debug.h */ void @@ -181,11 +162,10 @@ readpkt(struct k_data * k, UCHAR *p, int len) p2 = p; #endif - uart_init(); - while (1) { /* wait for the next character */ - while (ringbuf_read_char(&uart_ringbuf, &x) == 0) { ; } + extern int uart1_read_char(uint8_t *c); + while (uart1_read_char(&x) == 0) { ; } c = (k->parity) ? x & 0x7f : x & 0xff; /* Strip parity */ diff --git a/projects/ekermit-test/ekermit-test.c b/projects/ekermit-test/ekermit-test.c index 3b71a69..ba9a2f8 100644 --- a/projects/ekermit-test/ekermit-test.c +++ b/projects/ekermit-test/ekermit-test.c @@ -44,6 +44,8 @@ #include "stm-sdram.h" #include "sdram-malloc.h" #include "stm-kermit.h" +#include "stm-uart.h" +#include "ringbuf.h" /* alignment for file allocations */ #define ALIGN 16 @@ -62,6 +64,29 @@ typedef struct { filetab_t filetab[NFILE], *curfile; int nfile; +static ringbuf_t uart_ringbuf; + +/* current character received from UART */ +static uint8_t uart_rx; + +/* Callback for HAL_UART_Receive_IT(). Must be public. */ +void HAL_UART1_RxCpltCallback(UART_HandleTypeDef *huart) +{ + ringbuf_write_char(&uart_ringbuf, uart_rx); + HAL_UART_Receive_IT(huart, &uart_rx, 1); +} + +void uart1_init(void) +{ + ringbuf_init(&uart_ringbuf); + HAL_UART_Receive_IT(&huart_mgmt, &uart_rx, 1); +} + +int uart1_read_char(uint8_t *c) +{ + return ringbuf_read_char(&uart_ringbuf, c); +} + #ifdef DUMP static void hexdump(uint8_t *buf, int len) { @@ -149,6 +174,7 @@ int main(void) { stm_init(); sdram_init(); + uart1_init(); while (1) { memset((void *)filetab, 0, sizeof(filetab)); -- cgit v1.2.3