RZ/A Flexible Software Package Documentation  Release v3.0.0

 
Direct Memory Access Controller (r_dmac)

Functions

fsp_err_t R_DMAC_Open (transfer_ctrl_t *const p_api_ctrl, transfer_cfg_t const *const p_cfg)
 
fsp_err_t R_DMAC_Reconfigure (transfer_ctrl_t *const p_api_ctrl, transfer_info_t *p_info)
 
fsp_err_t R_DMAC_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_SoftwareStart (transfer_ctrl_t *const p_api_ctrl, transfer_start_mode_t mode)
 
fsp_err_t R_DMAC_SoftwareStop (transfer_ctrl_t *const p_api_ctrl)
 
fsp_err_t R_DMAC_Enable (transfer_ctrl_t *const p_api_ctrl)
 
fsp_err_t R_DMAC_Disable (transfer_ctrl_t *const p_api_ctrl)
 
fsp_err_t R_DMAC_InfoGet (transfer_ctrl_t *const p_api_ctrl, transfer_properties_t *const p_info)
 
fsp_err_t R_DMAC_Close (transfer_ctrl_t *const p_api_ctrl)
 
fsp_err_t R_DMAC_Reload (transfer_ctrl_t *const p_api_ctrl, void const *p_src, void *p_dest, uint32_t const num_transfers)
 

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

The following build time configurations are defined in fsp_cfg/r_dmac_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

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

ConfigurationOptionsDefaultDescription
NameName must be a valid C symbolg_transfer0 Module name.
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
  • Fixed
  • Incremented
Fixed Select the address mode for the destination.
Source Address Mode
  • Fixed
  • Incremented
Fixed Select the address mode for the source.
Activation SourceRefer to the RZA Configuration tool for available options.SOFTWARE_TRIGGER Select 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.
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 3124 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.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.

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_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_Enable(&g_transfer_ctrl);
assert(FSP_SUCCESS == err);
}

Data Structures

struct  dmac_callback_args_t
 
struct  dmac_next1_register_setting_t
 
struct  dmac_instance_ctrl_t
 
struct  dmac_extended_cfg_t
 
struct  dmac_extended_info_t
 

Macros

#define DMAC_MAX_NORMAL_TRANSFER_LENGTH
 
#define DMAC_MAX_BLOCK_TRANSFER_LENGTH
 

Enumerations

enum  dmac_event_t
 
enum  dmac_transfer_size_t
 
enum  dmac_ack_mode_t
 
enum  dmac_detection_t
 
enum  dmac_request_direction_t
 
enum  dmac_continuous_setting_t
 
enum  dmac_channel_scheduling_t
 
enum  dmac_mode_select_t
 

Data Structure Documentation

◆ dmac_callback_args_t

struct dmac_callback_args_t

Callback function parameter data.

Data Fields
dmac_event_t event Event code.
void const * p_context Placeholder for user data. Set in r_transfer_t::open function in transfer_cfg_t.

◆ dmac_next1_register_setting_t

struct dmac_next1_register_setting_t

Register set settings.

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

◆ dmac_instance_ctrl_t

struct dmac_instance_ctrl_t

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

◆ dmac_extended_cfg_t

struct dmac_extended_cfg_t

DMAC transfer configuration extension. This extension is required.

Data Fields

uint8_t channel
 Channel number.
 
IRQn_Type dmac_int_irq
 DMAC interrupt number.
 
uint8_t dmac_int_ipl
 DMAC interrupt priority.
 
uint32_t dmac_int_irq_detect_type
 DMAC interrupt detection type.
 
dmac_trigger_event_t activation_source
 
IRQn_Type activation_irq_number
 
dmac_ack_mode_t ack_mode
 DACK output mode.
 
dmac_detection_t detection_mode
 DMAC request detection method.
 
dmac_request_direction_t activation_request_source_select
 DMAC activation request source.
 
dmac_mode_select_t dmac_mode
 DMAC Mode.
 
dmac_continuous_setting_t continuous_setting
 Next register operation settings.
 
uint16_t transfer_interval
 DMA transfer interval.
 
dmac_channel_scheduling_t channel_scheduling
 DMA channel scheduling.
 
void(* p_callback )(dmac_callback_args_t *cb_data)
 
void const * p_context
 

Field Documentation

◆ activation_source

dmac_trigger_event_t dmac_extended_cfg_t::activation_source

Select which event will trigger the transfer.

◆ activation_irq_number

IRQn_Type dmac_extended_cfg_t::activation_irq_number

The interrupt ID number that corresponds to the Activation Source.

◆ p_callback

