From 1ce2083f9a0fcf1cfbb10de0fb3ed44b460a5cc7 Mon Sep 17 00:00:00 2001 From: James Munns Date: Fri, 5 Dec 2025 14:57:25 +0100 Subject: Enable DMA interrupts in constructors --- embassy-mcxa/src/lpuart/mod.rs | 22 ++++++++++++++++++---- examples/mcxa/src/bin/lpuart_dma.rs | 6 ------ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/embassy-mcxa/src/lpuart/mod.rs b/embassy-mcxa/src/lpuart/mod.rs index 6e60164e6..39fecb413 100644 --- a/embassy-mcxa/src/lpuart/mod.rs +++ b/embassy-mcxa/src/lpuart/mod.rs @@ -1187,10 +1187,14 @@ impl<'a, T: Instance, C: DmaChannelTrait> LpuartTxDma<'a, T, C> { // Initialize LPUART with TX enabled, RX disabled, no flow control Lpuart::::init::(true, false, false, false, config)?; + // Enable interrupt + let tx_dma = DmaChannel::new(tx_dma_ch); + tx_dma.enable_interrupt(); + Ok(Self { info: T::info(), _tx_pin: tx_pin, - tx_dma: DmaChannel::new(tx_dma_ch), + tx_dma, _instance: core::marker::PhantomData, }) } @@ -1299,10 +1303,14 @@ impl<'a, T: Instance, C: DmaChannelTrait> LpuartRxDma<'a, T, C> { // Initialize LPUART with TX disabled, RX enabled, no flow control Lpuart::::init::(false, true, false, false, config)?; + // Enable dma interrupt + let rx_dma = DmaChannel::new(rx_dma_ch); + rx_dma.enable_interrupt(); + Ok(Self { info: T::info(), _rx_pin: rx_pin, - rx_dma: DmaChannel::new(rx_dma_ch), + rx_dma, _instance: core::marker::PhantomData, }) } @@ -1476,17 +1484,23 @@ impl<'a, T: Instance, TxC: DmaChannelTrait, RxC: DmaChannelTrait> LpuartDma<'a, // Initialize LPUART with both TX and RX enabled, no flow control Lpuart::::init::(true, true, false, false, config)?; + // Enable DMA interrupts + let tx_dma = DmaChannel::new(tx_dma_ch); + let rx_dma = DmaChannel::new(rx_dma_ch); + tx_dma.enable_interrupt(); + rx_dma.enable_interrupt(); + Ok(Self { tx: LpuartTxDma { info: T::info(), _tx_pin: tx_pin, - tx_dma: DmaChannel::new(tx_dma_ch), + tx_dma, _instance: core::marker::PhantomData, }, rx: LpuartRxDma { info: T::info(), _rx_pin: rx_pin, - rx_dma: DmaChannel::new(rx_dma_ch), + rx_dma, _instance: core::marker::PhantomData, }, }) diff --git a/examples/mcxa/src/bin/lpuart_dma.rs b/examples/mcxa/src/bin/lpuart_dma.rs index 5497f8646..1fc6595e6 100644 --- a/examples/mcxa/src/bin/lpuart_dma.rs +++ b/examples/mcxa/src/bin/lpuart_dma.rs @@ -32,12 +32,6 @@ async fn main(_spawner: Spawner) { defmt::info!("LPUART DMA example starting..."); - // Enable DMA interrupts (per-channel, as needed) - unsafe { - cortex_m::peripheral::NVIC::unmask(pac::Interrupt::DMA_CH0); - cortex_m::peripheral::NVIC::unmask(pac::Interrupt::DMA_CH1); - } - // Create UART configuration let config = Config { baudrate_bps: 115_200, -- cgit