summaryrefslogtreecommitdiffstats
path: root/app/usart.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/usart.c')
-rw-r--r--app/usart.c163
1 files changed, 122 insertions, 41 deletions
diff --git a/app/usart.c b/app/usart.c
index 9b2a454..e826a22 100644
--- a/app/usart.c
+++ b/app/usart.c
@@ -3,68 +3,135 @@
#define BUFFER_SIZE 256
#define BIG_BUFFER_SIZE 600
-volatile ring_t rx6_ring;
-static uint8_t rx6_ring_buf[BUFFER_SIZE];
-volatile ring_t tx6_ring;
-static uint8_t tx6_ring_buf[BUFFER_SIZE];
+volatile ring_t rx3_ring;
+static uint8_t rx3_ring_buf[BUFFER_SIZE];
+volatile ring_t tx3_ring;
+static uint8_t tx3_ring_buf[BUFFER_SIZE];
-#define TX6 GPIO6
-#define TX6_PORT GPIOC
+volatile ring_t rx1_ring;
+static uint8_t rx1_ring_buf[BUFFER_SIZE];
-#define RX6 GPIO7
-#define RX6_PORT GPIOC
+volatile ring_t tx1_ring;
+static uint8_t tx1_ring_buf[BUFFER_SIZE];
-void usart6_isr (void)
+#define TX1 GPIO9
+#define TX1_PORT GPIOA
+
+#define RX1 GPIO10
+#define RX1_PORT GPIOA
+
+#define TX3 GPIO10
+#define TX3_PORT GPIOC
+
+#define RX3 GPIO11
+#define RX3_PORT GPIOC
+
+
+void usart3_isr (void)
{
uint8_t data;
/* Check if we were called because of RXNE. */
- if (((USART_CR1 (USART6) & USART_CR1_RXNEIE) != 0) &&
- ((USART_SR (USART6) & USART_SR_RXNE) != 0)) {
+ if (((USART_CR1 (USART3) & USART_CR1_RXNEIE) != 0) &&
+ ((USART_SR (USART3) & USART_SR_RXNE) != 0)) {
/* Retrieve the data from the peripheral. */
- data = usart_recv (USART6);
+ data = usart_recv (USART3);
- ring_write_byte (&rx6_ring, data);
+ ring_write_byte (&rx3_ring, data);
+ //usart6_queue(data);
}
/* Check if we were called because of TXE. */
- if (((USART_CR1 (USART6) & USART_CR1_TXEIE) != 0) &&
- ((USART_SR (USART6) & USART_SR_TXE) != 0)) {
+ if (((USART_CR1 (USART3) & USART_CR1_TXEIE) != 0) &&
+ ((USART_SR (USART3) & USART_SR_TXE) != 0)) {
- if (ring_read_byte (&tx6_ring, &data)) {
+ if (ring_read_byte (&tx3_ring, &data)) {
/*No more data, Disable the TXE interrupt, it's no longer needed. */
- usart_disable_tx_interrupt (USART6);
+ usart_disable_tx_interrupt (USART3);
} else
- usart_send_blocking (USART6, data);
+ usart_send_blocking (USART3, data);
}
}
void
-usart6_queue (uint8_t d)
+usart3_queue (uint8_t d)
{
- ring_write_byte (&tx6_ring, d);
- usart_enable_tx_interrupt (USART6);
+ ring_write_byte (&tx3_ring, d);
+ usart_enable_tx_interrupt (USART3);
}
void
-usart6_drain (void)
+usart3_drain (void)
{
- while (!ring_empty (&tx6_ring));
+ while (!ring_empty (&tx3_ring));
}
int
-usart6_write (char *ptr, int len, int blocking)
+usart3_write (char *ptr, int len, int blocking)
{
int ret;
- ret = ring_write (&tx6_ring, (uint8_t *) ptr, len, blocking);
- usart_enable_tx_interrupt (USART6);
+ ret = ring_write (&tx3_ring, (uint8_t *) ptr, len, blocking);
+ usart_enable_tx_interrupt (USART3);
+ return ret;
+}
+
+
+
+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)) {
+
+ /* Retrieve the data from the peripheral. */
+ 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;
}
@@ -73,28 +140,42 @@ void
usart_init (void)
{
- ring_init (&rx6_ring, rx6_ring_buf, sizeof (rx6_ring_buf));
- ring_init (&tx6_ring, tx6_ring_buf, sizeof (tx6_ring_buf));
+ ring_init (&rx3_ring, rx3_ring_buf, sizeof (rx3_ring_buf));
+ ring_init (&tx3_ring, tx3_ring_buf, sizeof (tx3_ring_buf));
+
+ MAP_AF (TX3, GPIO_AF7);
+ MAP_AF_PU (RX3, GPIO_AF7);
+
+ 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_enable_rx_interrupt (USART3);
- /* Map pins, and set usart2 to have pull ups */
+ usart_enable (USART3);
- MAP_AF (TX6, GPIO_AF8);
- MAP_AF_PU (RX6, GPIO_AF8);
+ nvic_enable_irq (NVIC_USART3_IRQ);
- usart_set_baudrate (USART6, 38400);
- usart_set_databits (USART6, 8);
- usart_set_stopbits (USART6, USART_STOPBITS_1);
- usart_set_parity (USART6, USART_PARITY_NONE);
- usart_set_flow_control (USART6, USART_FLOWCONTROL_NONE);
- usart_set_mode (USART6, USART_MODE_TX_RX);
+ ring_init (&rx1_ring, rx1_ring_buf, sizeof (rx1_ring_buf));
+ ring_init (&tx1_ring, tx1_ring_buf, sizeof (tx1_ring_buf));
- usart_enable_rx_interrupt (USART6);
+ MAP_AF (TX1, GPIO_AF7);
+ MAP_AF_PU (RX1, GPIO_AF7);
- /* Finally enable the USARTs. */
- usart_enable (USART6);
+ usart_set_baudrate (USART1, 38400);
+ 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);
- nvic_enable_irq (NVIC_USART6_IRQ);
+ usart_enable_rx_interrupt (USART1);
+ usart_enable (USART1);
+ nvic_enable_irq (NVIC_USART1_IRQ);
}