void(* dmac_extended_cfg_t::p_callback) (dmac_callback_args_t *cb_data)

Callback for transfer end interrupt.

◆ p_context

void const* dmac_extended_cfg_t::p_context

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

◆ dmac_extended_info_t

struct dmac_extended_info_t

DMAC transfer configuration extension. This extension is required.

Data Fields
dmac_transfer_size_t src_size

Select number of source bytes to transfer at once.

dmac_transfer_size_t dest_size

Select number of destnination bytes to transfer at once.

dmac_next1_register_setting_t * p_next1_register_setting

Next1 Register set settings

Macro Definition Documentation

◆ DMAC_MAX_NORMAL_TRANSFER_LENGTH

#define DMAC_MAX_NORMAL_TRANSFER_LENGTH

Max configurable number of transfers in TRANSFER_MODE_NORMAL.

◆ DMAC_MAX_BLOCK_TRANSFER_LENGTH

#define DMAC_MAX_BLOCK_TRANSFER_LENGTH

Max number of transfers per block in TRANSFER_MODE_BLOCK

Enumeration Type Documentation

◆ dmac_event_t

Events that can trigger a callback function.

Enumerator
DMAC_EVENT_TRANSFER_END 

DMA transfer has completed.

DMAC_EVENT_TRANSFER_ERROR 

A bus error occurred during DMA transfer.

◆ dmac_transfer_size_t

Transfer size specifies the size of each individual transfer.

Enumerator
DMAC_TRANSFER_SIZE_1_BYTE 

Each transfer transfers a 8-bit value.

DMAC_TRANSFER_SIZE_2_BYTE 

Each transfer transfers a 16-bit value.

DMAC_TRANSFER_SIZE_4_BYTE 

Each transfer transfers a 32-bit value.

DMAC_TRANSFER_SIZE_8_BYTE 

Each transfer transfers a 64-bit value.

DMAC_TRANSFER_SIZE_16_BYTE 

Each transfer transfers a 128-bit value.

DMAC_TRANSFER_SIZE_32_BYTE 

Each transfer transfers a 256-bit value.

DMAC_TRANSFER_SIZE_64_BYTE 

Each transfer transfers a 512-bit value.

DMAC_TRANSFER_SIZE_128_BYTE 

Each transfer transfers a 1024-bit value.

◆ dmac_ack_mode_t

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

Enumerator
DMAC_ACK_MODE_LEVEL_MODE 

Level mode.

DMAC_ACK_MODE_BUS_CYCLE_MODE 

Bus cycle mode.

DMAC_ACK_MODE_MASK_DACK_OUTPUT 

Output is masked.

◆ dmac_detection_t

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

Enumerator
DMAC_DETECTION_FALLING_EDGE 

Falling edge detection.

DMAC_DETECTION_RISING_EDGE 

Rising edge detection.

DMAC_DETECTION_LOW_LEVEL 

Low level detection.

DMAC_DETECTION_HIGH_LEVEL 

High level detection.

◆ dmac_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_REQUEST_DIRECTION_SOURCE_MODULE 

Requested by a transfer source module.

DMAC_REQUEST_DIRECTION_DESTINATION_MODULE 

Requested by a transfer destination module.

◆ dmac_continuous_setting_t

Select the Next register set to be executed next.

Enumerator
DMAC_CONTINUOUS_SETTING_TRANSFER_NEXT0_ONCE 

Transfer only once using the Next0 register set.

DMAC_CONTINUOUS_SETTING_TRANSFER_NEXT0_NEXT1_ALTERNATELY 

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

◆ dmac_channel_scheduling_t

DMAC channel scheduling.

Enumerator
DMAC_CHANNEL_SCHEDULING_FIXED 

Fixed priority mode.

DMAC_CHANNEL_SCHEDULING_ROUND_ROBIN 

Round-robin mode.

◆ dmac_mode_select_t

DMAC mode setting.

Enumerator
DMAC_MODE_SELECT_REGISTER 

Register mode.

DMAC_MODE_SELECT_LINK 

Link mode.

Function Documentation

◆ R_DMAC_Open()

fsp_err_t R_DMAC_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_Reconfigure()

fsp_err_t R_DMAC_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_Reset()

fsp_err_t R_DMAC_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_SoftwareStart()

fsp_err_t R_DMAC_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_SoftwareStop()

fsp_err_t R_DMAC_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_Enable()

fsp_err_t R_DMAC_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_Disable()

fsp_err_t R_DMAC_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_InfoGet()

fsp_err_t R_DMAC_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_Close()

fsp_err_t R_DMAC_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_Reload()

fsp_err_t R_DMAC_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. Implements transfer_api_t::reload.

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.