Skip to content

Commit b30d0b9

Browse files
KhanhNguyen-RVCKhiemNguyenT
authored andcommitted
hal: renesas: ra: Add initial support for DMA module on RA SoCs
Add DMA driver package and configuration for RA SoCs Signed-off-by: Khanh Nguyen <[email protected]>
1 parent 4722c1a commit b30d0b9

File tree

4 files changed

+954
-0
lines changed

4 files changed

+954
-0
lines changed

drivers/ra/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ zephyr_library_sources_ifdef(CONFIG_USE_RA_FSP_SCI_UART
2828
fsp/src/r_sci_uart/r_sci_uart.c)
2929
zephyr_library_sources_ifdef(CONFIG_USE_RA_FSP_SCI_B_UART
3030
fsp/src/r_sci_b_uart/r_sci_b_uart.c)
31+
zephyr_library_sources_ifdef(CONFIG_USE_RA_FSP_DMA
32+
fsp/src/r_dmac/r_dmac.c)
3133
zephyr_library_sources_ifdef(CONFIG_USE_RA_FSP_DTC
3234
fsp/src/r_dtc/r_dtc.c)
3335
zephyr_library_sources_ifdef(CONFIG_USE_RA_FSP_ADC

drivers/ra/fsp/inc/instances/r_dmac.h

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
/*
2+
* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates
3+
*
4+
* SPDX-License-Identifier: BSD-3-Clause
5+
*/
6+
7+
/*******************************************************************************************************************//**
8+
* @addtogroup DMAC
9+
* @{
10+
**********************************************************************************************************************/
11+
#ifndef R_DMAC_H
12+
#define R_DMAC_H
13+
14+
/***********************************************************************************************************************
15+
* Includes
16+
**********************************************************************************************************************/
17+
#include "bsp_api.h"
18+
#include "r_transfer_api.h"
19+
20+
/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
21+
FSP_HEADER
22+
23+
/***********************************************************************************************************************
24+
* Macro definitions
25+
**********************************************************************************************************************/
26+
27+
/** Max configurable number of transfers in TRANSFER_MODE_NORMAL. */
28+
#define DMAC_MAX_NORMAL_TRANSFER_LENGTH (0xFFFF)
29+
30+
/** Max number of transfers per repeat for TRANSFER_MODE_REPEAT. */
31+
#define DMAC_MAX_REPEAT_TRANSFER_LENGTH (0x400)
32+
33+
/** Max number of transfers per block in TRANSFER_MODE_BLOCK */
34+
#define DMAC_MAX_BLOCK_TRANSFER_LENGTH (0x400)
35+
36+
/** Max configurable number of repeats to trasnfer in TRANSFER_MODE_REPEAT */
37+
#define DMAC_MAX_REPEAT_COUNT (0x10000)
38+
39+
/** Max configurable number of blocks to transfer in TRANSFER_MODE_BLOCK */
40+
#define DMAC_MAX_BLOCK_COUNT (0x10000)
41+
42+
/***********************************************************************************************************************
43+
* Typedef definitions
44+
**********************************************************************************************************************/
45+
46+
typedef transfer_callback_args_t dmac_callback_args_t;
47+
48+
/** Control block used by driver. DO NOT INITIALIZE - this structure will be initialized in @ref transfer_api_t::open. */
49+
typedef struct st_dmac_instance_ctrl
50+
{
51+
uint32_t open; // Driver ID
52+
53+
transfer_cfg_t const * p_cfg;
54+
55+
/* Pointer to base register. */
56+
R_DMAC0_Type * p_reg;
57+
58+
void (* p_callback)(dmac_callback_args_t *); // Pointer to callback
59+
dmac_callback_args_t * p_callback_memory; // Pointer to optional callback argument memory
60+
void const * p_context; // Pointer to context to be passed into callback function
61+
} dmac_instance_ctrl_t;
62+
63+
/** DMAC transfer configuration extension. This extension is required. */
64+
typedef struct st_dmac_extended_cfg
65+
{
66+
uint8_t channel; ///< Channel number, does not apply to all HAL drivers.
67+
IRQn_Type irq; ///< DMAC interrupt number
68+
uint8_t ipl; ///< DMAC interrupt priority
69+
int32_t offset; ///< Offset value used with transfer_addr_mode_t::TRANSFER_ADDR_MODE_OFFSET.
70+
71+
/** Source ring buffer size for @ref TRANSFER_MODE_REPEAT_BLOCK. */
72+
uint16_t src_buffer_size;
73+
74+
/** Select which event will trigger the transfer.
75+
* @note Select ELC_EVENT_NONE for software activation in order to use softwareStart and softwareStart to trigger
76+
* transfers. */
77+
elc_event_t activation_source;
78+
79+
/** Callback for transfer end interrupt. */
80+
void (* p_callback)(dmac_callback_args_t * cb_data);
81+
dmac_callback_args_t * p_callback_memory;
82+
83+
/** Placeholder for user data. Passed to the user p_callback in ::transfer_callback_args_t. */
84+
void const * p_context;
85+
} dmac_extended_cfg_t;
86+
87+
/**********************************************************************************************************************
88+
* Exported global variables
89+
**********************************************************************************************************************/
90+
91+
/** @cond INC_HEADER_DEFS_SEC */
92+
/** Filled in Interface API structure for this Instance. */
93+
extern const transfer_api_t g_transfer_on_dmac;
94+
95+
/** @endcond */
96+
97+
/***********************************************************************************************************************
98+
* Public Function Prototypes
99+
**********************************************************************************************************************/
100+
fsp_err_t R_DMAC_Open(transfer_ctrl_t * const p_api_ctrl, transfer_cfg_t const * const p_cfg);
101+
fsp_err_t R_DMAC_Reconfigure(transfer_ctrl_t * const p_api_ctrl, transfer_info_t * p_info);
102+
fsp_err_t R_DMAC_Reset(transfer_ctrl_t * const p_api_ctrl,
103+
void const * volatile p_src,
104+
void * volatile p_dest,
105+
uint16_t const num_transfers);
106+
fsp_err_t R_DMAC_SoftwareStart(transfer_ctrl_t * const p_api_ctrl, transfer_start_mode_t mode);
107+
fsp_err_t R_DMAC_SoftwareStop(transfer_ctrl_t * const p_api_ctrl);
108+
fsp_err_t R_DMAC_Enable(transfer_ctrl_t * const p_api_ctrl);
109+
fsp_err_t R_DMAC_Disable(transfer_ctrl_t * const p_api_ctrl);
110+
fsp_err_t R_DMAC_InfoGet(transfer_ctrl_t * const p_api_ctrl, transfer_properties_t * const p_info);
111+
fsp_err_t R_DMAC_Reload(transfer_ctrl_t * const p_api_ctrl,
112+
void const * p_src,
113+
void * p_dest,
114+
uint32_t const num_transfers);
115+
fsp_err_t R_DMAC_Close(transfer_ctrl_t * const p_api_ctrl);
116+
fsp_err_t R_DMAC_BlockReset(transfer_ctrl_t * const p_ctrl,
117+
void const * volatile p_src,
118+
void * volatile p_dest,
119+
uint16_t const length,
120+
transfer_size_t size,
121+
uint16_t const num_transfers);
122+
fsp_err_t R_DMAC_CallbackSet(transfer_ctrl_t * const p_api_ctrl,
123+
void ( * p_callback)(dmac_callback_args_t *),
124+
void const * const p_context,
125+
dmac_callback_args_t * const p_callback_memory);
126+
127+
/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
128+
FSP_FOOTER
129+
130+
#endif
131+
132+
/*******************************************************************************************************************//**
133+
* @} (end defgroup DMAC)
134+
**********************************************************************************************************************/

0 commit comments

Comments
 (0)