Merge pull request #1966 from xoviat/hrtim

stm32/hrtim: move traits out of macro def'n
This commit is contained in:
xoviat 2023-09-28 20:53:55 +00:00 committed by GitHub
commit d6654bf8b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -78,38 +78,12 @@ pub(crate) mod sealed {
pub trait Instance: RccPeripheral { pub trait Instance: RccPeripheral {
fn regs() -> crate::pac::hrtim::Hrtim; fn regs() -> crate::pac::hrtim::Hrtim;
fn set_master_frequency(frequency: Hertz);
fn set_channel_frequency(channnel: usize, frequency: Hertz);
/// Set the dead time as a proportion of max_duty
fn set_channel_dead_time(channnel: usize, dead_time: u16);
// fn enable_outputs(enable: bool);
//
// fn enable_channel(&mut self, channel: usize, enable: bool);
}
}
pub trait Instance: sealed::Instance + 'static {}
foreach_interrupt! {
($inst:ident, hrtim, HRTIM, MASTER, $irq:ident) => {
impl sealed::Instance for crate::peripherals::$inst {
fn regs() -> crate::pac::hrtim::Hrtim {
crate::pac::$inst
}
fn set_master_frequency(frequency: Hertz) { fn set_master_frequency(frequency: Hertz) {
use crate::rcc::sealed::RccPeripheral;
let f = frequency.0; let f = frequency.0;
#[cfg(not(stm32f334))] #[cfg(not(stm32f334))]
let timer_f = Self::frequency().0; let timer_f = Self::frequency().0;
#[cfg(stm32f334)] #[cfg(stm32f334)]
let timer_f = unsafe { crate::rcc::get_freqs() }.hrtim.unwrap_or( let timer_f = unsafe { crate::rcc::get_freqs() }.hrtim.unwrap_or(Self::frequency()).0;
Self::frequency()
).0;
let psc_min = (timer_f / f) / (u16::MAX as u32 / 32); let psc_min = (timer_f / f) / (u16::MAX as u32 / 32);
let psc = if Self::regs().isr().read().dllrdy() { let psc = if Self::regs().isr().read().dllrdy() {
@ -128,15 +102,11 @@ foreach_interrupt! {
} }
fn set_channel_frequency(channel: usize, frequency: Hertz) { fn set_channel_frequency(channel: usize, frequency: Hertz) {
use crate::rcc::sealed::RccPeripheral;
let f = frequency.0; let f = frequency.0;
#[cfg(not(stm32f334))] #[cfg(not(stm32f334))]
let timer_f = Self::frequency().0; let timer_f = Self::frequency().0;
#[cfg(stm32f334)] #[cfg(stm32f334)]
let timer_f = unsafe { crate::rcc::get_freqs() }.hrtim.unwrap_or( let timer_f = unsafe { crate::rcc::get_freqs() }.hrtim.unwrap_or(Self::frequency()).0;
Self::frequency()
).0;
let psc_min = (timer_f / f) / (u16::MAX as u32 / 32); let psc_min = (timer_f / f) / (u16::MAX as u32 / 32);
let psc = if Self::regs().isr().read().dllrdy() { let psc = if Self::regs().isr().read().dllrdy() {
@ -154,8 +124,9 @@ foreach_interrupt! {
regs.tim(channel).per().modify(|w| w.set_per(per)); regs.tim(channel).per().modify(|w| w.set_per(per));
} }
fn set_channel_dead_time(channel: usize, dead_time: u16) { /// Set the dead time as a proportion of max_duty
fn set_channel_dead_time(channel: usize, dead_time: u16) {
let regs = Self::regs(); let regs = Self::regs();
let channel_psc: Prescaler = regs.tim(channel).cr().read().ckpsc().into(); let channel_psc: Prescaler = regs.tim(channel).cr().read().ckpsc().into();
@ -177,6 +148,21 @@ foreach_interrupt! {
w.set_dtr(dt_val as u16); w.set_dtr(dt_val as u16);
}); });
} }
// fn enable_outputs(enable: bool);
//
// fn enable_channel(&mut self, channel: usize, enable: bool);
}
}
pub trait Instance: sealed::Instance + 'static {}
foreach_interrupt! {
($inst:ident, hrtim, HRTIM, MASTER, $irq:ident) => {
impl sealed::Instance for crate::peripherals::$inst {
fn regs() -> crate::pac::hrtim::Hrtim {
crate::pac::$inst
}
} }
impl Instance for crate::peripherals::$inst { impl Instance for crate::peripherals::$inst {