Skip to content

Commit 4722c1a

Browse files
quytranpzzKhiemNguyenT
authored andcommitted
hal: renesas: rx: Add support for ADC driver on Renesas RX
Add ADC driver support with r_s12ad for Renesas RX Signed-off-by: Quy Tran <[email protected]>
1 parent ada73f3 commit 4722c1a

File tree

7 files changed

+3160
-0
lines changed

7 files changed

+3160
-0
lines changed

drivers/rx/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,15 @@ if(CONFIG_USE_RX_RDP_I2C)
103103
rdp/src/r_riic_rx/src/targets/${CONFIG_SOC_SERIES}/r_riic_${CONFIG_SOC_SERIES}.c
104104
)
105105
endif()
106+
107+
if(CONFIG_USE_RX_RDP_ADC)
108+
zephyr_include_directories(
109+
rdp/src/r_s12ad_rx
110+
rdp/src/r_s12ad_rx/src
111+
rdp/src/r_s12ad_rx/src/targets/${CONFIG_SOC_SERIES}
112+
)
113+
zephyr_library_sources(
114+
rdp/src/r_s12ad_rx/src/r_s12ad_rx.c
115+
rdp/src/r_s12ad_rx/src/targets/${CONFIG_SOC_SERIES}/r_s12ad_${CONFIG_SOC_SERIES}.c
116+
)
117+
endif()
Lines changed: 326 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,326 @@
1+
/***********************************************************************************************************************
2+
* Copyright (c) 2013 Renesas Electronics Corporation and/or its affiliates
3+
*
4+
* SPDX-License-Identifier: BSD-3-Clause
5+
***********************************************************************************************************************/
6+
/**********************************************************************************************************************
7+
* File Name : r_s12ad_rx_if.h
8+
* Description : 12-bit A/D Converter driver interface file.
9+
***********************************************************************************************************************
10+
* History : DD.MM.YYYY Version Description
11+
* 22.07.2013 1.00 Initial Release.
12+
* 21.04.2014 1.20 Updated for RX210 advanced features; RX110/63x support.
13+
* 05.06.2014 1.30 Fixed channel mask bug in adc_enable_chans()
14+
* 06.11.2014 1.40 Added RX113 support.
15+
* 25.03.2015 2.00 Merged in r_s12ad_rx64m and added support for rx71m.
16+
* 25.03.2015 2.10 Added rx231 support and updated the minor version information
17+
* 01.03.2016 2.11 Added RX130 and RX230 support.
18+
* 01.10.2016 2.20 Added RX65x support.
19+
* 03.04.2017 2.30 Added RX65N-2MB and RX130-512KB support.
20+
* 03.09.2018 3.00 Added RX66T support.
21+
* 03.12.2018 3.01 Changed Minor version to '01' for update of xml file.
22+
* 28.12.2018 3.10 Added RX72T support.
23+
* 05.04.2019 4.00 Changed Major/Minor version to 4.00 for update below.
24+
* - Added support of GNUC and ICCRX.
25+
* - End of Update for RX210, RX631, and RX63N.
26+
* Deleted include of RX210, RX631, and RX63N.
27+
* Modified include pass of RX65N.
28+
* 06.28.2019 4.10 Added RX23W support.
29+
* 07.31.2019 4.20 Added RX72M support.
30+
* 08.30.2019 4.30 Added RX13T support.
31+
* 22.11.2019 4.40 Added RX66N and RX72N support.
32+
* 31.01.2020 4.41 Added support for RX13T with IAR Compiler.
33+
* 28.02.2020 4.50 Added RX23E-A support.
34+
* 10.06.2020 4.60 Added RX23T and RX24T and RX24U support.
35+
* 30.11.2020 4.61 Changed minor version for e2studio 2020-10 support.
36+
* 01.03.2021 4.70 Added RX72M 144pins and 100pins support.
37+
* Added RX23W 83pins support.
38+
* 31.05.2021 4.80 Added RX671 support.
39+
* 30.07.2021 4.90 Added RX140 support.
40+
* 01.11.2021 4.91 Fixed MDF file.
41+
* 19.11.2021 4.92 Added RX140 80pins support.
42+
* 30.11.2021 4.93 Added RX66T 48pins support.
43+
* 29.12.2021 5.00 Added RX660 support.
44+
* 01.08.2022 5.10 Added RX26T support.
45+
* 14.10.2022 5.20 Added RX23E-B support.
46+
* 03.04.2023 5.30 Added RX26T 48k support.
47+
* 13.02.2024 5.40 Added RX260 and RX261 support.
48+
* 20.03.2025 5.41 Changed the disclaimer in program sources.
49+
***********************************************************************************************************************/
50+
51+
#ifndef S12AD_PRV_IF_H
52+
#define S12AD_PRV_IF_H
53+
54+
/******************************************************************************
55+
Includes <System Includes> , "Project Includes"
56+
*******************************************************************************/
57+
#include "platform.h"
58+
59+
/* MCU SPECIFIC USER INTERFACE FILES */
60+
61+
#if defined(BSP_MCU_RX110)
62+
#include "./src/targets/rx110/r_s12ad_rx110_if.h"
63+
#elif defined(BSP_MCU_RX111)
64+
#include "./src/targets/rx111/r_s12ad_rx111_if.h"
65+
#elif defined(BSP_MCU_RX113)
66+
#include "./src/targets/rx113/r_s12ad_rx113_if.h"
67+
#elif defined(BSP_MCU_RX130)
68+
#include "./src/targets/rx130/r_s12ad_rx130_if.h"
69+
#elif defined(BSP_MCU_RX13T)
70+
#include "./src/targets/rx13T/r_s12ad_rx13t_if.h"
71+
#elif defined(BSP_MCU_RX140)
72+
#include "./src/targets/rx140/r_s12ad_rx140_if.h"
73+
#elif defined(BSP_MCU_RX230)
74+
#include "./src/targets/rx230/r_s12ad_rx230_if.h"
75+
#elif defined(BSP_MCU_RX231)
76+
#include "./src/targets/rx231/r_s12ad_rx231_if.h"
77+
#elif defined(BSP_MCU_RX23E_A)
78+
#include "./src/targets/rx23e-a/r_s12ad_rx23e-a_if.h"
79+
#elif defined(BSP_MCU_RX23E_B)
80+
#include "./src/targets/rx23e-b/r_s12ad_rx23e-b_if.h"
81+
#elif defined(BSP_MCU_RX23W)
82+
#include "./src/targets/rx23w/r_s12ad_rx23w_if.h"
83+
#elif defined(BSP_MCU_RX64M)
84+
#include "./src/targets/rx64m/r_s12ad_rx64m_if.h"
85+
#elif defined(BSP_MCU_RX65_ALL)
86+
#include "./src/targets/rx65n/r_s12ad_rx65n_if.h"
87+
#elif defined(BSP_MCU_RX660)
88+
#include "./src/targets/rx660/r_s12ad_rx660_if.h"
89+
#elif defined(BSP_MCU_RX66N)
90+
#include "./src/targets/rx66n/r_s12ad_rx66n_if.h"
91+
#elif defined(BSP_MCU_RX66T)
92+
#include "./src/targets/rx66t/r_s12ad_rx66t_if.h"
93+
#elif defined(BSP_MCU_RX671)
94+
#include "./src/targets/rx671/r_s12ad_rx671_if.h"
95+
#elif defined(BSP_MCU_RX71M)
96+
#include "./src/targets/rx71m/r_s12ad_rx71m_if.h"
97+
#elif defined(BSP_MCU_RX72T)
98+
#include "./src/targets/rx72t/r_s12ad_rx72t_if.h"
99+
#elif defined(BSP_MCU_RX72M)
100+
#include "./src/targets/rx72m/r_s12ad_rx72m_if.h"
101+
#elif defined(BSP_MCU_RX72N)
102+
#include "./src/targets/rx72n/r_s12ad_rx72n_if.h"
103+
#elif defined(BSP_MCU_RX23T)
104+
#include "./src/targets/rx23t/r_s12ad_rx23t_if.h"
105+
#elif defined(BSP_MCU_RX24T)
106+
#include "./src/targets/rx24t/r_s12ad_rx24t_if.h"
107+
#elif defined(BSP_MCU_RX24U)
108+
#include "./src/targets/rx24u/r_s12ad_rx24u_if.h"
109+
#elif defined(BSP_MCU_RX26T)
110+
#include "./src/targets/rx26t/r_s12ad_rx26t_if.h"
111+
#elif defined(BSP_MCU_RX260)
112+
#include "./src/targets/rx260/r_s12ad_rx260_if.h"
113+
#elif defined(BSP_MCU_RX261)
114+
#include "./src/targets/rx261/r_s12ad_rx261_if.h"
115+
#endif
116+
117+
/******************************************************************************
118+
Macro definitions
119+
*******************************************************************************/
120+
/* Version Number of API. */
121+
#define ADC_VERSION_MAJOR (5)
122+
#define ADC_VERSION_MINOR (41)
123+
124+
/*****************************************************************************
125+
Typedef definitions
126+
******************************************************************************/
127+
128+
typedef enum e_adc_err // ADC API error codes
129+
{
130+
ADC_SUCCESS = 0,
131+
ADC_ERR_AD_LOCKED, // Open() call is in progress elsewhere
132+
ADC_ERR_AD_NOT_CLOSED, // peripheral still running in another mode
133+
ADC_ERR_MISSING_PTR, // missing required pointer argument
134+
ADC_ERR_INVALID_ARG, // argument is not valid for parameter
135+
ADC_ERR_ILLEGAL_ARG, // argument is illegal for mode
136+
ADC_ERR_SCAN_NOT_DONE, // default, Group A, or Group B scan not done
137+
ADC_ERR_TRIG_ENABLED, // scan running, cannot configure comparator
138+
ADC_ERR_CONDITION_NOT_MET, // no chans/sensors passed comparator condition
139+
ADC_ERR_CONFIGURABLE_INT, // vector number of software configurable interrupt B is out of range
140+
ADC_ERR_UNKNOWN // unknown hardware error
141+
} adc_err_t;
142+
143+
144+
/* CALLBACK FUNCTION ARGUMENT DEFINITIONS */
145+
146+
typedef enum e_adc_cb_evt // callback function events
147+
{
148+
ADC_EVT_SCAN_COMPLETE, // normal/Group A scan complete
149+
ADC_EVT_SCAN_COMPLETE_GROUPB, // Group B scan complete
150+
#if (defined(BSP_MCU_RX65_ALL) || defined(BSP_MCU_RX66T) || defined(BSP_MCU_RX72T) \
151+
|| defined(BSP_MCU_RX72M) || defined(BSP_MCU_RX13T) || defined(BSP_MCU_RX66N) \
152+
|| defined(BSP_MCU_RX72N) || defined(BSP_MCU_RX24T) || defined(BSP_MCU_RX24U) \
153+
|| defined(BSP_MCU_RX671) || defined(BSP_MCU_RX660) || defined(BSP_MCU_RX26T))
154+
ADC_EVT_SCAN_COMPLETE_GROUPC, // Group C scan complete
155+
#endif
156+
#if (defined(BSP_MCU_RX64M) || defined(BSP_MCU_RX65_ALL) || defined(BSP_MCU_RX66T) \
157+
|| defined(BSP_MCU_RX71M) || defined(BSP_MCU_RX72T) || defined(BSP_MCU_RX72M) \
158+
|| defined(BSP_MCU_RX66N) || defined(BSP_MCU_RX72N) || defined(BSP_MCU_RX671) \
159+
|| defined(BSP_MCU_RX660) || defined(BSP_MCU_RX26T))
160+
ADC_EVT_CONDITION_MET, // chans/sensors met comparator condition
161+
#endif
162+
#if (defined(BSP_MCU_RX65_ALL) || defined(BSP_MCU_RX66T) || defined(BSP_MCU_RX72T) \
163+
|| defined(BSP_MCU_RX72M) || defined(BSP_MCU_RX66N) || defined(BSP_MCU_RX72N) \
164+
|| defined(BSP_MCU_RX671) || defined(BSP_MCU_RX660) || defined(BSP_MCU_RX26T))
165+
ADC_EVT_CONDITION_METB // chans/sensors met comparator condition
166+
#endif
167+
} adc_cb_evt_t;
168+
169+
typedef struct st_adc_cb_args // callback arguments
170+
{
171+
adc_cb_evt_t event;
172+
#if (defined(BSP_MCU_RX64M) || defined(BSP_MCU_RX65_ALL) || defined(BSP_MCU_RX66T) \
173+
|| defined(BSP_MCU_RX71M) || defined(BSP_MCU_RX72T) || defined(BSP_MCU_RX72M) \
174+
|| defined(BSP_MCU_RX66N) || defined(BSP_MCU_RX72N) || defined(BSP_MCU_RX671) \
175+
|| defined(BSP_MCU_RX660) || defined(BSP_MCU_RX26T))
176+
uint32_t compare_flags; // valid only for compare event in Window A
177+
#endif
178+
#if (defined(BSP_MCU_RX65_ALL) || defined(BSP_MCU_RX66T) || defined(BSP_MCU_RX72T) \
179+
|| defined(BSP_MCU_RX72M) || defined(BSP_MCU_RX66N) || defined(BSP_MCU_RX72N) \
180+
|| defined(BSP_MCU_RX671) || defined(BSP_MCU_RX660) || defined(BSP_MCU_RX26T))
181+
uint32_t compare_flagsb; // valid only for compare event in Window B
182+
#endif
183+
#if (defined(BSP_MCU_RX64M) || defined(BSP_MCU_RX65_ALL) || defined(BSP_MCU_RX66T) \
184+
|| defined(BSP_MCU_RX71M) || defined(BSP_MCU_RX72T) || defined(BSP_MCU_RX72M) \
185+
|| defined(BSP_MCU_RX66N) || defined(BSP_MCU_RX72N) || defined(BSP_MCU_RX24T) \
186+
|| defined(BSP_MCU_RX24U) || defined(BSP_MCU_RX671) || defined(BSP_MCU_RX26T))
187+
uint8_t unit;
188+
#endif
189+
} adc_cb_args_t;
190+
191+
192+
/*****************************************************************************
193+
Public Functions
194+
******************************************************************************/
195+
/******************************************************************************
196+
* Function Name: R_ADC_Open
197+
* Description : This function applies power to the A/D peripheral, sets the
198+
* operational mode, trigger sources, interrupt priority, and
199+
* configurations common to all channels and sensors. If interrupt
200+
* priority is non-zero, the function takes a callback function
201+
* pointer for notifying the user at interrupt level whenever a
202+
* scan has completed.
203+
*
204+
* Arguments : unit -
205+
* Unit number
206+
* mode-
207+
* Operational mode (see enumeration below)
208+
* p_cfg-
209+
* Pointer to configuration structure (see below)
210+
* p_callback-
211+
* Optional pointer to function called from interrupt when
212+
* a scan completes
213+
* Return Value : ADC_SUCCESS-
214+
* Successful
215+
* ADC_ERR_AD_LOCKED-
216+
* Open() call is in progress elsewhere
217+
* ADC_ERR_AD_NOT_CLOSED-
218+
* Peripheral is still running in another mode; Perform
219+
* R_ADC_Close() first
220+
* ADC_ERR_INVALID_ARG-
221+
* mode or element of p_cfg structure has invalid value.
222+
* ADC_ERR_ILLEGAL_ARG-
223+
* an argument is illegal based upon mode
224+
* ADC_ERR_MISSING_PTR-
225+
* p_cfg pointer is FIT_NO_PTR/NULL
226+
*******************************************************************************/
227+
adc_err_t R_ADC_Open(uint8_t const unit,
228+
adc_mode_t const mode,
229+
adc_cfg_t * const p_cfg,
230+
void (* const p_callback)(void *p_args));
231+
232+
/******************************************************************************
233+
* Function Name: R_ADC_Control
234+
* Description : This function provides commands for enabling channels and
235+
* sensors and for runtime operations. These include enabling/
236+
* disabling trigger sources and interrupts, initiating a
237+
* software trigger, and checking for scan completion.
238+
*
239+
* NOTE: Enabling a channel or a sensor, or setting the sample state count reg
240+
* cannot be done while the ADCSR.ADST bit is set (conversion in progress).
241+
* Because these commands should only be called once during initialization
242+
* before triggers are enabled, this should not be an issue. Registers
243+
* with this restriction include ADANSA, ADANSB, ADADS, ADADC, ADSSTR,
244+
* ADEXICR, and some bits in ADCSR and TSCR.
245+
* No runtime operational sequence checking of any kind is performed.
246+
*
247+
* Arguments : unit -
248+
* Unit number
249+
* cmd-
250+
* Command to run
251+
* p_args-
252+
* Pointer to optional configuration structure
253+
* Return Value : ADC_SUCCESS-
254+
* Successful
255+
* ADC_ERR_MISSING_PTR-
256+
* p_args pointer is FIT_NO_PTR/NULL when required as an argument
257+
* ADC_ERR_INVALID_ARG-
258+
* cmd or element of p_args structure has invalid value.
259+
* ADC_ERR_ILLEGAL_CMD-
260+
* cmd is illegal based upon mode
261+
* ADC_ERR_SCAN_NOT_DONE-
262+
* The requested scan has not completed
263+
* ADC_ERR_UNKNOWN
264+
* Did not receive expected hardware response
265+
*******************************************************************************/
266+
adc_err_t R_ADC_Control(uint8_t const unit,
267+
adc_cmd_t const cmd,
268+
void * const p_args);
269+
270+
/******************************************************************************
271+
* Function Name: R_ADC_Read
272+
* Description : This function reads conversion results from a single channel,
273+
* sensor, or the double trigger register.
274+
* Arguments : unit -
275+
* Unit number
276+
* reg_id-
277+
* Id for the register to read (see enum below)
278+
* p_data-
279+
* Pointer to variable to load value into.
280+
* Return Value : ADC_SUCCESS-
281+
* Successful
282+
* ADC_ERR_INVALID_ARG-
283+
* reg_id contains an invalid value.
284+
* ADC_ERR_MISSING _PTR-
285+
* p_data is FIT_NO_PTR/NULL
286+
*******************************************************************************/
287+
adc_err_t R_ADC_Read(uint8_t const unit,
288+
adc_reg_t const reg_id,
289+
uint16_t * const p_data);
290+
291+
292+
/******************************************************************************
293+
* Function Name: R_ADC_ReadAll
294+
* Description : This function reads conversion results from all potential
295+
* sources, enabled or not.
296+
* Arguments : p_all_data-
297+
* Pointer to structure to load register values into.
298+
* Return Value : ADC_SUCCESS-
299+
* Successful
300+
* ADC_ERR_MISSING _PTR-
301+
* p_data is FIT_NO_PTR/NULL
302+
*******************************************************************************/
303+
adc_err_t R_ADC_ReadAll(adc_data_t * const p_all_data);
304+
305+
/******************************************************************************
306+
* Function Name: R_ADC_Close
307+
* Description : This function ends any scan in progress, disables interrupts,
308+
* and removes power to the A/D peripheral.
309+
* Arguments : unit - Unit number
310+
* Return Value : ADC_SUCCESS - Successful
311+
* ADC_ERR_INVALID_ARG - unit contains an invalid value.
312+
*******************************************************************************/
313+
adc_err_t R_ADC_Close(uint8_t const unit);
314+
315+
/*****************************************************************************
316+
* Function Name: R_ADC_GetVersion
317+
* Description : Returns the version of this module. The version number is
318+
* encoded such that the top two bytes are the major version
319+
* number and the bottom two bytes are the minor version number.
320+
* Arguments : none
321+
* Return Value : version number
322+
******************************************************************************/
323+
uint32_t R_ADC_GetVersion(void);
324+
325+
326+
#endif /* S12AD_PRV_IF_H */

0 commit comments

Comments
 (0)