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 DMAC_B 9 * @{ 10 **********************************************************************************************************************/ 11 12 #ifndef R_DMAC_B_H 13 #define R_DMAC_B_H 14 15 /*********************************************************************************************************************** 16 * Includes 17 **********************************************************************************************************************/ 18 #include "bsp_api.h" 19 #include "r_transfer_api.h" 20 21 /* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ 22 FSP_HEADER 23 24 /*********************************************************************************************************************** 25 * Macro definitions 26 **********************************************************************************************************************/ 27 28 /** Max configurable number of transfers in TRANSFER_MODE_NORMAL. */ 29 #define DMAC_B_MAX_NORMAL_TRANSFER_LENGTH (0xFFFFFFFF) 30 31 /** Max number of transfers per block in TRANSFER_MODE_BLOCK */ 32 #define DMAC_B_MAX_BLOCK_TRANSFER_LENGTH (0xFFFFFFFF) 33 34 /*********************************************************************************************************************** 35 * Typedef definitions 36 **********************************************************************************************************************/ 37 38 /** Events that can trigger a callback function. */ 39 typedef enum e_dmac_b_event 40 { 41 DMAC_B_EVENT_TRANSFER_END = 0, ///< DMA transfer has completed. 42 DMAC_B_EVENT_TRANSFER_ERROR = 1, ///< A bus error occurred during DMA transfer. 43 } dmac_b_event_t; 44 45 /** Callback function parameter data. */ 46 typedef struct st_dmac_b_callback_args_t 47 { 48 dmac_b_event_t event; ///< Event code 49 void const * p_context; ///< Placeholder for user data. Set in r_transfer_t::open function in ::transfer_cfg_t. 50 } dmac_b_callback_args_t; 51 52 /** Transfer size specifies the size of each individual transfer. */ 53 typedef enum e_dmac_b_transfer_size 54 { 55 DMAC_B_TRANSFER_SIZE_1_BYTE = 0, ///< Each transfer transfers a 8-bit value. 56 DMAC_B_TRANSFER_SIZE_2_BYTE = 1, ///< Each transfer transfers a 16-bit value. 57 DMAC_B_TRANSFER_SIZE_4_BYTE = 2, ///< Each transfer transfers a 32-bit value. 58 DMAC_B_TRANSFER_SIZE_8_BYTE = 3, ///< Each transfer transfers a 64-bit value. 59 DMAC_B_TRANSFER_SIZE_16_BYTE = 4, ///< Each transfer transfers a 128-bit value. 60 DMAC_B_TRANSFER_SIZE_32_BYTE = 5, ///< Each transfer transfers a 256-bit value. 61 DMAC_B_TRANSFER_SIZE_64_BYTE = 6, ///< Each transfer transfers a 512-bit value. 62 DMAC_B_TRANSFER_SIZE_128_BYTE = 7, ///< Each transfer transfers a 1024-bit value. 63 } dmac_b_transfer_size_t; 64 65 /** DACK output mode. See RZ/T2M hardware manual Table 14.19 DMA Transfer Request Detection Operation Setting Table. */ 66 typedef enum e_dmac_b_ack_mode 67 { 68 DMAC_B_ACK_MODE_LEVEL_MODE = 1, ///< Level mode. 69 DMAC_B_ACK_MODE_BUS_CYCLE_MODE = 2, ///< Bus cycle mode. 70 DMAC_B_ACK_MODE_MASK_DACK_OUTPUT = 4, ///< Output is masked. 71 } dmac_b_ack_mode_t; 72 73 #ifndef BSP_OVERRIDE_DMAC_B_EXTERNAL_DETECTION_T 74 75 /** Detection method of the external DMA request signal. See RZ/T2M hardware manual Table 14.19 DMA Transfer Request Detection Operation Setting Table. */ 76 typedef enum e_dmac_b_external_detection 77 { 78 DMAC_B_EXTERNAL_DETECTION_LOW_LEVEL = 0, ///< Low level detection. 79 DMAC_B_EXTERNAL_DETECTION_FALLING_EDGE = 1, ///< Falling edge detection. 80 DMAC_B_EXTERNAL_DETECTION_RISING_EDGE = 2, ///< Rising edge detection. 81 DMAC_B_EXTERNAL_DETECTION_FALLING_RISING_EDGE = 3, ///< Falling/Rising edge detection. 82 } dmac_b_external_detection_t; 83 84 #endif 85 86 /** Detection method of the internal DMA request signal. See RZ/T2M hardware manual Table 14.19 DMA Transfer Request Detection Operation Setting Table. */ 87 typedef enum e_dmac_b_internal_detection 88 { 89 DMAC_B_INTERNAL_DETECTION_NO_DETECTION = 0, ///< Not using hardware detection. 90 DMAC_B_INTERNAL_DETECTION_FALLING_EDGE = 1, ///< Falling edge detection. 91 DMAC_B_INTERNAL_DETECTION_RISING_EDGE = 2, ///< Rising edge detection. 92 DMAC_B_INTERNAL_DETECTION_LOW_LEVEL = 5, ///< Low level detection. 93 DMAC_B_INTERNAL_DETECTION_HIGH_LEVEL = 6, ///< High level detection. 94 } dmac_b_internal_detection_t; 95 96 /** DMA activation request source select. See RZ/T2M hardware manual Table 14.19 DMA Transfer Request Detection Operation Setting Table. */ 97 typedef enum e_dmac_b_request_direction 98 { 99 DMAC_B_REQUEST_DIRECTION_SOURCE_MODULE = 0, ///< Requested by a transfer source module. 100 DMAC_B_REQUEST_DIRECTION_DESTINATION_MODULE = 1, ///< Requested by a transfer destination module. 101 } dmac_b_request_direction_t; 102 103 /** Select the Next register set to be executed next. */ 104 typedef enum e_dmac_b_continuous_setting 105 { 106 DMAC_B_CONTINUOUS_SETTING_TRANSFER_ONCE = 0x0, ///< Transfer only once using the Next0 register set. 107 DMAC_B_CONTINUOUS_SETTING_TRANSFER_ALTERNATELY = 0x3, ///< Transfers are performed alternately with the Next0 register set and the Next1 register set. 108 } dmac_b_continuous_setting_t; 109 110 /** Register set settings. */ 111 typedef struct st_dmac_b_register_set_setting_t 112 { 113 void const * p_src; ///< Source pointer. 114 void * p_dest; ///< Destination pointer. 115 uint32_t length; ///< Transfer byte. 116 } dmac_b_register_set_setting_t; 117 118 /** DMAC channel scheduling. */ 119 typedef enum e_dmac_b_channel_scheduling 120 { 121 DMAC_B_CHANNEL_SCHEDULING_FIXED = 0, ///< Fixed priority mode. 122 DMAC_B_CHANNEL_SCHEDULING_ROUND_ROBIN = 1, ///< Round-robin mode. 123 } dmac_b_channel_scheduling_t; 124 125 /** DMAC mode setting. */ 126 typedef enum e_dmac_b_mode_select 127 { 128 DMAC_B_MODE_SELECT_REGISTER = 0, ///< Register mode. 129 DMAC_B_MODE_SELECT_LINK = 1, ///< Link mode. 130 } dmac_b_mode_select_t; 131 132 /** Control block used by driver. DO NOT INITIALIZE - this structure will be initialized in @ref transfer_api_t::open. */ 133 typedef struct st_dmac_b_instance_ctrl 134 { 135 uint32_t open; // Driver ID 136 137 transfer_cfg_t const * p_cfg; 138 139 /* Pointer to base register. */ 140 R_DMAC_B0_Type * p_reg; 141 } dmac_b_instance_ctrl_t; 142 143 /** DMAC transfer configuration extension. This extension is required. */ 144 typedef struct st_dmac_b_extended_cfg 145 { 146 uint8_t unit; ///< Unit number 147 uint8_t channel; ///< Channel number 148 IRQn_Type dmac_int_irq; ///< DMAC interrupt number 149 uint8_t dmac_int_ipl; ///< DMAC interrupt priority 150 151 /** Select which event will trigger the transfer. */ 152 dmac_trigger_event_t activation_source; 153 154 dmac_b_ack_mode_t ack_mode; ///< DACK output mode 155 dmac_b_external_detection_t external_detection_mode; ///< DMAC request detection method for external pin 156 dmac_b_internal_detection_t internal_detection_mode; ///< DMAC request detection method for internal pin 157 dmac_b_request_direction_t activation_request_source_select; ///< DMAC activation request source 158 159 dmac_b_mode_select_t dmac_mode; ///< DMAC Mode 160 dmac_b_continuous_setting_t continuous_setting; ///< Next register operation settings 161 uint16_t transfer_interval; ///< DMA transfer interval 162 dmac_b_channel_scheduling_t channel_scheduling; ///< DMA channel scheduling 163 164 /** Callback for transfer end interrupt. */ 165 void (* p_callback)(dmac_b_callback_args_t * cb_data); 166 167 /** Placeholder for user data. Passed to the user p_callback in ::dmac_b_callback_args_t. */ 168 void const * p_context; 169 } dmac_b_extended_cfg_t; 170 171 /** DMAC transfer information configuration extension. This extension is required. */ 172 typedef struct st_dmac_b_extended_info 173 { 174 /** Select number of source bytes to transfer at once. */ 175 dmac_b_transfer_size_t src_size; 176 177 /** Select number of destination bytes to transfer at once. */ 178 dmac_b_transfer_size_t dest_size; 179 180 /** Next1 Register set settings */ 181 dmac_b_register_set_setting_t * p_next1_register_setting; 182 } dmac_b_extended_info_t; 183 184 /********************************************************************************************************************** 185 * Exported global variables 186 **********************************************************************************************************************/ 187 188 /** @cond INC_HEADER_DEFS_SEC */ 189 /** Filled in Interface API structure for this Instance. */ 190 extern const transfer_api_t g_transfer_on_dmac_b; 191 192 /** @endcond */ 193 194 /*********************************************************************************************************************** 195 * Public Function Prototypes 196 **********************************************************************************************************************/ 197 fsp_err_t R_DMAC_B_Open(transfer_ctrl_t * const p_api_ctrl, transfer_cfg_t const * const p_cfg); 198 fsp_err_t R_DMAC_B_Reconfigure(transfer_ctrl_t * const p_api_ctrl, transfer_info_t * p_info); 199 fsp_err_t R_DMAC_B_Reset(transfer_ctrl_t * const p_api_ctrl, 200 void const * volatile p_src, 201 void * volatile p_dest, 202 uint16_t const num_transfers); 203 fsp_err_t R_DMAC_B_SoftwareStart(transfer_ctrl_t * const p_api_ctrl, transfer_start_mode_t mode); 204 fsp_err_t R_DMAC_B_SoftwareStop(transfer_ctrl_t * const p_api_ctrl); 205 fsp_err_t R_DMAC_B_Enable(transfer_ctrl_t * const p_api_ctrl); 206 fsp_err_t R_DMAC_B_Disable(transfer_ctrl_t * const p_api_ctrl); 207 fsp_err_t R_DMAC_B_InfoGet(transfer_ctrl_t * const p_api_ctrl, transfer_properties_t * const p_info); 208 fsp_err_t R_DMAC_B_Close(transfer_ctrl_t * const p_api_ctrl); 209 fsp_err_t R_DMAC_B_Reload(transfer_ctrl_t * const p_api_ctrl, 210 void const * p_src, 211 void * p_dest, 212 uint32_t const num_transfers); 213 214 /* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ 215 FSP_FOOTER 216 217 #endif 218 219 /*******************************************************************************************************************//** 220 * @} (end defgroup DMAC) 221 **********************************************************************************************************************/ 222