RZV Flexible Software Package Documentation  Release v3.0.0

 
Direct Memory Access Controller (r_dmac_b)

Functions

fsp_err_t R_DMAC_B_Open (transfer_ctrl_t *const p_api_ctrl, transfer_cfg_t const *const p_cfg)
 
fsp_err_t R_DMAC_B_Reconfigure (transfer_ctrl_t *const p_api_ctrl, transfer_info_t *p_info)
 
fsp_err_t R_DMAC_B_Reset (transfer_ctrl_t *const p_api_ctrl, void const *volatile p_src, void *volatile p_dest, uint16_t const num_transfers)
 
fsp_err_t R_DMAC_B_SoftwareStart (transfer_ctrl_t *const p_api_ctrl, transfer_start_mode_t mode)
 
fsp_err_t R_DMAC_B_SoftwareStop (transfer_ctrl_t *const p_api_ctrl)
 
fsp_err_t R_DMAC_B_Enable (transfer_ctrl_t *const p_api_ctrl)
 
fsp_err_t R_DMAC_B_Disable (transfer_ctrl_t *const p_api_ctrl)
 
fsp_err_t R_DMAC_B_InfoGet (transfer_ctrl_t *const p_api_ctrl, transfer_properties_t *const p_info)
 
fsp_err_t R_DMAC_B_Close (transfer_ctrl_t *const p_api_ctrl)
 
fsp_err_t R_DMAC_B_Reload (transfer_ctrl_t *const p_api_ctrl, void const *p_src, void *p_dest, uint32_t const num_transfers)
 
fsp_err_t R_DMAC_B_CallbackSet (transfer_ctrl_t *const p_api_ctrl, void(*p_callback)(dmac_b_callback_args_t *), void const *const p_context, dmac_b_callback_args_t *const p_callback_memory)
 

Detailed Description

Driver for the DMAC peripheral on RZ MPUs. This module implements the Transfer Interface.

Overview

The Direct Memory Access Controller (DMAC) transfers data from one memory location to another without using the CPU.

Features

Configuration

Build Time Configurations for r_dmac_b

The following build time configurations are defined in fsp_cfg/r_dmac_b_cfg.h:

ConfigurationOptionsDefaultDescription
Parameter Checking
  • Default (BSP)
  • Enabled
  • Disabled
Default (BSP) If selected code for parameter checking is included in the build.

Configurations for Transfer > Transfer Driver on r_dmac_b

This module can be added to the Stacks tab via New Stack > Transfer > Transfer Driver on r_dmac_b.

ConfigurationOptionsDefaultDescription
NameName must be a valid C symbolg_transfer0 Module name.
UnitMCU Specific OptionsSpecify the hardware unit. In a multi-core environment, it is recommended to open a separate unit for each core.
ChannelMust be a valid integer between 0 and 15.0 Specify the hardware channel.
Mode
  • Normal
  • Block
Normal Select the transfer mode.
Source Data Size
  • 1 Byte
  • 2 Bytes
  • 4 Bytes
  • 8 Bytes
  • 16 Bytes
  • 32 Bytes
  • 64 Bytes
  • 128 Bytes
2 Bytes Select the source data size.
Destination Data Size
  • 1 Byte
  • 2 Bytes
  • 4 Bytes
  • 8 Bytes
  • 16 Bytes
  • 32 Bytes
  • 64 Bytes
  • 128 Bytes
2 Bytes Select the destination data size.
Destination Address Mode
  • Incremented
  • Fixed
Incremented Select the address mode for the destination.
Source Address Mode
  • Incremented
  • Fixed
Incremented Select the address mode for the source.
Activation SourceMCU Specific OptionsSelect the DMAC transfer start event.
DMA Activation Request Source Select
  • Requested by a transfer source module
  • Requested by a transfer destination module
Requested by a transfer source module DMA Activation Request Source Select.
DACK Output modeMCU Specific OptionsSelect DACK output mode.
External DREQ Input Pin SelectMCU Specific OptionsSelect DREQ input signal.
External DACK Output Pin SelectMCU Specific OptionsSelect DACK output signal.
External TEND Output Pin SelectMCU Specific OptionsSelect TEND output signal.
External DREQ Detection ModeMCU Specific OptionsExternal DREQ detection mode select.(This cannot be set on devices that do not have an external DREQ terminal)
DMAC ModeRegister ModeRegister Mode Select DMAC Mode.
CallbackName must be a valid C symbolNULL A user callback that is called at the end of the transfer.
ContextManual EntryNULL Pointer to the context structure passed through the callback argument.
Transfer End Interrupt EnableMCU Specific OptionsEnable the transfer end interrupt.
Transfer End Interrupt PriorityValue must be an integer between 0 and 25512 Select the transfer end interrupt priority.
Transfer IntervalValue must be a non-negative integer0 Transfer interval
Channel Priority
  • Fixed
  • Round Robin
