-
Notifications
You must be signed in to change notification settings - Fork 223
Expand file tree
/
Copy pathchannel.rs
More file actions
100 lines (94 loc) · 3.27 KB
/
Copy pathchannel.rs
File metadata and controls
100 lines (94 loc) · 3.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
use core::marker::PhantomData;
use atsamd_hal_macros::hal_cfg;
use crate::{
adc::*,
pac::adc::inputctrl::{Muxposselect, Muxnegselect},
typelevel::Sealed,
};
macro_rules! channel {
(
$(
$CH:ident: ($($PMUX:path)?, $($NMUX:path)?) $(+ $MARKER:ident)*
),+
$(,)?
) => {
crate::paste::paste!{
$(
pub struct $CH<I: AdcInstance> {
adc: PhantomData<I>,
}
impl<I: AdcInstance> Sealed for $CH<I> {}
$(
impl<I: AdcInstance> PosChannel<I> for $CH<I> {
const MUXVAL: Muxposselect = $PMUX;
}
)?
$(
impl<I: AdcInstance> NegChannel<I> for $CH<I> {
const MUXVAL: Muxnegselect = $NMUX;
}
)?
$(
impl<I: AdcInstance> $MARKER<I> for $CH<I> {}
)*
impl<I: AdcInstance> $CH<I> {
pub fn get_channel() -> Self {
Self {
adc: PhantomData
}
}
}
)+
}
};
}
#[hal_cfg("adc-d21")]
channel! {
AIN0: (Muxposselect::Pin0, Muxnegselect::Pin0),
AIN1: (Muxposselect::Pin1, Muxnegselect::Pin1),
AIN2: (Muxposselect::Pin2, Muxnegselect::Pin2),
AIN3: (Muxposselect::Pin3, Muxnegselect::Pin3),
AIN4: (Muxposselect::Pin4, Muxnegselect::Pin4),
AIN5: (Muxposselect::Pin5, Muxnegselect::Pin5),
AIN6: (Muxposselect::Pin6, Muxnegselect::Pin6),
AIN7: (Muxposselect::Pin7, Muxnegselect::Pin7),
AIN8: (Muxposselect::Pin8, ),
AIN9: (Muxposselect::Pin9, ),
AIN10: (Muxposselect::Pin10, ),
AIN11: (Muxposselect::Pin11, ),
AIN12: (Muxposselect::Pin12, ),
AIN13: (Muxposselect::Pin13, ),
AIN14: (Muxposselect::Pin14, ),
AIN15: (Muxposselect::Pin15, ),
AIN16: (Muxposselect::Pin15, ),
AIN17: (Muxposselect::Pin15, ),
AIN18: (Muxposselect::Pin15, ),
AIN19: (Muxposselect::Pin15, ),
TEMP: (Muxposselect::Temp, ),
SCALEDCOREVCC: (Muxposselect::Scaledcorevcc, ) + CpuVoltageSource,
SCALEDIOVCC: (Muxposselect::Scalediovcc, ) + CpuVoltageSource,
BANDGAP: (Muxposselect::Bandgap, ) + CpuVoltageSource,
DAC: (Muxposselect::Dac, ),
GND: (, Muxnegselect::Gnd),
IOGND: (, Muxnegselect::Iognd),
}
#[hal_cfg("adc-d11")]
channel! {
AIN0: (Muxposselect::Pin0, Muxnegselect::Pin0),
AIN1: (Muxposselect::Pin1, Muxnegselect::Pin1),
AIN2: (Muxposselect::Pin2, Muxnegselect::Pin2),
AIN3: (Muxposselect::Pin3, Muxnegselect::Pin3),
AIN4: (Muxposselect::Pin4, Muxnegselect::Pin4),
AIN5: (Muxposselect::Pin5, Muxnegselect::Pin5),
AIN6: (Muxposselect::Pin6, Muxnegselect::Pin6),
AIN7: (Muxposselect::Pin7, Muxnegselect::Pin7),
AIN8: (Muxposselect::Pin8, ),
AIN9: (Muxposselect::Pin9, ),
TEMP: (Muxposselect::Temp, ),
SCALEDCOREVCC: (Muxposselect::Scaledcorevcc, ) + CpuVoltageSource,
SCALEDIOVCC: (Muxposselect::Scalediovcc, ) + CpuVoltageSource,
BANDGAP: (Muxposselect::Bandgap, ) + CpuVoltageSource,
DAC: (Muxposselect::Dac, ),
GND: (, Muxnegselect::Gnd),
IOGND: (, Muxnegselect::Iognd),
}