1 //*****************************************************************************
2 //
3 // adc.h - ADC headers for using the ADC driver functions.
4 //
5 // Copyright (c) 2005-2020 Texas Instruments Incorporated.  All rights reserved.
6 // Software License Agreement
7 //
8 //   Redistribution and use in source and binary forms, with or without
9 //   modification, are permitted provided that the following conditions
10 //   are met:
11 //
12 //   Redistributions of source code must retain the above copyright
13 //   notice, this list of conditions and the following disclaimer.
14 //
15 //   Redistributions in binary form must reproduce the above copyright
16 //   notice, this list of conditions and the following disclaimer in the
17 //   documentation and/or other materials provided with the
18 //   distribution.
19 //
20 //   Neither the name of Texas Instruments Incorporated nor the names of
21 //   its contributors may be used to endorse or promote products derived
22 //   from this software without specific prior written permission.
23 //
24 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 //
36 // This is part of revision 2.2.0.295 of the Tiva Peripheral Driver Library.
37 //
38 //*****************************************************************************
39 
40 #ifndef __DRIVERLIB_ADC_H__
41 #define __DRIVERLIB_ADC_H__
42 
43 //*****************************************************************************
44 //
45 // If building with a C++ compiler, make all of the definitions in this header
46 // have a C binding.
47 //
48 //*****************************************************************************
49 #ifdef __cplusplus
50 extern "C"
51 {
52 #endif
53 
54 //*****************************************************************************
55 //
56 // Values that can be passed to ADCSequenceConfigure as the ui32Trigger
57 // parameter.
58 //
59 //*****************************************************************************
60 #define ADC_TRIGGER_PROCESSOR   0x00000000  // Processor event
61 #define ADC_TRIGGER_COMP0       0x00000001  // Analog comparator 0 event
62 #define ADC_TRIGGER_COMP1       0x00000002  // Analog comparator 1 event
63 #define ADC_TRIGGER_COMP2       0x00000003  // Analog comparator 2 event
64 #define ADC_TRIGGER_EXTERNAL    0x00000004  // External event
65 #define ADC_TRIGGER_TIMER       0x00000005  // Timer event
66 #define ADC_TRIGGER_PWM0        0x00000006  // PWM0 event
67 #define ADC_TRIGGER_PWM1        0x00000007  // PWM1 event
68 #define ADC_TRIGGER_PWM2        0x00000008  // PWM2 event
69 #define ADC_TRIGGER_PWM3        0x00000009  // PWM3 event
70 #define ADC_TRIGGER_NEVER       0x0000000E  // Never Trigger
71 #define ADC_TRIGGER_ALWAYS      0x0000000F  // Always event
72 #define ADC_TRIGGER_PWM_MOD0    0x00000000  // PWM triggers from PWM0
73 #define ADC_TRIGGER_PWM_MOD1    0x00000010  // PWM triggers from PWM1
74 
75 //*****************************************************************************
76 //
77 // Values that can be passed to ADCSequenceStepConfigure as the ui32Config
78 // parameter.
79 //
80 //*****************************************************************************
81 #define ADC_CTL_TS              0x00000080  // Temperature sensor select
82 #define ADC_CTL_IE              0x00000040  // Interrupt enable
83 #define ADC_CTL_END             0x00000020  // Sequence end select
84 #define ADC_CTL_D               0x00000010  // Differential select
85 #define ADC_CTL_CH0             0x00000000  // Input channel 0
86 #define ADC_CTL_CH1             0x00000001  // Input channel 1
87 #define ADC_CTL_CH2             0x00000002  // Input channel 2
88 #define ADC_CTL_CH3             0x00000003  // Input channel 3
89 #define ADC_CTL_CH4             0x00000004  // Input channel 4
90 #define ADC_CTL_CH5             0x00000005  // Input channel 5
91 #define ADC_CTL_CH6             0x00000006  // Input channel 6
92 #define ADC_CTL_CH7             0x00000007  // Input channel 7
93 #define ADC_CTL_CH8             0x00000008  // Input channel 8
94 #define ADC_CTL_CH9             0x00000009  // Input channel 9
95 #define ADC_CTL_CH10            0x0000000A  // Input channel 10
96 #define ADC_CTL_CH11            0x0000000B  // Input channel 11
97 #define ADC_CTL_CH12            0x0000000C  // Input channel 12
98 #define ADC_CTL_CH13            0x0000000D  // Input channel 13
99 #define ADC_CTL_CH14            0x0000000E  // Input channel 14
100 #define ADC_CTL_CH15            0x0000000F  // Input channel 15
101 #define ADC_CTL_CH16            0x00000100  // Input channel 16
102 #define ADC_CTL_CH17            0x00000101  // Input channel 17
103 #define ADC_CTL_CH18            0x00000102  // Input channel 18
104 #define ADC_CTL_CH19            0x00000103  // Input channel 19
105 #define ADC_CTL_CH20            0x00000104  // Input channel 20
106 #define ADC_CTL_CH21            0x00000105  // Input channel 21
107 #define ADC_CTL_CH22            0x00000106  // Input channel 22
108 #define ADC_CTL_CH23            0x00000107  // Input channel 23
109 #define ADC_CTL_CMP0            0x00080000  // Select Comparator 0
110 #define ADC_CTL_CMP1            0x00090000  // Select Comparator 1
111 #define ADC_CTL_CMP2            0x000A0000  // Select Comparator 2
112 #define ADC_CTL_CMP3            0x000B0000  // Select Comparator 3
113 #define ADC_CTL_CMP4            0x000C0000  // Select Comparator 4
114 #define ADC_CTL_CMP5            0x000D0000  // Select Comparator 5
115 #define ADC_CTL_CMP6            0x000E0000  // Select Comparator 6
116 #define ADC_CTL_CMP7            0x000F0000  // Select Comparator 7
117 #define ADC_CTL_SHOLD_4         0x00000000  // Sample and hold 4 ADC clocks
118 #define ADC_CTL_SHOLD_8         0x00200000  // Sample and hold 8 ADC clocks
119 #define ADC_CTL_SHOLD_16        0x00400000  // Sample and hold 16 ADC clocks
120 #define ADC_CTL_SHOLD_32        0x00600000  // Sample and hold 32 ADC clocks
121 #define ADC_CTL_SHOLD_64        0x00800000  // Sample and hold 64 ADC clocks
122 #define ADC_CTL_SHOLD_128       0x00A00000  // Sample and hold 128 ADC clocks
123 #define ADC_CTL_SHOLD_256       0x00C00000  // Sample and hold 256 ADC clocks
124 
125 //*****************************************************************************
126 //
127 // Values that can be passed to ADCComparatorConfigure as part of the
128 // ui32Config parameter.
129 //
130 //*****************************************************************************
131 #define ADC_COMP_TRIG_NONE      0x00000000  // Trigger Disabled
132 #define ADC_COMP_TRIG_LOW_ALWAYS \
133                                 0x00001000  // Trigger Low Always
134 #define ADC_COMP_TRIG_LOW_ONCE  0x00001100  // Trigger Low Once
135 #define ADC_COMP_TRIG_LOW_HALWAYS \
136                                 0x00001200  // Trigger Low Always (Hysteresis)
137 #define ADC_COMP_TRIG_LOW_HONCE 0x00001300  // Trigger Low Once (Hysteresis)
138 #define ADC_COMP_TRIG_MID_ALWAYS \
139                                 0x00001400  // Trigger Mid Always
140 #define ADC_COMP_TRIG_MID_ONCE  0x00001500  // Trigger Mid Once
141 #define ADC_COMP_TRIG_HIGH_ALWAYS \
142                                 0x00001C00  // Trigger High Always
143 #define ADC_COMP_TRIG_HIGH_ONCE 0x00001D00  // Trigger High Once
144 #define ADC_COMP_TRIG_HIGH_HALWAYS \
145                                 0x00001E00  // Trigger High Always (Hysteresis)
146 #define ADC_COMP_TRIG_HIGH_HONCE \
147                                 0x00001F00  // Trigger High Once (Hysteresis)
148 
149 #define ADC_COMP_INT_NONE       0x00000000  // Interrupt Disabled
150 #define ADC_COMP_INT_LOW_ALWAYS \
151                                 0x00000010  // Interrupt Low Always
152 #define ADC_COMP_INT_LOW_ONCE   0x00000011  // Interrupt Low Once
153 #define ADC_COMP_INT_LOW_HALWAYS \
154                                 0x00000012  // Interrupt Low Always
155                                             // (Hysteresis)
156 #define ADC_COMP_INT_LOW_HONCE  0x00000013  // Interrupt Low Once (Hysteresis)
157 #define ADC_COMP_INT_MID_ALWAYS \
158                                 0x00000014  // Interrupt Mid Always
159 #define ADC_COMP_INT_MID_ONCE   0x00000015  // Interrupt Mid Once
160 #define ADC_COMP_INT_HIGH_ALWAYS \
161                                 0x0000001C  // Interrupt High Always
162 #define ADC_COMP_INT_HIGH_ONCE  0x0000001D  // Interrupt High Once
163 #define ADC_COMP_INT_HIGH_HALWAYS \
164                                 0x0000001E  // Interrupt High Always
165                                             // (Hysteresis)
166 #define ADC_COMP_INT_HIGH_HONCE \
167                                 0x0000001F  // Interrupt High Once (Hysteresis)
168 
169 //*****************************************************************************
170 //
171 // Values that can be used to modify the sequence number passed to
172 // ADCProcessorTrigger in order to get cross-module synchronous processor
173 // triggers.
174 //
175 //*****************************************************************************
176 #define ADC_TRIGGER_WAIT        0x08000000  // Wait for the synchronous trigger
177 #define ADC_TRIGGER_SIGNAL      0x80000000  // Signal the synchronous trigger
178 
179 //*****************************************************************************
180 //
181 // Values that can be passed to ADCPhaseDelaySet as the ui32Phase parameter and
182 // returned from ADCPhaseDelayGet.
183 //
184 //*****************************************************************************
185 #define ADC_PHASE_0             0x00000000  // 0 degrees
186 #define ADC_PHASE_22_5          0x00000001  // 22.5 degrees
187 #define ADC_PHASE_45            0x00000002  // 45 degrees
188 #define ADC_PHASE_67_5          0x00000003  // 67.5 degrees
189 #define ADC_PHASE_90            0x00000004  // 90 degrees
190 #define ADC_PHASE_112_5         0x00000005  // 112.5 degrees
191 #define ADC_PHASE_135           0x00000006  // 135 degrees
192 #define ADC_PHASE_157_5         0x00000007  // 157.5 degrees
193 #define ADC_PHASE_180           0x00000008  // 180 degrees
194 #define ADC_PHASE_202_5         0x00000009  // 202.5 degrees
195 #define ADC_PHASE_225           0x0000000A  // 225 degrees
196 #define ADC_PHASE_247_5         0x0000000B  // 247.5 degrees
197 #define ADC_PHASE_270           0x0000000C  // 270 degrees
198 #define ADC_PHASE_292_5         0x0000000D  // 292.5 degrees
199 #define ADC_PHASE_315           0x0000000E  // 315 degrees
200 #define ADC_PHASE_337_5         0x0000000F  // 337.5 degrees
201 
202 //*****************************************************************************
203 //
204 // Values that can be passed to ADCReferenceSet as the ui32Ref parameter.
205 //
206 //*****************************************************************************
207 #define ADC_REF_INT             0x00000000  // Internal reference
208 #define ADC_REF_EXT_3V          0x00000001  // External 3V reference
209 
210 //*****************************************************************************
211 //
212 // Values that can be passed to ADCIntDisableEx(), ADCIntEnableEx(),
213 // ADCIntClearEx() and ADCIntStatusEx().
214 //
215 //*****************************************************************************
216 #define ADC_INT_SS0             0x00000001
217 #define ADC_INT_SS1             0x00000002
218 #define ADC_INT_SS2             0x00000004
219 #define ADC_INT_SS3             0x00000008
220 #define ADC_INT_DMA_SS0         0x00000100
221 #define ADC_INT_DMA_SS1         0x00000200
222 #define ADC_INT_DMA_SS2         0x00000400
223 #define ADC_INT_DMA_SS3         0x00000800
224 #define ADC_INT_DCON_SS0        0x00010000
225 #define ADC_INT_DCON_SS1        0x00020000
226 #define ADC_INT_DCON_SS2        0x00040000
227 #define ADC_INT_DCON_SS3        0x00080000
228 
229 //*****************************************************************************
230 //
231 // Values that can be passed to ADCClockConfigSet() and ADCClockConfigGet().
232 //
233 //*****************************************************************************
234 #define ADC_CLOCK_RATE_FULL     0x00000070
235 #define ADC_CLOCK_RATE_HALF     0x00000050
236 #define ADC_CLOCK_RATE_FOURTH   0x00000030
237 #define ADC_CLOCK_RATE_EIGHTH   0x00000010
238 #define ADC_CLOCK_SRC_PLL       0x00000000
239 #define ADC_CLOCK_SRC_PIOSC     0x00000001
240 #define ADC_CLOCK_SRC_ALTCLK    0x00000001
241 #define ADC_CLOCK_SRC_MOSC      0x00000002
242 
243 //*****************************************************************************
244 //
245 // Prototypes for the APIs.
246 //
247 //*****************************************************************************
248 extern void ADCIntRegister(uint32_t ui32Base, uint32_t ui32SequenceNum,
249                            void (*pfnHandler)(void));
250 extern void ADCIntUnregister(uint32_t ui32Base, uint32_t ui32SequenceNum);
251 extern void ADCIntDisable(uint32_t ui32Base, uint32_t ui32SequenceNum);
252 extern void ADCIntEnable(uint32_t ui32Base, uint32_t ui32SequenceNum);
253 extern uint32_t ADCIntStatus(uint32_t ui32Base, uint32_t ui32SequenceNum,
254                              bool bMasked);
255 extern void ADCIntClear(uint32_t ui32Base, uint32_t ui32SequenceNum);
256 extern void ADCSequenceEnable(uint32_t ui32Base, uint32_t ui32SequenceNum);
257 extern void ADCSequenceDisable(uint32_t ui32Base, uint32_t ui32SequenceNum);
258 extern void ADCSequenceConfigure(uint32_t ui32Base, uint32_t ui32SequenceNum,
259                                  uint32_t ui32Trigger, uint32_t ui32Priority);
260 extern void ADCSequenceStepConfigure(uint32_t ui32Base,
261                                      uint32_t ui32SequenceNum,
262                                      uint32_t ui32Step, uint32_t ui32Config);
263 extern int32_t ADCSequenceOverflow(uint32_t ui32Base,
264                                    uint32_t ui32SequenceNum);
265 extern void ADCSequenceOverflowClear(uint32_t ui32Base,
266                                      uint32_t ui32SequenceNum);
267 extern int32_t ADCSequenceUnderflow(uint32_t ui32Base,
268                                     uint32_t ui32SequenceNum);
269 extern void ADCSequenceUnderflowClear(uint32_t ui32Base,
270                                       uint32_t ui32SequenceNum);
271 extern int32_t ADCSequenceDataGet(uint32_t ui32Base, uint32_t ui32SequenceNum,
272                                   uint32_t *pui32Buffer);
273 extern void ADCProcessorTrigger(uint32_t ui32Base, uint32_t ui32SequenceNum);
274 extern void ADCSoftwareOversampleConfigure(uint32_t ui32Base,
275                                            uint32_t ui32SequenceNum,
276                                            uint32_t ui32Factor);
277 extern void ADCSoftwareOversampleStepConfigure(uint32_t ui32Base,
278                                                uint32_t ui32SequenceNum,
279                                                uint32_t ui32Step,
280                                                uint32_t ui32Config);
281 extern void ADCSoftwareOversampleDataGet(uint32_t ui32Base,
282                                          uint32_t ui32SequenceNum,
283                                          uint32_t *pui32Buffer,
284                                          uint32_t ui32Count);
285 extern void ADCHardwareOversampleConfigure(uint32_t ui32Base,
286                                            uint32_t ui32Factor);
287 extern void ADCClockConfigSet(uint32_t ui32Base, uint32_t ui32Config,
288                               uint32_t ui32ClockDiv);
289 extern uint32_t ADCClockConfigGet(uint32_t ui32Base, uint32_t *pui32ClockDiv);
290 
291 extern void ADCComparatorConfigure(uint32_t ui32Base, uint32_t ui32Comp,
292                                    uint32_t ui32Config);
293 extern void ADCComparatorRegionSet(uint32_t ui32Base, uint32_t ui32Comp,
294                                    uint32_t ui32LowRef, uint32_t ui32HighRef);
295 extern void ADCComparatorReset(uint32_t ui32Base, uint32_t ui32Comp,
296                                bool bTrigger, bool bInterrupt);
297 extern void ADCComparatorIntDisable(uint32_t ui32Base,
298                                     uint32_t ui32SequenceNum);
299 extern void ADCComparatorIntEnable(uint32_t ui32Base,
300                                    uint32_t ui32SequenceNum);
301 extern uint32_t ADCComparatorIntStatus(uint32_t ui32Base);
302 extern void ADCComparatorIntClear(uint32_t ui32Base, uint32_t ui32Status);
303 extern void ADCIntDisableEx(uint32_t ui32Base, uint32_t ui32IntFlags);
304 extern void ADCIntEnableEx(uint32_t ui32Base, uint32_t ui32IntFlags);
305 extern uint32_t ADCIntStatusEx(uint32_t ui32Base, bool bMasked);
306 extern void ADCIntClearEx(uint32_t ui32Base, uint32_t ui32IntFlags);
307 extern void ADCSequenceDMAEnable(uint32_t ui32Base, uint32_t ui32SequenceNum);
308 extern void ADCSequenceDMADisable(uint32_t ui32Base, uint32_t ui32SequenceNum);
309 extern bool ADCBusy(uint32_t ui32Base);
310 extern void ADCReferenceSet(uint32_t ui32Base, uint32_t ui32Ref);
311 extern uint32_t ADCReferenceGet(uint32_t ui32Base);
312 extern void ADCPhaseDelaySet(uint32_t ui32Base, uint32_t ui32Phase);
313 extern uint32_t ADCPhaseDelayGet(uint32_t ui32Base);
314 extern void ADCSampleRateSet(uint32_t ui32Base, uint32_t ui32ADCClock,
315                              uint32_t ui32Rate);
316 extern uint32_t ADCSampleRateGet(uint32_t ui32Base);
317 
318 //*****************************************************************************
319 //
320 // Mark the end of the C bindings section for C++ compilers.
321 //
322 //*****************************************************************************
323 #ifdef __cplusplus
324 }
325 #endif
326 
327 #endif // __DRIVERLIB_ADC_H__
328