module.driver.transfer_on_dmac_b.channel_priority.fixed Channel Priority
Transfer Continuation
  • DMA transfer only once
  • Transfer with Setting 1 and Setting 2 alternately
DMA transfer only once When Next0 Register Set Transfer completes, Next1 Register Set Transfer occurs
Setting 1 Destination AddressManual EntryNULL Specify the transfer destination address.
Setting 1 Source AddressManual EntryNULL Specify the transfer source address.
Setting 1 Total Number of Transfer BytesValue must be a non-negative integer1 Specify the total number of transfer bytes.
Setting 2 Destination AddressManual EntryNULL Specify the transfer destination address.(Use only when Transfer with Setting 1 and Setting 2 horizontally is selected in Transfer Continuatuion.)
Setting 2 Source AddressManual EntryNULL Specify the transfer source address.(Use only when Transfer with Setting 1 and Setting 2 horizontally is selected in Transfer Continuatuion.)
Setting 2 Total Number of Transfer BytesValue must be a non-negative integer1 Specify the total number of transfer bytes.(Use only when Transfer with Setting 1 and Setting 2 horizontally is selected in Transfer Continuatuion.)

Warning
"DMA Activation Request Source Select", "Low Detection Enable", "High Detection Enable", and "DACK output" must be set according to the DMAC transfer source. For details, see 'DMA Transfer Request Detection Operation Setting Table' of User's Manual.

Clock Configuration

The DMAC peripheral module uses ICLK as the clock source. The ICLK frequency is set by using the Clocks tab of the FSP Configuration editor prior to a build, or by using the CGC module at run-time.

Pin Configuration

This module does not use I/O pins.

Usage Notes

Transfer Modes

The DMAC Module supports two modes of operation.

Limitations

This driver only supports the transfer by non-secure access. Also, DMA transfer cannot be performed to the slave area for which the security level has been set.

It is not supported DMA transfer to DDR-SDRAM area (0x8000_0000 to 0x9FFF_FFFF) in the current driver version of RZ/V2H . Therefore, do not specify addresses in this area as source or destination addresses.

If CPU has built-in cache memory, the transfer source and destination should be placed to the area where the cache memory is set to disabled.

The execution of the Reload function must be completed during the transfer of Next0 or Next1. If the total number of bytes transferred is small, the next transfer may start before the function execution completes. In this case, continuous operation of DMAC transfer is not guaranteed, so when using the Reload function, it is recommended to set the number of bytes to be transferred a little longer, taking into account the bus clock frequency and interrupt processing time.

Examples

Basic Example

This is a basic example of minimal use of the DMAC in an application.

