Skip to content

Commit e359d34

Browse files
Phuc Phamnhutnguyenkc
authored andcommitted
hal: renesas: rzv: Add ADC support for RZ/V series
Add HAL FSP ADC files for RZ/V series Signed-off-by: Phuc Pham <[email protected]> Signed-off-by: Nhut Nguyen <[email protected]>
1 parent 10390c4 commit e359d34

File tree

3 files changed

+1193
-0
lines changed

3 files changed

+1193
-0
lines changed
Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
/*
2+
* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
3+
*
4+
* SPDX-License-Identifier: BSD-3-Clause
5+
*/
6+
7+
/*******************************************************************************************************************//**
8+
* @addtogroup ADC_C
9+
* @{
10+
**********************************************************************************************************************/
11+
12+
#ifndef R_ADC_C_H
13+
#define R_ADC_C_H
14+
15+
/***********************************************************************************************************************
16+
* Includes
17+
**********************************************************************************************************************/
18+
19+
#include "r_adc_c_cfg.h"
20+
#include "r_adc_api.h"
21+
#include "bsp_api.h"
22+
23+
/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
24+
FSP_HEADER
25+
26+
/***********************************************************************************************************************
27+
* Macro definitions
28+
**********************************************************************************************************************/
29+
30+
/** For ADC Scan configuration adc_channel_cfg_t::scan_mask.
31+
* Use bitwise OR to combine these masks for desired channels. */
32+
typedef enum e_adc_c_mask
33+
{
34+
ADC_C_MASK_OFF = (0U), ///< No channels selected
35+
ADC_C_MASK_CHANNEL_0 = (1U << 0U), ///< Channel 0 mask
36+
ADC_C_MASK_CHANNEL_1 = (1U << 1U), ///< Channel 1 mask
37+
ADC_C_MASK_CHANNEL_2 = (1U << 2U), ///< Channel 2 mask
38+
ADC_C_MASK_CHANNEL_3 = (1U << 3U), ///< Channel 3 mask
39+
ADC_C_MASK_CHANNEL_4 = (1U << 4U), ///< Channel 4 mask
40+
ADC_C_MASK_CHANNEL_5 = (1U << 5U), ///< Channel 5 mask
41+
ADC_C_MASK_CHANNEL_6 = (1U << 6U), ///< Channel 6 mask
42+
ADC_C_MASK_CHANNEL_7 = (1U << 7U), ///< Channel 7 mask
43+
ADC_C_MASK_CHANNEL_8 = (1U << 8U), ///< Channel 8 mask (Temperature sensor channel mask)
44+
} adc_c_mask_t;
45+
46+
/** ADC trigger mode select */
47+
typedef enum e_adc_c_trigger_mode
48+
{
49+
ADC_C_TRIGGER_MODE_SOFTWARE = 0U, ///< Software trigger mode
50+
ADC_C_TRIGGER_MODE_HARDWARE = 1U, ///< Hardware trigger mode
51+
} adc_c_trigger_mode_t;
52+
53+
/** ADC hardware trigger source select */
54+
typedef enum e_adc_c_active_trigger
55+
{
56+
ADC_C_ACTIVE_TRIGGER_EXTERNAL = 0U, ///< External trigger input
57+
ADC_C_ACTIVE_TRIGGER_TRGA0N = 1U, ///< Compare match with or input capture to MTU0.TGRA
58+
ADC_C_ACTIVE_TRIGGER_TRGA1N = 2U, ///< Compare match with or input capture to MTU1.TGRA
59+
ADC_C_ACTIVE_TRIGGER_TRGA2N = 3U, ///< Compare match with or input capture to MTU2.TGRA
60+
ADC_C_ACTIVE_TRIGGER_TRGA3N = 4U, ///< Compare match with or input capture to MTU3.TGRA
61+
ADC_C_ACTIVE_TRIGGER_TRGA4N = 5U, ///< Compare match with or input capture to MTU4.TGRA
62+
ADC_C_ACTIVE_TRIGGER_TRGA6N = 6U, ///< Compare match with or input capture to MTU6.TGRA
63+
ADC_C_ACTIVE_TRIGGER_TRGA7N = 7U, ///< Compare match with or input capture to MTU7.TGRA
64+
ADC_C_ACTIVE_TRIGGER_TRG0N = 8U, ///< Compare match with MTU0.TGRE
65+
ADC_C_ACTIVE_TRIGGER_TRG4AN = 9U, ///< Compare match between MTU4.TADCORA and MTU4.TCNT
66+
ADC_C_ACTIVE_TRIGGER_TRG4BN = 10U, ///< Compare match between MTU4.TADCORB and MTU4.TCNT
67+
ADC_C_ACTIVE_TRIGGER_TRG4AN_BN = 11U, ///< Compare match between MTU4.TADCORA and MTU4.TCNT, or between MTU4.TADCORB and MTU4.TCNT
68+
ADC_C_ACTIVE_TRIGGER_TRG4ABN = 12U, ///< Compare match between MTU4.TADCORA and MTU4.TCNT, and between MTU4.TADCORB and MTU4.TCNT (when interrupt skipping function 2 is in use)
69+
ADC_C_ACTIVE_TRIGGER_TRG7AN = 13U, ///< Compare match between MTU7.TADCORA and MTU7.TCNT
70+
ADC_C_ACTIVE_TRIGGER_TRG7BN = 14U, ///< Compare match between MTU7.TADCORB and MTU7.TCNT
71+
ADC_C_ACTIVE_TRIGGER_TRG7AN_BN = 15U, ///< Compare match between MTU7.TADCORA and MTU7.TCNT, or between MTU7.TADCORB and MTU7.TCNT
72+
ADC_C_ACTIVE_TRIGGER_TRG7ABN = 16U, ///< Compare match between MTU7.TADCORA and MTU7.TCNT, and between MTU7.TADCORB and MTU7.TCNT
73+
ADC_C_ACTIVE_TRIGGER_ADTRGA0 = 17U, ///< Compare match with GPT0.GTADTRA
74+
ADC_C_ACTIVE_TRIGGER_ADTRGB0 = 18U, ///< Compare match with GPT0.GTADTRB
75+
ADC_C_ACTIVE_TRIGGER_ADTRGA1 = 19U, ///< Compare match with GPT1.GTADTRA
76+
ADC_C_ACTIVE_TRIGGER_ADTRGB1 = 20U, ///< Compare match with GPT1.GTADTRB
77+
ADC_C_ACTIVE_TRIGGER_ADTRGA2 = 21U, ///< Compare match with GPT2.GTADTRA
78+
ADC_C_ACTIVE_TRIGGER_ADTRGB2 = 22U, ///< Compare match with GPT2.GTADTRB
79+
ADC_C_ACTIVE_TRIGGER_ADTRGA3 = 23U, ///< Compare match with GPT3.GTADTRA
80+
ADC_C_ACTIVE_TRIGGER_ADTRGB3 = 24U, ///< Compare match with GPT3.GTADTRB
81+
ADC_C_ACTIVE_TRIGGER_ADTRGA0_B0 = 25U, ///< Compare match with GPT0.GTADTRA or GPT0.GTADTRB
82+
ADC_C_ACTIVE_TRIGGER_ADTRGA1_B1 = 26U, ///< Compare match with GPT1.GTADTRA or GPT1.GTADTRB
83+
ADC_C_ACTIVE_TRIGGER_ADTRGA2_B2 = 27U, ///< Compare match with GPT2.GTADTRA or GPT2.GTADTRB
84+
ADC_C_ACTIVE_TRIGGER_ADTRGA3_B3 = 28U, ///< Compare match with GPT3.GTADTRA or GPT3.GTADTRB
85+
} adc_c_active_trigger_t;
86+
87+
/** valid edge of the trigger select */
88+
typedef enum e_adc_c_trigger_edge
89+
{
90+
ADC_C_TRIGGER_EDGE_FALLING = 1U, ///< Falling edge
91+
ADC_C_TRIGGER_EDGE_RISING = 2U, ///< Rising edge
92+
ADC_C_TRIGGER_EDGE_BOTH = 3U, ///< Both edges
93+
} adc_c_trigger_edge_t;
94+
95+
/** ADC trigger input mode select */
96+
typedef enum e_adc_c_input_mode
97+
{
98+
ADC_C_INPUT_MODE_AUTO = 0U, ///< Auto mode
99+
ADC_C_INPUT_MODE_STEP = 1U, ///< Step mode
100+
} adc_c_input_mode_t;
101+
102+
/** ADC operating mode select */
103+
typedef enum e_adc_c_operating_mode
104+
{
105+
ADC_C_OPERATING_MODE_SCAN = 0U, ///< Scan mode
106+
ADC_C_OPERATING_MODE_SELECT = 1U, ///< Select mode
107+
} adc_c_operating_mode_t;
108+
109+
/** ADC buffer mode select */
110+
typedef enum e_adc_c_buffer_mode
111+
{
112+
ADC_C_BUFFER_MODE_1 = 0U, ///< 1-buffer mode
113+
ADC_C_BUFFER_MODE_4 = 1U, ///< 4-buffer mode
114+
} adc_c_buffer_mode_t;
115+
116+
/** Select the number of stages of the AD external trigger pin filter. */
117+
typedef enum e_adc_c_filter_stage_setting_t
118+
{
119+
ADC_C_FILTER_STAGE_SETTING_DISABLE = 0U, ///< Filter is disabled.
120+
ADC_C_FILTER_STAGE_SETTING_4 = 1U, ///< 12.5 ns (80 MHz) x 4 stages
121+
ADC_C_FILTER_STAGE_SETTING_8 = 2U, ///< 12.5 ns (80 MHz) x 8 stages
122+
ADC_C_FILTER_STAGE_SETTING_12 = 3U, ///< 12.5 ns (80 MHz) x 12 stages
123+
ADC_C_FILTER_STAGE_SETTING_16 = 4U, ///< 12.5 ns (80 MHz) x 16 stages
124+
} adc_c_filter_stage_setting_t;
125+
126+
/** Enable or disable the conversion end interrupt of channel */
127+
typedef enum e_adc_c_interrupt_channel_setting
128+
{
129+
ADC_C_INTERRUPT_CHANNEL_SETTING_DISABLE = 0, ///< Interrupt output is disabled.
130+
ADC_C_INTERRUPT_CHANNEL_SETTING_ENABLE = 1, ///< Interrupt output is enabled.
131+
} adc_c_interrupt_channel_setting_t;
132+
133+
/** Extended configuration structure for ADC. */
134+
typedef struct st_adc_c_extended_cfg
135+
{
136+
adc_c_trigger_mode_t trigger_mode; ///< Trigger mode.
137+
adc_c_active_trigger_t trigger_source; ///< Hardware trigger source.
138+
adc_c_trigger_edge_t trigger_edge; ///< Valid edge of the trigger source.
139+
adc_c_input_mode_t input_mode; ///< Trigger input mode.
140+
adc_c_operating_mode_t operating_mode; ///< Operating mode.
141+
adc_c_buffer_mode_t buffer_mode; ///< Buffer mode.
142+
uint16_t sampling_time; ///< Sampling period. (6~2800)
143+
adc_c_filter_stage_setting_t external_trigger_filter; ///< AD external trigger pin filter.
144+
} adc_c_extended_cfg_t;
145+
146+
/** ADC channel(s) configuration */
147+
typedef struct st_adc_c_channel_cfg
148+
{
149+
uint32_t scan_mask; ///< Channels/bits: bit 0 is ch0; bit 1 is ch1.
150+
adc_c_interrupt_channel_setting_t interrupt_setting; ///< Interrupt setting.
151+
} adc_c_channel_cfg_t;
152+
153+
/***********************************************************************************************************************
154+
* Typedef definitions
155+
**********************************************************************************************************************/
156+
157+
/** ADC instance control block. DO NOT INITIALIZE. Initialized in @ref adc_api_t::open(). */
158+
typedef struct
159+
{
160+
R_ADC_C_Type * p_reg; // Base register
161+
adc_cfg_t const * p_cfg;
162+
uint32_t opened; // Boolean to verify that the Unit has been initialized
163+
uint32_t initialized; // Initialized status of ADC
164+
uint32_t scan_mask; // Scan mask used for Normal scan
165+
uint32_t scan_start;
166+
uint32_t operating_mode;
167+
uint32_t buffer_mode;
168+
169+
void (* p_callback)(adc_callback_args_t *); // Pointer to callback that is called when an adc_event_t occurs.
170+
adc_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory.
171+
172+
/* Pointer to context to be passed into callback function */
173+
void const * p_context;
174+
} adc_c_instance_ctrl_t;
175+
176+
/**********************************************************************************************************************
177+
* Exported global variables
178+
**********************************************************************************************************************/
179+
180+
/** @cond INC_HEADER_DEFS_SEC */
181+
/** Interface Structure for user access */
182+
extern const adc_api_t g_adc_on_adc_c;
183+
184+
/** @endcond */
185+
186+
/***********************************************************************************************************************
187+
* Public APIs
188+
**********************************************************************************************************************/
189+
fsp_err_t R_ADC_C_Open(adc_ctrl_t * p_ctrl, adc_cfg_t const * const p_cfg);
190+
fsp_err_t R_ADC_C_ScanCfg(adc_ctrl_t * p_ctrl, void const * const p_channel_cfg);
191+
fsp_err_t R_ADC_C_InfoGet(adc_ctrl_t * p_ctrl, adc_info_t * p_adc_info);
192+
fsp_err_t R_ADC_C_ScanStart(adc_ctrl_t * p_ctrl);
193+
fsp_err_t R_ADC_C_ScanGroupStart(adc_ctrl_t * p_ctrl, adc_group_mask_t group_id);
194+
fsp_err_t R_ADC_C_ScanStop(adc_ctrl_t * p_ctrl);
195+
fsp_err_t R_ADC_C_StatusGet(adc_ctrl_t * p_ctrl, adc_status_t * p_status);
196+
fsp_err_t R_ADC_C_Read(adc_ctrl_t * p_ctrl, adc_channel_t const reg_id, uint16_t * const p_data);
197+
fsp_err_t R_ADC_C_Read32(adc_ctrl_t * p_ctrl, adc_channel_t const reg_id, uint32_t * const p_data);
198+
fsp_err_t R_ADC_C_SampleStateCountSet(adc_ctrl_t * p_ctrl, uint16_t num_states);
199+
fsp_err_t R_ADC_C_Close(adc_ctrl_t * p_ctrl);
200+
fsp_err_t R_ADC_C_OffsetSet(adc_ctrl_t * const p_ctrl, adc_channel_t const reg_id, int32_t offset);
201+
fsp_err_t R_ADC_C_Calibrate(adc_ctrl_t * const p_ctrl, void const * p_extend);
202+
fsp_err_t R_ADC_C_CallbackSet(adc_ctrl_t * const p_api_ctrl,
203+
void ( * p_callback)(adc_callback_args_t *),
204+
void const * const p_context,
205+
adc_callback_args_t * const p_callback_memory);
206+
207+
/*******************************************************************************************************************//**
208+
* @} (end defgroup ADC_C)
209+
**********************************************************************************************************************/
210+
211+
/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
212+
FSP_FOOTER
213+
214+
#endif

0 commit comments

Comments
 (0)