33#ifdef LIBOPENCM3_ADC_H
35#ifndef LIBOPENCM3_ADC_COMMON_V1_H
36#define LIBOPENCM3_ADC_COMMON_V1_H
52#define ADC_SR(block) MMIO32((block) + 0x00)
55#define ADC_CR1(block) MMIO32((block) + 0x04)
58#define ADC_CR2(block) MMIO32((block) + 0x08)
61#define ADC_SMPR1(block) MMIO32((block) + 0x0c)
64#define ADC_SMPR2(block) MMIO32((block) + 0x10)
66#define ADC1_SR ADC_SR(ADC1)
67#define ADC1_CR1 ADC_CR1(ADC1)
68#define ADC1_CR2 ADC_CR2(ADC1)
69#define ADC1_SMPR1 ADC_SMPR1(ADC1)
70#define ADC1_SMPR2 ADC_SMPR2(ADC1)
72#define ADC1_JOFR1 ADC_JOFR1(ADC1)
73#define ADC1_JOFR2 ADC_JOFR2(ADC1)
74#define ADC1_JOFR3 ADC_JOFR3(ADC1)
75#define ADC1_JOFR4 ADC_JOFR4(ADC1)
77#define ADC1_HTR ADC_HTR(ADC1)
78#define ADC1_LTR ADC_LTR(ADC1)
80#define ADC1_SQR1 ADC_SQR1(ADC1)
81#define ADC1_SQR2 ADC_SQR2(ADC1)
82#define ADC1_SQR3 ADC_SQR3(ADC1)
83#define ADC1_JSQR ADC_JSQR(ADC1)
85#define ADC1_JDR1 ADC_JDR1(ADC1)
86#define ADC1_JDR2 ADC_JDR2(ADC1)
87#define ADC1_JDR3 ADC_JDR3(ADC1)
88#define ADC1_JDR4 ADC_JDR4(ADC1)
89#define ADC1_DR ADC_DR(ADC1)
93#define ADC2_SR ADC_SR(ADC2)
94#define ADC2_CR1 ADC_CR1(ADC2)
95#define ADC2_CR2 ADC_CR2(ADC2)
96#define ADC2_SMPR1 ADC_SMPR1(ADC2)
97#define ADC2_SMPR2 ADC_SMPR2(ADC2)
99#define ADC2_JOFR1 ADC_JOFR1(ADC2)
100#define ADC2_JOFR2 ADC_JOFR2(ADC2)
101#define ADC2_JOFR3 ADC_JOFR3(ADC2)
102#define ADC2_JOFR4 ADC_JOFR4(ADC2)
105#define ADC2_HTR ADC_HTR(ADC2)
107#define ADC2_LTR ADC_LTR(ADC2)
110#define ADC2_SQR1 ADC_SQR1(ADC2)
112#define ADC2_SQR2 ADC_SQR2(ADC2)
114#define ADC2_SQR3 ADC_SQR3(ADC2)
116#define ADC2_JSQR ADC_JSQR(ADC2)
119#define ADC2_JDR1 ADC_JDR1(ADC2)
120#define ADC2_JDR2 ADC_JDR2(ADC2)
121#define ADC2_JDR3 ADC_JDR3(ADC2)
122#define ADC2_JDR4 ADC_JDR4(ADC2)
124#define ADC2_DR ADC_DR(ADC2)
127#if defined(ADC3_BASE)
128#define ADC3 ADC3_BASE
129#define ADC3_SR ADC_SR(ADC3)
130#define ADC3_CR1 ADC_CR1(ADC3)
131#define ADC3_CR2 ADC_CR2(ADC3)
132#define ADC3_SMPR1 ADC_SMPR1(ADC3)
133#define ADC3_SMPR2 ADC_SMPR2(ADC3)
135#define ADC3_JOFR1 ADC_JOFR1(ADC3)
136#define ADC3_JOFR2 ADC_JOFR2(ADC3)
137#define ADC3_JOFR3 ADC_JOFR3(ADC3)
138#define ADC3_JOFR4 ADC_JOFR4(ADC3)
140#define ADC3_HTR ADC_HTR(ADC3)
141#define ADC3_LTR ADC_LTR(ADC3)
143#define ADC3_SQR1 ADC_SQR1(ADC3)
144#define ADC3_SQR2 ADC_SQR2(ADC3)
145#define ADC3_SQR3 ADC_SQR3(ADC3)
146#define ADC3_JSQR ADC_JSQR(ADC3)
148#define ADC3_JDR1 ADC_JDR1(ADC3)
149#define ADC3_JDR2 ADC_JDR2(ADC3)
150#define ADC3_JDR3 ADC_JDR3(ADC3)
151#define ADC3_JDR4 ADC_JDR4(ADC3)
152#define ADC3_DR ADC_DR(ADC3)
164#define ADC_CHANNEL0 0x00
165#define ADC_CHANNEL1 0x01
166#define ADC_CHANNEL2 0x02
167#define ADC_CHANNEL3 0x03
168#define ADC_CHANNEL4 0x04
169#define ADC_CHANNEL5 0x05
170#define ADC_CHANNEL6 0x06
171#define ADC_CHANNEL7 0x07
172#define ADC_CHANNEL8 0x08
173#define ADC_CHANNEL9 0x09
174#define ADC_CHANNEL10 0x0A
175#define ADC_CHANNEL11 0x0B
176#define ADC_CHANNEL12 0x0C
177#define ADC_CHANNEL13 0x0D
178#define ADC_CHANNEL14 0x0E
179#define ADC_CHANNEL15 0x0F
180#define ADC_CHANNEL16 0x10
181#define ADC_CHANNEL17 0x11
182#define ADC_CHANNEL18 0x12
184#define ADC_CHANNEL_MASK 0x1F
195#define ADC_SR_STRT (1 << 4)
198#define ADC_SR_JSTRT (1 << 3)
201#define ADC_SR_JEOC (1 << 2)
204#define ADC_SR_EOC (1 << 1)
207#define ADC_SR_AWD (1 << 0)
213#define ADC_CR1_AWDEN (1 << 23)
216#define ADC_CR1_JAWDEN (1 << 22)
227#define ADC_CR1_DISCNUM_1CHANNELS (0x0 << 13)
228#define ADC_CR1_DISCNUM_2CHANNELS (0x1 << 13)
229#define ADC_CR1_DISCNUM_3CHANNELS (0x2 << 13)
230#define ADC_CR1_DISCNUM_4CHANNELS (0x3 << 13)
231#define ADC_CR1_DISCNUM_5CHANNELS (0x4 << 13)
232#define ADC_CR1_DISCNUM_6CHANNELS (0x5 << 13)
233#define ADC_CR1_DISCNUM_7CHANNELS (0x6 << 13)
234#define ADC_CR1_DISCNUM_8CHANNELS (0x7 << 13)
236#define ADC_CR1_DISCNUM_MASK (0x7 << 13)
237#define ADC_CR1_DISCNUM_SHIFT 13
240#define ADC_CR1_JDISCEN (1 << 12)
243#define ADC_CR1_DISCEN (1 << 11)
246#define ADC_CR1_JAUTO (1 << 10)
249#define ADC_CR1_AWDSGL (1 << 9)
252#define ADC_CR1_SCAN (1 << 8)
255#define ADC_CR1_JEOCIE (1 << 7)
258#define ADC_CR1_AWDIE (1 << 6)
261#define ADC_CR1_EOCIE (1 << 5)
273#define ADC_CR1_AWDCH_CHANNEL0 (0x00 << 0)
274#define ADC_CR1_AWDCH_CHANNEL1 (0x01 << 0)
275#define ADC_CR1_AWDCH_CHANNEL2 (0x02 << 0)
276#define ADC_CR1_AWDCH_CHANNEL3 (0x03 << 0)
277#define ADC_CR1_AWDCH_CHANNEL4 (0x04 << 0)
278#define ADC_CR1_AWDCH_CHANNEL5 (0x05 << 0)
279#define ADC_CR1_AWDCH_CHANNEL6 (0x06 << 0)
280#define ADC_CR1_AWDCH_CHANNEL7 (0x07 << 0)
281#define ADC_CR1_AWDCH_CHANNEL8 (0x08 << 0)
282#define ADC_CR1_AWDCH_CHANNEL9 (0x09 << 0)
283#define ADC_CR1_AWDCH_CHANNEL10 (0x0A << 0)
284#define ADC_CR1_AWDCH_CHANNEL11 (0x0B << 0)
285#define ADC_CR1_AWDCH_CHANNEL12 (0x0C << 0)
286#define ADC_CR1_AWDCH_CHANNEL13 (0x0D << 0)
287#define ADC_CR1_AWDCH_CHANNEL14 (0x0E << 0)
288#define ADC_CR1_AWDCH_CHANNEL15 (0x0F << 0)
289#define ADC_CR1_AWDCH_CHANNEL16 (0x10 << 0)
290#define ADC_CR1_AWDCH_CHANNEL17 (0x11 << 0)
292#define ADC_CR1_AWDCH_MASK (0x1F << 0)
293#define ADC_CR1_AWDCH_SHIFT 0
298#define ADC_CR2_ALIGN_RIGHT (0 << 11)
299#define ADC_CR2_ALIGN_LEFT (1 << 11)
300#define ADC_CR2_ALIGN (1 << 11)
303#define ADC_CR2_DMA (1 << 8)
306#define ADC_CR2_CONT (1 << 1)
314#define ADC_CR2_ADON (1 << 0)
318#define ADC_JOFFSET_LSB 0
319#define ADC_JOFFSET_MSK 0xfff
321#define ADC_HT_MSK 0xfff
323#define ADC_LT_MSK 0xfff
328#define ADC_SQR1_L_LSB 20
331#define ADC_JSQR_JL_LSB 20
332#define ADC_JSQR_JSQ4_LSB 15
333#define ADC_JSQR_JSQ3_LSB 10
334#define ADC_JSQR_JSQ2_LSB 5
335#define ADC_JSQR_JSQ1_LSB 0
343#define ADC_JSQR_JL_1CHANNELS (0x0 << ADC_JSQR_JL_LSB)
344#define ADC_JSQR_JL_2CHANNELS (0x1 << ADC_JSQR_JL_LSB)
345#define ADC_JSQR_JL_3CHANNELS (0x2 << ADC_JSQR_JL_LSB)
346#define ADC_JSQR_JL_4CHANNELS (0x3 << ADC_JSQR_JL_LSB)
348#define ADC_JSQR_JL_MSK (0x2 << ADC_JSQR_JL_LSB)
349#define ADC_JSQR_JSQ4_MSK (0x1f << ADC_JSQR_JSQ4_LSB)
350#define ADC_JSQR_JSQ3_MSK (0x1f << ADC_JSQR_JSQ3_LSB)
351#define ADC_JSQR_JSQ2_MSK (0x1f << ADC_JSQR_JSQ2_LSB)
352#define ADC_JSQR_JSQ1_MSK (0x1f << ADC_JSQR_JSQ1_LSB)
354#define ADC_JSQR_JSQ_VAL(n, val) ((val) << (((n) - 1) * 5))
355#define ADC_JSQR_JL_VAL(val) (((val) - 1) << ADC_JSQR_JL_LSB)
357#if (defined(THESE_HAVE_BAD_NAMES_PROBABLY) && (THESE_HAVE_BAD_NAMES_PROBABLY))
360#define ADC_JDATA_LSB 0
361#define ADC_DATA_LSB 0
362#define ADC_ADC2DATA_LSB 16
363#define ADC_JDATA_MSK (0xffff << ADC_JDATA_LSB)
364#define ADC_DATA_MSK (0xffff << ADC_DA)
365#define ADC_ADC2DATA_MSK (0xffff << ADC_ADC2DATA_LSB)
void adc_set_sample_time_on_all_channels(uint32_t adc, uint8_t time)
ADC Set the Sample Time for All Channels.
void adc_set_sample_time(uint32_t adc, uint8_t channel, uint8_t time)
ADC Set the Sample Time for a Single Channel.
void adc_disable_awd_interrupt(uint32_t adc)
ADC Disable Analog Watchdog Interrupt.
void adc_start_conversion_regular(uint32_t adc)
ADC Software Triggered Conversion on Regular Channels.
void adc_enable_awd_interrupt(uint32_t adc)
ADC Enable Analog Watchdog Interrupt.
bool adc_get_flag(uint32_t adc, uint32_t flag)
Read a Status Flag.
void adc_disable_automatic_injected_group_conversion(uint32_t adc)
ADC Disable Automatic Injected Conversions.
void adc_set_watchdog_high_threshold(uint32_t adc, uint16_t threshold)
ADC Set Analog Watchdog Upper Threshold.
void adc_power_off(uint32_t adc)
ADC Off.
void adc_enable_discontinuous_mode_injected(uint32_t adc)
ADC Enable Discontinuous Mode for Injected Conversions.
void adc_set_continuous_conversion_mode(uint32_t adc)
ADC Enable Continuous Conversion Mode.
void adc_set_single_conversion_mode(uint32_t adc)
ADC Enable Single Conversion Mode.
void adc_disable_discontinuous_mode_regular(uint32_t adc)
ADC Disable Discontinuous Mode for Regular Conversions.
void adc_start_conversion_injected(uint32_t adc)
ADC Software Triggered Conversion on Injected Channels.
void adc_power_on(uint32_t adc)
ADC Power On.
uint32_t adc_read_regular(uint32_t adc)
ADC Read from the Regular Conversion Result Register.
void adc_enable_discontinuous_mode_regular(uint32_t adc, uint8_t length)
ADC Enable Discontinuous Mode for Regular Conversions.
void adc_disable_eoc_interrupt_injected(uint32_t adc)
ADC Disable Injected End-Of-Conversion Interrupt.
void adc_set_injected_sequence(uint32_t adc, uint8_t length, uint8_t channel[])
ADC Set an Injected Channel Conversion Sequence.
void adc_enable_eoc_interrupt(uint32_t adc)
ADC Enable Regular End-Of-Conversion Interrupt.
void adc_disable_eoc_interrupt(uint32_t adc)
ADC Disable Regular End-Of-Conversion Interrupt.
void adc_enable_analog_watchdog_on_all_channels(uint32_t adc)
ADC Enable Analog Watchdog for All Regular and/or Injected Channels.
void adc_disable_scan_mode(uint32_t adc)
ADC Disable Scan Mode.
void adc_disable_dma(uint32_t adc)
ADC Disable DMA Transfers.
void adc_set_left_aligned(uint32_t adc)
ADC Set the Data as Left Aligned.
void adc_disable_external_trigger_injected(uint32_t adc)
ADC Disable an External Trigger for Injected Channels.
void adc_set_right_aligned(uint32_t adc)
ADC Set the Data as Right Aligned.
void adc_clear_flag(uint32_t adc, uint32_t flag)
Clear a Status Flag.
void adc_enable_automatic_injected_group_conversion(uint32_t adc)
ADC Enable Automatic Injected Conversions.
void adc_enable_eoc_interrupt_injected(uint32_t adc)
ADC Enable Injected End-Of-Conversion Interrupt.
void adc_enable_analog_watchdog_injected(uint32_t adc)
ADC Enable Analog Watchdog for Injected Conversions.
uint32_t adc_read_injected(uint32_t adc, uint8_t reg)
ADC Read from an Injected Conversion Result Register.
void adc_enable_dma(uint32_t adc)
ADC Enable DMA Transfers.
void adc_set_injected_offset(uint32_t adc, uint8_t reg, uint32_t offset)
ADC Set the Injected Channel Data Offset.
void adc_enable_analog_watchdog_on_selected_channel(uint32_t adc, uint8_t channel)
ADC Enable Analog Watchdog for a Selected Channel.
void adc_disable_analog_watchdog_injected(uint32_t adc)
ADC Disable Analog Watchdog for Injected Conversions.
void adc_set_regular_sequence(uint32_t adc, uint8_t length, uint8_t channel[])
ADC Set a Regular Channel Conversion Sequence.
void adc_enable_analog_watchdog_regular(uint32_t adc)
ADC Enable Analog Watchdog for Regular Conversions.
bool adc_eoc_injected(uint32_t adc)
ADC Read the End-of-Conversion Flag for Injected Conversion.
void adc_set_watchdog_low_threshold(uint32_t adc, uint16_t threshold)
ADC Set Analog Watchdog Lower Threshold.
bool adc_eoc(uint32_t adc)
ADC Read the End-of-Conversion Flag.
void adc_enable_scan_mode(uint32_t adc)
ADC Set Scan Mode.
void adc_disable_external_trigger_regular(uint32_t adc)
ADC Disable an External Trigger for Regular Channels.
void adc_disable_discontinuous_mode_injected(uint32_t adc)
ADC Disable Discontinuous Mode for Injected Conversions.
void adc_disable_analog_watchdog_regular(uint32_t adc)
ADC Disable Analog Watchdog for Regular Conversions.