1 /* --COPYRIGHT--,BSD\r
2 * Copyright (c) 2014, Texas Instruments Incorporated\r
3 * All rights reserved.\r
4 *\r
5 * Redistribution and use in source and binary forms, with or without\r
6 * modification, are permitted provided that the following conditions\r
7 * are met:\r
8 *\r
9 * * Redistributions of source code must retain the above copyright\r
10 * notice, this list of conditions and the following disclaimer.\r
11 *\r
12 * * Redistributions in binary form must reproduce the above copyright\r
13 * notice, this list of conditions and the following disclaimer in the\r
14 * documentation and/or other materials provided with the distribution.\r
15 *\r
16 * * Neither the name of Texas Instruments Incorporated nor the names of\r
17 * its contributors may be used to endorse or promote products derived\r
18 * from this software without specific prior written permission.\r
19 *\r
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\r
27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
31 * --/COPYRIGHT--*/\r
32 //*****************************************************************************\r
33 //\r
34 // adc10_a.h - Driver for the ADC10_A Module.\r
35 //\r
36 //*****************************************************************************\r
37 \r
38 #ifndef __MSP430WARE_ADC10_A_H__\r
39 #define __MSP430WARE_ADC10_A_H__\r
40 \r
41 #include "inc/hw_memmap.h"\r
42 \r
43 #ifdef __MSP430_HAS_ADC10_A__\r
44 \r
45 //*****************************************************************************\r
46 //\r
47 // If building with a C++ compiler, make all of the definitions in this header\r
48 // have a C binding.\r
49 //\r
50 //*****************************************************************************\r
51 #ifdef __cplusplus\r
52 extern "C"\r
53 {\r
54 #endif\r
55 \r
56 //*****************************************************************************\r
57 //\r
58 // The following are values that can be passed to the clockSourceSelect\r
59 // parameter for functions: ADC10_A_init().\r
60 //\r
61 //*****************************************************************************\r
62 #define ADC10_A_CLOCKSOURCE_ADC10OSC (ADC10SSEL_0)\r
63 #define ADC10_A_CLOCKSOURCE_ACLK (ADC10SSEL_1)\r
64 #define ADC10_A_CLOCKSOURCE_MCLK (ADC10SSEL_2)\r
65 #define ADC10_A_CLOCKSOURCE_SMCLK (ADC10SSEL_3)\r
66 \r
67 //*****************************************************************************\r
68 //\r
69 // The following are values that can be passed to the clockSourceDivider\r
70 // parameter for functions: ADC10_A_init().\r
71 //\r
72 //*****************************************************************************\r
73 #define ADC10_A_CLOCKDIVIDER_1 (ADC10DIV_0 + ADC10PDIV_0)\r
74 #define ADC10_A_CLOCKDIVIDER_2 (ADC10DIV_1 + ADC10PDIV_0)\r
75 #define ADC10_A_CLOCKDIVIDER_3 (ADC10DIV_2 + ADC10PDIV_0)\r
76 #define ADC10_A_CLOCKDIVIDER_4 (ADC10DIV_3 + ADC10PDIV_0)\r
77 #define ADC10_A_CLOCKDIVIDER_5 (ADC10DIV_4 + ADC10PDIV_0)\r
78 #define ADC10_A_CLOCKDIVIDER_6 (ADC10DIV_5 + ADC10PDIV_0)\r
79 #define ADC10_A_CLOCKDIVIDER_7 (ADC10DIV_6 + ADC10PDIV_0)\r
80 #define ADC10_A_CLOCKDIVIDER_8 (ADC10DIV_7 + ADC10PDIV_0)\r
81 #define ADC10_A_CLOCKDIVIDER_12 (ADC10DIV_2 + ADC10PDIV_1)\r
82 #define ADC10_A_CLOCKDIVIDER_16 (ADC10DIV_3 + ADC10PDIV_1)\r
83 #define ADC10_A_CLOCKDIVIDER_20 (ADC10DIV_4 + ADC10PDIV_1)\r
84 #define ADC10_A_CLOCKDIVIDER_24 (ADC10DIV_5 + ADC10PDIV_1)\r
85 #define ADC10_A_CLOCKDIVIDER_28 (ADC10DIV_6 + ADC10PDIV_1)\r
86 #define ADC10_A_CLOCKDIVIDER_32 (ADC10DIV_7 + ADC10PDIV_1)\r
87 #define ADC10_A_CLOCKDIVIDER_64 (ADC10DIV_0 + ADC10PDIV_2)\r
88 #define ADC10_A_CLOCKDIVIDER_128 (ADC10DIV_1 + ADC10PDIV_2)\r
89 #define ADC10_A_CLOCKDIVIDER_192 (ADC10DIV_2 + ADC10PDIV_2)\r
90 #define ADC10_A_CLOCKDIVIDER_256 (ADC10DIV_3 + ADC10PDIV_2)\r
91 #define ADC10_A_CLOCKDIVIDER_320 (ADC10DIV_4 + ADC10PDIV_2)\r
92 #define ADC10_A_CLOCKDIVIDER_384 (ADC10DIV_5 + ADC10PDIV_2)\r
93 #define ADC10_A_CLOCKDIVIDER_448 (ADC10DIV_6 + ADC10PDIV_2)\r
94 #define ADC10_A_CLOCKDIVIDER_512 (ADC10DIV_7 + ADC10PDIV_2)\r
95 \r
96 //*****************************************************************************\r
97 //\r
98 // The following are values that can be passed to the\r
99 // sampleHoldSignalSourceSelect parameter for functions: ADC10_A_init().\r
100 //\r
101 //*****************************************************************************\r
102 #define ADC10_A_SAMPLEHOLDSOURCE_SC (ADC10SHS_0)\r
103 #define ADC10_A_SAMPLEHOLDSOURCE_1 (ADC10SHS_1)\r
104 #define ADC10_A_SAMPLEHOLDSOURCE_2 (ADC10SHS_2)\r
105 #define ADC10_A_SAMPLEHOLDSOURCE_3 (ADC10SHS_3)\r
106 \r
107 //*****************************************************************************\r
108 //\r
109 // The following are values that can be passed to the multipleSamplesEnabled\r
110 // parameter for functions: ADC10_A_setupSamplingTimer().\r
111 //\r
112 //*****************************************************************************\r
113 #define ADC10_A_MULTIPLESAMPLESDISABLE (!(ADC10MSC))\r
114 #define ADC10_A_MULTIPLESAMPLESENABLE (ADC10MSC)\r
115 \r
116 //*****************************************************************************\r
117 //\r
118 // The following are values that can be passed to the clockCycleHoldCount\r
119 // parameter for functions: ADC10_A_setupSamplingTimer().\r
120 //\r
121 //*****************************************************************************\r
122 #define ADC10_A_CYCLEHOLD_4_CYCLES (ADC10SHT_0)\r
123 #define ADC10_A_CYCLEHOLD_8_CYCLES (ADC10SHT_1)\r
124 #define ADC10_A_CYCLEHOLD_16_CYCLES (ADC10SHT_2)\r
125 #define ADC10_A_CYCLEHOLD_32_CYCLES (ADC10SHT_3)\r
126 #define ADC10_A_CYCLEHOLD_64_CYCLES (ADC10SHT_4)\r
127 #define ADC10_A_CYCLEHOLD_96_CYCLES (ADC10SHT_5)\r
128 #define ADC10_A_CYCLEHOLD_128_CYCLES (ADC10SHT_6)\r
129 #define ADC10_A_CYCLEHOLD_192_CYCLES (ADC10SHT_7)\r
130 #define ADC10_A_CYCLEHOLD_256_CYCLES (ADC10SHT_8)\r
131 #define ADC10_A_CYCLEHOLD_384_CYCLES (ADC10SHT_9)\r
132 #define ADC10_A_CYCLEHOLD_512_CYCLES (ADC10SHT_10)\r
133 #define ADC10_A_CYCLEHOLD_768_CYCLES (ADC10SHT_11)\r
134 #define ADC10_A_CYCLEHOLD_1024_CYCLES (ADC10SHT_12)\r
135 \r
136 //*****************************************************************************\r
137 //\r
138 // The following are values that can be passed to the\r
139 // positiveRefVoltageSourceSelect parameter for functions:\r
140 // ADC10_A_memoryConfigure().\r
141 //\r
142 //*****************************************************************************\r
143 #define ADC10_A_VREFPOS_AVCC (!(ADC10SREF0 + ADC10SREF1))\r
144 #define ADC10_A_VREFPOS_EXT (ADC10SREF1)\r
145 #define ADC10_A_VREFPOS_INT (ADC10SREF0)\r
146 \r
147 //*****************************************************************************\r
148 //\r
149 // The following are values that can be passed to the inputSourceSelect\r
150 // parameter for functions: ADC10_A_memoryConfigure().\r
151 //\r
152 //*****************************************************************************\r
153 #define ADC10_A_INPUT_A0 (ADC10INCH_0)\r
154 #define ADC10_A_INPUT_A1 (ADC10INCH_1)\r
155 #define ADC10_A_INPUT_A2 (ADC10INCH_2)\r
156 #define ADC10_A_INPUT_A3 (ADC10INCH_3)\r
157 #define ADC10_A_INPUT_A4 (ADC10INCH_4)\r
158 #define ADC10_A_INPUT_A5 (ADC10INCH_5)\r
159 #define ADC10_A_INPUT_A6 (ADC10INCH_6)\r
160 #define ADC10_A_INPUT_A7 (ADC10INCH_7)\r
161 #define ADC10_A_INPUT_A8 (ADC10INCH_8)\r
162 #define ADC10_A_INPUT_A9 (ADC10INCH_9)\r
163 #define ADC10_A_INPUT_TEMPSENSOR (ADC10INCH_10)\r
164 #define ADC10_A_INPUT_BATTERYMONITOR (ADC10INCH_11)\r
165 #define ADC10_A_INPUT_A12 (ADC10INCH_12)\r
166 #define ADC10_A_INPUT_A13 (ADC10INCH_13)\r
167 #define ADC10_A_INPUT_A14 (ADC10INCH_14)\r
168 #define ADC10_A_INPUT_A15 (ADC10INCH_15)\r
169 \r
170 //*****************************************************************************\r
171 //\r
172 // The following are values that can be passed to the\r
173 // negativeRefVoltageSourceSelect parameter for functions:\r
174 // ADC10_A_memoryConfigure().\r
175 //\r
176 //*****************************************************************************\r
177 #define ADC10_A_VREFNEG_AVSS (!(ADC10SREF2))\r
178 #define ADC10_A_VREFNEG_EXT (ADC10SREF2)\r
179 \r
180 //*****************************************************************************\r
181 //\r
182 // The following are values that can be passed to the interruptMask parameter\r
183 // for functions: ADC10_A_enableInterrupt(), and ADC10_A_disableInterrupt().\r
184 //\r
185 //*****************************************************************************\r
186 #define ADC10_A_TIMEOVERFLOW_INT (ADC10TOVIE)\r
187 #define ADC10_A_OVERFLOW_INT (ADC10OVIE)\r
188 #define ADC10_A_ABOVETHRESHOLD_INT (ADC10HIIE)\r
189 #define ADC10_A_BELOWTHRESHOLD_INT (ADC10LOIE)\r
190 #define ADC10_A_INSIDEWINDOW_INT (ADC10INIE)\r
191 #define ADC10_A_COMPLETED_INT (ADC10IE0)\r
192 \r
193 //*****************************************************************************\r
194 //\r
195 // The following are values that can be passed to the interruptFlagMask\r
196 // parameter for functions: ADC10_A_clearInterrupt(), and\r
197 // ADC10_A_getInterruptStatus().\r
198 //\r
199 //*****************************************************************************\r
200 #define ADC10_A_TIMEOVERFLOW_INTFLAG (ADC10TOVIFG)\r
201 #define ADC10_A_OVERFLOW_INTFLAG (ADC10OVIFG)\r
202 #define ADC10_A_ABOVETHRESHOLD_INTFLAG (ADC10HIIFG)\r
203 #define ADC10_A_BELOWTHRESHOLD_INTFLAG (ADC10LOIFG)\r
204 #define ADC10_A_INSIDEWINDOW_INTFLAG (ADC10INIFG)\r
205 #define ADC10_A_COMPLETED_INTFLAG (ADC10IFG0)\r
206 \r
207 //*****************************************************************************\r
208 //\r
209 // The following are values that can be passed to the\r
210 // conversionSequenceModeSelect parameter for functions:\r
211 // ADC10_A_startConversion().\r
212 //\r
213 //*****************************************************************************\r
214 #define ADC10_A_SINGLECHANNEL (ADC10CONSEQ_0)\r
215 #define ADC10_A_SEQOFCHANNELS (ADC10CONSEQ_1)\r
216 #define ADC10_A_REPEATED_SINGLECHANNEL (ADC10CONSEQ_2)\r
217 #define ADC10_A_REPEATED_SEQOFCHANNELS (ADC10CONSEQ_3)\r
218 \r
219 //*****************************************************************************\r
220 //\r
221 // The following are values that can be passed to the preempt parameter for\r
222 // functions: ADC10_A_disableConversions().\r
223 //\r
224 //*****************************************************************************\r
225 #define ADC10_A_COMPLETECONVERSION false\r
226 #define ADC10_A_PREEMPTCONVERSION true\r
227 \r
228 //*****************************************************************************\r
229 //\r
230 // The following are values that can be passed to the resolutionSelect\r
231 // parameter for functions: ADC10_A_setResolution().\r
232 //\r
233 //*****************************************************************************\r
234 #define ADC10_A_RESOLUTION_8BIT (!(ADC10RES))\r
235 #define ADC10_A_RESOLUTION_10BIT (ADC10RES)\r
236 \r
237 //*****************************************************************************\r
238 //\r
239 // The following are values that can be passed to the invertedSignal parameter\r
240 // for functions: ADC10_A_setSampleHoldSignalInversion().\r
241 //\r
242 //*****************************************************************************\r
243 #define ADC10_A_NONINVERTEDSIGNAL (!(ADC10ISSH))\r
244 #define ADC10_A_INVERTEDSIGNAL (ADC10ISSH)\r
245 \r
246 //*****************************************************************************\r
247 //\r
248 // The following are values that can be passed to the readBackFormat parameter\r
249 // for functions: ADC10_A_setDataReadBackFormat().\r
250 //\r
251 //*****************************************************************************\r
252 #define ADC10_A_UNSIGNED_BINARY (!(ADC10DF))\r
253 #define ADC10_A_SIGNED_2SCOMPLEMENT (ADC10DF)\r
254 \r
255 //*****************************************************************************\r
256 //\r
257 // The following are values that can be passed to the samplingRateSelect\r
258 // parameter for functions: ADC10_A_setReferenceBufferSamplingRate().\r
259 //\r
260 //*****************************************************************************\r
261 #define ADC10_A_MAXSAMPLINGRATE_200KSPS (!(ADC10SR))\r
262 #define ADC10_A_MAXSAMPLINGRATE_50KSPS (ADC10SR)\r
263 \r
264 //*****************************************************************************\r
265 //\r
266 // The following are values that can be passed toThe following are values that\r
267 // can be returned by the ADC10_A_isBusy() function.\r
268 //\r
269 //*****************************************************************************\r
270 #define ADC10_A_BUSY ADC10BUSY\r
271 #define ADC10_A_NOTBUSY 0x00\r
272 \r
273 //*****************************************************************************\r
274 //\r
275 // Prototypes for the APIs.\r
276 //\r
277 //*****************************************************************************\r
278 extern bool ADC10_A_init(uint16_t baseAddress,\r
279 uint16_t sampleHoldSignalSourceSelect,\r
280 uint8_t clockSourceSelect,\r
281 uint16_t clockSourceDivider);\r
282 \r
283 extern void ADC10_A_enable(uint16_t baseAddress);\r
284 \r
285 extern void ADC10_A_disable(uint16_t baseAddress);\r
286 \r
287 extern void ADC10_A_setupSamplingTimer(uint16_t baseAddress,\r
288 uint16_t clockCycleHoldCount,\r
289 uint16_t multipleSamplesEnabled);\r
290 \r
291 extern void ADC10_A_disableSamplingTimer(uint16_t baseAddress);\r
292 \r
293 extern void ADC10_A_memoryConfigure(uint16_t baseAddress,\r
294 uint8_t inputSourceSelect,\r
295 uint8_t positiveRefVoltageSourceSelect,\r
296 uint8_t negativeRefVoltageSourceSelect);\r
297 \r
298 extern void ADC10_A_enableInterrupt(uint16_t baseAddress,\r
299 uint8_t interruptMask);\r
300 \r
301 extern void ADC10_A_disableInterrupt(uint16_t baseAddress,\r
302 uint8_t interruptMask);\r
303 \r
304 extern void ADC10_A_clearInterrupt(uint16_t baseAddress,\r
305 uint8_t interruptFlagMask);\r
306 \r
307 extern uint8_t ADC10_A_getInterruptStatus(uint16_t baseAddress,\r
308 uint8_t interruptFlagMask);\r
309 \r
310 extern void ADC10_A_startConversion(uint16_t baseAddress,\r
311 uint8_t conversionSequenceModeSelect);\r
312 \r
313 extern void ADC10_A_disableConversions(uint16_t baseAddress,\r
314 bool preempt);\r
315 \r
316 extern int16_t ADC10_A_getResults(uint16_t baseAddress);\r
317 \r
318 extern void ADC10_A_setResolution(uint16_t baseAddress,\r
319 uint8_t resolutionSelect);\r
320 \r
321 extern void ADC10_A_setSampleHoldSignalInversion(uint16_t baseAddress,\r
322 uint16_t invertedSignal);\r
323 \r
324 extern void ADC10_A_setDataReadBackFormat(uint16_t baseAddress,\r
325 uint16_t readBackFormat);\r
326 \r
327 extern void ADC10_A_enableReferenceBurst(uint16_t baseAddress);\r
328 \r
329 extern void ADC10_A_disableReferenceBurst(uint16_t baseAddress);\r
330 \r
331 extern void ADC10_A_setReferenceBufferSamplingRate(uint16_t baseAddress,\r
332 uint16_t samplingRateSelect);\r
333 \r
334 extern void ADC10_A_setWindowComp(uint16_t baseAddress,\r
335 uint16_t highThreshold,\r
336 uint16_t lowThreshold);\r
337 \r
338 extern uint32_t ADC10_A_getMemoryAddressForDMA(uint16_t baseAddress);\r
339 \r
340 extern uint16_t ADC10_A_isBusy(uint16_t baseAddress);\r
341 \r
342 //*****************************************************************************\r
343 //\r
344 // Mark the end of the C bindings section for C++ compilers.\r
345 //\r
346 //*****************************************************************************\r
347 #ifdef __cplusplus\r
348 }\r
349 #endif\r
350 \r
351 #endif\r
352 #endif // __MSP430WARE_ADC10_A_H__\r