void dmac_minimal_example (void)
{
/* Open the transfer instance with initial configuration. */
fsp_err_t err = R_DMAC_B_Open(&g_transfer_ctrl, &g_transfer_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
/* Enable the DMAC to handle incoming transfer requests. */
err = R_DMAC_B_Enable(&g_transfer_ctrl);
assert(FSP_SUCCESS == err);
}

Data Structures

struct  dmac_b_register_set_setting_t
 
struct  dmac_b_instance_ctrl_t
 
struct  dmac_b_extended_cfg_t
 
struct  dmac_b_extended_info_t
 

Macros

#define DMAC_B_MAX_NORMAL_TRANSFER_LENGTH
 
#define DMAC_B_MAX_BLOCK_TRANSFER_LENGTH
 

Enumerations

enum  dmac_b_transfer_size_t
 
enum  dmac_b_ack_mode_t
 
enum  dmac_b_external_detection_t
 
enum  dmac_b_internal_detection_t
 
enum  dmac_b_request_direction_t
 
enum  dmac_b_continuous_setting_t
 
enum  dmac_b_channel_scheduling_t
 
enum  dmac_b_mode_select_t
 

Data Structure Documentation

◆ dmac_b_register_set_setting_t

struct dmac_b_register_set_setting_t

Register set settings.

Data Fields
void const * p_src Source pointer.
void * p_dest Destination pointer.
uint32_t length Transfer byte.

◆ dmac_b_instance_ctrl_t

struct dmac_b_instance_ctrl_t

Control block used by driver. DO NOT INITIALIZE - this structure will be initialized in transfer_api_t::open.

◆ dmac_b_extended_cfg_t

struct dmac_b_extended_cfg_t

DMAC transfer configuration extension. This extension is required.

Data Fields

uint8_t unit
 Unit number.
 
uint8_t channel
 Channel number.
 
IRQn_Type dmac_int_irq
 DMAC interrupt number.
 
uint8_t dmac_int_ipl
 DMAC interrupt priority.
 
dmac_trigger_event_t activation_source
 
dmac_b_ack_mode_t ack_mode
 DACK output mode.
 
dmac_b_external_input_pin_t dreq_input_pin
 DREQ input pin name.
 
dmac_b_external_output_pin_t ack_output_pin
 DACK output pin name.
 
dmac_b_external_output_pin_t tend_output_pin
 TEND output pin name.
 
dmac_b_external_detection_t external_detection_mode
 DMAC request detection method for external pin.
 
dmac_b_internal_detection_t internal_detection_mode
 DMAC request detection method for internal pin.
 
dmac_b_request_direction_t activation_request_source_select
 DMAC activation request source.
 
dmac_b_mode_select_t dmac_mode
 DMAC Mode.
 
dmac_b_continuous_setting_t continuous_setting
 Next register operation settings.
 
uint16_t transfer_interval
 DMA transfer interval.
 
dmac_b_channel_scheduling_t channel_scheduling
 DMA channel scheduling.
 
void(* p_callback )(dmac_b_callback_args_t *cb_data)
 
void const * p_context
 

Field Documentation

◆ activation_source

dmac_trigger_event_t dmac_b_extended_cfg_t::activation_source

Select which event will trigger the transfer.

◆ p_callback

void(* dmac_b_extended_cfg_t::p_callback) (dmac_b_callback_args_t *cb_data)

Callback for transfer end interrupt.

◆ p_context

void const* dmac_b_extended_cfg_t::p_context

Placeholder for user data. Passed to the user p_callback in transfer_callback_args_t.

◆ dmac_b_extended_info_t

struct dmac_b_extended_info_t

DMAC transfer information configuration extension. This extension is required.

Data Fields
dmac_b_transfer_size_t src_size

Select number of source bytes to transfer at once.

dmac_b_transfer_size_t dest_size

Select number of destination bytes to transfer at once.

dmac_b_register_set_setting_t * p_next1_register_setting

Next1 Register set settings

Macro Definition Documentation

◆ DMAC_B_MAX_NORMAL_TRANSFER_LENGTH

#define DMAC_B_MAX_NORMAL_TRANSFER_LENGTH

Max configurable number of transfers in TRANSFER_MODE_NORMAL.

◆ DMAC_B_MAX_BLOCK_TRANSFER_LENGTH

#define DMAC_B_MAX_BLOCK_TRANSFER_LENGTH

Max number of transfers per block in TRANSFER_MODE_BLOCK

Enumeration Type Documentation

◆ dmac_b_transfer_size_t

Transfer size specifies the size of each individual transfer.

Enumerator
DMAC_B_TRANSFER_SIZE_1_BYTE 

Each transfer transfers a 8-bit value.

DMAC_B_TRANSFER_SIZE_2_BYTE 

Each transfer transfers a 16-bit value.

DMAC_B_TRANSFER_SIZE_4_BYTE 

Each transfer transfers a 32-bit value.

DMAC_B_TRANSFER_SIZE_8_BYTE 

Each transfer transfers a 64-bit value.

DMAC_B_TRANSFER_SIZE_16_BYTE 

Each transfer transfers a 128-bit value.

DMAC_B_TRANSFER_SIZE_32_BYTE 

Each transfer transfers a 256-bit value.

DMAC_B_TRANSFER_SIZE_64_BYTE 

Each transfer transfers a 512-bit value.

DMAC_B_TRANSFER_SIZE_128_BYTE 

Each transfer transfers a 1024-bit value.

◆ dmac_b_ack_mode_t

DACK output mode. See RZ/T2M hardware manual Table 14.19 DMA Transfer Request Detection Operation Setting Table.

Enumerator
DMAC_B_ACK_MODE_LEVEL_MODE 

Level mode.

DMAC_B_ACK_MODE_BUS_CYCLE_MODE 

Bus cycle mode.

DMAC_B_ACK_MODE_MASK_DACK_OUTPUT 

Output is masked.

◆ dmac_b_external_detection_t

Detection method of the external DMA request signal. See RZ/T2M hardware manual Table 14.19 DMA Transfer Request Detection Operation Setting Table.

Enumerator
DMAC_B_EXTERNAL_DETECTION_LOW_LEVEL 

Low level detection.

DMAC_B_EXTERNAL_DETECTION_FALLING_EDGE 

Falling edge detection.

DMAC_B_EXTERNAL_DETECTION_RISING_EDGE 

Rising edge detection.

DMAC_B_EXTERNAL_DETECTION_FALLING_RISING_EDGE 

Falling/Rising edge detection.

DMAC_B_EXTERNAL_DETECTION_NO_DETECTION 

Not using hardware detection.

◆ dmac_b_internal_detection_t

Detection method of the internal DMA request signal. See RZ/T2M hardware manual Table 14.19 DMA Transfer Request Detection Operation Setting Table.

Enumerator
DMAC_B_INTERNAL_DETECTION_NO_DETECTION 

Not using hardware detection.

DMAC_B_INTERNAL_DETECTION_FALLING_EDGE 

Falling edge detection.

DMAC_B_INTERNAL_DETECTION_RISING_EDGE 

Rising edge detection.

DMAC_B_INTERNAL_DETECTION_LOW_LEVEL 

Low level detection.

DMAC_B_INTERNAL_DETECTION_HIGH_LEVEL 

High level detection.

◆ dmac_b_request_direction_t

DMA activation request source select. See RZ/T2M hardware manual Table 14.19 DMA Transfer Request Detection Operation Setting Table.

Enumerator
DMAC_B_REQUEST_DIRECTION_SOURCE_MODULE 

Requested by a transfer source module.

DMAC_B_REQUEST_DIRECTION_DESTINATION_MODULE 

Requested by a transfer destination module.

◆ dmac_b_continuous_setting_t

Select the Next register set to be executed next.

Enumerator
DMAC_B_CONTINUOUS_SETTING_TRANSFER_ONCE 

Transfer only once using the Next0 register set.

DMAC_B_CONTINUOUS_SETTING_TRANSFER_ALTERNATELY 

Transfers are performed alternately with the Next0 register set and the Next1 register set.

◆ dmac_b_channel_scheduling_t

DMAC channel scheduling.

Enumerator
DMAC_B_CHANNEL_SCHEDULING_FIXED 

Fixed priority mode.

DMAC_B_CHANNEL_SCHEDULING_ROUND_ROBIN 

Round-robin mode.

◆ dmac_b_mode_select_t

DMAC mode setting.

Enumerator
DMAC_B_MODE_SELECT_REGISTER 

Register mode.

DMAC_B_MODE_SELECT_LINK 

Link mode.

Function Documentation

◆ R_DMAC_B_Open()

fsp_err_t R_DMAC_B_Open ( transfer_ctrl_t *const  p_api_ctrl,
transfer_cfg_t const *const  p_cfg 
)

Configure a DMAC channel.

Return values
FSP_SUCCESSSuccessful open.
FSP_ERR_ASSERTIONAn input parameter is invalid.
FSP_ERR_IP_CHANNEL_NOT_PRESENTThe configured channel is invalid.
FSP_ERR_IRQ_BSP_DISABLEDThe IRQ associated with the activation source is not enabled in the BSP.
FSP_ERR_ALREADY_OPENThe control structure is already opened.

◆ R_DMAC_B_Reconfigure()

fsp_err_t R_DMAC_B_Reconfigure ( transfer_ctrl_t *const  p_api_ctrl,
transfer_info_t p_info 
)

Reconfigure the transfer with new transfer info.

Return values
FSP_SUCCESSTransfer is configured and will start when trigger occurs.
FSP_ERR_ASSERTIONAn input parameter is invalid.
FSP_ERR_NOT_ENABLEDDMAC is not enabled. The current configuration must not be valid.
FSP_ERR_NOT_OPENHandle is not initialized. Call R_DMAC_Open to initialize the control block.

◆ R_DMAC_B_Reset()

fsp_err_t R_DMAC_B_Reset ( transfer_ctrl_t *const  p_api_ctrl,
void const *volatile  p_src,
void *volatile  p_dest,
uint16_t const  num_transfers 
)

Reset transfer source, destination, and number of transfers.

Return values
FSP_ERR_UNSUPPORTEDAPI not supported.

◆ R_DMAC_B_SoftwareStart()

fsp_err_t R_DMAC_B_SoftwareStart ( transfer_ctrl_t *const  p_api_ctrl,
transfer_start_mode_t  mode 
)

If the mode is TRANSFER_START_MODE_SINGLE initiate a single transfer with software. If the mode is TRANSFER_START_MODE_REPEAT continue triggering transfers until all of the transfers are completed.

Return values
FSP_SUCCESSTransfer started written successfully.
FSP_ERR_ASSERTIONAn input parameter is invalid.
FSP_ERR_NOT_OPENHandle is not initialized. Call R_DMAC_Open to initialize the control block.

◆ R_DMAC_B_SoftwareStop()

fsp_err_t R_DMAC_B_SoftwareStop ( transfer_ctrl_t *const  p_api_ctrl)

Stop software transfers if they were started with TRANSFER_START_MODE_REPEAT.

Return values
FSP_SUCCESSTransfer stopped written successfully.
FSP_ERR_ASSERTIONAn input parameter is invalid.
FSP_ERR_NOT_OPENHandle is not initialized. Call R_DMAC_Open to initialize the control block.

◆ R_DMAC_B_Enable()

fsp_err_t R_DMAC_B_Enable ( transfer_ctrl_t *const  p_api_ctrl)

Enable transfers for the configured activation source.

Return values
FSP_SUCCESSCounter value written successfully.
FSP_ERR_ASSERTIONAn input parameter is invalid.
FSP_ERR_NOT_OPENHandle is not initialized. Call R_DMAC_Open to initialize the control block.

◆ R_DMAC_B_Disable()

fsp_err_t R_DMAC_B_Disable ( transfer_ctrl_t *const  p_api_ctrl)

Disable transfers so that they are no longer triggered by the activation source.

Return values
FSP_SUCCESSCounter value written successfully.
FSP_ERR_ASSERTIONAn input parameter is invalid.
FSP_ERR_NOT_OPENHandle is not initialized. Call R_DMAC_Open to initialize the control block.

◆ R_DMAC_B_InfoGet()

fsp_err_t R_DMAC_B_InfoGet ( transfer_ctrl_t *const  p_api_ctrl,
transfer_properties_t *const  p_info 
)

Set driver specific information in provided pointer.

Return values
FSP_SUCCESSInformation has been written to p_info.
FSP_ERR_NOT_OPENHandle is not initialized. Call R_DMAC_Open to initialize the control block.
FSP_ERR_ASSERTIONAn input parameter is invalid.

◆ R_DMAC_B_Close()

fsp_err_t R_DMAC_B_Close ( transfer_ctrl_t *const  p_api_ctrl)

Disable transfer and clean up internal data. Implements transfer_api_t::close.

Return values
FSP_SUCCESSSuccessful close.
FSP_ERR_ASSERTIONAn input parameter is invalid.
FSP_ERR_NOT_OPENHandle is not initialized. Call R_DMAC_Open to initialize the control block.

◆ R_DMAC_B_Reload()

fsp_err_t R_DMAC_B_Reload ( transfer_ctrl_t *const  p_api_ctrl,
void const *volatile  p_src,
void *volatile  p_dest,
uint32_t const  num_transfers 
)

Make the following transfer settings to continue the transfer.

Return values
FSP_SUCCESSSuccessful continuous transfer settings.
FSP_ERR_ASSERTIONAn input parameter is invalid.
FSP_ERR_NOT_OPENHandle is not initialized. Call R_DMAC_Open to initialize the control block.

◆ R_DMAC_B_CallbackSet()

fsp_err_t R_DMAC_B_CallbackSet ( transfer_ctrl_t *const  p_api_ctrl,
void(*)(dmac_b_callback_args_t *)  p_callback,
void const *const  p_context,
dmac_b_callback_args_t *const  p_callback_memory 
)

Updates the user callback with the option to provide memory for the callback argument structure. Implements transfer_api_t::callbackSet.

Return values
FSP_SUCCESSCallback updated successfully.
FSP_ERR_ASSERTIONA required pointer is NULL.
FSP_ERR_NOT_OPENThe control block has not been opened.