diff options
Diffstat (limited to 'examples/src/bin/dma_memset.rs')
| -rw-r--r-- | examples/src/bin/dma_memset.rs | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/examples/src/bin/dma_memset.rs b/examples/src/bin/dma_memset.rs index 8a1636e57..9fbba85e9 100644 --- a/examples/src/bin/dma_memset.rs +++ b/examples/src/bin/dma_memset.rs | |||
| @@ -12,10 +12,9 @@ | |||
| 12 | 12 | ||
| 13 | use embassy_executor::Spawner; | 13 | use embassy_executor::Spawner; |
| 14 | use embassy_mcxa::clocks::config::Div8; | 14 | use embassy_mcxa::clocks::config::Div8; |
| 15 | use embassy_mcxa::dma::{DmaChannel, DmaCh0InterruptHandler}; | 15 | use embassy_mcxa::dma::{DmaCh0InterruptHandler, DmaChannel}; |
| 16 | use embassy_mcxa::bind_interrupts; | ||
| 17 | use embassy_mcxa::lpuart::{Blocking, Config, Lpuart, LpuartTx}; | 16 | use embassy_mcxa::lpuart::{Blocking, Config, Lpuart, LpuartTx}; |
| 18 | use embassy_mcxa::pac; | 17 | use embassy_mcxa::{bind_interrupts, pac}; |
| 19 | use {defmt_rtt as _, embassy_mcxa as hal, panic_probe as _}; | 18 | use {defmt_rtt as _, embassy_mcxa as hal, panic_probe as _}; |
| 20 | 19 | ||
| 21 | // Bind DMA channel 0 interrupt using Embassy-style macro | 20 | // Bind DMA channel 0 interrupt using Embassy-style macro |
| @@ -92,8 +91,7 @@ async fn main(_spawner: Spawner) { | |||
| 92 | let lpuart = Lpuart::new_blocking(p.LPUART2, p.P2_2, p.P2_3, config).unwrap(); | 91 | let lpuart = Lpuart::new_blocking(p.LPUART2, p.P2_2, p.P2_3, config).unwrap(); |
| 93 | let (mut tx, _rx) = lpuart.split(); | 92 | let (mut tx, _rx) = lpuart.split(); |
| 94 | 93 | ||
| 95 | tx.blocking_write(b"EDMA memset example begin.\r\n\r\n") | 94 | tx.blocking_write(b"EDMA memset example begin.\r\n\r\n").unwrap(); |
| 96 | .unwrap(); | ||
| 97 | 95 | ||
| 98 | // Initialize buffers | 96 | // Initialize buffers |
| 99 | unsafe { | 97 | unsafe { |
| @@ -133,19 +131,26 @@ async fn main(_spawner: Spawner) { | |||
| 133 | 131 | ||
| 134 | // Reset channel state | 132 | // Reset channel state |
| 135 | t.ch_csr().write(|w| { | 133 | t.ch_csr().write(|w| { |
| 136 | w.erq().disable() | 134 | w.erq() |
| 137 | .earq().disable() | 135 | .disable() |
| 138 | .eei().no_error() | 136 | .earq() |
| 139 | .ebw().disable() | 137 | .disable() |
| 140 | .done().clear_bit_by_one() | 138 | .eei() |
| 139 | .no_error() | ||
| 140 | .ebw() | ||
| 141 | .disable() | ||
| 142 | .done() | ||
| 143 | .clear_bit_by_one() | ||
| 141 | }); | 144 | }); |
| 142 | t.ch_es().write(|w| w.bits(0)); | 145 | t.ch_es().write(|w| w.bits(0)); |
| 143 | t.ch_int().write(|w| w.int().clear_bit_by_one()); | 146 | t.ch_int().write(|w| w.int().clear_bit_by_one()); |
| 144 | 147 | ||
| 145 | // Source address (pattern) - fixed | 148 | // Source address (pattern) - fixed |
| 146 | t.tcd_saddr().write(|w| w.saddr().bits(core::ptr::addr_of_mut!(PATTERN) as u32)); | 149 | t.tcd_saddr() |
| 150 | .write(|w| w.saddr().bits(core::ptr::addr_of_mut!(PATTERN) as u32)); | ||
| 147 | // Destination address - increments | 151 | // Destination address - increments |
| 148 | t.tcd_daddr().write(|w| w.daddr().bits(core::ptr::addr_of_mut!(DEST_BUFFER) as u32)); | 152 | t.tcd_daddr() |
| 153 | .write(|w| w.daddr().bits(core::ptr::addr_of_mut!(DEST_BUFFER) as u32)); | ||
| 149 | 154 | ||
| 150 | // Source offset = 0 (stays fixed), Dest offset = 4 (increments) | 155 | // Source offset = 0 (stays fixed), Dest offset = 4 (increments) |
| 151 | t.tcd_soff().write(|w| w.soff().bits(0)); | 156 | t.tcd_soff().write(|w| w.soff().bits(0)); |
| @@ -180,10 +185,11 @@ async fn main(_spawner: Spawner) { | |||
| 180 | while !dma_ch0.is_done() { | 185 | while !dma_ch0.is_done() { |
| 181 | cortex_m::asm::nop(); | 186 | cortex_m::asm::nop(); |
| 182 | } | 187 | } |
| 183 | unsafe { dma_ch0.clear_done(); } | 188 | unsafe { |
| 189 | dma_ch0.clear_done(); | ||
| 190 | } | ||
| 184 | 191 | ||
| 185 | tx.blocking_write(b"\r\nEDMA memset example finish.\r\n\r\n") | 192 | tx.blocking_write(b"\r\nEDMA memset example finish.\r\n\r\n").unwrap(); |
| 186 | .unwrap(); | ||
| 187 | tx.blocking_write(b"Destination Buffer (after): ").unwrap(); | 193 | tx.blocking_write(b"Destination Buffer (after): ").unwrap(); |
| 188 | print_buffer(&mut tx, core::ptr::addr_of!(DEST_BUFFER) as *const u32, BUFFER_LENGTH); | 194 | print_buffer(&mut tx, core::ptr::addr_of!(DEST_BUFFER) as *const u32, BUFFER_LENGTH); |
| 189 | tx.blocking_write(b"\r\n\r\n").unwrap(); | 195 | tx.blocking_write(b"\r\n\r\n").unwrap(); |
| @@ -212,4 +218,3 @@ async fn main(_spawner: Spawner) { | |||
| 212 | cortex_m::asm::wfe(); | 218 | cortex_m::asm::wfe(); |
| 213 | } | 219 | } |
| 214 | } | 220 | } |
| 215 | |||
