pounder_test/src/pounder/dds_output.rs

43 lines
1.2 KiB
Rust
Raw Normal View History

2020-11-17 21:23:56 +08:00
use super::QspiInterface;
2020-11-17 17:51:31 +08:00
use crate::hrtimer::HighResTimerE;
use stm32h7xx_hal as hal;
pub struct DdsOutput {
2020-11-17 21:23:56 +08:00
_qspi: QspiInterface,
2020-11-17 17:51:31 +08:00
io_update_trigger: HighResTimerE,
}
impl DdsOutput {
2020-11-17 21:23:56 +08:00
pub fn new(_qspi: QspiInterface, io_update_trigger: HighResTimerE) -> Self {
2020-11-17 17:51:31 +08:00
Self {
2020-11-17 21:23:56 +08:00
_qspi,
2020-11-17 17:51:31 +08:00
io_update_trigger,
}
}
2020-11-17 21:23:56 +08:00
pub fn write_profile(&mut self, profile: [u32; 4]) {
2020-11-17 17:51:31 +08:00
let regs = unsafe { &*hal::stm32::QUADSPI::ptr() };
unsafe {
core::ptr::write_volatile(
&regs.dr as *const _ as *mut u32,
profile[0],
);
core::ptr::write_volatile(
&regs.dr as *const _ as *mut u32,
profile[1],
);
core::ptr::write_volatile(
&regs.dr as *const _ as *mut u32,
profile[2],
);
core::ptr::write_volatile(
&regs.dr as *const _ as *mut u32,
profile[3],
);
}
// Trigger the IO_update signal generating timer to asynchronous create the IO_Update pulse.
self.io_update_trigger.trigger();
}
}