@@ -3,34 +3,59 @@ extern crate avr_hal_generic as avr_hal;
3
3
use crate :: port:: portf:: { PF0 , PF1 , PF2 , PF3 , PF4 , PF5 , PF6 , PF7 } ;
4
4
use crate :: port:: portk:: { PK0 , PK1 , PK2 , PK3 , PK4 , PK5 , PK6 , PK7 } ;
5
5
6
- use crate :: pac:: adc:: admux:: MUX_A ;
6
+ #[ doc( hidden) ]
7
+ #[ derive( Debug , Clone , Copy , PartialEq , Eq , PartialOrd , Ord ) ]
8
+ #[ repr( u8 ) ]
9
+ pub enum AdcMux {
10
+ Adc0 = 0b000000 ,
11
+ Adc1 = 0b000001 ,
12
+ Adc2 = 0b000010 ,
13
+ Adc3 = 0b000011 ,
14
+ Adc4 = 0b000100 ,
15
+ Adc5 = 0b000101 ,
16
+ Adc6 = 0b000110 ,
17
+ Adc7 = 0b000111 ,
18
+
19
+ AdcVbg = 0b011110 ,
20
+ AdcGnd = 0b011111 ,
21
+
22
+ Adc8 = 0b100000 ,
23
+ Adc9 = 0b100001 ,
24
+ Adc10 = 0b100010 ,
25
+ Adc11 = 0b100011 ,
26
+ Adc12 = 0b100100 ,
27
+ Adc13 = 0b100101 ,
28
+ Adc14 = 0b100110 ,
29
+ Adc15 = 0b100111 ,
30
+ }
7
31
8
32
avr_hal_generic:: impl_adc! {
9
33
pub struct Adc {
10
- type ChannelID = MUX_A ;
34
+ type ChannelID = AdcMux ;
11
35
peripheral: crate :: pac:: ADC ,
12
36
set_mux: |peripheral, id| {
13
- peripheral. admux. modify( |_, w| w. mux( ) . variant( id) ) ;
37
+ let id = id as u8 ;
38
+ peripheral. admux. modify( |_, w| w. mux( ) . bits( id & 0x1F ) ) ;
14
39
// n.b. the high bit of ADMUX[MUX] is in the ADCSRB register
15
- peripheral. adcsrb. modify( |_, w| w. mux5( ) . bit( ( id as u8 ) & 0b100000 != 0 ) ) ;
40
+ peripheral. adcsrb. modify( |_, w| w. mux5( ) . bit( id & 0x20 != 0 ) ) ;
16
41
} ,
17
42
pins: {
18
- pf0: ( PF0 , MUX_A :: ADC0 , didr0:: adc0d) ,
19
- pf1: ( PF1 , MUX_A :: ADC1 , didr0:: adc1d) ,
20
- pf2: ( PF2 , MUX_A :: ADC2 , didr0:: adc2d) ,
21
- pf3: ( PF3 , MUX_A :: ADC3 , didr0:: adc3d) ,
22
- pf4: ( PF4 , MUX_A :: ADC4 , didr0:: adc4d) ,
23
- pf5: ( PF5 , MUX_A :: ADC5 , didr0:: adc5d) ,
24
- pf6: ( PF6 , MUX_A :: ADC6 , didr0:: adc6d) ,
25
- pf7: ( PF7 , MUX_A :: ADC7 , didr0:: adc7d) ,
26
- pk0: ( PK0 , MUX_A :: ADC8 , didr2:: adc8d) ,
27
- pk1: ( PK1 , MUX_A :: ADC9 , didr2:: adc9d) ,
28
- pk2: ( PK2 , MUX_A :: ADC10 , didr2:: adc10d) ,
29
- pk3: ( PK3 , MUX_A :: ADC11 , didr2:: adc11d) ,
30
- pk4: ( PK4 , MUX_A :: ADC12 , didr2:: adc12d) ,
31
- pk5: ( PK5 , MUX_A :: ADC13 , didr2:: adc13d) ,
32
- pk6: ( PK6 , MUX_A :: ADC14 , didr2:: adc14d) ,
33
- pk7: ( PK7 , MUX_A :: ADC15 , didr2:: adc15d) ,
43
+ pf0: ( PF0 , AdcMux :: Adc0 , didr0:: adc0d) ,
44
+ pf1: ( PF1 , AdcMux :: Adc1 , didr0:: adc1d) ,
45
+ pf2: ( PF2 , AdcMux :: Adc2 , didr0:: adc2d) ,
46
+ pf3: ( PF3 , AdcMux :: Adc3 , didr0:: adc3d) ,
47
+ pf4: ( PF4 , AdcMux :: Adc4 , didr0:: adc4d) ,
48
+ pf5: ( PF5 , AdcMux :: Adc5 , didr0:: adc5d) ,
49
+ pf6: ( PF6 , AdcMux :: Adc6 , didr0:: adc6d) ,
50
+ pf7: ( PF7 , AdcMux :: Adc7 , didr0:: adc7d) ,
51
+ pk0: ( PK0 , AdcMux :: Adc8 , didr2:: adc8d) ,
52
+ pk1: ( PK1 , AdcMux :: Adc9 , didr2:: adc9d) ,
53
+ pk2: ( PK2 , AdcMux :: Adc10 , didr2:: adc10d) ,
54
+ pk3: ( PK3 , AdcMux :: Adc11 , didr2:: adc11d) ,
55
+ pk4: ( PK4 , AdcMux :: Adc12 , didr2:: adc12d) ,
56
+ pk5: ( PK5 , AdcMux :: Adc13 , didr2:: adc13d) ,
57
+ pk6: ( PK6 , AdcMux :: Adc14 , didr2:: adc14d) ,
58
+ pk7: ( PK7 , AdcMux :: Adc15 , didr2:: adc15d) ,
34
59
}
35
60
}
36
61
}
@@ -39,20 +64,24 @@ avr_hal_generic::impl_adc! {
39
64
///
40
65
/// This module contains ADC channels, additional to the direct pin channels.
41
66
pub mod channel {
67
+ use super :: AdcMux ;
42
68
use avr_hal_generic:: hal:: adc:: Channel ;
43
- use crate :: pac:: adc:: admux:: MUX_A ;
44
69
45
70
/// Channel for the _Bandgap Reference Voltage_
46
71
pub struct Vbg ;
47
72
impl Channel < super :: Adc > for Vbg {
48
- type ID = MUX_A ;
49
- fn channel ( ) -> Self :: ID { MUX_A :: ADC_VBG }
73
+ type ID = AdcMux ;
74
+ fn channel ( ) -> Self :: ID {
75
+ AdcMux :: AdcVbg
76
+ }
50
77
}
51
78
52
79
/// Channel for _GND_
53
80
pub struct Gnd ;
54
81
impl Channel < super :: Adc > for Gnd {
55
- type ID = MUX_A ;
56
- fn channel ( ) -> Self :: ID { MUX_A :: ADC_GND }
82
+ type ID = AdcMux ;
83
+ fn channel ( ) -> Self :: ID {
84
+ AdcMux :: AdcGnd
85
+ }
57
86
}
58
87
}
0 commit comments