diff options
Diffstat (limited to 'stm32/app/usart.c')
-rw-r--r-- | stm32/app/usart.c | 175 |
1 files changed, 0 insertions, 175 deletions
diff --git a/stm32/app/usart.c b/stm32/app/usart.c deleted file mode 100644 index 28676a0..0000000 --- a/stm32/app/usart.c +++ /dev/null @@ -1,175 +0,0 @@ -#include "project.h" - -#define BUFFER_SIZE 256 - - -#define USART1_TX GPIO_USART1_TX -#define USART1_TX_PORT GPIOA - -#define USART1_RX GPIO_USART1_RX -#define USART1_RX_PORT GPIOA - -#define USART3_TX GPIO_USART3_TX -#define USART3_TX_PORT GPIOB - -#define USART3_RX GPIO_USART3_RX -#define USART3_RX_PORT GPIOB - - - -ring_t rx1_ring; -static uint8_t rx1_ring_buf[BUFFER_SIZE]; - -ring_t tx1_ring; -static uint8_t tx1_ring_buf[BUFFER_SIZE]; - -ring_t rx3_ring; -static uint8_t rx3_ring_buf[BUFFER_SIZE]; - -ring_t tx3_ring; -static uint8_t tx3_ring_buf[BUFFER_SIZE]; - -void -usart1_isr (void) -{ - uint8_t data; - - /* Check if we were called because of RXNE. */ - if (((USART_CR1 (USART1) & USART_CR1_RXNEIE) != 0) && - ((USART_SR (USART1) & USART_SR_RXNE) != 0)) { - data = usart_recv (USART1); - ring_write_byte (&rx1_ring, data); - } - - /* Check if we were called because of TXE. */ - if (((USART_CR1 (USART1) & USART_CR1_TXEIE) != 0) && - ((USART_SR (USART1) & USART_SR_TXE) != 0)) { - - if (ring_read_byte (&tx1_ring, &data)) { - /*No more data, Disable the TXE interrupt, it's no longer needed. */ - usart_disable_tx_interrupt (USART1); - } else - usart_send_blocking (USART1, data); - } - -} - -void -usart1_queue (uint8_t d) -{ - ring_write_byte (&tx1_ring, d); - usart_enable_tx_interrupt (USART1); -} - -void -usart1_drain (void) -{ - while (!ring_empty (&tx1_ring)); -} - - -int -usart1_write (char *ptr, int len, int blocking) -{ - int ret; - - ret = ring_write (&tx1_ring, (uint8_t *) ptr, len, blocking); - usart_enable_tx_interrupt (USART1); - return ret; -} - - -void -usart3_isr (void) -{ - uint8_t data; - - /* Check if we were called because of RXNE. */ - if (((USART_CR1 (USART3) & USART_CR1_RXNEIE) != 0) && - ((USART_SR (USART3) & USART_SR_RXNE) != 0)) { - data = usart_recv (USART3); - ring_write_byte (&rx3_ring, data); - } - - /* Check if we were called because of TXE. */ - if (((USART_CR1 (USART3) & USART_CR1_TXEIE) != 0) && - ((USART_SR (USART3) & USART_SR_TXE) != 0)) { - - if (ring_read_byte (&tx3_ring, &data)) { - /*No more data, Disable the TXE interrupt, it's no longer needed. */ - usart_disable_tx_interrupt (USART3); - } else - usart_send_blocking (USART3, data); - } - -} - -void -usart3_queue (uint8_t d) -{ - ring_write_byte (&tx3_ring, d); - usart_enable_tx_interrupt (USART3); -} - -void -usart3_drain (void) -{ - while (!ring_empty (&tx3_ring)); -} - - -int -usart3_write (char *ptr, int len, int blocking) -{ - int ret; - - ret = ring_write (&tx3_ring, (uint8_t *) ptr, len, blocking); - usart_enable_tx_interrupt (USART3); - return ret; -} - - -void -usart_init (void) -{ - ring_init (&rx1_ring, rx1_ring_buf, sizeof (rx1_ring_buf)); - ring_init (&tx1_ring, tx1_ring_buf, sizeof (tx1_ring_buf)); - - nvic_enable_irq (NVIC_USART1_IRQ); - - MAP_AF (USART1_TX); - MAP_AF_PU (USART1_RX); - - - usart_set_baudrate (USART1, 57600); - usart_set_databits (USART1, 8); - usart_set_stopbits (USART1, USART_STOPBITS_1); - usart_set_parity (USART1, USART_PARITY_NONE); - usart_set_flow_control (USART1, USART_FLOWCONTROL_NONE); - usart_set_mode (USART1, USART_MODE_TX_RX); - - USART_CR1 (USART1) |= USART_CR1_RXNEIE; - - usart_enable (USART1); - - - ring_init (&rx3_ring, rx3_ring_buf, sizeof (rx3_ring_buf)); - ring_init (&tx3_ring, tx3_ring_buf, sizeof (tx3_ring_buf)); - - - nvic_enable_irq (NVIC_USART3_IRQ); - - MAP_AF (USART3_TX); - MAP_AF_PU (USART3_RX); - - usart_set_baudrate (USART3, 9600); - usart_set_databits (USART3, 8); - usart_set_stopbits (USART3, USART_STOPBITS_1); - usart_set_parity (USART3, USART_PARITY_NONE); - usart_set_flow_control (USART3, USART_FLOWCONTROL_NONE); - usart_set_mode (USART3, USART_MODE_TX_RX); - - USART_CR1 (USART3) |= USART_CR1_RXNEIE; - - usart_enable (USART3); -} |