diff --git a/include/libopencm3/stm32/usart.h b/include/libopencm3/stm32/usart.h index df6bc089..cbf622c2 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 a2c9f16c..7995a527 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; +} +