23
23
#include "PeripheralPins.h"
24
24
#include "nu_modutil.h"
25
25
26
- struct nu_adc_var {
27
- uint32_t en_msk ;
28
- };
29
-
30
- static struct nu_adc_var adc0_var = {
31
- .en_msk = 0
32
- };
33
- static struct nu_adc_var adc1_var = {
34
- .en_msk = 0
35
- };
36
- static struct nu_adc_var adc2_var = {
37
- .en_msk = 0
38
- };
39
- static struct nu_adc_var adc3_var = {
40
- .en_msk = 0
41
- };
42
- static struct nu_adc_var adc4_var = {
43
- .en_msk = 0
44
- };
45
- static struct nu_adc_var adc5_var = {
46
- .en_msk = 0
47
- };
48
- static struct nu_adc_var adc6_var = {
49
- .en_msk = 0
50
- };
51
- static struct nu_adc_var adc7_var = {
52
- .en_msk = 0
53
- };
54
- static struct nu_adc_var adc8_var = {
55
- .en_msk = 0
56
- };
57
- static struct nu_adc_var adc9_var = {
58
- .en_msk = 0
59
- };
60
- static struct nu_adc_var adc10_var = {
61
- .en_msk = 0
62
- };
63
- static struct nu_adc_var adc11_var = {
64
- .en_msk = 0
65
- };
66
- static struct nu_adc_var adc12_var = {
67
- .en_msk = 0
68
- };
69
- static struct nu_adc_var adc13_var = {
70
- .en_msk = 0
71
- };
72
- static struct nu_adc_var adc14_var = {
73
- .en_msk = 0
74
- };
75
- static struct nu_adc_var adc15_var = {
76
- .en_msk = 0
77
- };
26
+ static uint32_t eadc_modinit_mask = 0 ;
78
27
79
28
static const struct nu_modinit_s adc_modinit_tab [] = {
80
- {ADC_0_0 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc0_var },
81
- {ADC_0_1 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc1_var },
82
- {ADC_0_2 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc2_var },
83
- {ADC_0_3 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc3_var },
84
- {ADC_0_4 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc4_var },
85
- {ADC_0_5 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc5_var },
86
- {ADC_0_6 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc6_var },
87
- {ADC_0_7 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc7_var },
88
- {ADC_0_8 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc8_var },
89
- {ADC_0_9 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc9_var },
90
- {ADC_0_10 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc10_var },
91
- {ADC_0_11 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc11_var },
92
- {ADC_0_12 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc12_var },
93
- {ADC_0_13 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc13_var },
94
- {ADC_0_14 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc14_var },
95
- {ADC_0_15 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , & adc15_var },
29
+ {ADC_0_0 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
30
+ {ADC_0_1 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
31
+ {ADC_0_2 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
32
+ {ADC_0_3 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
33
+ {ADC_0_4 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
34
+ {ADC_0_5 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
35
+ {ADC_0_6 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
36
+ {ADC_0_7 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
37
+ {ADC_0_8 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
38
+ {ADC_0_9 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
39
+ {ADC_0_10 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
40
+ {ADC_0_11 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
41
+ {ADC_0_12 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
42
+ {ADC_0_13 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
43
+ {ADC_0_14 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
44
+ {ADC_0_15 , EADC_MODULE , 0 , CLK_CLKDIV0_EADC (8 ), EADC_RST , ADC00_IRQn , NULL },
96
45
};
97
46
98
47
void analogin_init (analogin_t * obj , PinName pin )
@@ -107,7 +56,7 @@ void analogin_init(analogin_t *obj, PinName pin)
107
56
EADC_T * eadc_base = (EADC_T * ) NU_MODBASE (obj -> adc );
108
57
109
58
// NOTE: All channels (identified by ADCName) share a ADC module. This reset will also affect other channels of the same ADC module.
110
- if (! (( struct nu_adc_var * ) modinit -> var ) -> en_msk ) {
59
+ if (! eadc_modinit_mask ) {
111
60
// Reset this module if no channel enabled
112
61
SYS_ResetModule (modinit -> rsetidx );
113
62
@@ -116,9 +65,6 @@ void analogin_init(analogin_t *obj, PinName pin)
116
65
// Enable clock of paired channels
117
66
CLK_EnableModuleClock (modinit -> clkidx );
118
67
119
- // Power on ADC
120
- //ADC_POWER_ON(ADC);
121
-
122
68
// Set the ADC internal sampling time, input mode as single-end and enable the A/D converter
123
69
EADC_Open (eadc_base , EADC_CTL_DIFFEN_SINGLE_END );
124
70
EADC_SetInternalSampleTime (eadc_base , 6 );
@@ -130,9 +76,9 @@ void analogin_init(analogin_t *obj, PinName pin)
130
76
pinmap_pinout (pin , PinMap_ADC );
131
77
132
78
// Configure the sample module Nmod for analog input channel Nch and software trigger source
133
- EADC_ConfigSampleModule (EADC , chn , EADC_SOFTWARE_TRIGGER , chn );
79
+ EADC_ConfigSampleModule (eadc_base , chn , EADC_SOFTWARE_TRIGGER , chn );
134
80
135
- (( struct nu_adc_var * ) modinit -> var ) -> en_msk |= 1 << chn ;
81
+ eadc_modinit_mask |= 1 << chn ;
136
82
}
137
83
138
84
uint16_t analogin_read_u16 (analogin_t * obj )
@@ -141,7 +87,7 @@ uint16_t analogin_read_u16(analogin_t *obj)
141
87
uint32_t chn = NU_MODSUBINDEX (obj -> adc );
142
88
143
89
EADC_START_CONV (eadc_base , 1 << chn );
144
- while (EADC_GET_PENDING_CONV (eadc_base ) & (1 << chn ));
90
+ while (EADC_GET_DATA_VALID_FLAG (eadc_base , 1 << chn ) != (1 << chn ));
145
91
uint16_t conv_res_12 = EADC_GET_CONV_DATA (eadc_base , chn );
146
92
// Just 12 bits are effective. Convert to 16 bits.
147
93
// conv_res_12: 0000 b11b10b9b8 b7b6b5b4 b3b2b1b0
0 commit comments