ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_adc.h
Go to the documentation of this file.
1
19
20#pragma once
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26#include <stdint.h>
27
28#include "ra8_err.h"
29
55
65
81
86typedef enum : uint16_t {
91
98typedef void (*ra8_adc_complete_fn_t)(void* ctx, uint16_t result);
99
119
137
156
164
184
185/* =============================================================================
186 * Lifecycle
187 * =============================================================================
188 */
189
195[[nodiscard]] ra8_err_t ra8_adc_init(void);
196
211[[nodiscard]] ra8_err_t ra8_adc_init_configured(const ra8_adc_cfg_t* cfg);
212
219[[nodiscard]] ra8_err_t ra8_adc_deinit(void);
220
221/* =============================================================================
222 * Legacy polling API
223 * =============================================================================
224 */
225
234[[nodiscard]] ra8_err_t ra8_adc_read_channel(uint8_t channel, uint16_t* out_raw);
235
236/* =============================================================================
237 * Runtime reconfigure
238 * =============================================================================
239 */
240
266
267/* =============================================================================
268 * Status
269 * =============================================================================
270 */
271
278[[nodiscard]] ra8_err_t ra8_adc_get_status(uint16_t* out_mask);
279
285[[nodiscard]] ra8_err_t ra8_adc_clear_status(void);
286
287/* =============================================================================
288 * Interrupt path
289 * =============================================================================
290 */
291
299[[nodiscard]] ra8_err_t ra8_adc_attach_handler(ra8_adc_complete_fn_t fn, void* ctx);
300
301/* =============================================================================
302 * Power transition
303 * =============================================================================
304 */
305
310[[nodiscard]] ra8_err_t ra8_adc_enter_stop(void);
311
316[[nodiscard]] ra8_err_t ra8_adc_exit_stop(void);
317
318/* =============================================================================
319 * ISR dispatch
320 * =============================================================================
321 */
322
337void ra8_adc_dispatch_cnv_end(uint8_t channel);
338
339/* =============================================================================
340 * Scan groups (FSP r_adc_b parity, Sweep 3 Task 1)
341 * =============================================================================
342 */
343
374[[nodiscard]] ra8_err_t ra8_adc_configure_scan_group(uint8_t group,
375 const ra8_adc_scan_group_cfg_t* cfg);
376
389[[nodiscard]] ra8_err_t ra8_adc_start_group(uint8_t group);
390
403[[nodiscard]] ra8_err_t ra8_adc_stop_group(uint8_t group);
404
426[[nodiscard]] ra8_err_t
427ra8_adc_read_group_results(uint8_t group, uint16_t* out_buf, uint8_t* out_count);
428
444[[nodiscard]] ra8_err_t ra8_adc_set_continuous_scan(uint8_t group, bool enable);
445
446/* =============================================================================
447 * Window comparator (FSP r_adc_b parity)
448 * =============================================================================
449 */
450
473[[nodiscard]] ra8_err_t ra8_adc_set_compare_window(uint8_t channel, uint16_t low, uint16_t high);
474
475/* =============================================================================
476 * Oversampling
477 * =============================================================================
478 */
479
493[[nodiscard]] ra8_err_t ra8_adc_set_oversampling(uint8_t channel, ra8_adc_oversample_t mode);
494
495/* =============================================================================
496 * Self-diagnosis + internal / extended-analog channels (HUM Ch 53)
497 * =============================================================================
498 */
499
521
539
580[[nodiscard]] ra8_err_t
581ra8_adc_self_diagnose(ra8_adc_selfdiag_mode_t mode, uint16_t* out_code, bool* out_pass);
582
615 uint16_t* out_raw);
616
617#ifdef __cplusplus
618}
619#endif
ra8_err_t ra8_adc_read_group_results(uint8_t group, uint16_t *out_buf, uint8_t *out_count)
Drain conversion results for every channel mapped to a group.
Definition adc.c:731
ra8_err_t ra8_adc_start_group(uint8_t group)
Kick a scan group via the per-group ADSTR register.
Definition adc.c:708
ra8_err_t ra8_adc_read_internal_channel(ra8_adc_internal_chan_t chan, uint16_t *out_raw)
Blocking single conversion of an internal / extended-analog channel.
ra8_adc_internal_chan_t
Internal / extended-analog channels readable through the HAL.
Definition ra8_adc.h:535
@ k_ra8_adc_chan_temperature
On-chip die-temperature sensor.
Definition ra8_adc.h:536
@ k_ra8_adc_chan_int_ref_volt
Internal reference voltage.
Definition ra8_adc.h:537
ra8_err_t ra8_adc_init_configured(const ra8_adc_cfg_t *cfg)
Initialise ADC_B with a full config descriptor.
Definition adc.c:387
ra8_err_t ra8_adc_attach_handler(ra8_adc_complete_fn_t fn, void *ctx)
Attach a conversion-complete callback.
Definition adc.c:485
void(* ra8_adc_complete_fn_t)(void *ctx, uint16_t result)
Conversion-complete callback.
Definition ra8_adc.h:98
ra8_adc_resolution_t
ADDOPCRCn.ADPRC per-channel conversion-resolution (data-format) selector.
Definition ra8_adc.h:49
@ k_ra8_adc_res_12bit
12-bit conversion result (ADPRC = 0b10).
Definition ra8_adc.h:52
@ k_ra8_adc_res_14bit
14-bit conversion result (ADPRC = 0b01).
Definition ra8_adc.h:51
@ k_ra8_adc_res_10bit
10-bit conversion result (ADPRC = 0b11).
Definition ra8_adc.h:53
@ k_ra8_adc_res_16bit
16-bit conversion result (ADPRC = 0b00).
Definition ra8_adc.h:50
ra8_err_t ra8_adc_set_oversampling(uint8_t channel, ra8_adc_oversample_t mode)
Programme ADDOPCRB[ch].AVEMD/ADC for a per-channel averaging mode.
Definition adc.c:819
ra8_err_t ra8_adc_self_diagnose(ra8_adc_selfdiag_mode_t mode, uint16_t *out_code, bool *out_pass)
Run an ADC_B built-in self-diagnosis pass on A/D unit 0.
ra8_err_t ra8_adc_read_channel(uint8_t channel, uint16_t *out_raw)
Blocking single-channel sample.
Definition adc.c:351
ra8_err_t ra8_adc_configure_scan_group(uint8_t group, const ra8_adc_scan_group_cfg_t *cfg)
Configure scan group group with a list of channels + trigger.
Definition adc.c:691
ra8_err_t ra8_adc_set_resolution(ra8_adc_resolution_t resolution)
Change the ADC conversion resolution at runtime.
Definition adc.c:443
ra8_err_t ra8_adc_exit_stop(void)
Exit MSTP-gated stop.
Definition adc.c:499
ra8_adc_trigger_t
ADCSR trigger mode.
Definition ra8_adc.h:60
@ k_ra8_adc_trig_elc
ELC event routed trigger.
Definition ra8_adc.h:63
@ k_ra8_adc_trig_external
External trigger pin.
Definition ra8_adc.h:62
@ k_ra8_adc_trig_software
Software trigger (write ADST).
Definition ra8_adc.h:61
ra8_err_t ra8_adc_get_status(uint16_t *out_mask)
Read the ADC status bits (ADCSR.ADST / ADIE).
Definition adc.c:457
ra8_adc_oversample_t
Per-channel ADADC.AVEMD/ADC oversampling configuration.
Definition ra8_adc.h:150
@ k_ra8_adc_oversample_off
Single sample, no averaging.
Definition ra8_adc.h:151
@ k_ra8_adc_oversample_64x
64-sample average.
Definition ra8_adc.h:154
@ k_ra8_adc_oversample_4x
4-sample average.
Definition ra8_adc.h:152
@ k_ra8_adc_oversample_16x
16-sample average.
Definition ra8_adc.h:153
ra8_err_t ra8_adc_enter_stop(void)
Put ADC_B into MSTP-gated stop.
Definition adc.c:492
ra8_adc_status_mask_t
ADCSR status mask.
Definition ra8_adc.h:86
@ k_ra8_adc_status_none
RA8 ADC status none.
Definition ra8_adc.h:87
@ k_ra8_adc_status_ie
ADCSR.ADIE.
Definition ra8_adc.h:89
@ k_ra8_adc_status_busy
ADCSR.ADST (conversion in flight).
Definition ra8_adc.h:88
ra8_adc_trigger_src_t
Per-scan-group trigger source.
Definition ra8_adc.h:113
@ k_ra8_adc_trig_src_software
SW kick (default).
Definition ra8_adc.h:114
@ k_ra8_adc_trig_src_elc
ELC event mux.
Definition ra8_adc.h:115
@ k_ra8_adc_trig_src_gpt
GPT compare-match.
Definition ra8_adc.h:116
@ k_ra8_adc_trig_src_pin
Hardware trigger pin.
Definition ra8_adc.h:117
ra8_err_t ra8_adc_set_compare_window(uint8_t channel, uint16_t low, uint16_t high)
Programme a window comparator for a single channel.
Definition adc.c:774
ra8_adc_priority_t
Scan-group priority class (FSP scan_group_priority).
Definition ra8_adc.h:133
@ k_ra8_adc_priority_high
RA8 ADC priority high.
Definition ra8_adc.h:135
@ k_ra8_adc_priority_low
RA8 ADC priority low.
Definition ra8_adc.h:134
ra8_err_t ra8_adc_init(void)
Legacy init – 14-bit right-aligned, software trigger.
Definition adc.c:323
ra8_err_t ra8_adc_deinit(void)
Tear down the ADC_B peripheral.
Definition adc.c:423
ra8_adc_scan_group_caps_t
Per-scan-group capacity limits for the ADC scan model.
Definition ra8_adc.h:161
@ k_ra8_adc_scan_group_max_channels
Maximum channels per scan group.
Definition ra8_adc.h:162
ra8_err_t ra8_adc_clear_status(void)
Clear the ADCSR.ADST busy bit (abort in-flight conversion).
Definition adc.c:473
ra8_err_t ra8_adc_set_continuous_scan(uint8_t group, bool enable)
Switch a scan group between one-shot and continuous (free-running).
Definition adc.c:757
void ra8_adc_dispatch_cnv_end(uint8_t channel)
Dispatch conversion-complete – read result + fire callback.
Definition adc.c:505
ra8_err_t ra8_adc_stop_group(uint8_t group)
Stop a scan group: clear ADSTR[group] and write ADSTOPR.
Definition adc.c:719
ra8_adc_selfdiag_mode_t
ADC_B built-in self-diagnosis modes (HUM Ch 53.3.11 p 3411-3414).
Definition ra8_adc.h:516
@ k_ra8_adc_selfdiag_mode_3
Positive full-scale.
Definition ra8_adc.h:519
@ k_ra8_adc_selfdiag_mode_2
Negative full-scale.
Definition ra8_adc.h:518
@ k_ra8_adc_selfdiag_mode_1
Zero-differential reference.
Definition ra8_adc.h:517
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
Configuration descriptor for ra8_adc_init_configured.
Definition ra8_adc.h:75
bool right_aligned
True -> right-align.
Definition ra8_adc.h:78
ra8_adc_trigger_t trigger
Trigger source.
Definition ra8_adc.h:77
bool scan_mode
True -> continuous scan.
Definition ra8_adc.h:79
ra8_adc_resolution_t resolution
16 / 14 / 12 / 10 bit.
Definition ra8_adc.h:76
Configuration for a single scan group.
Definition ra8_adc.h:178
uint8_t num_channels
1..8.
Definition ra8_adc.h:179
uint8_t channels[k_ra8_adc_scan_group_max_channels]
Physical-channel list.
Definition ra8_adc.h:180
ra8_adc_trigger_src_t trigger
Trigger source.
Definition ra8_adc.h:181
ra8_adc_priority_t priority
Priority class.
Definition ra8_adc.h:182