22
22
static const PinMap PinMap_ADC [] = {
23
23
{PTE20 , ADC0_SE0 , 0 },
24
24
{PTE22 , ADC0_SE3 , 0 },
25
+ {PTE21 , ADC0_SE4a , 0 },
25
26
{PTE29 , ADC0_SE4b , 0 },
26
27
{PTE30 , ADC0_SE23 , 0 },
28
+ {PTE23 , ADC0_SE7a , 0 },
27
29
{PTB0 , ADC0_SE8 , 0 },
28
30
{PTB1 , ADC0_SE9 , 0 },
29
31
{PTB2 , ADC0_SE12 , 0 },
@@ -48,15 +50,20 @@ void analogin_init(analogin_t *obj, PinName pin) {
48
50
uint32_t port = (uint32_t )pin >> PORT_SHIFT ;
49
51
SIM -> SCGC5 |= 1 << (SIM_SCGC5_PORTA_SHIFT + port );
50
52
51
- ADC0 -> SC1 [1 ] = ADC_SC1_ADCH (obj -> adc );
53
+ uint32_t cfg2_muxsel = ADC_CFG2_MUXSEL_MASK ;
54
+ if (obj -> adc & (1 << CHANNELS_A_SHIFT )) {
55
+ cfg2_muxsel = 0 ;
56
+ }
57
+
58
+ ADC0 -> SC1 [1 ] = ADC_SC1_ADCH (obj -> adc & ~(1 << CHANNELS_A_SHIFT ));
52
59
53
60
ADC0 -> CFG1 = ADC_CFG1_ADLPC_MASK // Low-Power Configuration
54
61
| ADC_CFG1_ADIV (3 ) // Clock Divide Select: (Input Clock)/8
55
62
| ADC_CFG1_ADLSMP_MASK // Long Sample Time
56
63
| ADC_CFG1_MODE (3 ) // (16)bits Resolution
57
64
| ADC_CFG1_ADICLK (1 ); // Input Clock: (Bus Clock)/2
58
65
59
- ADC0 -> CFG2 = ADC_CFG2_MUXSEL_MASK // ADxxb channels are selected
66
+ ADC0 -> CFG2 = cfg2_muxsel // ADxxb or ADxxa channels
60
67
| ADC_CFG2_ADACKEN_MASK // Asynchronous Clock Output Enable
61
68
| ADC_CFG2_ADHSC_MASK // High-Speed Configuration
62
69
| ADC_CFG2_ADLSTS (0 ); // Long Sample Time Select
@@ -71,7 +78,7 @@ void analogin_init(analogin_t *obj, PinName pin) {
71
78
72
79
uint16_t analogin_read_u16 (analogin_t * obj ) {
73
80
// start conversion
74
- ADC0 -> SC1 [0 ] = ADC_SC1_ADCH (obj -> adc );
81
+ ADC0 -> SC1 [0 ] = ADC_SC1_ADCH (obj -> adc & ~( 1 << CHANNELS_A_SHIFT ) );
75
82
76
83
// Wait Conversion Complete
77
84
while ((ADC0 -> SC1 [0 ] & ADC_SC1_COCO_MASK ) != ADC_SC1_COCO_MASK );
0 commit comments