pub use crate::soc::{PWM0_BASE, PWM1_BASE, PWM2_BASE, PWM3_BASE};
pub const fn pwm_controller_base(controller_index: u8) -> Option<usize> {
match controller_index {
0 => Some(PWM0_BASE),
1 => Some(PWM1_BASE),
2 => Some(PWM2_BASE),
3 => Some(PWM3_BASE),
_ => None,
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum GlobalPwmChannel {
Pwm0 = 0,
Pwm1 = 1,
Pwm2 = 2,
Pwm3 = 3,
Pwm4 = 4,
Pwm5 = 5,
Pwm6 = 6,
Pwm7 = 7,
Pwm8 = 8,
Pwm9 = 9,
Pwm10 = 10,
Pwm11 = 11,
Pwm12 = 12,
Pwm13 = 13,
Pwm14 = 14,
Pwm15 = 15,
}
impl GlobalPwmChannel {
pub const fn from_u8(value: u8) -> Option<Self> {
match value {
0 => Some(Self::Pwm0),
1 => Some(Self::Pwm1),
2 => Some(Self::Pwm2),
3 => Some(Self::Pwm3),
4 => Some(Self::Pwm4),
5 => Some(Self::Pwm5),
6 => Some(Self::Pwm6),
7 => Some(Self::Pwm7),
8 => Some(Self::Pwm8),
9 => Some(Self::Pwm9),
10 => Some(Self::Pwm10),
11 => Some(Self::Pwm11),
12 => Some(Self::Pwm12),
13 => Some(Self::Pwm13),
14 => Some(Self::Pwm14),
15 => Some(Self::Pwm15),
_ => None,
}
}
pub const fn index(&self) -> u8 {
*self as u8
}
pub const fn controller_index(&self) -> u8 {
(*self as u8) / 4
}
pub const fn controller_base(&self) -> usize {
match self.controller_index() {
0 => PWM0_BASE,
1 => PWM1_BASE,
2 => PWM2_BASE,
_ => PWM3_BASE,
}
}
pub const fn local_channel(&self) -> u8 {
(*self as u8) % 4
}
}