AM275 FreeRTOS SDK  11.01.00
adc/v0/adc.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2021-2025 Texas Instruments Incorporated
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the
14  * distribution.
15  *
16  * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
50 #ifndef ADC_V0_H_
51 #define ADC_V0_H_
52 
53 /* ========================================================================== */
54 /* Include Files */
55 /* ========================================================================== */
56 
57 #include <drivers/hw_include/cslr.h>
58 #include <drivers/hw_include/cslr_adc.h>
59 
60 #ifdef __cplusplus
61 extern "C" {
62 #endif
63 
64 /* ========================================================================== */
65 /* Macros & Typedefs */
66 /* ========================================================================== */
67 
69 #define ADC_INTR_STATUS_ALL (ADC_IRQSTATUS_END_OF_SEQUENCE_MASK | \
70  ADC_IRQSTATUS_FIFO0_THR_MASK | \
71  ADC_IRQSTATUS_FIFO0_OVERRUN_MASK | \
72  ADC_IRQSTATUS_FIFO0_UNDERFLOW_MASK | \
73  ADC_IRQSTATUS_FIFO1_THR_MASK | \
74  ADC_IRQSTATUS_FIFO1_OVERRUN_MASK | \
75  ADC_IRQSTATUS_FIFO1_UNDERFLOW_MASK | \
76  ADC_IRQSTATUS_OUT_OF_RANGE_MASK)
77 
78 #define ADC_INTR_ENABLE_ALL (ADC_IRQENABLE_SET_END_OF_SEQUENCE_MASK | \
79  ADC_IRQENABLE_SET_FIFO0_THR_MASK | \
80  ADC_IRQENABLE_SET_FIFO0_OVERRUN_MASK | \
81  ADC_IRQENABLE_SET_FIFO0_UNDERFLOW_MASK | \
82  ADC_IRQENABLE_SET_FIFO1_THR_MASK | \
83  ADC_IRQENABLE_SET_FIFO1_OVERRUN_MASK | \
84  ADC_IRQENABLE_SET_FIFO1_UNDERFLOW_MASK | \
85  ADC_IRQENABLE_SET_OUT_OF_RANGE_MASK)
86 
87 #define ADC_INTR_DISABLE_ALL (ADC_IRQENABLE_CLR_END_OF_SEQUENCE_MASK | \
88  ADC_IRQENABLE_CLR_FIFO0_THR_MASK | \
89  ADC_IRQENABLE_CLR_FIFO0_OVERRUN_MASK | \
90  ADC_IRQENABLE_CLR_FIFO0_UNDERFLOW_MASK | \
91  ADC_IRQENABLE_CLR_FIFO1_THR_MASK | \
92  ADC_IRQENABLE_CLR_FIFO1_OVERRUN_MASK | \
93  ADC_IRQENABLE_CLR_FIFO1_UNDERFLOW_MASK | \
94  ADC_IRQENABLE_CLR_OUT_OF_RANGE_MASK)
95 
96 #define ADC_INTR_ALL (ADC_INTR_STATUS_ALL)
97 
99 #define ADC_OPENDELAY_MAX (0x3FFFFU)
100 
101 #define ADC_SAMPLEDELAY_MAX (0xFFU)
102 
103 #define ADC_RANGE_MAX (0x3FFU)
104 
105 #define ADC_RANGE_MIN (0x0U)
106 
108 #define ADC_FIFO_SIZE (64U)
109 
111 #define ADC_GET_RANGE(bit) (((uint32_t) 1U) << (bit))
112 
113 /* ========================================================================== */
114 /* Structures and Enums */
115 /* ========================================================================== */
116 
125 typedef uint32_t adcChannel_t;
126 
127 #define ADC_CHANNEL_1 (ADC_STEPCONFIG_SEL_INM_SWC_CHANNEL_1)
128 
129 #define ADC_CHANNEL_2 (ADC_STEPCONFIG_SEL_INM_SWC_CHANNEL_2)
130 
131 #define ADC_CHANNEL_3 (ADC_STEPCONFIG_SEL_INM_SWC_CHANNEL_3)
132 
133 #define ADC_CHANNEL_4 (ADC_STEPCONFIG_SEL_INM_SWC_CHANNEL_4)
134 
135 #define ADC_CHANNEL_5 (ADC_STEPCONFIG_SEL_INM_SWC_CHANNEL_5)
136 
137 #define ADC_CHANNEL_6 (ADC_STEPCONFIG_SEL_INM_SWC_CHANNEL_6)
138 
139 #define ADC_CHANNEL_7 (ADC_STEPCONFIG_SEL_INM_SWC_CHANNEL_7)
140 
141 #define ADC_CHANNEL_8 (ADC_STEPCONFIG_SEL_INM_SWC_CHANNEL_8)
142 
153 typedef uint32_t adcStepId_t;
154 
155 #define ADC_STEP_1 (ADC_ADCSTAT_STEP_ID_STEP1)
156 
157 #define ADC_STEP_2 (ADC_ADCSTAT_STEP_ID_STEP2)
158 
159 #define ADC_STEP_3 (ADC_ADCSTAT_STEP_ID_STEP3)
160 
161 #define ADC_STEP_4 (ADC_ADCSTAT_STEP_ID_STEP4)
162 
163 #define ADC_STEP_5 (ADC_ADCSTAT_STEP_ID_STEP5)
164 
165 #define ADC_STEP_6 (ADC_ADCSTAT_STEP_ID_STEP6)
166 
167 #define ADC_STEP_7 (ADC_ADCSTAT_STEP_ID_STEP7)
168 
169 #define ADC_STEP_8 (ADC_ADCSTAT_STEP_ID_STEP8)
170 
171 #define ADC_STEP_9 (ADC_ADCSTAT_STEP_ID_STEP9)
172 
173 #define ADC_STEP_10 (ADC_ADCSTAT_STEP_ID_STEP10)
174 
175 #define ADC_STEP_11 (ADC_ADCSTAT_STEP_ID_STEP11)
176 
177 #define ADC_STEP_12 (ADC_ADCSTAT_STEP_ID_STEP12)
178 
179 #define ADC_STEP_13 (ADC_ADCSTAT_STEP_ID_STEP13)
180 
181 #define ADC_STEP_14 (ADC_ADCSTAT_STEP_ID_STEP14)
182 
183 #define ADC_STEP_15 (ADC_ADCSTAT_STEP_ID_STEP15)
184 
185 #define ADC_STEP_16 (ADC_ADCSTAT_STEP_ID_STEP16)
186 
200 typedef uint32_t adcOperationMode_t;
201 
202 #define ADC_OPERATION_MODE_SINGLE_SHOT (ADC_STEPCONFIG_MODE_SW_EN_ONESHOT)
203 
204 #define ADC_OPERATION_MODE_CONTINUOUS (ADC_STEPCONFIG_MODE_SW_EN_CONTINUOUS)
205 
218 typedef uint32_t adcAveraging_t;
219 
220 #define ADC_AVERAGING_NONE (ADC_STEPCONFIG_AVERAGING_NOAVG)
221 
222 #define ADC_AVERAGING_2_SAMPLES (ADC_STEPCONFIG_AVERAGING_2_SAMPLESAVG)
223 
224 #define ADC_AVERAGING_4_SAMPLES (ADC_STEPCONFIG_AVERAGING_4_SAMPLESAVG)
225 
226 #define ADC_AVERAGING_8_SAMPLES (ADC_STEPCONFIG_AVERAGING_8_SAMPLESAVG)
227 
228 #define ADC_AVERAGING_16_SAMPLES (ADC_STEPCONFIG_AVERAGING_16_SAMPLESAV)
229 
240 typedef uint32_t adcFIFONum_t;
241 
242 #define ADC_FIFO_NUM_0 (0x0U)
243 
244 #define ADC_FIFO_NUM_1 (0x1U)
245 
256 typedef uint32_t adcIntrSrc_t;
257 
258 #define ADC_INTR_SRC_END_OF_SEQUENCE (ADC_IRQENABLE_SET_END_OF_SEQUENCE_MASK)
259 
260 #define ADC_INTR_SRC_FIFO0_THRESHOLD (ADC_IRQENABLE_SET_FIFO0_THR_MASK)
261 
262 #define ADC_INTR_SRC_FIFO0_OVERRUN (ADC_IRQENABLE_SET_FIFO0_OVERRUN_MASK)
263 
264 #define ADC_INTR_SRC_FIFO0_UNDERFLOW (ADC_IRQENABLE_SET_FIFO0_UNDERFLOW_MASK)
265 
266 #define ADC_INTR_SRC_FIFO1_THRESHOLD (ADC_IRQENABLE_SET_FIFO1_THR_MASK)
267 
268 #define ADC_INTR_SRC_FIFO1_OVERRUN (ADC_IRQSTATUS_FIFO1_OVERRUN_MASK)
269 
270 #define ADC_INTR_SRC_FIFO1_UNDERFLOW (ADC_IRQENABLE_SET_FIFO1_UNDERFLOW_MASK)
271 
272 #define ADC_INTR_SRC_OUT_OF_RANGE (ADC_IRQENABLE_SET_OUT_OF_RANGE_MASK)
273 
284 typedef uint32_t adcIdleMode_t;
285 
286 #define ADC_IDLE_MODE_FORCE_IDLE (ADC_SYSCONFIG_IDLEMODE_FORCE)
287 
288 #define ADC_IDLE_MODE_NO_IDLE (ADC_SYSCONFIG_IDLEMODE_NO_IDLE)
289 
290 #define ADC_IDLE_MODE_SMART_IDLE (ADC_SYSCONFIG_IDLEMODE_SMART_IDLE)
291 
297 typedef struct adcRevisionId
298 {
299  uint32_t scheme;
301  uint32_t func;
303  uint32_t rtlRev;
305  uint32_t major;
307  uint32_t custom;
309  uint32_t minor;
312 
316 typedef struct adcStepConfig
317 {
318  uint32_t mode;
322  uint32_t channel;
326  uint32_t openDelay;
332  uint32_t sampleDelay;
342  uint32_t averaging;
346  uint32_t fifoNum;
351 
355 typedef struct adcSequencerStatus
356 {
357  uint32_t afeBusy;
362  uint32_t fsmBusy;
366  uint32_t stepId;
371 
372 /* ========================================================================== */
373 /* Global Variables Declarations */
374 /* ========================================================================== */
375 
376 /* None */
377 
378 /* ========================================================================== */
379 /* Function Declarations */
380 /* ========================================================================== */
381 
389 void ADC_powerUp(uint32_t baseAddr, uint32_t powerUp);
390 
399 uint32_t Adc_isPoweredUp(uint32_t baseAddr);
400 
413 int32_t ADC_setClkDivider(uint32_t baseAddr, uint32_t clkDivider);
414 
426 void ADC_init(uint32_t baseAddr,
427  uint32_t errCorrection,
428  uint32_t errOffset,
429  uint32_t calibration);
430 
440 void ADC_FIFODMAAccessEnable(uint32_t baseAddr,
441  uint32_t fifoNum,
442  uint32_t dmaLineEnable);
443 
455 int32_t ADC_setStepParams(uint32_t baseAddr,
456  uint32_t stepId,
457  const adcStepConfig_t *configParams);
458 
468 void ADC_stepEnable(uint32_t baseAddr,
469  uint32_t stepId,
470  uint32_t stepEnable);
471 
477 void ADC_clearAllSteps(uint32_t baseAddr);
478 
486 void ADC_start(uint32_t baseAddr, uint32_t adcEnable);
487 
498 void ADC_stepIdTagEnable(uint32_t baseAddr, uint32_t stepIdTag);
499 
509 uint32_t ADC_getFIFOData(uint32_t baseAddr, uint32_t fifoNum);
510 
520 uint32_t ADC_getFIFOWordCount(uint32_t baseAddr, uint32_t fifoNum);
521 
537 int32_t ADC_setCPUFIFOThresholdLevel(uint32_t baseAddr,
538  uint32_t fifoNum,
539  uint32_t threshold);
540 
552 uint32_t ADC_getCPUFIFOThresholdLevel(uint32_t baseAddr, uint32_t fifoNum);
553 
569 int32_t ADC_setDMAFIFOThresholdLevel(uint32_t baseAddr,
570  uint32_t fifoNum,
571  uint32_t threshold);
572 
583 uint32_t ADC_getDMAFIFOThresholdLevel(uint32_t baseAddr, uint32_t fifoNum);
584 
592 void ADC_enableIntr(uint32_t baseAddr, uint32_t intrMask);
593 
600 void ADC_disableIntr(uint32_t baseAddr, uint32_t intrMask);
601 
607 void ADC_writeEOI(uint32_t baseAddr);
608 
616 uint32_t ADC_getIntrStatus(uint32_t baseAddr);
617 
624 void ADC_clearIntrStatus(uint32_t baseAddr, uint32_t intrMask);
625 
633 uint32_t ADC_getIntrRawStatus(uint32_t baseAddr);
634 
644 int32_t ADC_setRange(uint32_t baseAddr, uint32_t highRange, uint32_t lowRange);
645 
653 void ADC_getRange(uint32_t baseAddr,
654  uint32_t *highRange,
655  uint32_t *lowRange);
656 
664 void ADC_getSequencerStatus(uint32_t baseAddr,
666 
675 void ADC_setIdleMode(uint32_t baseAddr, uint32_t idleMode);
676 
684 void ADC_getRevisionId(uint32_t baseAddr, adcRevisionId_t *revId);
685 
686 /* ========================================================================== */
687 /* Static Function Definitions */
688 /* ========================================================================== */
689 
690 /* None */
691 
692 #ifdef __cplusplus
693 }
694 #endif
695 
696 #endif /* #ifndef ADC_V0_H_ */
697 
ADC_getDMAFIFOThresholdLevel
uint32_t ADC_getDMAFIFOThresholdLevel(uint32_t baseAddr, uint32_t fifoNum)
This API will read and return DMA request level for a FIFO.
adcSequencerStatus_t::fsmBusy
uint32_t fsmBusy
Definition: adc/v0/adc.h:362
adcStepConfig_t::sampleDelay
uint32_t sampleDelay
Definition: adc/v0/adc.h:332
Adc_isPoweredUp
uint32_t Adc_isPoweredUp(uint32_t baseAddr)
This function checks if the ADC module is powered up.
status
uint32_t status
Definition: tisci_lpm.h:1
ADC_getSequencerStatus
void ADC_getSequencerStatus(uint32_t baseAddr, adcSequencerStatus_t *status)
This API is used to get the Sequencer status.
adcOperationMode_t
uint32_t adcOperationMode_t
Enum to select the ADC Operation Mode.
Definition: adc/v0/adc.h:200
adcStepConfig_t::fifoNum
uint32_t fifoNum
Definition: adc/v0/adc.h:346
adcStepConfig_t::mode
uint32_t mode
Definition: adc/v0/adc.h:318
ADC_clearAllSteps
void ADC_clearAllSteps(uint32_t baseAddr)
This API will clear all the ADC steps.
ADC_getCPUFIFOThresholdLevel
uint32_t ADC_getCPUFIFOThresholdLevel(uint32_t baseAddr, uint32_t fifoNum)
This API will read and return threshold level for a FIFO.
adcRevisionId_t
Structure for accessing Revision ID of ADC module.
Definition: adc/v0/adc.h:298
adcStepConfig_t::averaging
uint32_t averaging
Definition: adc/v0/adc.h:342
ADC_clearIntrStatus
void ADC_clearIntrStatus(uint32_t baseAddr, uint32_t intrMask)
This API is used to clear the interrupt status.
ADC_powerUp
void ADC_powerUp(uint32_t baseAddr, uint32_t powerUp)
This API will power up ADC Module.
adcStepConfig_t
Structure containing parameters for ADC step configuration.
Definition: adc/v0/adc.h:317
ADC_init
void ADC_init(uint32_t baseAddr, uint32_t errCorrection, uint32_t errOffset, uint32_t calibration)
This API is used to initialize the ADC module.
ADC_setRange
int32_t ADC_setRange(uint32_t baseAddr, uint32_t highRange, uint32_t lowRange)
This API is used to configure the range for ADC.
ADC_stepEnable
void ADC_stepEnable(uint32_t baseAddr, uint32_t stepId, uint32_t stepEnable)
This API will enable ADC step.
ADC_FIFODMAAccessEnable
void ADC_FIFODMAAccessEnable(uint32_t baseAddr, uint32_t fifoNum, uint32_t dmaLineEnable)
This API will enable DMA access for FIFO.
ADC_getFIFOData
uint32_t ADC_getFIFOData(uint32_t baseAddr, uint32_t fifoNum)
This API will read and return FIFO data.
ADC_getFIFOWordCount
uint32_t ADC_getFIFOWordCount(uint32_t baseAddr, uint32_t fifoNum)
This API will return number of word present in the FIFO.
adcFIFONum_t
uint32_t adcFIFONum_t
Enum to select FIFO to store the data.
Definition: adc/v0/adc.h:240
ADC_setDMAFIFOThresholdLevel
int32_t ADC_setDMAFIFOThresholdLevel(uint32_t baseAddr, uint32_t fifoNum, uint32_t threshold)
This API will configure DMA request level for a FIFO.
ADC_getRange
void ADC_getRange(uint32_t baseAddr, uint32_t *highRange, uint32_t *lowRange)
This API is used to get the range for conversion.
adcRevisionId_t::custom
uint32_t custom
Definition: adc/v0/adc.h:307
adcStepConfig_t::rangeCheckEnable
uint32_t rangeCheckEnable
Definition: adc/v0/adc.h:337
adcSequencerStatus_t::afeBusy
uint32_t afeBusy
Definition: adc/v0/adc.h:357
ADC_setClkDivider
int32_t ADC_setClkDivider(uint32_t baseAddr, uint32_t clkDivider)
This API will configure clock divider for the ADC Module.
adcRevisionId_t::scheme
uint32_t scheme
Definition: adc/v0/adc.h:299
ADC_setStepParams
int32_t ADC_setStepParams(uint32_t baseAddr, uint32_t stepId, const adcStepConfig_t *configParams)
This API will configure a step for analog to digital conversion.
adcSequencerStatus_t::stepId
uint32_t stepId
Definition: adc/v0/adc.h:366
adcRevisionId_t::rtlRev
uint32_t rtlRev
Definition: adc/v0/adc.h:303
ADC_getIntrRawStatus
uint32_t ADC_getIntrRawStatus(uint32_t baseAddr)
This API is used to get the raw interrupt status.
ADC_start
void ADC_start(uint32_t baseAddr, uint32_t adcEnable)
This API will start ADC.
adcStepId_t
uint32_t adcStepId_t
Enum to select the step for operation.
Definition: adc/v0/adc.h:153
ADC_disableIntr
void ADC_disableIntr(uint32_t baseAddr, uint32_t intrMask)
This API is used to disable interrupts.
ADC_setIdleMode
void ADC_setIdleMode(uint32_t baseAddr, uint32_t idleMode)
This API is used to configure ADC idle mode.
adcRevisionId_t::minor
uint32_t minor
Definition: adc/v0/adc.h:309
adcIntrSrc_t
uint32_t adcIntrSrc_t
Enum for ADC interrupts.
Definition: adc/v0/adc.h:256
ADC_writeEOI
void ADC_writeEOI(uint32_t baseAddr)
This API is used for EOI for ADC.
adcRevisionId_t::func
uint32_t func
Definition: adc/v0/adc.h:301
ADC_getRevisionId
void ADC_getRevisionId(uint32_t baseAddr, adcRevisionId_t *revId)
This API is used get the ADC revision ID.
adcStepConfig_t::openDelay
uint32_t openDelay
Definition: adc/v0/adc.h:326
ADC_stepIdTagEnable
void ADC_stepIdTagEnable(uint32_t baseAddr, uint32_t stepIdTag)
This API is used to configure the ADC module for storing step ID along with ADC data.
ADC_setCPUFIFOThresholdLevel
int32_t ADC_setCPUFIFOThresholdLevel(uint32_t baseAddr, uint32_t fifoNum, uint32_t threshold)
This API will configure threshold level for a FIFO.
adcChannel_t
uint32_t adcChannel_t
Enum to select the channel for input.
Definition: adc/v0/adc.h:125
adcRevisionId_t::major
uint32_t major
Definition: adc/v0/adc.h:305
adcIdleMode_t
uint32_t adcIdleMode_t
Enum to configure ADC idle mode.Applicable for TDA3XX Only.
Definition: adc/v0/adc.h:284
adcAveraging_t
uint32_t adcAveraging_t
Enum to number of samplings to average.
Definition: adc/v0/adc.h:218
adcStepConfig_t::channel
uint32_t channel
Definition: adc/v0/adc.h:322
ADC_enableIntr
void ADC_enableIntr(uint32_t baseAddr, uint32_t intrMask)
This API is used to enable interrupts.
adcSequencerStatus_t
Structure for reporting ADC sequencer status.
Definition: adc/v0/adc.h:356
ADC_getIntrStatus
uint32_t ADC_getIntrStatus(uint32_t baseAddr)
This API is used to get the pending interrupts.