aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libopencm3/stm32/usart.h4
-rw-r--r--lib/stm32/usart.c21
2 files changed, 25 insertions, 0 deletions
diff --git a/include/libopencm3/stm32/usart.h b/include/libopencm3/stm32/usart.h
index df6bc08..cbf622c 100644
--- a/include/libopencm3/stm32/usart.h
+++ b/include/libopencm3/stm32/usart.h
@@ -308,5 +308,9 @@ void usart_wait_send_ready(u32 usart);
void usart_wait_recv_ready(u32 usart);
void usart_send_blocking(u32 usart, u16 data);
u16 usart_recv_blocking(u32 usart);
+void usart_enable_rx_dma(u32 usart);
+void usart_disable_rx_dma(u32 usart);
+void usart_enable_tx_dma(u32 usart);
+void usart_disable_tx_dma(u32 usart);
#endif
diff --git a/lib/stm32/usart.c b/lib/stm32/usart.c
index a2c9f16..7995a52 100644
--- a/lib/stm32/usart.c
+++ b/lib/stm32/usart.c
@@ -148,3 +148,24 @@ u16 usart_recv_blocking(u32 usart)
return usart_recv(usart);
}
+
+void usart_enable_rx_dma(u32 usart)
+{
+ USART_CR3(usart) |= USART_CR3_DMAR;
+}
+
+void usart_disable_rx_dma(u32 usart)
+{
+ USART_CR3(usart) &= ~USART_CR3_DMAR;
+}
+
+void usart_enable_tx_dma(u32 usart)
+{
+ USART_CR3(usart) |= USART_CR3_DMAT;
+}
+
+void usart_disable_tx_dma(u32 usart)
+{
+ USART_CR3(usart) &= ~USART_CR3_DMAT;
+}
+