Skip to content

Commit 098fcb9

Browse files
committed
HRTIM - Traitify adc_triggers
1 parent 7735ad8 commit 098fcb9

File tree

6 files changed

+224
-996
lines changed

6 files changed

+224
-996
lines changed

src/hrtim/adc_trigger.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
use core::marker::PhantomData;
3+
4+
pub trait Adc13Trigger {
5+
const BITS: u32;
6+
}
7+
8+
pub trait Adc24Trigger {
9+
const BITS: u32;
10+
}
11+
12+
pub trait Adc579Trigger {
13+
const BITS: u32;
14+
}
15+
16+
pub trait Adc6810Trigger {
17+
const BITS: u32;
18+
}
19+
20+
pub struct TimerReset<T>(pub(crate)PhantomData<T>);
21+
pub struct TimerPeriod<T>(pub(crate)PhantomData<T>);

src/hrtim/compare_register.rs

Lines changed: 69 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,14 @@ pub struct HrCr2<TIM, PSCL>(PhantomData<(TIM, PSCL)>);
1414
pub struct HrCr3<TIM, PSCL>(PhantomData<(TIM, PSCL)>);
1515
pub struct HrCr4<TIM, PSCL>(PhantomData<(TIM, PSCL)>);
1616

17+
18+
use super::adc_trigger::Adc13Trigger as Adc13;
19+
use super::adc_trigger::Adc24Trigger as Adc24;
20+
use super::adc_trigger::Adc579Trigger as Adc579;
21+
use super::adc_trigger::Adc6810Trigger as Adc6810;
22+
1723
macro_rules! hrtim_cr_helper {
18-
($TIMX:ident: $cr_type:ident: $cmpXYr:ident, $cmpYx:ident) => {
24+
($TIMX:ident: $cr_type:ident: $cmpXYr:ident, $cmpYx:ident, $(($Trigger:ty: $trigger_bits:expr)),*) => {
1925
impl<PSCL> HrCompareRegister for $cr_type<$TIMX, PSCL> {
2026
fn get_duty(&self) -> u16 {
2127
let tim = unsafe { &*$TIMX::ptr() };
@@ -28,28 +34,75 @@ macro_rules! hrtim_cr_helper {
2834
tim.$cmpXYr.write(|w| unsafe { w.$cmpYx().bits(duty) });
2935
}
3036
}
37+
38+
$(impl<PSCL> $Trigger for $cr_type<$TIMX, PSCL> {
39+
const BITS: u32 = $trigger_bits;
40+
})*
3141
};
3242
}
3343

44+
3445
macro_rules! hrtim_cr {
3546
($($TIMX:ident: [
36-
$cmpX1r:ident, $cmpX2r:ident, $cmpX3r:ident, $cmpX4r:ident,
37-
$cmp1x:ident, $cmp2x:ident, $cmp3x:ident, $cmp4x:ident
38-
],)+) => {$(
39-
hrtim_cr_helper!($TIMX: HrCr1: $cmpX1r, $cmp1x);
40-
hrtim_cr_helper!($TIMX: HrCr2: $cmpX2r, $cmp2x);
41-
hrtim_cr_helper!($TIMX: HrCr3: $cmpX3r, $cmp3x);
42-
hrtim_cr_helper!($TIMX: HrCr4: $cmpX4r, $cmp4x);
47+
[$cmpX1r:ident, $cmp1x:ident, $(($cr1_trigger:ident: $cr1_trigger_bits:expr)),*],
48+
[$cmpX2r:ident, $cmp2x:ident, $(($cr2_trigger:ident: $cr2_trigger_bits:expr)),*],
49+
[$cmpX3r:ident, $cmp3x:ident, $(($cr3_trigger:ident: $cr3_trigger_bits:expr)),*],
50+
[$cmpX4r:ident, $cmp4x:ident, $(($cr4_trigger:ident: $cr4_trigger_bits:expr)),*]
51+
]),+) => {$(
52+
hrtim_cr_helper!($TIMX: HrCr1: $cmpX1r, $cmp1x, $(($cr1_trigger: $cr1_trigger_bits)),*);
53+
hrtim_cr_helper!($TIMX: HrCr2: $cmpX2r, $cmp2x, $(($cr2_trigger: $cr2_trigger_bits)),*);
54+
hrtim_cr_helper!($TIMX: HrCr3: $cmpX3r, $cmp3x, $(($cr3_trigger: $cr3_trigger_bits)),*);
55+
hrtim_cr_helper!($TIMX: HrCr4: $cmpX4r, $cmp4x, $(($cr4_trigger: $cr4_trigger_bits)),*);
4356
)+};
4457
}
4558

4659
hrtim_cr! {
47-
HRTIM_MASTER: [mcmp1r, mcmp2r, mcmp3r, mcmp4r, mcmp1, mcmp2, mcmp3, mcmp4],
48-
49-
HRTIM_TIMA: [cmp1ar, cmp2ar, cmp3ar, cmp4ar, cmp1x, cmp2x, cmp3x, cmp4x],
50-
HRTIM_TIMB: [cmp1br, cmp2br, cmp3br, cmp4br, cmp1x, cmp2x, cmp3x, cmp4x],
51-
HRTIM_TIMC: [cmp1cr, cmp2cr, cmp3cr, cmp4cr, cmp1x, cmp2x, cmp3x, cmp4x],
52-
HRTIM_TIMD: [cmp1dr, cmp2dr, cmp3dr, cmp4dr, cmp1x, cmp2x, cmp3x, cmp4x],
53-
HRTIM_TIME: [cmp1er, cmp2er, cmp3er, cmp4er, cmp1x, cmp2x, cmp3x, cmp4x],
54-
HRTIM_TIMF: [cmp1fr, cmp2fr, cmp3fr, cmp4fr, cmp1x, cmp2x, cmp3x, cmp4x],
60+
HRTIM_MASTER: [
61+
[mcmp1r,mcmp1, (Adc13: 1 << 0), (Adc24: 1 << 0), (Adc579: 0), (Adc6810: 0) ],
62+
[mcmp2r,mcmp2, (Adc13: 1 << 1), (Adc24: 1 << 1), (Adc579: 1), (Adc6810: 1) ],
63+
[mcmp3r,mcmp3, (Adc13: 1 << 2), (Adc24: 1 << 2), (Adc579: 2), (Adc6810: 2) ],
64+
[mcmp4r,mcmp4, (Adc13: 1 << 3), (Adc24: 1 << 3), (Adc579: 3), (Adc6810: 3) ]
65+
],
66+
67+
HRTIM_TIMA: [
68+
[cmp1ar, cmp1x, ],
69+
[cmp2ar, cmp2x, (Adc24: 1 << 10), (Adc6810: 10)],
70+
[cmp3ar, cmp3x, (Adc13: 1 << 11), (Adc579: 10) ],
71+
[cmp4ar, cmp4x, (Adc13: 1 << 12), (Adc24: 1 << 12), (Adc579: 11), (Adc6810: 11)]
72+
],
73+
74+
HRTIM_TIMB: [
75+
[cmp1br, cmp1x, ],
76+
[cmp2br, cmp2x, (Adc24: 1 << 14), (Adc6810: 13)],
77+
[cmp3br, cmp3x, (Adc13: 1 << 16), (Adc579: 14) ],
78+
[cmp4br, cmp4x, (Adc13: 1 << 17), (Adc24: 1 << 16), (Adc579: 15), (Adc6810: 14)]
79+
],
80+
81+
HRTIM_TIMC: [
82+
[cmp1cr, cmp1x, ],
83+
[cmp2cr, cmp2x, (Adc24: 1 << 18), (Adc6810: 16)],
84+
[cmp3cr, cmp3x, (Adc13: 1 << 21), (Adc579: 18) ],
85+
[cmp4cr, cmp4x, (Adc13: 1 << 22), (Adc24: 1 << 20), (Adc579: 19), (Adc6810: 17)]
86+
],
87+
88+
HRTIM_TIMD: [
89+
[cmp1dr, cmp1x, ],
90+
[cmp2dr, cmp2x, (Adc24: 1 << 23), (Adc6810: 20)],
91+
[cmp3dr, cmp3x, (Adc13: 1 << 25), (Adc579: 21) ],
92+
[cmp4dr, cmp4x, (Adc13: 1 << 26), (Adc24: 1 << 25), (Adc579: 22), (Adc6810: 21)]
93+
],
94+
95+
HRTIM_TIME: [
96+
[cmp1er, cmp1x, ],
97+
[cmp2er, cmp2x, (Adc24: 1 << 28), (Adc6810: 24)],
98+
[cmp3er, cmp3x, (Adc13: 1 << 29), (Adc24: 1 << 29), (Adc579: 24), (Adc6810: 25)],
99+
[cmp4er, cmp4x, (Adc13: 1 << 30), (Adc24: 1 << 30), (Adc579: 25), (Adc6810: 26)]
100+
],
101+
102+
HRTIM_TIMF: [
103+
[cmp1fr, cmp1x, (Adc24: 1 << 15) ],
104+
[cmp2fr, cmp2x, (Adc13: 1 << 10), (Adc24: 1 << 11), (Adc579: 27), (Adc6810: 28)],
105+
[cmp3fr, cmp3x, (Adc13: 1 << 15), (Adc579: 28), (Adc6810: 29)],
106+
[cmp4fr, cmp4x, (Adc13: 1 << 20), (Adc24: 1 << 19), (Adc579: 29), (Adc6810: 30)]
107+
]
55108
}

0 commit comments

Comments
 (0)