DMA Controller

Introduction

The Direct Memory Access Controller (DMAC) autonomously performs data transfers between a source (peripheral or memory) and a destination (peripheral or memory) without CPU intervention.

Features

  • Provides 8 independent, configurable unidirectional transfer channels. Supports software-programmable channel priorities to independently manage data transfers between specified sources and destinations.

  • Fully compatible with the AXI4 protocol. Features an APB4 slave interface for register programming and an AXI master interface with a configurable 32-bit data bus width.

  • Supports four high-speed data transfer types: memory-to-memory (M2M), memory-to-peripheral (M2P), peripheral-to-memory (P2M), and peripheral-to-peripheral (P2P).

  • Flexible flow controller selection, allowing either the DMAC or the source/destination peripheral to act as the flow controller.

  • Supports single and burst transactions.

  • Independent source and destination address configuration, supporting address increment or fixed modes.

  • Supports linked-list and channel register auto-reload mechanisms for continuous multi-block data transfers.

  • Supports safe channel disable, suspend, and resume operations to ensure zero data loss during operations.

  • Provides event flags for single block transfer complete, multi-block transfer complete, and transfer errors (including security and protocol errors), with support for combined interrupt requests, independent outputs, and mask control.

  • Supports channel security mode configuration. Both the AXI master interface and APB slave interface support secure access control to enhance system data access security.

RTL8721Dx:
  • Each channel has an independent FIFO. The FIFO depth is 128 bytes for Channels 0/1, and 32 bytes for the remaining channels.

  • Supports large-capacity data block transfers, with a maximum single block transfer size of 65,535 data items (based on the source transfer width).

  • Provides 30 hardware handshake interfaces for transfer requests and flow control with peripherals.

Block Diagram

The following figure illustrates the DMAC architecture, comprising the control interface, data transfer interface, independent channel FIFOs, hardware request interfaces, and an internal arbiter.

../../_images/block_diagram_of_dmac.png

DMA Controller Block Diagram

  • APB Slave Interface: Used for configuring and accessing the DMAC. The system programs the DMAC via the APB bus, including setting source/destination addresses, configuring channel control registers, and selecting flow controllers. It is also used to read channel interrupts and operating statuses.

  • AXI Master Interface: The DMAC operates as a master on the AXI bus. It executes data transfers through this interface—reading data from source peripherals and writing it to destination peripherals or memory. This interface fully supports both single and burst transactions.

  • Hardware Request Interface: Provides a dedicated set of hardware handshake signals for interaction with peripherals. When a peripheral is ready to send or request data, it asserts a hardware request to the DMAC via this interface. The DMAC responds by controlling single or burst transactions according to the protocol.

  • Channels and FIFOs: The DMAC integrates multiple independent transfer channels to support concurrent multi-tasking. During a transfer, data read from the source is first buffered in the channel’s dedicated FIFO before being written to the destination. This FIFO-based mechanism mitigates transfer bottlenecks caused by clock or processing rate mismatches between the source and destination.

  • Arbiter: When multiple active DMA channels request data transfers simultaneously, the arbiter grants AXI bus access based on predefined priority scheduling policies. This ensures efficient and orderly utilization of the DMAC master interface resources in high-throughput scenarios.

Functional Description

This section describes the functional details of the DMAC components.

Basic Functions

Transfer Levels

The DMAC data transfer process is logically divided into three levels:

  1. DMA Transfer

    The highest-level operation executed by the DMAC. A complete DMA transfer begins when software enables the DMA channel and ends when the channel is disabled or a transfer complete interrupt is generated. Depending on application complexity, a DMA transfer can be categorized as:

    • Single-block Transfer: Contains only a single data block within the entire DMA transfer lifecycle.

    • Multi-block Transfer: A concatenation of multiple data blocks (e.g., handling non-contiguous memory via linked lists, or periodic refreshes via auto-reload).

  2. Block Transfer

    The secondary logical unit constituting a DMA transfer, representing a set of data to be transferred continuously. The DMAC can optionally trigger a block complete interrupt at the end of each block transfer.

  3. Bus Transaction

    The fundamental execution unit for data interaction between the DMAC, system buses (e.g., AXI/AHB), and peripheral FIFOs. To maximize bus bandwidth utilization, the DMAC breaks down block transfer requirements into multiple transactions. Transactions are divided into two types:

    • Burst Transaction:

      Once the DMAC wins bus arbitration, it continuously executes a specified number of read/write operations for data items (width determined by CTLx_L.SRC_TR_WIDTH or CTLx_L.DST_TR_WIDTH) without interruption. The burst length is defined by the source or destination burst size parameters (CTLx_L.SRC_MSIZE or CTLx_L.DEST_MSIZE). This mode offers high bus throughput and is suitable for bulk data transfers.

    • Single Transaction:

      Once the DMAC wins bus arbitration, it performs a single read/write operation for one data item (width determined by CTLx_L.SRC_TR_WIDTH or CTLx_L.DST_TR_WIDTH), then releases the bus or waits for the next handshake request. This mode is typically used for handling unaligned tail data that cannot form a complete burst, or for responding to low-speed peripherals with shallow buffers.

Example: If software configures a channel to read 35 data items from a peripheral (Block Size = 35) and sets the burst length to 8. During this block transfer, the underlying bus behavior is: Execute 4 burst transactions (processing 4 × 8 = 32 data items), then automatically downgrade to execute 3 single transactions (processing the remaining 3 tail data items). These combined transactions complete the entire block transfer.

Note

  • The block size is configurable only when the DMAC acts as the flow controller.

  • When a peripheral acts as the flow controller, the block size is unknown, and the transfer depends entirely on transaction requests issued by the peripheral. For details, refer to the Transfer Types and Flow Controller section.

Before enabling a channel for single or multi-block transfers, its fundamental hardware behavior must be defined by programming the channel control registers (CTLx_L and CTLx_H) and configuration registers (CFGx_L and CFGx_H). The following table defines the core parameters determining bus transaction characteristics:

Register / Field

Description

DMAC_CHx_FIFO_DEPTH

Internal FIFO Depth: The internal FIFO depth of channel x, defining the maximum data buffering capacity.

CTLx_L.TT_FC

Transfer Type and Flow Control: Defines the transfer direction (M2M, M2P, P2M, P2P) and the device in charge of flow control (DMAC, source peripheral, or destination peripheral).

CTLx_H.BLOCK_TS

Block Transfer Size: Specifies the total number of data items (Based on source transmission width) contained in a single block transfer.

CTLx_L.SRC_TR_WIDTH

Source Transfer Width: Defines the data bit width for a single source bus access. Must not exceed the system bus width.

CTLx_L.DST_TR_WIDTH

Destination Transfer Width: Defines the data bit width for a single destination bus access. Must not exceed the system bus width.

CTLx_L.SRC_MSIZE

Source Burst Size: The number of data items read from the source per handshake request. If the source address mode is fixed, this value should not exceed 16 to comply with AXI protocol specifications.

CTLx_L.DEST_MSIZE

Destination Burst Size: The number of data items written to the destination per handshake request. If the destination address mode is fixed, this value should not exceed 16.

CTLx_L.SINC / DINC

Source/Destination Address Increment Mode: Indicates whether the address increments or remains fixed after each transfer. If the target is memory and set to “Fixed”, the transfer width must equal the bus width.

CTLx_L.LLP_SRC_EN / LLP_DST_EN

Linked List Control Enable: Enables block chaining via linked lists on the source or destination side, used in conjunction with the LLP_Lx register for complex multi-block transfers.

CFGx_L.RELOAD_SRC / RELOAD_DST

Auto-Reload Enable: In multi-block transfer mode, determines whether to auto-restore the source address register (SARx) or destination address register (DARx) to its initial value at the end of each block transfer.

CFGx_H.SRC_PER / DEST_PER

Peripheral Handshake Interface Assignment: Assigns the channel’s source or destination to a specific hardware handshake interface number when hardware handshaking is selected.

CFGx_H.PROTCTL

Protection Control: Controls secure or non-secure DMA transfers. 0 enables secure transfers; 1 enables non-secure transfers.

CFGx_H.FCMODE

Flow Control Mode: When the destination peripheral acts as the flow controller, this determines when to respond to source transaction requests. 0 responds immediately and enables data pre-fetching. 1 waits for the destination request before responding, disabling data pre-fetching.

Transfer Types and Flow Controller

The flow controller is a hardware entity that determines the total amount of data to be transferred in a DMA block and triggers termination upon completion. The current chip supports configuring the DMAC or the participating peripheral (source/destination) as the flow controller.

  • If the transfer data amount is known, the DMAC should be configured as the flow controller. The block size should be programmed into the CTLx_H.BLOCK_TS field.

  • If the transfer data amount is unknown, the peripheral should be configured as the flow controller. The actual amount of data transferred is entirely determined by the peripheral. For example, when the DMA is used to receive variable-length data from a UART, the CPU does not know in advance how many bytes will be sent, so the UART peripheral should act as the flow controller. When a UART idle timeout or similar event occurs, the peripheral asserts the dma_last signal to the DMAC to terminate the current block transfer.

  • Memory lacks a handshake interface with the DMAC; therefore, memory can never act as the flow controller. Once a DMA channel is enabled, memory-oriented transfers proceed immediately without waiting for any peripheral transaction requests.

The DMAC supports 4 transfer types and 2 flow controller settings, configured via the CTLx_L.TT_FC field. The following table lists the valid combinations of transfer types and flow controllers:

Transfer Type

Flow Controller

Memory-to-Memory

DMAC

Memory-to-Peripheral

DMAC

Memory-to-Peripheral

Peripheral

Peripheral-to-Memory

DMAC

Peripheral-to-Memory

Peripheral

Peripheral-to-Peripheral

DMAC

Peripheral-to-Peripheral

Source Peripheral

Peripheral-to-Peripheral

Destination Peripheral

The Flow Control Mode (CFGx_H.FCMODE) determines whether the data prefetch mechanism is enabled for the internal FIFO of the DMAC. It dictates the DMAC’s strategy for responding to source requests under specific transfer types:

  • 0: Enable data prefetch (default). Upon receiving a request from the source peripheral, the DMAC immediately reads data to fill the FIFO, without waiting for a request from the destination peripheral.

  • 1: Disable data prefetch. The DMAC only responds to the source peripheral and performs data reads after receiving a request from the destination peripheral. This prevents source data from being read prematurely and stalling in the FIFO.

Warning

CFGx_H.FCMODE is valid only when the transfer type is peripheral-to-peripheral and the destination peripheral is the flow controller (i.e., CTLx_L.TT_FC = 3’b111). For any other configuration (TT_FC != 7), this bit must be kept at 0.

Transaction and Bus Width

Transactions are the smallest independent actions executed by the DMAC at the hardware level. In peripheral transfers, transactions strictly define the interaction between the DMAC and peripherals. The hardware supports two transaction types:

  • Single Transaction: Transfers one data item per operation, mapping directly to a single AXI read/write.

  • Burst Transaction: Configured via software (CTLx_L.SRC_MSIZE / CTLx_L.DEST_MSIZE). The DMAC translates this into a series of AXI incremental bursts or single transactions, ensuring no single AXI burst exceeds the maximum configured size. The burst length must match the FIFO depths of the DMAC and the peripheral.

The total bytes transferred on the bus are determined jointly by the transfer width and burst length.

Supported Burst Lengths:

CTLx_L.SRC_MSIZE[2:0] / CTLx_L.DEST_MSIZE[2:0]

Burst Length

000

1

001

4

010

8

011

16

100 and above

Not Supported

Supported Transfer Widths:

CTLx_L.SRC_TR_WIDTH[2:0] / CTLx_L.DST_TR_WIDTH[2:0]

Transfer Width (Bytes)

000

1

001

2

010

4

011 and above

Not Supported

Parameter binding conditions for specific transfer types or flow controllers:

  • Peripheral-to-Peripheral

    • Destination Flow Control: Must set SRC_MSIZE = 0 and DST_MSIZE = 0, and source/destination widths must be equal (SRC_TR_WIDTH == DST_TR_WIDTH).

    • Source Flow Control: The destination executes a transfer only when the dma_single signal is asserted.

  • Memory-to-Peripheral

    • Destination Flow Control: Must set SRC_MSIZE = DST_MSIZE.

Address alignment and transfer width constraints:

  • When using hardware handshaking with a peripheral source/destination, the address (SARx/DARx) must be aligned with its corresponding transfer width (CTLx_L.SRC_TR_WIDTH / DST_TR_WIDTH).

  • When the destination is a peripheral with a fixed address, the total bytes transferred from the source must be a multiple of the destination transfer width (DST_TR_WIDTH bytes).

Note

Memory transfer widths are always aligned to 4 bytes (32-bit) on the physical bus, regardless of the logical transfer width configured by software.

Transaction Byte Count
  • Source Single Transaction Bytes

    src_single_size_bytes = (Decoded value of CTLx_L.SRC_TR_WIDTH in Bytes)
    
  • Source Burst Transaction Bytes

    src_burst_size_bytes = (Decoded value of CTLx_L.SRC_MSIZE) * src_single_size_bytes
    
  • Destination Single Transaction Bytes

    dst_single_size_bytes = (Decoded value of CTLx_L.DST_TR_WIDTH in Bytes)
    
  • Destination Burst Transaction Bytes

    dst_burst_size_bytes = (Decoded value of CTLx_L.DEST_MSIZE) * dst_single_size_bytes
    
Total Block Byte Count

The total bytes contained in a data block depend on the configured flow controller.

  1. DMAC as Flow Controller: The processor must program the total number of data items into the CTLx_H.BLOCK_TS register. Total block bytes:

    blk_size_bytes_dma = CTLx_H.BLOCK_TS * src_single_size_bytes
    
  2. Source Peripheral as Flow Controller: Total bytes are accumulated based on actual burst and single requests initiated by the source:

    blk_size_bytes_src = (num_of_src_burst_req * src_burst_size_bytes) +
                         (num_of_src_single_req * src_single_size_bytes)
    
  3. Destination Peripheral as Flow Controller: Total bytes are accumulated based on burst and single requests consumed by the destination:

    blk_size_bytes_dst = (num_of_dst_burst_req * dst_burst_size_bytes) +
                         (num_of_dst_single_req * dst_single_size_bytes)
    

Address Mode

Source and destination address modes can be configured independently:

  • Increment: The address increments after each transfer to align with the next CTLx_L.SRC_TR_WIDTH / CTLx_L.DST_TR_WIDTH boundary.

  • Fixed (No Increment): Must be used if the device is reading/writing from/to a peripheral FIFO with a fixed address.

Configuration Guidelines: - If the source/destination is Memory, set the address mode to Increment. - If the source/destination is a Peripheral, set the address mode to Fixed.

Interrupt

The DMAC supports the following 4 interrupt types, primarily used to indicate transfer progress or error conditions:

DMA Interrupt Types and Trigger Conditions

Interrupt Source

Interrupt Type

Trigger Condition

IntTfr

DMA Transfer Complete

Triggered when a complete DMA transfer (which may consist of one or more data blocks) finishes successfully.

IntBlock

Block Transfer Complete

Triggered when a single data block transfer completes (i.e., the current block’s data has been successfully written to the destination and acknowledged).

IntPtcErr

Protocol Error

Triggered when the DMAC master port receives an error response on the AXI bus.

IntSecErr

Security Error

Triggered when a CPU in a non-secure context attempts to access a register belonging to a TrustZone secure channel (only applicable when secure mode is enabled).

Taking the transfer-complete interrupt as an example, the hardware logic for interrupt generation is as follows:

../../_images/dma_interrupt.svg

Masking and Generation Mechanism of the Transfer-Complete Interrupt

The interrupt handling flow consists of the following stages:

  1. Raw Status Latch: When an interrupt event occurs, the hardware first latches it into the corresponding raw status register (RAW_*). This flag remains set until explicitly cleared by software.

  2. Interrupt Masking: The hardware performs a bitwise AND operation on the raw status (RAW_*), the corresponding mask register (MASK_*), and the channel’s global interrupt enable bit (CTLx_L.INT_EN).

  3. Status Generation and Aggregation: The final effective result of the masking operation is stored in the status register (STAT_*). Additionally, the combined status register (STAT_INT) performs a bitwise OR across all individual status registers to aggregate the currently unmasked interrupt status of each channel.

  4. Interrupt Clear Mechanism: Software writes 1 to the corresponding bit of the clear register (CLR_*) to simultaneously clear the flags in both the raw status (RAW_*) and the masked status (STAT_*) within the same clock cycle, and to deassert the physical interrupt request signal.

Note

If an interrupt event occurs but is masked by the MASK register or INT_EN, the external status flag and the physical interrupt signal are suppressed. However, the corresponding bit in the raw status register (RAW_*) is still set, recording the occurrence of the event.

Cache Coherency

  • If the source or destination address is located in a cacheable memory region, software must explicitly perform a D-Cache Clean operation before initiating the DMA transfer, to flush dirty data from the cache back to main memory.

  • Before the CPU reads the destination data after a DMA transfer completes, software must perform a D-Cache Invalidate operation to force the CPU to reload the latest data from main memory, preventing stale cache lines from causing data incoherency.

Handshake Interface

The handshake interface is utilized at the Transaction level to control the flow of Single or Burst Transactions. The operation of the handshake interface varies depending on whether the peripheral or the DMAC serves as the flow controller.

  • Peripherals use the handshake interface to indicate to the DMAC that they are ready to transfer or accept data over the bus.

  • Peripherals can request DMA transfers from the DMAC using the hardware handshake interface.

Note

In the remainder of this document, references to the source and destination hardware handshake interfaces assume active-high polarity (refer to the CFGx_L.SRC_HS_POL or CFGx_L.DST_HS_POL bits in the channel configuration register). When using active-low handshake interfaces, the active levels and edges are opposite to those of the active-high interfaces.

The type of handshake interface depends on whether the peripheral is the flow controller.

Tip

Source and destination peripherals can independently select the handshake interface type. There are two interface types:

  • Hardware Handshake: Supported by default. For more information, refer to the CFGx_L.HS_SEL_SRC and CFGx_L.HS_SEL_DST parameters in the CFGx register.

  • Software Handshake: Not supported.

All hardware handshake interfaces and their corresponding peripherals are fixed during chip design and cannot be altered by the user. The hardware handshake interfaces supported by the current chip and their corresponding IPs are listed in the following table:

RTL8721Dx:

Function

Handshake Number

Comment

UART0 TX

0

UART0 RX

1

UART1 TX

2

UART1 RX

3

UART2 TX

4

UART2 RX

5

SPI0 TX

6

SPI0 RX

7

SPI1 TX

8

SPI1 RX

9

SPIC TX

10

SPIC RX

11

SPORT0 TX

12

Two FIFOs, occupies 12 & 13

SPORT0 RX

14

Two FIFOs, occupies 14 & 15

SPORT1 TX

16

Two FIFOs, occupies 16 & 17

SPORT1 RX

18

Two FIFOs, occupies 18 & 19

LEDC_TX

20

I2C0 TX

21

I2C0 RX

22

I2C1 TX

23

I2C1 RX

24

DMAC as Flow Controller

When the DMAC acts as the flow controller, it attempts to transfer data efficiently using as little bus bandwidth as possible. Typically, the DMAC tries to use Burst Transactions and fill or empty the channel FIFO in a burst, provided the software has not restricted the burst length.

  1. Signals

    Figure DMAC as Flow Controller illustrates the hardware handshake interface between the peripheral and the DMAC when the DMAC is the flow controller.

    ../../_images/dma_peri_not_fc.png

    DMAC as Flow Controller

    The following table describes the hardware handshake signals when the DMAC acts as the flow controller. The signal polarity can be programmed using the CFGx_L.SRC_HS_POL and CFGx_L.DST_HS_POL fields.

    Signal

    Direction

    Description

    dma_req

    Input

    Burst transaction request from the peripheral.

    The DMAC always interprets dma_req as a burst request, regardless of the level of dma_single.

    • Type: Level-sensitive.

    • Handshake: Once the peripheral asserts dma_req, the signal must remain asserted until the DMAC asserts dma_ack.

    • Completion: The peripheral should deassert dma_req after receiving dma_ack from the DMAC (indicating the completion of the burst). The DMAC will deassert dma_ack once the peripheral deasserts dma_req.

    dma_single

    Input

    Single transaction status.

    Asserted by the corresponding peripheral when the destination peripheral can accept at least one data item or the source peripheral can send at least one data item; otherwise, it is deasserted.

    • Handshake: Once asserted, dma_single must remain asserted until dma_ack is asserted. The peripheral must then deassert dma_single.

    • Validity: This signal is sampled only in the single transaction region of the block transfer. Outside this region, it is ignored (all transfers are treated as bursts).

    dma_last

    Input

    Ignored. Because the peripheral is not the flow controller, the DMAC does not sample this signal.

    dma_ack

    Output

    DMAC acknowledge signal. Asserted after the data phase of the final AXI transfer of the current transaction (single or burst).

    • Deassertion Trigger:

      • Single transaction: Remains asserted until the peripheral deasserts dma_single.

      • Burst transaction: Remains asserted until the peripheral deasserts dma_req.

    • Deassertion Timing:

      • If using a synchronous handshake interface, dma_ack is deasserted after 1 dmac_clk cycle.

      • If using an asynchronous handshake interface, dma_ack is deasserted after 6 + SYNC dmac_clk cycles, where SYNC is the number of synchronization stages.

    dma_finish

    Output

    Block completion signal. The DMAC asserts this signal to indicate the completion of the entire block transfer.

    • Timing: Generally follows the same timing as dma_ack.

    • Handshake Loop: Forms a closed loop with dma_req or dma_single.

    • Exception: When the destination peripheral is the flow controller, the timing definition of the interaction between dma_finish and the source peripheral interface differs from the above.

    Note

    For dma_ack and dma_finish, when the channel enable register is enabled and HS_POL is configured as active-low, these signals may still exhibit a brief “active” level before the block transfer truly begins, as the module has not yet fully transitioned into the working state.

  2. Timing Diagram

    Figure Burst Transaction Example shows a timing diagram for a burst transaction where the peripheral clock per_clk is equal to dmac_clk. In this example, the peripheral is outside the single transaction region, so the DMAC does not sample dma_single.

    ../../_images/dma_peri_not_fc_burst_transaction.png

    Burst Transaction Example

    The handshake sequence is as follows:

    1. Peripheral asserts dma_req

    2. DMAC asserts dma_ack

    3. Peripheral deasserts dma_req

    4. DMAC deasserts dma_ack

    If the peripheral is an AXI peripheral, the per_clk signal equals dmac_clk; if it is an APB peripheral, it equals pclk. The burst transaction request signal dma_req and the single status signal dma_single are generated by the peripheral located in the per_clk domain and are sampled by clk within the DMAC. The acknowledge signal dma_ack is generated by RTK_DMAC located in the dmac_clk domain and is sampled by per_clk in the peripheral. The handshake mechanism between the DMAC and peripherals supports quasi-synchronous clocks: that is, dmac_clk and per_clk must be phase-aligned, and when using a synchronous handshake interface, the dmac_clk frequency must be a multiple of the per_clk frequency.

  3. APB Destination Peripheral and Buffered Writes

    ../../_images/dma_peri_not_fc_dst_peri_is_apb.png

    Destination Peripheral is an APB Peripheral

    If the destination peripheral is an APB peripheral and buffered writes are performed via an APB bridge, care must be taken to prevent the destination peripheral FIFO from overflowing.

    1. Cause of Overflow: The write completes on the AXI bus but has not yet completed on the APB bus (the write may still be buffered in the APB bridge).

    2. Overflow Scenario:

      1. As soon as the write transaction completes on the AXI interface, the DMAC asserts dma_ack.

      2. The APB peripheral deasserts its request signal after sampling the assertion of the acknowledge signal.

      3. Because the data is still buffered in the bridge and has not reached the FIFO, the peripheral perceives that there is still space. Consequently, it reasserts the request signal one APB clock cycle later.

      4. The peripheral may only have space for one data item, which will eventually be consumed by the first (pending) buffered write. The initiation of the second transaction may overflow the FIFO.

    3. Solution: To avoid this situation, one of the following two strategies must be adopted during system design:

      1. Disable buffered writes to ensure synchronous bus write operations.

      2. If buffered writes are used, ensure that the dma_ack signal from the DMAC is forcibly delayed until the data is actually written to the APB peripheral. The specific method involves routing the dma_ack signal to the APB bridge.

    Note

    If write operations are not buffered, the initiation of the second transaction will not occur, as the destination peripheral will correctly perceive that its FIFO is full.

Peripheral as Flow Controller

When a peripheral is configured as the flow controller, the peripheral controls the total length of the block. It is responsible for explicitly signaling the DMAC when the block transfer is complete.

  • Signaling Completion: The peripheral completes the end-of-block indication by indicating to the DMAC that the current transaction (whether burst or single) is the last transaction in the block.

  • Transaction Type Selection: The peripheral directly indicates to the DMAC the type of transaction to execute. When the block size is not an integer multiple of CTLx_L.SRC_MSIZE / CTLx_L.DEST_MSIZE, the peripheral must use single transactions to complete the block transfer.

Note

Because the peripheral can initiate single transactions and terminate blocks, the concept of the Single Transaction Region does not apply to this mode.

  1. Signals

    Figure Peripheral as Flow Controller shows the hardware handshake interface between the destination or source peripheral and the DMAC when the peripheral is the flow controller.

    ../../_images/dma_peri_is_fc.png

    Peripheral as Flow Controller

    The following table describes the operation of the hardware handshake interface signals when the peripheral is the flow controller:

    Signal

    Direction

    Description

    dma_req

    Input

    Transaction request from the peripheral. An active level on dma_req initiates the request, while the specific transaction type (single or burst) is determined by the dma_single signal.

    Handshake Protocol: Once dma_req is asserted, it must remain asserted until dma_ack is asserted. The peripheral must deassert dma_req when it detects the assertion of dma_ack.

    dma_single

    Input

    Determines the transaction type (single or burst), sampled in the same clock cycle as the rising edge of the dma_req signal.

    • Burst transaction: When dma_single is deasserted.

    • Single transaction: When dma_single is asserted.

    dma_single must remain stable while dma_req is active and cannot toggle arbitrarily.

    dma_last

    Input

    Indicates the last transaction in the block. When the peripheral is the flow controller, dma_last is asserted in the same cycle as dma_req.

    • If dma_single is high: The last transaction is a single transaction.

    • If dma_single is low: The last transaction is a burst transaction.

    dma_last must remain stable while dma_req is active.

    dma_ack

    Output

    Acknowledge signal from the DMAC. Asserted after the completion of the data phase of the last AXI transfer of the current transaction (single or burst). This signal forms a handshake loop with dma_req and remains asserted until the peripheral deasserts dma_req.

    • If using a synchronous handshake interface: Deasserted within 1 cycle after detecting the deassertion of dma_req.

    • If using an asynchronous handshake interface: Deasserted after a delay of (6 + SYNC) cycles following the detection of the deassertion of dma_req.

    dma_finish

    Output

    Signals the completion of the block transfer. The DMAC asserts dma_finish to signal block transfer completion, using the same timing as dma_ack, and forms a handshake loop with dma_req.

    Note

    For dma_ack and dma_finish, when the channel enable register is enabled and HS_POL is configured as active-low, these signals may still exhibit a brief “active” level before the block transfer truly begins, as the module has not yet fully transitioned into the working state.

  2. Timing Diagrams

    1. Burst Transaction Followed by Single Transaction

      Figure Timing Diagram 1 illustrates the scenario of a burst transaction followed by a single transaction using a synchronous handshake interface, where the single transaction is the last in the block.

      1. At clock edge T1, the DMAC samples dma_req as asserted, dma_single as deasserted, and dma_last as deasserted. This indicates that the peripheral is requesting a burst transfer from the DMAC and informing the DMAC that there is subsequent data.

      2. At clock edge T2, the DMAC samples dma_req, dma_single, and dma_last as all asserted. This indicates that the peripheral is requesting a single transfer from the DMAC and informing the DMAC that data transfer is complete. Both dma_last and dma_single only need to be active in the same clock cycle that dma_req is asserted.

      ../../_images/dma_peri_is_fc_terminate_block1.png

      Timing Diagram 1

    2. Single Transaction Followed by Burst Transaction

      Similarly, Figure Timing Diagram 2 illustrates the scenario of a single transaction followed by a burst transaction using a synchronous handshake interface, where the burst transaction is the last in the block.

      Warning

      It is illegal to configure the source or destination as the flow controller while disabling the corresponding hardware handshake.

      ../../_images/dma_peri_is_fc_terminate_block2.png

      Timing Diagram 2

Note

If the transfer type is peripheral-to-peripheral and the destination is the flow controller:

  • Burst length restriction: The burst lengths for the source and destination (CTLx_L.SRC_MSIZE and CTLx_L.DEST_MSIZE) must be 0.

  • Bus width alignment restriction: The transfer widths for the source and destination (CTLx_L.SRC_TR_WIDTH and CTLx_L.DST_TR_WIDTH) must be equal.

  • Known exception: When CTLx_L.TT_FC is set to 3’b111 and CFGx_H.FCMODE is set to 1, dma_finish for the source might not be asserted even after the entire transfer finishes.

Peripheral DMA Transfer Requests

Peripheral hardware initiates different types of DMA transfer requests by continuously monitoring its own FIFO data depth and triggering them when predefined thresholds are met:

  • Source Peripheral Request: When the amount of data in the source peripheral’s internal FIFO reaches or exceeds the configured trigger threshold, it asserts the dma_req signal (producing an active edge), requesting the DMAC to read and transfer the data.

  • Destination Peripheral Request: When the amount of data in the destination peripheral’s internal FIFO falls below the configured trigger threshold, it asserts the dma_req signal, requesting the DMAC to write and fill the data.

To maximize bus utilization, the FIFO trigger threshold configurations should strictly align with the burst transaction size of the DMAC channel:

  • Corresponding source configuration: CTLx_L.SRC_MSIZE

  • Corresponding destination configuration: CTLx_L.DEST_MSIZE

For best bus efficiency, the amount of data reserved by the peripheral (or available space) should exactly satisfy the needs of one DMAC burst transaction.

In peripheral-to-memory transfer scenarios, if the residual data in the peripheral FIFO is insufficient to reach the DMA request threshold (and the bus is idle with no new incoming data), the peripheral typically relies on its built-in hardware timeout or force-flush mechanism to actively trigger a DMA transfer of the residual data or to report an interrupt request to the processor.

In peripheral-to-memory transfer scenarios, if the residual data in the peripheral FIFO is insufficient to reach the threshold that triggers a DMA request (and the bus is idle with no new incoming data), it typically relies on the peripheral hardware’s built-in timeout mechanism or forced Flush mechanism to proactively trigger a DMA transfer for the residual data or to report an interrupt request to the processor.

Transaction Requests and Bus Control

Single Transaction Region

During a DMA block transfer, single transaction transfers are used in certain situations, depending on the flow controller role:

  • When the DMAC is the flow controller, the total transfer data amount is known. If any of the following conditions are met, the DMAC will automatically control the source or destination to execute single transaction transfers:

    • The burst length for the source or destination (CTLx_L.SRC_MSIZE or CTLx_L.DEST_MSIZE) is configured to 0 by software.

    • The block transfer is nearing completion, and the remaining amount of data to be transferred is insufficient to form a complete burst read/write transaction (the underlying hardware automatically downgrades to handle the tail data using single transactions).

  • When the peripheral is the flow controller, the total transfer data amount is unknown. The peripheral must explicitly request single transfers via hardware handshake signals (typically used for handling unaligned tail data). If either of the following conditions is met, the corresponding endpoint will execute a single transaction:

    • If the source peripheral is the flow controller: When the asserted dma_single and dma_req signals are active in the same clock cycle.

    • If the destination peripheral is the flow controller: When the asserted dma_single and dma_req signals are active in the same clock cycle.

Initiating Transfer

Bus Arbitration

Each DMA channel contains two independent, parallel-running state machines:

  • Source state machine

  • Destination state machine

These state machines issue bus occupancy requests to the internal arbiter based on transfer demand. A successful data transfer must strictly satisfy the following three conditions in order:

  1. Internal FIFO ready: Only when the DMAC channel’s internal FIFO reaches the ready state (sufficient space to write on the source side, or sufficient data available on the destination side) can the subsequent bus request proceed.

  2. Gain AXI master interface control (first-level arbitration): After the source or destination state machine issues a request, it must be selected by the channel’s internal arbiter to obtain control of the DMA AXI master interface.

  3. Gain external AXI bus control (second-level arbitration): When the AXI master interface initiates a read/write transaction on behalf of the state machine, it must win arbitration from the system bus matrix to obtain physical control of the external AXI bus.

FIFO Readiness

Whether an AXI transfer can initiate depends directly on the readiness state of the DMAC’s internal channel FIFO:

  • For Single Transactions:

    • Source Read Ready: The channel FIFO must have sufficient remaining space to accommodate at least one data item of width CTLx_L.SRC_TR_WIDTH.

    • Destination Write Ready: The channel FIFO must have buffered enough data to satisfy at least one data item of width CTLx_L.DST_TR_WIDTH.

  • For Burst Transactions:

    • Source Read Ready: The channel FIFO must have sufficient remaining space to accommodate the data for the entire burst length (CTLx_L.SRC_MSIZE transfers × CTLx_L.SRC_TR_WIDTH).

    • Destination Write Ready: The channel FIFO must have buffered the data for the entire burst length (CTLx_L.DEST_MSIZE transfers × CTLx_L.DST_TR_WIDTH).

Under certain special configurations, the actual read/write burst length (ARLEN/AWLEN) on the AXI bus is forced by hardware to not exceed FIFO_DEPTH / 2. The conditions that trigger this restriction are:

  • The source address (SARx) or destination address (DARx) is not aligned to the DMAC transfer width.

  • Scatter/Gather is enabled and the transfer type is configured as address-increment (INCR). For detailed mechanism, refer to the Scatter/Gather section.

  • The current DMAC hardware configuration does not support burst lengths greater than the FIFO depth, and the channel FIFO depth does not exceed 256 under the current system bus width.

Transaction Requests
  • Peripheral Transfers: The source/destination state machine must simultaneously satisfy both “FIFO ready” and “received a single/burst handshake request from the peripheral” before formally issuing a bus read/write request to the AXI master interface.

  • Memory Transfers: Because memory has no hardware handshake signals, the state machine issues a request to the AXI master interface as soon as the internal FIFO is ready. If the target memory (or bus slave) is not yet ready to receive or provide data, wait states will be inserted on the AXI bus.

Caution

When the destination peripheral acts as the flow controller and software has set CFGx_H.FCMODE = 1 (i.e., data prefetch is disabled), the source state machine will not generate an AXI read request even if the source FIFO space is ready and the source peripheral has issued a request, unless the destination peripheral explicitly issues a handshake signal requesting new data.

Multi-block Transfer

The DMAC supports both single-block and multi-block transfer modes. During a multi-block transfer, when the current block (Block N) completes, the hardware automatically reprograms the channel registers to seamlessly continue with the next block (Block N+1).

The DMAC provides three fundamental register update strategies. The source and destination can independently choose which mechanism to use:

  • Block chaining using linked lists (Linked List): Via the LLP_Lx register, the hardware actively fetches the next LLI from system memory and uses its contents to overwrite the channel registers to start the next block.

  • Auto-reload of channel registers (Auto-reload): At the end of each block transfer, the hardware automatically restores the specified channel registers to the initial configuration values from when the channel was first enabled.

  • Contiguous block addresses (Contiguous): The starting address of the current block is automatically set by the hardware to immediately follow the ending address of the previous block.

The following table summarizes the register update behavior for each mode:

Register Update Strategies

Register

Contiguous

Auto-reload

Linked List

SARx

Hardware automatically advances the address pointer (if the source uses this strategy)

Hardware restores the initial address from channel startup (if the source uses this strategy)

Hardware updates the address from the next LLI (if the source uses this strategy)

DARx

Hardware automatically advances the address pointer (if the destination uses this strategy)

Hardware restores the initial address from channel startup (if the destination uses this strategy)

Hardware updates the address from the next LLI (if the destination uses this strategy)

CTLx_L/H

Not supported (retains current value)

Hardware restores the initial configuration from channel startup

Hardware updates the configuration from the next LLI

LLP_Lx

Not supported (retains current value)

Not supported (retains current value)

Hardware updates the next node address from the next LLI

Note

  • In multi-block transfer scenarios using block chaining, it is recommended to use Linked Lists as the preferred method for managing multiple blocks.

  • Contiguous mode must be combined with one of the other two modes.

  • Swapping the peripheral mapping of the source and destination during transfer execution is not supported.

  • The transfer direction must remain unchanged throughout the duration of the entire multi-block transfer.

Block Chaining Using Linked Lists

Block chaining using linked lists is commonly used for transferring non-contiguous data blocks, as illustrated in Source and Destination Both Using Linked Lists. In this mode, the driver software organizes a linked list in system memory, consisting of a series of linked list items (LLIs). Before each data block transfer begins, the DMAC actively fetches the pre-built LLI from system memory to reprogram the channel registers, enabling multi-block transfers.

Each LLI consists of the following four core register fields, which together with the channel configuration register CFGx_L/H determine the transfer attributes of the data block:

  • SARx: Source address register

  • DARx: Destination address register

  • CTLx_L/H: Control register

  • LLP_Lx: Linked list pointer register

The following figure shows the structure of an LLI:

../../_images/multi_block_transfer_using_linked_lists.png

LLI Structure

The following figure illustrates the mapping from LLI fields in memory to channel registers:

../../_images/dma_link_list_item_and_reg.png

The physical address of LLI.CTLx equals the LLI base address (stored in LLP_Lx) plus a fixed hardware offset. For example, the address of LLI.CTLx is LLP_Lx.LOC + 0x0C.

LLP_Lx is always updated via the linked-list mechanism. Before the transfer starts, the head address of the linked list must be written to the channel register LLP_Lx. The LLP_Lx field in each LLI always points to the next LLI.

  • Linear linked list: If the last LLI’s LLP_Lx is a null address and CTLx_L.LLP_SRC_EN or CTLx_L.LLP_DST_EN is cleared, the DMAC identifies the current block as the last block of the multi-block transfer and stops after completion.

  • Circular linked list: If the last LLI’s LLP_Lx points back to the head address and CTLx_L.LLP_SRC_EN or CTLx_L.LLP_DST_EN is set, the DMAC identifies the current block as an intermediate block and continues from the head address after completion.

Warning

Memory access to LLI fields is strictly 32-bit aligned, and this behavior cannot be configured.

Auto-reloading of Channel Registers

Under the auto-reload mechanism, by enabling CFGx_L.RELOAD_SRC or CFGx_L.RELOAD_DST, the DMAC automatically restores some or all fields of SARx, DARx, and CTLx to their initial values at the end of each block transfer, then starts the next block transfer.

../../_images/dma_auto_reload.svg

Source and Destination Both Using Auto-reload

Note

When auto-reload is enabled and block-complete interrupts are enabled, the user must clear the block-complete interrupt after each block transfer completes. Otherwise, the interrupt line will remain asserted and cannot be re-triggered.

Contiguous Address between Blocks

In Contiguous mode, the starting address of each block seamlessly follows the ending address of the previous block. This mode is typically combined with Auto-reload or Linked List, and is well suited for asymmetric transfer scenarios where one end increments continuously while the other is fixed or discrete. For example:

  • Large contiguous memory to fixed-address block: Configure the source as Contiguous to read continuously from a large data buffer; configure the destination as Auto-reload to always write to a fixed address block.

  • Discrete memory to large contiguous memory: Configure the source as Linked List to read from discrete address blocks; configure the destination as Contiguous to concatenate the received blocks into a large contiguous memory region.

../../_images/dma_continue.svg

Source Auto-reload / Destination Contiguous

Whether the source or destination uses Contiguous mode is determined jointly by the linked-list enable bit in CTLx_L and the auto-reload enable bit in CFGx_L.

To configure one end (source or destination) as Contiguous, both its linked-list update and auto-reload must be disabled simultaneously:

  • Configure source as Contiguous:

    • Disable source linked-list update: clear CTLx_L.LLP_SRC_EN

    • Disable source auto-reload: clear CFGx_L.RELOAD_SRC

  • Configure destination as Contiguous:

    • Disable destination linked-list update: clear CTLx_L.LLP_DST_EN

    • Disable destination auto-reload: clear CFGx_L.RELOAD_DST

Caution

You cannot configure both SARx and DARx update methods as Contiguous simultaneously. If both ends must be contiguous between blocks, use one of the following approaches:

  • Increase single-block transfer size: Configure CTLx_H.BLOCK_TS to complete all data within a single block where possible.

  • Use Linked List mode: If CTLx_H.BLOCK_TS has reached its maximum, use Linked List mode and explicitly set LLI.SARx and LLI.DARx in the next LLI to equal the corresponding end addresses of the previous block.

Suspension of Transfers between Blocks

  • Linked list mode: DMA transfer executes continuously between blocks with no stall at block boundaries. For example, at the end of block N, the DMAC automatically continues processing block N+1.

  • Auto-reload mode:

    • If block-complete interrupts are enabled and not masked, the DMA transfer automatically stalls after the interrupt is triggered. The DMAC will not start the next block until hardware detects a write to the ClearBlock[n] register (clearing the block-complete interrupt for that channel).

    • If interrupts are disabled (CTLx_L.INT_EN = 0) or block interrupts are masked (MaskBlock[n] = 0), the DMA transfer does not stall between blocks and proceeds directly to the next block.

Warning

When using auto-reload in a multi-block transfer, software must clear the auto-reload control bits (CFGx_L.RELOAD_SRC / CFGx_L.RELOAD_DST) in the ISR of the penultimate block transfer, to prevent unintended reloading and transfer.

Ending Multi-Block Transfers

The update mechanism used by the source and destination is determined jointly by whether the linked-list pointer is null (LLP_Lx.LOC = 0), the linked-list enable bit (CTLx_L.LLP_EN), and the auto-reload enable bit (CFGx_L.RELOAD). The DMAC supports 10 combination modes; Table Transfer Types and Configuration Bits lists the typical configurations.

Transfer Types and Configuration Bits

Row

Transfer Type Description

LLP_Lx.LOC

SRC LLP_EN

SRC RELOAD

DST LLP_EN

DST RELOAD

Write Back

1

Single-block or last block of multi-block transfer (SARx/DARx reprogrammed by software)

0

0

0

0

0

No

2

Auto-reload: SAR auto-reload, DAR contiguous

0

0

0

0

1

No

3

Auto-reload: SAR contiguous, DAR auto-reload

0

0

1

0

0

No

4

Auto-reload: both SAR and DAR auto-reload

0

0

1

0

1

No

5

Single-block or last block of multi-block transfer (SARx/DARx reprogrammed by software)

1

0

0

0

0

Yes

6

Linked list: SAR contiguous, DAR linked list

1

0

0

1

0

Yes

7

Linked list: SAR auto-reload, DAR linked list

1

0

1

1

0

Yes

8

Linked list: SAR linked list, DAR contiguous

1

1

0

0

0

Yes

9

Linked list: SAR linked list, DAR auto-reload

1

1

0

0

1

Yes

10

Linked list: both SAR and DAR linked list

1

1

0

1

0

Yes

Row 1 or row 5 of Table Transfer Types and Configuration Bits represents the register state when transferring the last block (single block or multi-block). The termination path depends on which row the transfer started from:

  • Transfers starting from rows 2, 3, 4: must end with the row 1 register state, which disables status fetch and write-back for the last block.

  • Transfers starting from rows 6 to 10: must end with the row 5 register state, which enables status fetch and write-back for the last block.

Note

The LLP_Lx.LOC bit is sampled only once when the channel is enabled and transfer starts. It determines whether write-back is enabled for the entire transfer; modifying this bit in subsequent blocks of the same multi-block transfer has no hardware effect.

Based on the above rules, termination for each mode is as follows:

  • Terminating auto-reload: When LLP_Lx.LOC = 0 and either end has auto-reload enabled, the multi-block DMA transfer runs continuously. Software must simultaneously clear CFGx_L.RELOAD_SRC and CFGx_L.RELOAD_DST in the ISR for the penultimate block, causing the next block’s register state to match row 1 and terminating transfer when that block completes.

  • Terminating linked list transfers: Software must set the appropriate LLI.CTLx_L for the last block’s LLI in system memory, ensuring both LLI.CTLx_L.LLP_SRC_EN and LLI.CTLx_L.LLP_DST_EN are 0, to match the row 5 state and terminate transfer when that block completes.

Valid state transitions: The only allowed transition in the configuration table is from any row to row 1 or row 5 (to terminate the DMA transfer). Direct transitions between any other two rows are not permitted. For example, if block N is configured as row 10, block N+1 may only remain at row 10 or transition to row 5; transitioning directly to row 8 or any other row is an illegal configuration.

Scatter/Gather

Scatter/Gather operates within the same data block, moving data non-contiguously by jumping according to a fixed pattern (Stride SGI/DSI and Count SGC/DSC). This is frequently used for 2D image cropping, matrix transposition, or separating interleaved audio channels.

Scatter

Scatter relates to destination transfers. When a scatter boundary is reached, the destination address increments by a programmed amount—the scatter increment.

Figure Example of Destination Scatter Transfer displays an example of a destination scatter transfer. Upon hitting the scatter boundary, the destination address increments by the value stored in the destination scatter increment (DSRx_L.DSI) field, multiplied by the number of bytes per single AXI transfer to the destination (decoded value of CTLx_L.DST_TR_WIDTH) / 8. Users can configure the number of transfers between consecutive scatter boundaries by programming the DSC (Destination Scatter Count) field in the DSRx_L register.

Scatter is enabled by writing a 1 to the CTLx_L.DST_SCATTER_EN field. The CTLx_L.DINC field determines whether the address increments or remains fixed. If CTLx_L.DINC dictates fixed address control for the entire DMA transfer, the CTLx_L.DST_SCATTER_EN field is ignored, and the scatter feature is automatically disabled.

../../_images/example_of_destination_scatter_transfer.png

Example of Destination Scatter Transfer

DST_TR_WIDTH = 3'b011 (64 bit = 8 bytes)
DSRx_L.DSI = 0x16
DSRx_L.DSC = 0x04 (destination scatter count)
CTLx_L.DST_SCATTER_EN = 1 (destination scatter enabled)
DARx = A0 (starting Destination address)

Gather

Gather relates to source transfers. When a gather boundary is reached, the source address increments by a programmed amount.

The number of source transfers between consecutive gather boundaries is programmed into the Source Gather Count (SGRx_L.SGC) field.

Upon hitting a gather boundary, the source address increments by the value stored in the source gather increment (SGRx_L.SGI) field, multiplied by the number of bytes per single AXI transfer from the source (decoded value of CTLx_L.SRC_TR_WIDTH) / 8.

Gather is enabled by writing a 1 to the CTLx_L.SRC_GATHER_EN field. The CTLx_L.SINC field determines whether the address increments or remains fixed when reaching the gather boundary. If CTLx_L.SINC dictates fixed address control for the entire DMA transfer, the CTLx_L.SRC_GATHER_EN field is ignored, and the gather feature is automatically disabled.

Figure Example of Source Gather Transfer displays an example of a source gather transfer. The number of source transfers between consecutive gather boundaries is programmed into the SGRx_L.SGC field. Upon hitting the gather boundary, the source address increments or decrements by the value in SGRx_L.SGI multiplied by the byte width of a single AXI transfer from the source.

../../_images/source_gather_when_sgrx_l_sgi_0x1.png

Example of Source Gather Transfer

SRC_TR_WIDTH = 3'b010 (32 bit)
SGRx_L.SGI = 0x01
SGRx_L.SGC = 0x04 (source gather count)
CTLx_L.SRC_GATHER_EN = 1 (source gather enabled)
SARx = A0 (starting source address)

Typically, if the starting address is A0 and CTLx_L.SINC = 2'b00 (increment source address control), the transfers will be:

  • A0, A0 + TWB, A0 + 2*TWB ……. (A0 + (SGRx_L.SGC - 1) * TWB)

  • <-gather_increment-> (A0 + (SGRx_L.SGC * TWB) + (SGRx_L.SGI * TWB))

Where TWB is the Transfer Width in Bytes (decoded value of CTLx_L.SRC_TR_WIDTH / 8 = src_single_size_bytes).

Note

For multi-block transfers, the counters tracking the number of transfers required to reach a gather/scatter boundary are reinitialized at the beginning of each block transfer to the Source Gather Count (SGRx_L.SGC) and Destination Scatter Count (DSRx_L.DSC).

Secure Mode

The DMAC is fully compatible with the system’s secure isolation architecture (such as ARM TrustZone). It supports configuring specific channels as secure channels, allowing the DMAC to execute data movements across protected memory or peripheral regions on behalf of the “Secure World”.

Under standard isolation mechanisms, if a channel operating in normal (non-secure) mode attempts to read a protected secure region, the system hardware firewall will typically intercept the operation and return a bus error or invalid data; if it attempts to write, the write transaction is silently discarded.

Only when secure privilege is explicitly allocated to a channel in the configuration register will the DMAC initiate accesses with secure attributes, thereby legitimately passing the system’s secure check nodes.

The standard workflow for a secure DMA transfer is as follows:

Note

The following configuration sequence must be executed while the processor is in Secure Privilege Mode. Non-secure CPU accesses will be denied write operations to DMAC secure configuration registers.

  1. Allocate Secure Privilege: In the configuration register for a specific channel, set the Secure Access Bit to 0 (please refer to specific register definitions for exact active levels).

  2. Initiate Transfer: Enable the DMAC transfer channel normally.

  3. Wait for Completion: Wait for the DMAC transfer to complete naturally, or wait for the corresponding interrupt trigger. Upon completion, the DMAC automatically clears the channel’s enable bit.

  4. Revoke Privilege: Adhering to the principle of least privilege, once the channel no longer needs to move secure data, software should immediately revert the secure access bit to a non-secure state to prevent the channel from being exploited by malicious code.

Channel Suspend and Disable

Under normal operation, software starts a channel by writing 1 to the channel enable register (CHENREG_L/H.CH_EN). Upon completion of the transfer, hardware automatically clears this bit to disable the channel. If software needs to intervene before natural completion, the DMAC provides two mechanisms: Safe Suspend and Abnormal Termination.

Safely Disabling a Channel

To preemptively disable a channel without losing data or inducing bus deadlocks, it is highly recommended to use a safe procedure coordinating the CFGx_L.CH_SUSP and CFGx_L.INACTIVE flags:

  1. Trigger Suspend: Write 1 to CFGx_L.CH_SUSP. The DMAC will halt fetching new data from the source, and the channel FIFO will stop accepting new inputs.

  2. Wait for Drain: Poll the CFGx_L.INACTIVE bit until it reads 1, indicating that the channel FIFO is empty and all current bus transactions have concluded.

    Note

    If using a hardware handshake interface, the peripheral must keep the handshake signals (dma_req / dma_single) asserted until INACTIVE is set, to ensure the DMAC completes the current suspend handshake maneuver.

  3. Disable Channel: Once INACTIVE is set, software writes 0 to CHENREG_L/H.CH_EN to safely disable the channel. The hardware automatically clears CH_SUSP. (If INACTIVE is not set, the write to 0 is ignored by hardware.)

  4. Clean up Status: After disabling the channel, software must manually clear all interrupt status bits for that channel.

Note

After executing a suspend-and-cancel, all channel registers retain their original values except for CH_SUSP. Software can restart the identical transfer simply by re-setting CH_EN.

Resuming Transfer after Suspend

If software writes 0 back into CFGx_L.CH_SUSP before disabling the channel (clearing CH_EN), the channel will exit the suspended state. The DMA transfer will seamlessly resume from the exact point of suspension without any data loss.

Data Integrity and Read-back Accuracy

When INACTIVE is asserted, residual data may still remain in the FIFO. If the channel is disabled at this point, how the residual data is handled and the read-back accuracy of the address registers depend on the transfer flow direction:

  • Memory-to-Memory / Peripheral-to-Memory: No data loss. The DMAC ensures the remaining data in the FIFO is written to the destination memory. After suspend and disable, the read-back values of CURR_SARx, CURR_DARx, and CTLx_H are precise.

  • Memory-to-Peripheral / Peripheral-to-Peripheral: Residual data in the FIFO may be lost. If the destination peripheral cannot accept more data (e.g., handshake signal not asserted) during suspend, the DMAC is unable to write out the remainder and discards it. After suspend and disable, the read-back value of CTLx_H is precise, but CURR_SARx and CURR_DARx (for fixed-address mode) are imprecise.

Abnormal Transfer Termination

Software can forcibly terminate a transfer by clearing the enable bits, but must strictly follow the polling requirement and accept the resulting side effects.

Warning

  • If the hardware configuration does not have the Suspend Feature enabled, writing 0 to CH_EN while the channel is active is strictly forbidden.

Operations include clearing CHENREG_L/H.CH_EN for a single channel, or clearing the global enable bit in the DMAC configuration register. After issuing the disable request, software must poll and read back 0 to confirm the channel has been completely shut down, because the DMAC must finish processing any AXI responses already in progress on the bus.

Side effects of abnormal termination:

  1. Permanent Data Truncation: Data in the FIFO at the time of forced disable is discarded. For read-sensitive source peripherals (e.g., source FIFOs), this results in substantial data loss.

  2. Handshake Interruption: A forcibly disabled channel may fail to send a hardware acknowledge signal to active transactions.

  3. Burst Limitation: If the channel is configured for defined-length bursts (DMAC_INCR_BURSTS = 0), forcibly disabling the channel via software before transfer completion is not supported.

Programming Examples

Three registers (LLP_Lx, CTL_L/Hx, and CFG_L/Hx) must be programmed to determine whether to execute a single-block or multi-block transfer, and which type of multi-block transfer to utilize. Various transfer types are illustrated in Transfer Types and Configuration Bits.

The “Update Method” columns dictate from where the values for the SARx, CURR_SARx, DARx, CURR_DARx, CTL_L/Hx, and LLP_Lx registers are acquired for the subsequent block when multi-block DMAC transfers are enabled.

Note

Any combinations of LLP_Lx.LOC = 0, CTLx_L.LLP_SRC_EN, CFGx_L.RELOAD_SRC, CTLx_L.LLP_DST_EN, and CFGx_L.RELOAD_DST other than those listed in Transfer Types and Configuration Bits are illegal and will result in undefined or erroneous system behavior.

Single-Block Transfer

This section describes the programming steps for a single-block transfer, corresponding to Row 1 in Transfer Types and Configuration Bits.

Note

Row 5 in Transfer Types and Configuration Bits is also a single-block transfer, but it features write-back functionality for control and status information enabled at the end of the transfer.

  1. Read the Channel Enable register to select a free (disabled) channel.

  2. Clear any pending interrupts on this channel from previous DMA transfers by writing data to the interrupt clear registers (CLEARTFR_L/H, CLEARBLOCK_L/H, and CLEARERR_L/H). Reading the raw interrupt status and interrupt status registers can confirm that all interrupts have been successfully cleared.

  3. Program the following channel registers:

    1. Write the starting source address to the SARx register of Channel x.

    2. Write the starting destination address to the DARx register of Channel x.

    3. Program CTL_L/Hx and CFG_L/Hx according to the Row 1 configuration shown in Transfer Types and Configuration Bits. Program the LLP_Lx register to 0.

    4. Write the control information for the DMA transfer into the CTL_L/Hx register of Channel x. For instance:

      • Set the transfer type (whether source and destination are memory or peripherals) and the flow control device by programming the TT_FC field in CTLx_L.

      • Set transfer characteristics:

        • Set the source transfer width in the SRC_TR_WIDTH field.

        • Set the destination transfer width in the DST_TR_WIDTH field.

        • Configure the source address as incrementing/decrementing or fixed in the SINC field.

        • Configure the destination address as incrementing/decrementing or fixed in the DINC field.

    5. Write channel configuration information into the CFG_L/Hx register of Channel x:

      • Specify the hardware handshake interface type for the source and destination peripherals (not required for memory transfers). This involves programming the HS_SEL_SRC / HS_SEL_DST bits. Writing 0 activates the hardware handshake interface; writing 1 activates the software handshake interface.

      • If hardware handshake interfaces are activated, assign them to the appropriate peripherals by programming the SRC_PER and DEST_PER bits.

    6. If Gather is enabled (DMAC_CHx_SRC_GAT_EN = True and CTLx_L.SRC_GATHER_EN is enabled), program the SGR_L/Hx register.

    7. If Scatter is enabled (DMAC_CHx_DST_SCA_EN = True and CTLx_L.DST_SCATTER_EN is enabled), program the DSR_L/Hx register.

  4. After finalizing programming for the selected channel, enable it by writing 1 to CHENREG_L/H.CH_EN. Ensure that bit 0 of the DMACFGREG_L/H register is also enabled.

  5. The source and destination peripherals request single and burst DMA transactions to transfer the data block. The DMAC issues an acknowledgment upon the completion of each transaction and executes the block transfer.

  6. Once the transfer is complete, the hardware asserts the corresponding interrupt and disables the channel. Software can service the “Block Complete” or “Transfer Complete” interrupts, or poll the raw interrupt status register (RAWTFR[n]) until it is asserted. If polling is utilized, software must ensure the interrupt is cleared by writing to CLEARTFR[n] before re-enabling the channel.

Multi-Block Transfer

Linked Lists for Both Source and Destination
  1. Read the Channel Enable register to select a free (disabled) channel.

  2. Set up the chain of Linked List Items (LLI) in memory. Write the control information into the LLI.CTL_L/Hx register location of each LLI block descriptor. For example:

    • Set the transfer type and flow control device in CTLx_L.TT_FC.

    • Set transfer characteristics (SRC_TR_WIDTH, DST_TR_WIDTH, SINC, DINC).

  3. Write channel configuration details to the CFG_L/Hx register:

    1. Specify the handshake interface type (HS_SEL_SRC / HS_SEL_DST).

    2. If hardware handshaking is activated, assign the interface via SRC_PER and DEST_PER.

  4. Ensure that the CTLx_L register locations for all LLI entries (except the final one) are configured as depicted in Row 10 of Transfer Types and Configuration Bits. The final LLI must be configured according to Row 1 or Row 5.

    Figure Linked Lists for Both Source and Destination illustrates an example chain containing two linked list items.

  5. Ensure that the LLP_Lx register location for all LLI entries (except the final one) is non-zero and points to the base address of the subsequent LLI.

  6. Ensure that the LLI.SARx / LLI.DARx register locations of all LLI entries point to the starting addresses for the source/destination block prior to that LLI fetch.

  7. If Gather is enabled, program the SGR_L/Hx register.

  8. If Scatter is enabled, program the DSR_L/Hx register.

  9. Clear any pending interrupts on this channel.

  10. Program the CTL_L/Hx and CFG_L/Hx registers according to Row 10.

  11. Program the pointer to the first LLI (LLP(0)) into the LLP_Lx register.

  12. Enable the channel via CHENREG_L/H.CH_EN.

  13. The DMAC fetches the first LLI.

Note

The DMAC automatically reprograms the SARx, DARx, LLP_Lx, and CTL_L/Hx channel registers based on the fetched LLI data.

  1. The DMAC executes the block transfer as requested.

  2. The DMAC does not wait for block interrupts to be cleared; instead, it immediately proceeds to fetch the next LLI. The DMA transfer continues until an LLI matching Row 1 or Row 5 is detected (indicating the final data block).

Auto-Reload for Both Source and Destination Addresses
  1. Read the Channel Enable register to select an available (disabled) channel.

  2. Clear any pending interrupts on the channel.

  3. Program the following channel registers:

    1. Write the starting source and destination addresses to SARx and DARx.

    2. Program CTL_L/Hx and CFG_L/Hx according to Row 4. Program LLP_Lx to 0.

    3. Write control information to CTL_L/Hx (transfer type, bit width, scatter/gather configs).

    4. Write channel configuration to CFG_L/Hx. Ensure the reload bits CFGx_L.RELOAD_SRC and CFGx_L.RELOAD_DST are enabled.

    5. Configure handshake interfaces as required.

  4. Enable the channel via CHENREG_L/H.CH_EN. Ensure bit 0 of DMACFGREG_L/H is enabled.

  5. The DMAC executes the block transfer.

  6. Upon completion of the block transfer, the DMAC reloads SARx, DARx, and CTL_L/Hx. The hardware subsequently asserts the block complete interrupt. If the DMAC transitions to a Row 1 configuration, the overall transfer is complete.

  7. If the DMAC does not enter Row 1, the transfer proceeds as follows:

    • If interrupts are enabled and the block complete interrupt is not masked: Hardware will stall until software clears the interrupt. If the next data block is the final one, the ISR (Interrupt Service Routine) should clear CFGx_L.RELOAD_SRC and CFGx_L.RELOAD_DST to force the DMAC into Row 1.

    • If interrupts are disabled or masked: Hardware will not stall and will immediately commence the transfer for the next data block. Software must proactively clear the reload bits prior to the completion of the final block transfer to ensure entry into Row 1.

    This transfer behavior is akin to what is shown in Figure Auto-Reload for Both Source and Destination Addresses.

    ../../_images/dma_source_dest_auto.png

    Auto-Reload for Both Source and Destination Addresses

Source Auto-Reload & Destination Linked List
  1. Read the Channel Enable register to select a free channel.

  2. Construct the LLI chain in memory. Program the LLI.CTL_L/Hx registers (transfer type, widths, address increments, etc.).

  3. Write the starting source address to the SARx register.

    Note

    Although the DMAC fetches values from the LLI.SARx locations in memory, these values will be ignored.

  4. Write channel configurations to the CFG_L/Hx registers (handshake type and peripheral assignments).

  5. Ensure all CTLx_L locations within the LLIs (except the last) conform to the Row 7 configuration. The final LLI must align with Row 1 or Row 5.

  6. Ensure all LLP_Lx locations (except the last) point to the next LLI.

  7. Ensure all DARx locations within the LLIs point to the starting destination block addresses.

  8. If enabled, program the scatter/gather configurations.

  9. Clear any pending interrupts.

  10. Program the CTL_L/Hx and CFG_L/Hx registers according to Row 7.

  11. Program the pointer for the first LLI into the LLP_Lx register.

  12. Enable the channel via CHENREG_L/H.CH_EN.

  13. The DMAC fetches the first LLI and initiates the transfer.

  14. Upon completion of the block transfer, SARx automatically reloads to its initial value.

  15. Depending on the interrupt configuration, software must clear the CFGx_L.RELOAD_SRC bit at the appropriate moment to transition the DMAC to Row 1 for the final block transfer.

  16. The DMAC fetches the next LLI, updating DARx, CTL_L/Hx, and LLP_Lx. The SARx register utilizes the reloaded value.

This transfer behavior is similar to that depicted in Figure Source Auto-Reload & Destination Linked List.

Source Auto-Reload & Contiguous Destination Address
  1. Read the Channel Enable register to select a free channel.

  2. Clear any pending interrupts.

  3. Program channel registers:

    1. Write starting addresses to SARx and DARx.

    2. Program CTL_L/Hx and CFG_L/Hx according to Row 3. Program LLP_Lx to 0.

    3. Configure transfer types, widths, and flow control. Set scatter/gather if enabled.

    4. Configure handshake settings within CFG_L/Hx.

  4. Enable the channel via CHENREG_L/H.CH_EN.

  5. The DMAC executes the block transfer.

  6. Post-transfer, the DMAC reloads the SARx register; the DARx register remains contiguous (i.e., its value continues linearly and is not reloaded).

  7. The DMA transfer proceeds based on configured interrupt settings. Software must clear the CFGx_L.RELOAD_SRC bit prior to the final block to transition to Row 1 and correctly terminate the transfer sequence.

    The DMA transfer sequence may look like Figure Source Auto-Reload & Contiguous Destination Address.

    ../../_images/dma_source_auto_dest_cont.png

    Source Auto-Reload & Contiguous Destination Address

Source Linked List & Contiguous Destination Address
  1. Read the Channel Enable register to select a free channel.

  2. Set up the linked list structure in memory. Program the LLI.CTLx_L registers accordingly.

  3. Write the starting destination address to the DARx register.

    Note

    Although the DMAC fetches values from the LLI.DARx locations in memory, these values will be ignored.

  4. Write channel configurations to CFG_L/Hx (handshake settings).

  5. Ensure all CTLx_L locations within the LLIs (except the last) follow the Row 8 configuration.

  6. Ensure the LLP_Lx locations point to subsequent LLIs.

  7. Ensure the SARx locations within the LLIs point to the correct source block addresses.

  8. If enabled, program scatter/gather configurations.

  9. Clear any pending interrupts.

  10. Program the CTL_L/Hx and CFG_L/Hx registers according to Row 8.

  11. Program the pointer to the first LLI into the LLP_Lx register.

  12. Enable the channel via CHENREG_L/H.CH_EN.

  13. The DMAC fetches the first LLI. Consequently, SARx, LLP_Lx, and CTL_L/Hx are updated, while DARx remains contiguous.

  14. The DMAC executes the transfer and automatically fetches subsequent LLIs until the final LLI (configured for Row 1 or Row 5) is reached, thereby completing the entire DMA transfer operation.

The DMA transfer sequence may look like Figure Source Linked List & Contiguous Destination Address.

Registers

This section describes the programmable registers of the DMAC. All registers are aligned to a 64-bit boundary and are 64 bits wide. In general, the upper 32 bits of a register are reserved. A write to reserved bits within the register is ignored if there is no special explanation.

Note

  • There are references to both software and hardware parameters throughout this chapter.

  • The software parameters are the field names in each register description table and are prefixed by the register name; for example, the Block Transfer Size field in the Control register for Channel x is designated as “CTLx.BLOCK_TS.”

  • The hardware parameters are prefixed with DMAC_* and are configured once using Realtek coreTools.

  • Shipped with the DMAC component is an address definition (memory map) C header file. This can be used when the DMAC is programmed in a C environment

RTL8721Dx:

Base Address: 0x40110000

Name

Address offset

Access

Description

REG_SAR0

000h

R/W

Source address register for DMA channel x, specifies the source memory address

REG_CURR_SAR0

004h

R

Current source address register for DMA channel x, indicates the current source address during transfer

REG_DAR0

008h

R/W

Destination address register for DMA channel x, specifies the destination memory address

REG_CURR_DAR0

00Ch

R

Current destination address register for DMA channel x, indicates the current destination address during transfer

REG_LLP0_L

010h

R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list item

REG_CTL0_L

018h

R/W

Control register low for DMA channel x, configures channel control settings

REG_CTL0_H

01Ch

R

Control register high for DMA channel x for block size

REG_CFG0_L

040h

R/W

Configuration register low for DMA channel x, configures transfer parameters

REG_CFG0_H

044h

R/W

Configuration register high for DMA channel x, configures additional transfer parameters

REG_SAR1

058h

R/W

Source address register for DMA channel x, specifies the source memory address

REG_CURR_SAR1

05Ch

R

Current source address register for DMA channel x, indicates the current source address during transfer

REG_DAR1

060h

R/W

Destination address register for DMA channel x, specifies the destination memory address

REG_CURR_DAR1

064h

R

Current destination address register for DMA channel x, indicates the current destination address during transfer

REG_LLP1_L

068h

R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list item

REG_CTL1_L

070h

R/W

Control register low for DMA channel x, configures channel control settings

REG_CTL1_H

074h

R

Control register high for DMA channel x for block size

REG_CFG1_L

098h

R/W

Configuration register low for DMA channel x, configures transfer parameters

REG_CFG1_H

09Ch

R/W

Configuration register high for DMA channel x, configures additional transfer parameters

REG_SAR2

0B0h

R/W

Source address register for DMA channel x, specifies the source memory address

REG_CURR_SAR2

0B4h

R

Current source address register for DMA channel x, indicates the current source address during transfer

REG_DAR2

0B8h

R/W

Destination address register for DMA channel x, specifies the destination memory address

REG_CURR_DAR2

0BCh

R

Current destination address register for DMA channel x, indicates the current destination address during transfer

REG_LLP2_L

0C0h

R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list item

REG_CTL2_L

0C8h

R/W

Control register low for DMA channel x, configures channel control settings

REG_CTL2_H

0CCh

R

Control register high for DMA channel x for block size

REG_CFG2_L

0F0h

R/W

Configuration register low for DMA channel x, configures transfer parameters

REG_CFG2_H

0F4h

R/W

Configuration register high for DMA channel x, configures additional transfer parameters

REG_SAR3

108h

R/W

Source address register for DMA channel x, specifies the source memory address

REG_CURR_SAR3

10Ch

R

Current source address register for DMA channel x, indicates the current source address during transfer

REG_DAR3

110h

R/W

Destination address register for DMA channel x, specifies the destination memory address

REG_CURR_DAR3

114h

R

Current destination address register for DMA channel x, indicates the current destination address during transfer

REG_LLP3_L

118h

R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list item

REG_CTL3_L

120h

R/W

Control register low for DMA channel x, configures channel control settings

REG_CTL3_H

124h

R

Control register high for DMA channel x for block size

REG_CFG3_L

148h

R/W

Configuration register low for DMA channel x, configures transfer parameters

REG_CFG3_H

14Ch

R/W

Configuration register high for DMA channel x, configures additional transfer parameters

REG_SAR4

160h

R/W

Source address register for DMA channel x, specifies the source memory address

REG_CURR_SAR4

164h

R

Current source address register for DMA channel x, indicates the current source address during transfer

REG_DAR4

168h

R/W

Destination address register for DMA channel x, specifies the destination memory address

REG_CURR_DAR4

16Ch

R

Current destination address register for DMA channel x, indicates the current destination address during transfer

REG_LLP4_L

170h

R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list item

REG_CTL4_L

178h

R/W

Control register low for DMA channel x, configures channel control settings

REG_CTL4_H

17Ch

R

Control register high for DMA channel x for block size

REG_CFG4_L

1A0h

R/W

Configuration register low for DMA channel x, configures transfer parameters

REG_CFG4_H

1A4h

R/W

Configuration register high for DMA channel x, configures additional transfer parameters

REG_SAR5

1B8h

R/W

Source address register for DMA channel x, specifies the source memory address

REG_CURR_SAR5

1BCh

R

Current source address register for DMA channel x, indicates the current source address during transfer

REG_DAR5

1C0h

R/W

Destination address register for DMA channel x, specifies the destination memory address

REG_CURR_DAR5

1C4h

R

Current destination address register for DMA channel x, indicates the current destination address during transfer

REG_LLP5_L

1C8h

R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list item

REG_CTL5_L

1D0h

R/W

Control register low for DMA channel x, configures channel control settings

REG_CTL5_H

1D4h

R

Control register high for DMA channel x for block size

REG_CFG5_L

1F8h

R/W

Configuration register low for DMA channel x, configures transfer parameters

REG_CFG5_H

1FCh

R/W

Configuration register high for DMA channel x, configures additional transfer parameters

REG_SAR6

210h

R/W

Source address register for DMA channel x, specifies the source memory address

REG_CURR_SAR6

214h

R

Current source address register for DMA channel x, indicates the current source address during transfer

REG_DAR6

218h

R/W

Destination address register for DMA channel x, specifies the destination memory address

REG_CURR_DAR6

21Ch

R

Current destination address register for DMA channel x, indicates the current destination address during transfer

REG_LLP6_L

220h

R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list item

REG_CTL6_L

228h

R/W

Control register low for DMA channel x, configures channel control settings

REG_CTL6_H

22Ch

R

Control register high for DMA channel x for block size

REG_CFG6_L

250h

R/W

Configuration register low for DMA channel x, configures transfer parameters

REG_CFG6_H

254h

R/W

Configuration register high for DMA channel x, configures additional transfer parameters

REG_SAR7

268h

R/W

Source address register for DMA channel x, specifies the source memory address

REG_CURR_SAR7

26Ch

R

Current source address register for DMA channel x, indicates the current source address during transfer

REG_DAR7

270h

R/W

Destination address register for DMA channel x, specifies the destination memory address

REG_CURR_DAR7

274h

R

Current destination address register for DMA channel x, indicates the current destination address during transfer

REG_LLP7_L

278h

R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list item

REG_CTL7_L

280h

R/W

Control register low for DMA channel x, configures channel control settings

REG_CTL7_H

284h

R

Control register high for DMA channel x for block size

REG_CFG7_L

2A8h

R/W

Configuration register low for DMA channel x, configures transfer parameters

REG_CFG7_H

2ACh

R/W

Configuration register high for DMA channel x, configures additional transfer parameters

REG_RAWTFR_L

2C0h

R

Raw transfer complete interrupt status register, shows unmasked transfer complete interrupts

REG_RAWBLOCK_L

2C8h

R

Raw block transfer complete interrupt status register, shows unmasked block transfer complete interrupts

REG_RAWERR_L

2E0h

R

Raw error interrupt status register low, shows unmasked protocol error interrupts

REG_RAWERR_H

2E4h

R

Raw error interrupt status register high, shows unmasked secure error interrupts

REG_STATUSTFR_L

2E8h

R

Transfer complete interrupt status register, shows masked transfer complete interrupts

REG_STATUSBLOCK_L

2F0h

R

Block transfer complete interrupt status register, shows masked block transfer complete interrupts

REG_STATUSERR_L

308h

R

Error interrupt status register low, shows masked protocol error interrupts

REG_STATUSERR_H

30Ch

R

Error interrupt status register high, shows masked secure error interrupts

REG_MASKTFR_L

310h

R/W

Transfer complete interrupt mask register, enables or disables transfer complete interrupts

REG_MASKBLOCK_L

318h

R/W

Block transfer complete interrupt mask register, enables or disables block transfer complete interrupts

REG_MASKERR_L

330h

R/W

Error interrupt mask register low, enables or disables protocol error interrupts

REG_MASKERR_H

334h

R/W

Error interrupt mask register high, enables or disables secure error interrupts

REG_CLEARTFR_L

338h

R/W

Transfer complete interrupt clear register, clears transfer complete interrupt status

REG_CLEARBLOCK_L

340h

R/W

Block transfer complete interrupt clear register, clears block transfer complete interrupt status

REG_CLEARERR_L

358h

R/W

Error interrupt clear register low, clears protocol error interrupt status

REG_CLEARERR_H

35Ch

R/W

Error interrupt clear register high, clears secure error interrupt status

REG_STATUSINT_L

360h

R

Interrupt status register low, shows combined interrupt status

REG_STATUSINT_H

364h

R

Interrupt status register high, shows combined interrupt status

REG_DMACFGREG_L

398h

R/W

DMA configuration register, configures global DMA controller settings

REG_CHENREG_L_1

3A0h

R/W

Channel enable register, enables or disables DMA channels

REG_DMAIDREG_L

3A8h

R

DMA ID register, Hardcoded RTK_DMAC peripheral ID

REG_DMA_COMP_PARAMS_6_L

3C8h

R

DMA component parameters register 6 low, contains component identification information

REG_DMA_COMP_PARAMS_6_H

3CCh

R

DMA component parameters register 6 high, contains component identification information

REG_DMA_COMP_PARAMS_5_L

3D0h

R

DMA component parameters register 5 low, contains component identification information

REG_DMA_COMP_PARAMS_5_H

3D4h

R

DMA component parameters register 5 high, contains component identification information

REG_DMA_COMP_PARAMS_4_L

3D8h

R

DMA component parameters register 4 low, contains component identification information

REG_DMA_COMP_PARAMS_4_H

3DCh

R

DMA component parameters register 4 high, contains component identification information

REG_DMA_COMP_PARAMS_3_L

3E0h

R

DMA component parameters register 3 low, contains component identification information

REG_DMA_COMP_PARAMS_3_H

3E4h

R

DMA component parameters register 3 high, contains component identification information

REG_DMA_COMP_PARAMS_2_L

3E8h

R

DMA component parameters register 2 low, contains component identification information

REG_DMA_COMP_PARAMS_2_H

3ECh

R

DMA component parameters register 2 high, contains component identification information

REG_DMA_COMP_PARAMS_1_L

3F0h

R

DMA component parameters register 1 low, contains component identification information

REG_DMA_COMP_PARAMS_1_H

3F4h

R

DMA component parameters register 1 high, contains component identification information

REG_DMA_COMPONENT_ID_REGS_L

3F8h

R

DMA component ID register low, identifies the DMA controller release date

REG_DMA_COMPONENT_ID_REGS_H

3FCh

R

DMA component ID register high, identifies the DMA controller rtl version

REG_SAR0

  • Name: Channel 0 Source Address Register

  • Size: 32

  • Address offset: 000h

  • Read/write access: R/W

Source address register for DMA channel x, specifies the source memory address

31:0 SAR0

Bit

Symbol

Access

INI

Description

31:0

SAR0

R/W

Unknown

Source Address of DMA transfer.Updated after each source transfer. The SINC field in the CTLx register determines whether the address increments, or is left unchanged on every source transfer throughout the block transfer.

REG_CURR_SAR0

  • Name: The read back value is channel 0 source reading address at present

  • Size: 32

  • Address offset: 004h

  • Read/write access: R

Current source address register for DMA channel x, indicates the current source address during

transfer

31:0 CURR_SAR0

Bit

Symbol

Access

INI

Description

31:0

CURR_SAR0

R

0x0

The read back value is source reading address at present

REG_DAR0

  • Name: Channel 0 Destination Address Register

  • Size: 32

  • Address offset: 008h

  • Read/write access: R/W

Destination address register for DMA channel x, specifies the destination memory address

31:0 DAR0

Bit

Symbol

Access

INI

Description

31:0

DAR0

R/W

Unknown

Destination address of DMA transfer.Updated after each destination transfer. The DINC field in the CTLx register determines whether the address increments, or is left unchanged on every destination transfer throughout the block transfer.

REG_CURR_DAR0

  • Name: The read back value is channel 0 destination writing address at present

  • Size: 32

  • Address offset: 00Ch

  • Read/write access: R

Current destination address register for DMA channel x, indicates the current destination address

during transfer

31:0 CURR_DAR0

Bit

Symbol

Access

INI

Description

31:0

CURR_DAR0

R

0x0

The read back value is destination writing address at present

REG_LLP0_L

  • Name: Channel 0 low-32 bits Linked List Pointer Register

  • Size: 32

  • Address offset: 010h

  • Read/write access: R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list

item

31:2 LLP0_L_LOC 1:0 RSVD

Bit

Symbol

Access

INI

Description

31:2

LLP0_L_LOC

R/W

Unknown

Starting Address In Memory of next LLI if block chaining is enabled. Note that the two LSBs of the starting address are not stored because the address is assumed to be aligned to a 32-bit boundary.LLI accesses are always 32-bit accesses aligned to 32-bit boundaries and cannot be changed or programmed to anything other than 32-bit.

1:0

RSVD

R

-

Reserved

REG_CTL0_L

  • Name: Channel 0 low-32 bits Control Register

  • Size: 32

  • Address offset: 018h

  • Read/write access: R/W

Control register low for DMA channel x, configures channel control settings

31:29 RSVD 28 CTL0_L_LLP_SRC_EN 27 CTL0_L_LLP_DST_EN 26:23 RSVD 22:20 CTL0_L_TT_FC 19 RSVD 18 CTL0_L_DST_SCATTER_EN 17 CTL0_L_SRC_GATHER_EN 16:14 CTL0_L_SRC_MSIZE 13:11 CTL0_L_DEST_MSIZE 10:9 CTL0_L_SINC 8:7 CTL0_L_DINC 6:4 CTL0_L_SRC_TR_WIDTH 3:1 CTL0_L_DST_TR_WIDTH 0 CTL0_L_INT_EN

Bit

Symbol

Access

INI

Description

31:29

RSVD

R

-

Reserved

28

CTL0_L_LLP_SRC_EN

R/W

0x0

Block chanining is enabled on the source side only if the LLP_SRC_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

27

CTL0_L_LLP_DST_EN

R/W

0x0

Block chanining is enabled on the destination side only if the LLP_DST_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

26:23

RSVD

R

-

Reserved

22:20

CTL0_L_TT_FC

R/W

0x0

Transfer Type and Flow Control.The following transfer types are supported.

  • Memory to Memory

  • Memory to Peripheral

  • Peripheral to Memory

  • Peripheral to Peripheral

Flow Control can be assigned to the RTK_DMAC, the source peripheral, or the destination peripheral. Table 6-4 lists the decoding for this field. For more information on transfer types and flow control, refer to “Setup/Operation of RTK_DMAC Transfers”.

Reset Value: 3’h0

Dependencies: If hardware handshake isn’t support, then TT_FC can only be set to 3’b0. TT_FC[2] can only be read.

19

RSVD

R

-

Reserved

18

CTL0_L_DST_SCATTER_EN

R/W

0x0

Destination scatter enable bit:0 = Scatter disabled1 = Scatter enabledScatter on the destination side is applicable only when the CTLx_L.DINC bit indicates an incrementing address control and DARx should be aligned with DST_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_DST_SCA_EN is not selected.

17

CTL0_L_SRC_GATHER_EN

R/W

0x0

Source gather enable bit:

0 = Gather disabled

1 = Gather enabled

Gather on the source side is applicable only when the CTLx_L.SINC bit indicates an incrementing address control and SARx should be aligned with SRC_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_SRC_GAT_EN is not selected.

16:14

CTL0_L_SRC_MSIZE

R/W

0x1

Source Burst Transaction Length.

Number of data items, each of width CTLx_L.SRC_TR_WIDTH if source is not memory, otherwise each of width DMAC_TR_WIDTH_DEFAULT, to be read from the source every time a source burst transaction request is made from either the corresponding hardware or software handshaking interface.

Read burst transaction length on bus (ARLen) will not exceed this value, but may be less than this value. If SINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-0 lists the decoding for this field.

13:11

CTL0_L_DEST_MSIZE

R/W

0x1

Destination Burst Transaction Length.

Number of data items, each of width DATA_WIDTH, to be written to the destination every time a destination burst transaction request is made from either the corresponding hardware or software handshaking interface.

Write burst transaction length on bus (AWLen) will not exceed this value, but may be less than this value. If DINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-1 lists the decoding for this field.

10:9

CTL0_L_SINC

R/W

0x0

Source Address Increment. Indicates whether to increment the source address on every source transfer. If the device is fetching data from a source peripheral FIFO with a fixed address, then set this field to “No change.”If source is memory appointed by CTLx_L.TT_FC, and set SINC=No change, then SRC_TR_WIDTH must be set to BUS width. And DMAC will read data from the fixed memory address until block transfer finish, but It is not recommended to read memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01 =Not support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.SRC_TR_WIDTH boundary.

8:7

CTL0_L_DINC

R/W

0x0

Destination Address Increment. Indicates whether to increment destination address on every destination transfer. If your device is writing data to a destination peripheral FIFO with a fixed address, then set this field to “No change.”If destination is memory appointed by CTLx_L.TT_FC, and set DINC=No change, then DST_TR_WIDTH must be set to BUS width. And DMAC will write data to the fixed memory address until block transfer finish, but It is not recommended to write memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01=Not Support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.DST_TR_WIDTH boundary.

6:4

CTL0_L_SRC_TR_WIDTH

R/W

0x0

Source Transfer Width.

Table 6-3 lists the decoding for this field.It can’t be mapped to AXI bus data width directly. Since AXI bus data width is fixed (such as 32bit/64bit), AXI use byte enable signal for byte/half word transfer (still burst). So, the SRC_TR_WIDTH is only used for total block data size calculation and streaming mode byte/half word transfer (for FIFO transfer).

Note

SRC_TR_WIDTH must not be bigger than BUS width.

3:1

CTL0_L_DST_TR_WIDTH

R/W

0x0

Destination Transfer Width.Table 6-3 lists the decoding for this field. It can’t be mapped to AXI bus data width directly. For a non-memory peripheral, typically the peripheral (destination) FIFO width.Note: DST_TR_WIDTH must not be bigger than BUS width

0

CTL0_L_INT_EN

R/W

0x1

Interrupt Enable Bit. If set, then all interrupt-generating sources are enabled. Functions as a global mask bit for all interrupts for the channel; raw* interrupt registers still assert if CTLx_L.INT_EN = 0.

REG_CTL0_H

  • Name: Channel 0 high-32 bits Control Register

  • Size: 32

  • Address offset: 01Ch

  • Read/write access: R

Control register high for DMA channel x for block size

31:0 CTL0_H_TRANS_DATA_CNT

Bit

Symbol

Access

INI

Description

31:0

CTL0_H_TRANS_DATA_CNT

R

0x0

Data Transfered Count.Once the transfer starts, the read-back value is the total number of data bytes already write to destination memory or peripheral.

REG_CFG0_L

  • Name: Channel 0 low-32 bits Configuration Register

  • Size: 32

  • Address offset: 040h

  • Read/write access: R/W

Configuration register low for DMA channel x, configures transfer parameters

31 CFG0_L_RELOAD_DST 30 CFG0_L_RELOAD_SRC 29:20 RSVD 19 CFG0_L_SRC_HS_POL 18 CFG0_L_DST_HS_POL 17:12 RSVD 11 CFG0_L_HS_SEL_SRC 10 CFG0_L_HS_SEL_DST 9 CFG0_L_FIFO_EMPTY 8 CFG0_L_CH_SUSP 7:4 CFG0_L_CH_PRIOR 3 RSVD 2 CFG0_L_DST_PCTL_OVER 1 CFG0_L_SRC_PCTL_OVER 0 CFG0_L_INACTIVE

Bit

Symbol

Access

INI

Description

31

CFG0_L_RELOAD_DST

R/W

0x0

Automatic Destination Reload. The DARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.This register does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

30

CFG0_L_RELOAD_SRC

R/W

0x0

Automatic Source Reload. The SARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.

This field does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

29:20

RSVD

R

-

Reserved

19

CFG0_L_SRC_HS_POL

R/W

0x0

Source Handshaking Interface Polarity.

0 = Active high

1 = Active low

18

CFG0_L_DST_HS_POL

R/W

0x0

Destination Handshaking Interface Polarity.

0 = Active high

1 = Active low

For information on this, refer to “Handshaking Interface” .

17:12

RSVD

R

-

Reserved

11

CFG0_L_HS_SEL_SRC

R/W

0x1

Source Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for source requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware-initiated transaction requests are ignored. If the source peripheral is memory, then this bit is ignored.

10

CFG0_L_HS_SEL_DST

R/W

0x1

Destination Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for destination requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware- initiated transaction requests are ignored. If the destination peripheral is memory, then this bit is ignored.

9

CFG0_L_FIFO_EMPTY

R

0x1

Indicates if there is data left in the channel FIFO.

1 = Channel FIFO empty

0 = Channel FIFO not empty

8

CFG0_L_CH_SUSP

R/W

0x0

Channel Suspend. Suspends all DMA data transfers from the source until this bit is cleared. There is no guarantee that the current transaction will complete. Can also be used in conjunction with CFGx_l.INACTIVE to cleanly disable a channel without losing any data.

0 = Not suspended

1 = Suspend DMA transfer from the source.

This field will be reset to 0 after “Disabling a Channel Prior to Transfer Completion” automatically by hardware.For more information, refer to “7.7 Disabling a Channel Prior to Transfer Completion” .

Note

if user not define DMAC_CH*_SUPPORT_SUSPEND, it only can be readed.

7:4

CFG0_L_CH_PRIOR

R/W

0x0

Channel priority.

RTK DMAC supports three kinds of channel priority now, fixed priority, round robin priority and programmable priority. The default way is fixed priority to reduce area, and channel0 has the highest priority, channel15 has the lowest priority. Changing the definition of parameter FIX_PRIORITY or Programmable_PRIORITY can change priority way.

If RTK DMAC is configured to support Programmable priority, this field will be used to set priority between channels. CH_PRIOR’s legal value is 0 ~ (DMAC_NUM_CHANNELS-1), and 0 is the highest priority value, (DMAC_NUM_CHANNELS-1) is the lowest priroty value. If more than one channel are set with the same priroty value, the channel with small channel number index has higher priority.

If DMAC is configured to support fix priority or round-robin priority, this field is not exist.

Note

if user not define ProgrammablePriority, it only can be readed.

3

RSVD

R

-

Reserved

2

CFG0_L_DST_PCTL_OVER

R

0x1

DMA destination bus protocol finish, indicating the current write command has finished.

1

CFG0_L_SRC_PCTL_OVER

R

0x1

DMA Source bus protocol finish, indicating the current read command has finished.

0

CFG0_L_INACTIVE

R

0x1

Indicates if the channel is inactive. Can be used in conjunction with CFGx_L.CH_SUSP to cleanly disable a channel when destination is peripheral. For more information, refer to “Disabling a Channel Prior to Transfer Completion” .

1 = Channel Inactive for axi interface

0 = Channel not Inactive for axi interface

REG_CFG0_H

  • Name: Channel 0 high-32 bits Configuration Register

  • Size: 32

  • Address offset: 044h

  • Read/write access: R/W

Configuration register high for DMA channel x, configures additional transfer parameters

31:17 RSVD 16 CFG0_H_EXTENDED_DEST_PER1 15 CFG0_H_EXTENDED_SRC_PER1 14:11 CFG0_H_DEST_PER 10:7 CFG0_H_SRC_PER 6:4 RSVD 3 CFG0_H_PROTCTL 2:1 RSVD 0 CFG0_H_FCMODE

Bit

Symbol

Access

INI

Description

31:17

RSVD

R

-

Reserved

16

CFG0_H_EXTENDED_DEST_PER1

R/W

0x0

The extened 4th bit of DEST_PER when hardware handshake interfaces number is configured to 32.

15

CFG0_H_EXTENDED_SRC_PER1

R/W

0x0

The extened 4th bit of SRC_PER when hardware handshake interfaces number is configured to 32.

14:11

CFG0_H_DEST_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the destination of channel x if the FGx.HS_SEL_DST field is 0; otherwise, this field is ignored. The channel can then communicate with the destinationperipheral connected to that interface through the assignedhardware handshaking interface.

NOTE1: For correct DMA operation, only one peripheral (sourceor destination) should be assigned to the same handshaking interface

NOTE2: This field does not exist if the configuration parameterDMAC_NUM_HS_INT is set to 0.

10:7

CFG0_H_SRC_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the source of channel x if the CFGx.HS_SEL_SRC field is 0; otherwise, this field is ignored. The channel can then communicate with the source peripheral connected to that interface through the assigned hardware handshaking interface.

NOTE1: For correct RTK_DMAC operation, only one peripheral (source or destination) should be assigned to the same handshaking interface.

NOTE2: This field does not exist if the configuration parameter DMAC_NUM_HS_INT is set to 0.

6:4

RSVD

R

-

Reserved

3

CFG0_H_PROTCTL

R/W

0x1

Protection Control.Set the bit 35 to 0 will enable the channel secure DMA transfer.

Set the bit 35 to 1 will enable the channel non-secure DMAC transfer.

Note

if user not define DMAC_SECURE_MODE, it only can be readed.

2:1

RSVD

R

-

Reserved

0

CFG0_H_FCMODE

R/W

0x0

Flow Control Mode. Determines when source transaction requests are serviced when the Destination Peripheral is the flow controller.

0 = Source transaction requests are servied when they occur. Data pre-fetching is enabled.

1 = Source transaction requests are not serviced until a destination transaction request occurs. Data pre-fetching is disabled.

Note

Please keep this bit 0 when Transfer Type and Flow Control is not ”destination peripheral is the flow controller and transfer type is peripheral to peripheral” (TT_FC!=7).

REG_SAR1

  • Name: Channel 1 Source Address Register

  • Size: 32

  • Address offset: 058h

  • Read/write access: R/W

Source address register for DMA channel x, specifies the source memory address

31:0 SAR1

Bit

Symbol

Access

INI

Description

31:0

SAR1

R/W

Unknown

Source Address of DMA transfer.Updated after each source transfer. The SINC field in the CTLx register determines whether the address increments, or is left unchanged on every source transfer throughout the block transfer.

REG_CURR_SAR1

  • Name: The read back value is channel 1 source reading address at present

  • Size: 32

  • Address offset: 05Ch

  • Read/write access: R

Current source address register for DMA channel x, indicates the current source address during

transfer

31:0 CURR_SAR1

Bit

Symbol

Access

INI

Description

31:0

CURR_SAR1

R

0x0

The read back value is source reading address at present

REG_DAR1

  • Name: Channel 1 Destination Address Register

  • Size: 32

  • Address offset: 060h

  • Read/write access: R/W

Destination address register for DMA channel x, specifies the destination memory address

31:0 DAR1

Bit

Symbol

Access

INI

Description

31:0

DAR1

R/W

Unknown

Destination address of DMA transfer.Updated after each destination transfer. The DINC field in the CTLx register determines whether the address increments, or is left unchanged on every destination transfer throughout the block transfer.

REG_CURR_DAR1

  • Name: The read back value is channel 1 destination writing address at present

  • Size: 32

  • Address offset: 064h

  • Read/write access: R

Current destination address register for DMA channel x, indicates the current destination address

during transfer

31:0 CURR_DAR1

Bit

Symbol

Access

INI

Description

31:0

CURR_DAR1

R

0x0

The read back value is destination writing address at present

REG_LLP1_L

  • Name: Channel 1 low-32 bits Linked List Pointer Register

  • Size: 32

  • Address offset: 068h

  • Read/write access: R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list

item

31:2 LLP1_L_LOC 1:0 RSVD

Bit

Symbol

Access

INI

Description

31:2

LLP1_L_LOC

R/W

Unknown

Starting Address In Memory of next LLI if block chaining is enabled. Note that the two LSBs of the starting address are not stored because the address is assumed to be aligned to a 32-bit boundary.LLI accesses are always 32-bit accesses aligned to 32-bit boundaries and cannot be changed or programmed to anything other than 32-bit.

1:0

RSVD

R

-

Reserved

REG_CTL1_L

  • Name: Channel 1 low-32 bits Control Register

  • Size: 32

  • Address offset: 070h

  • Read/write access: R/W

Control register low for DMA channel x, configures channel control settings

31:29 RSVD 28 CTL1_L_LLP_SRC_EN 27 CTL1_L_LLP_DST_EN 26:23 RSVD 22:20 CTL1_L_TT_FC 19 RSVD 18 CTL1_L_DST_SCATTER_EN 17 CTL1_L_SRC_GATHER_EN 16:14 CTL1_L_SRC_MSIZE 13:11 CTL1_L_DEST_MSIZE 10:9 CTL1_L_SINC 8:7 CTL1_L_DINC 6:4 CTL1_L_SRC_TR_WIDTH 3:1 CTL1_L_DST_TR_WIDTH 0 CTL1_L_INT_EN

Bit

Symbol

Access

INI

Description

31:29

RSVD

R

-

Reserved

28

CTL1_L_LLP_SRC_EN

R/W

0x0

Block chanining is enabled on the source side only if the LLP_SRC_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

27

CTL1_L_LLP_DST_EN

R/W

0x0

Block chanining is enabled on the destination side only if the LLP_DST_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

26:23

RSVD

R

-

Reserved

22:20

CTL1_L_TT_FC

R/W

0x0

Transfer Type and Flow Control.The following transfer types are supported.

  • Memory to Memory

  • Memory to Peripheral

  • Peripheral to Memory

  • Peripheral to Peripheral

Flow Control can be assigned to the RTK_DMAC, the source peripheral, or the destination peripheral. Table 6-4 lists the decoding for this field. For more information on transfer types and flow control, refer to “Setup/Operation of RTK_DMAC Transfers”.

Reset Value: 3’h0

Dependencies: If hardware handshake isn’t support, then TT_FC can only be set to 3’b0. TT_FC[2] can only be read.

19

RSVD

R

-

Reserved

18

CTL1_L_DST_SCATTER_EN

R/W

0x0

Destination scatter enable bit:0 = Scatter disabled1 = Scatter enabledScatter on the destination side is applicable only when the CTLx_L.DINC bit indicates an incrementing address control and DARx should be aligned with DST_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_DST_SCA_EN is not selected.

17

CTL1_L_SRC_GATHER_EN

R/W

0x0

Source gather enable bit:

0 = Gather disabled

1 = Gather enabled

Gather on the source side is applicable only when the CTLx_L.SINC bit indicates an incrementing address control and SARx should be aligned with SRC_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_SRC_GAT_EN is not selected.

16:14

CTL1_L_SRC_MSIZE

R/W

0x1

Source Burst Transaction Length.

Number of data items, each of width CTLx_L.SRC_TR_WIDTH if source is not memory, otherwise each of width DMAC_TR_WIDTH_DEFAULT, to be read from the source every time a source burst transaction request is made from either the corresponding hardware or software handshaking interface.

Read burst transaction length on bus (ARLen) will not exceed this value, but may be less than this value. If SINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-0 lists the decoding for this field.

13:11

CTL1_L_DEST_MSIZE

R/W

0x1

Destination Burst Transaction Length.

Number of data items, each of width DATA_WIDTH, to be written to the destination every time a destination burst transaction request is made from either the corresponding hardware or software handshaking interface.

Write burst transaction length on bus (AWLen) will not exceed this value, but may be less than this value. If DINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-1 lists the decoding for this field.

10:9

CTL1_L_SINC

R/W

0x0

Source Address Increment. Indicates whether to increment the source address on every source transfer. If the device is fetching data from a source peripheral FIFO with a fixed address, then set this field to “No change.”If source is memory appointed by CTLx_L.TT_FC, and set SINC=No change, then SRC_TR_WIDTH must be set to BUS width. And DMAC will read data from the fixed memory address until block transfer finish, but It is not recommended to read memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01 =Not support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.SRC_TR_WIDTH boundary.

8:7

CTL1_L_DINC

R/W

0x0

Destination Address Increment. Indicates whether to increment destination address on every destination transfer. If your device is writing data to a destination peripheral FIFO with a fixed address, then set this field to “No change.”If destination is memory appointed by CTLx_L.TT_FC, and set DINC=No change, then DST_TR_WIDTH must be set to BUS width. And DMAC will write data to the fixed memory address until block transfer finish, but It is not recommended to write memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01=Not Support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.DST_TR_WIDTH boundary.

6:4

CTL1_L_SRC_TR_WIDTH

R/W

0x0

Source Transfer Width.

Table 6-3 lists the decoding for this field.It can’t be mapped to AXI bus data width directly. Since AXI bus data width is fixed (such as 32bit/64bit), AXI use byte enable signal for byte/half word transfer (still burst). So, the SRC_TR_WIDTH is only used for total block data size calculation and streaming mode byte/half word transfer (for FIFO transfer).

Note

SRC_TR_WIDTH must not be bigger than BUS width.

3:1

CTL1_L_DST_TR_WIDTH

R/W

0x0

Destination Transfer Width.Table 6-3 lists the decoding for this field. It can’t be mapped to AXI bus data width directly. For a non-memory peripheral, typically the peripheral (destination) FIFO width.Note: DST_TR_WIDTH must not be bigger than BUS width

0

CTL1_L_INT_EN

R/W

0x1

Interrupt Enable Bit. If set, then all interrupt-generating sources are enabled. Functions as a global mask bit for all interrupts for the channel; raw* interrupt registers still assert if CTLx_L.INT_EN = 0.

REG_CTL1_H

  • Name: Channel 1 high-32 bits Control Register

  • Size: 32

  • Address offset: 074h

  • Read/write access: R

Control register high for DMA channel x for block size

31:0 CTL1_H_TRANS_DATA_CNT

Bit

Symbol

Access

INI

Description

31:0

CTL1_H_TRANS_DATA_CNT

R

0x0

Data Transfered Count.Once the transfer starts, the read-back value is the total number of data bytes already write to destination memory or peripheral.

REG_CFG1_L

  • Name: Channel 1 low-32 bits Configuration Register

  • Size: 32

  • Address offset: 098h

  • Read/write access: R/W

Configuration register low for DMA channel x, configures transfer parameters

31 CFG1_L_RELOAD_DST 30 CFG1_L_RELOAD_SRC 29:20 RSVD 19 CFG1_L_SRC_HS_POL 18 CFG1_L_DST_HS_POL 17:12 RSVD 11 CFG1_L_HS_SEL_SRC 10 CFG1_L_HS_SEL_DST 9 CFG1_L_FIFO_EMPTY 8 CFG1_L_CH_SUSP 7:4 CFG1_L_CH_PRIOR 3 RSVD 2 CFG1_L_DST_PCTL_OVER 1 CFG1_L_SRC_PCTL_OVER 0 CFG1_L_INACTIVE

Bit

Symbol

Access

INI

Description

31

CFG1_L_RELOAD_DST

R/W

0x0

Automatic Destination Reload. The DARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.This register does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

30

CFG1_L_RELOAD_SRC

R/W

0x0

Automatic Source Reload. The SARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.

This field does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

29:20

RSVD

R

-

Reserved

19

CFG1_L_SRC_HS_POL

R/W

0x0

Source Handshaking Interface Polarity.

0 = Active high

1 = Active low

18

CFG1_L_DST_HS_POL

R/W

0x0

Destination Handshaking Interface Polarity.

0 = Active high

1 = Active low

For information on this, refer to “Handshaking Interface” .

17:12

RSVD

R

-

Reserved

11

CFG1_L_HS_SEL_SRC

R/W

0x1

Source Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for source requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware-initiated transaction requests are ignored. If the source peripheral is memory, then this bit is ignored.

10

CFG1_L_HS_SEL_DST

R/W

0x1

Destination Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for destination requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware- initiated transaction requests are ignored. If the destination peripheral is memory, then this bit is ignored.

9

CFG1_L_FIFO_EMPTY

R

0x1

Indicates if there is data left in the channel FIFO.

1 = Channel FIFO empty

0 = Channel FIFO not empty

8

CFG1_L_CH_SUSP

R/W

0x0

Channel Suspend. Suspends all DMA data transfers from the source until this bit is cleared. There is no guarantee that the current transaction will complete. Can also be used in conjunction with CFGx_l.INACTIVE to cleanly disable a channel without losing any data.

0 = Not suspended

1 = Suspend DMA transfer from the source.

This field will be reset to 0 after “Disabling a Channel Prior to Transfer Completion” automatically by hardware.For more information, refer to “7.7 Disabling a Channel Prior to Transfer Completion” .

Note

if user not define DMAC_CH*_SUPPORT_SUSPEND, it only can be readed.

7:4

CFG1_L_CH_PRIOR

R/W

0x0

Channel priority.

RTK DMAC supports three kinds of channel priority now, fixed priority, round robin priority and programmable priority. The default way is fixed priority to reduce area, and channel0 has the highest priority, channel15 has the lowest priority. Changing the definition of parameter FIX_PRIORITY or Programmable_PRIORITY can change priority way.

If RTK DMAC is configured to support Programmable priority, this field will be used to set priority between channels. CH_PRIOR’s legal value is 0 ~ (DMAC_NUM_CHANNELS-1), and 0 is the highest priority value, (DMAC_NUM_CHANNELS-1) is the lowest priroty value. If more than one channel are set with the same priroty value, the channel with small channel number index has higher priority.

If DMAC is configured to support fix priority or round-robin priority, this field is not exist.

Note

if user not define ProgrammablePriority, it only can be readed.

3

RSVD

R

-

Reserved

2

CFG1_L_DST_PCTL_OVER

R

0x1

DMA destination bus protocol finish, indicating the current write command has finished.

1

CFG1_L_SRC_PCTL_OVER

R

0x1

DMA Source bus protocol finish, indicating the current read command has finished.

0

CFG1_L_INACTIVE

R

0x1

Indicates if the channel is inactive. Can be used in conjunction with CFGx_L.CH_SUSP to cleanly disable a channel when destination is peripheral. For more information, refer to “Disabling a Channel Prior to Transfer Completion” .

1 = Channel Inactive for axi interface

0 = Channel not Inactive for axi interface

REG_CFG1_H

  • Name: Channel 1 high-32 bits Configuration Register

  • Size: 32

  • Address offset: 09Ch

  • Read/write access: R/W

Configuration register high for DMA channel x, configures additional transfer parameters

31:17 RSVD 16 CFG1_H_EXTENDED_DEST_PER1 15 CFG1_H_EXTENDED_SRC_PER1 14:11 CFG1_H_DEST_PER 10:7 CFG1_H_SRC_PER 6:4 RSVD 3 CFG1_H_PROTCTL 2:1 RSVD 0 CFG1_H_FCMODE

Bit

Symbol

Access

INI

Description

31:17

RSVD

R

-

Reserved

16

CFG1_H_EXTENDED_DEST_PER1

R/W

0x0

The extened 4th bit of DEST_PER when hardware handshake interfaces number is configured to 32.

15

CFG1_H_EXTENDED_SRC_PER1

R/W

0x0

The extened 4th bit of SRC_PER when hardware handshake interfaces number is configured to 32.

14:11

CFG1_H_DEST_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the destination of channel x if the FGx.HS_SEL_DST field is 0; otherwise, this field is ignored. The channel can then communicate with the destinationperipheral connected to that interface through the assignedhardware handshaking interface.

NOTE1: For correct DMA operation, only one peripheral (sourceor destination) should be assigned to the same handshaking interface

NOTE2: This field does not exist if the configuration parameterDMAC_NUM_HS_INT is set to 0.

10:7

CFG1_H_SRC_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the source of channel x if the CFGx.HS_SEL_SRC field is 0; otherwise, this field is ignored. The channel can then communicate with the source peripheral connected to that interface through the assigned hardware handshaking interface.

NOTE1: For correct RTK_DMAC operation, only one peripheral (source or destination) should be assigned to the same handshaking interface.

NOTE2: This field does not exist if the configuration parameter DMAC_NUM_HS_INT is set to 0.

6:4

RSVD

R

-

Reserved

3

CFG1_H_PROTCTL

R/W

0x1

Protection Control.Set the bit 35 to 0 will enable the channel secure DMA transfer.

Set the bit 35 to 1 will enable the channel non-secure DMAC transfer.

Note

if user not define DMAC_SECURE_MODE, it only can be readed.

2:1

RSVD

R

-

Reserved

0

CFG1_H_FCMODE

R/W

0x0

Flow Control Mode. Determines when source transaction requests are serviced when the Destination Peripheral is the flow controller.

0 = Source transaction requests are servied when they occur. Data pre-fetching is enabled.

1 = Source transaction requests are not serviced until a destination transaction request occurs. Data pre-fetching is disabled.

Note

Please keep this bit 0 when Transfer Type and Flow Control is not ”destination peripheral is the flow controller and transfer type is peripheral to peripheral” (TT_FC!=7).

REG_SAR2

  • Name: Channel 2 Source Address Register

  • Size: 32

  • Address offset: 0B0h

  • Read/write access: R/W

Source address register for DMA channel x, specifies the source memory address

31:0 SAR2

Bit

Symbol

Access

INI

Description

31:0

SAR2

R/W

Unknown

Source Address of DMA transfer.Updated after each source transfer. The SINC field in the CTLx register determines whether the address increments, or is left unchanged on every source transfer throughout the block transfer.

REG_CURR_SAR2

  • Name: The read back value is channel 2 source reading address at present

  • Size: 32

  • Address offset: 0B4h

  • Read/write access: R

Current source address register for DMA channel x, indicates the current source address during

transfer

31:0 CURR_SAR2

Bit

Symbol

Access

INI

Description

31:0

CURR_SAR2

R

0x0

The read back value is source reading address at present

REG_DAR2

  • Name: Channel 2 Destination Address Register

  • Size: 32

  • Address offset: 0B8h

  • Read/write access: R/W

Destination address register for DMA channel x, specifies the destination memory address

31:0 DAR2

Bit

Symbol

Access

INI

Description

31:0

DAR2

R/W

Unknown

Destination address of DMA transfer.Updated after each destination transfer. The DINC field in the CTLx register determines whether the address increments, or is left unchanged on every destination transfer throughout the block transfer.

REG_CURR_DAR2

  • Name: The read back value is channel 2 destination writing address at present

  • Size: 32

  • Address offset: 0BCh

  • Read/write access: R

Current destination address register for DMA channel x, indicates the current destination address

during transfer

31:0 CURR_DAR2

Bit

Symbol

Access

INI

Description

31:0

CURR_DAR2

R

0x0

The read back value is destination writing address at present

REG_LLP2_L

  • Name: Channel 2 low-32 bits Linked List Pointer Register

  • Size: 32

  • Address offset: 0C0h

  • Read/write access: R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list

item

31:2 LLP2_L_LOC 1:0 RSVD

Bit

Symbol

Access

INI

Description

31:2

LLP2_L_LOC

R/W

Unknown

Starting Address In Memory of next LLI if block chaining is enabled. Note that the two LSBs of the starting address are not stored because the address is assumed to be aligned to a 32-bit boundary.LLI accesses are always 32-bit accesses aligned to 32-bit boundaries and cannot be changed or programmed to anything other than 32-bit.

1:0

RSVD

R

-

Reserved

REG_CTL2_L

  • Name: Channel 2 low-32 bits Control Register

  • Size: 32

  • Address offset: 0C8h

  • Read/write access: R/W

Control register low for DMA channel x, configures channel control settings

31:29 RSVD 28 CTL2_L_LLP_SRC_EN 27 CTL2_L_LLP_DST_EN 26:23 RSVD 22:20 CTL2_L_TT_FC 19 RSVD 18 CTL2_L_DST_SCATTER_EN 17 CTL2_L_SRC_GATHER_EN 16:14 CTL2_L_SRC_MSIZE 13:11 CTL2_L_DEST_MSIZE 10:9 CTL2_L_SINC 8:7 CTL2_L_DINC 6:4 CTL2_L_SRC_TR_WIDTH 3:1 CTL2_L_DST_TR_WIDTH 0 CTL2_L_INT_EN

Bit

Symbol

Access

INI

Description

31:29

RSVD

R

-

Reserved

28

CTL2_L_LLP_SRC_EN

R/W

0x0

Block chanining is enabled on the source side only if the LLP_SRC_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

27

CTL2_L_LLP_DST_EN

R/W

0x0

Block chanining is enabled on the destination side only if the LLP_DST_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

26:23

RSVD

R

-

Reserved

22:20

CTL2_L_TT_FC

R/W

0x0

Transfer Type and Flow Control.The following transfer types are supported.

  • Memory to Memory

  • Memory to Peripheral

  • Peripheral to Memory

  • Peripheral to Peripheral

Flow Control can be assigned to the RTK_DMAC, the source peripheral, or the destination peripheral. Table 6-4 lists the decoding for this field. For more information on transfer types and flow control, refer to “Setup/Operation of RTK_DMAC Transfers”.

Reset Value: 3’h0

Dependencies: If hardware handshake isn’t support, then TT_FC can only be set to 3’b0. TT_FC[2] can only be read.

19

RSVD

R

-

Reserved

18

CTL2_L_DST_SCATTER_EN

R/W

0x0

Destination scatter enable bit:0 = Scatter disabled1 = Scatter enabledScatter on the destination side is applicable only when the CTLx_L.DINC bit indicates an incrementing address control and DARx should be aligned with DST_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_DST_SCA_EN is not selected.

17

CTL2_L_SRC_GATHER_EN

R/W

0x0

Source gather enable bit:

0 = Gather disabled

1 = Gather enabled

Gather on the source side is applicable only when the CTLx_L.SINC bit indicates an incrementing address control and SARx should be aligned with SRC_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_SRC_GAT_EN is not selected.

16:14

CTL2_L_SRC_MSIZE

R/W

0x1

Source Burst Transaction Length.

Number of data items, each of width CTLx_L.SRC_TR_WIDTH if source is not memory, otherwise each of width DMAC_TR_WIDTH_DEFAULT, to be read from the source every time a source burst transaction request is made from either the corresponding hardware or software handshaking interface.

Read burst transaction length on bus (ARLen) will not exceed this value, but may be less than this value. If SINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-0 lists the decoding for this field.

13:11

CTL2_L_DEST_MSIZE

R/W

0x1

Destination Burst Transaction Length.

Number of data items, each of width DATA_WIDTH, to be written to the destination every time a destination burst transaction request is made from either the corresponding hardware or software handshaking interface.

Write burst transaction length on bus (AWLen) will not exceed this value, but may be less than this value. If DINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-1 lists the decoding for this field.

10:9

CTL2_L_SINC

R/W

0x0

Source Address Increment. Indicates whether to increment the source address on every source transfer. If the device is fetching data from a source peripheral FIFO with a fixed address, then set this field to “No change.”If source is memory appointed by CTLx_L.TT_FC, and set SINC=No change, then SRC_TR_WIDTH must be set to BUS width. And DMAC will read data from the fixed memory address until block transfer finish, but It is not recommended to read memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01 =Not support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.SRC_TR_WIDTH boundary.

8:7

CTL2_L_DINC

R/W

0x0

Destination Address Increment. Indicates whether to increment destination address on every destination transfer. If your device is writing data to a destination peripheral FIFO with a fixed address, then set this field to “No change.”If destination is memory appointed by CTLx_L.TT_FC, and set DINC=No change, then DST_TR_WIDTH must be set to BUS width. And DMAC will write data to the fixed memory address until block transfer finish, but It is not recommended to write memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01=Not Support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.DST_TR_WIDTH boundary.

6:4

CTL2_L_SRC_TR_WIDTH

R/W

0x0

Source Transfer Width.

Table 6-3 lists the decoding for this field.It can’t be mapped to AXI bus data width directly. Since AXI bus data width is fixed (such as 32bit/64bit), AXI use byte enable signal for byte/half word transfer (still burst). So, the SRC_TR_WIDTH is only used for total block data size calculation and streaming mode byte/half word transfer (for FIFO transfer).

Note

SRC_TR_WIDTH must not be bigger than BUS width.

3:1

CTL2_L_DST_TR_WIDTH

R/W

0x0

Destination Transfer Width.Table 6-3 lists the decoding for this field. It can’t be mapped to AXI bus data width directly. For a non-memory peripheral, typically the peripheral (destination) FIFO width.Note: DST_TR_WIDTH must not be bigger than BUS width

0

CTL2_L_INT_EN

R/W

0x1

Interrupt Enable Bit. If set, then all interrupt-generating sources are enabled. Functions as a global mask bit for all interrupts for the channel; raw* interrupt registers still assert if CTLx_L.INT_EN = 0.

REG_CTL2_H

  • Name: Channel 2 high-32 bits Control Register

  • Size: 32

  • Address offset: 0CCh

  • Read/write access: R

Control register high for DMA channel x for block size

31:0 CTL2_H_TRANS_DATA_CNT

Bit

Symbol

Access

INI

Description

31:0

CTL2_H_TRANS_DATA_CNT

R

0x0

Data Transfered Count.Once the transfer starts, the read-back value is the total number of data bytes already write to destination memory or peripheral.

REG_CFG2_L

  • Name: Channel 2 low-32 bits Configuration Register

  • Size: 32

  • Address offset: 0F0h

  • Read/write access: R/W

Configuration register low for DMA channel x, configures transfer parameters

31 CFG2_L_RELOAD_DST 30 CFG2_L_RELOAD_SRC 29:20 RSVD 19 CFG2_L_SRC_HS_POL 18 CFG2_L_DST_HS_POL 17:12 RSVD 11 CFG2_L_HS_SEL_SRC 10 CFG2_L_HS_SEL_DST 9 CFG2_L_FIFO_EMPTY 8 CFG2_L_CH_SUSP 7:4 CFG2_L_CH_PRIOR 3 RSVD 2 CFG2_L_DST_PCTL_OVER 1 CFG2_L_SRC_PCTL_OVER 0 CFG2_L_INACTIVE

Bit

Symbol

Access

INI

Description

31

CFG2_L_RELOAD_DST

R/W

0x0

Automatic Destination Reload. The DARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.This register does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

30

CFG2_L_RELOAD_SRC

R/W

0x0

Automatic Source Reload. The SARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.

This field does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

29:20

RSVD

R

-

Reserved

19

CFG2_L_SRC_HS_POL

R/W

0x0

Source Handshaking Interface Polarity.

0 = Active high

1 = Active low

18

CFG2_L_DST_HS_POL

R/W

0x0

Destination Handshaking Interface Polarity.

0 = Active high

1 = Active low

For information on this, refer to “Handshaking Interface” .

17:12

RSVD

R

-

Reserved

11

CFG2_L_HS_SEL_SRC

R/W

0x1

Source Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for source requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware-initiated transaction requests are ignored. If the source peripheral is memory, then this bit is ignored.

10

CFG2_L_HS_SEL_DST

R/W

0x1

Destination Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for destination requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware- initiated transaction requests are ignored. If the destination peripheral is memory, then this bit is ignored.

9

CFG2_L_FIFO_EMPTY

R

0x1

Indicates if there is data left in the channel FIFO.

1 = Channel FIFO empty

0 = Channel FIFO not empty

8

CFG2_L_CH_SUSP

R/W

0x0

Channel Suspend. Suspends all DMA data transfers from the source until this bit is cleared. There is no guarantee that the current transaction will complete. Can also be used in conjunction with CFGx_l.INACTIVE to cleanly disable a channel without losing any data.

0 = Not suspended

1 = Suspend DMA transfer from the source.

This field will be reset to 0 after “Disabling a Channel Prior to Transfer Completion” automatically by hardware.For more information, refer to “7.7 Disabling a Channel Prior to Transfer Completion” .

Note

if user not define DMAC_CH*_SUPPORT_SUSPEND, it only can be readed.

7:4

CFG2_L_CH_PRIOR

R/W

0x0

Channel priority.

RTK DMAC supports three kinds of channel priority now, fixed priority, round robin priority and programmable priority. The default way is fixed priority to reduce area, and channel0 has the highest priority, channel15 has the lowest priority. Changing the definition of parameter FIX_PRIORITY or Programmable_PRIORITY can change priority way.

If RTK DMAC is configured to support Programmable priority, this field will be used to set priority between channels. CH_PRIOR’s legal value is 0 ~ (DMAC_NUM_CHANNELS-1), and 0 is the highest priority value, (DMAC_NUM_CHANNELS-1) is the lowest priroty value. If more than one channel are set with the same priroty value, the channel with small channel number index has higher priority.

If DMAC is configured to support fix priority or round-robin priority, this field is not exist.

Note

if user not define ProgrammablePriority, it only can be readed.

3

RSVD

R

-

Reserved

2

CFG2_L_DST_PCTL_OVER

R

0x1

DMA destination bus protocol finish, indicating the current write command has finished.

1

CFG2_L_SRC_PCTL_OVER

R

0x1

DMA Source bus protocol finish, indicating the current read command has finished.

0

CFG2_L_INACTIVE

R

0x1

Indicates if the channel is inactive. Can be used in conjunction with CFGx_L.CH_SUSP to cleanly disable a channel when destination is peripheral. For more information, refer to “Disabling a Channel Prior to Transfer Completion” .

1 = Channel Inactive for axi interface

0 = Channel not Inactive for axi interface

REG_CFG2_H

  • Name: Channel 2 high-32 bits Configuration Register

  • Size: 32

  • Address offset: 0F4h

  • Read/write access: R/W

Configuration register high for DMA channel x, configures additional transfer parameters

31:17 RSVD 16 CFG2_H_EXTENDED_DEST_PER1 15 CFG2_H_EXTENDED_SRC_PER1 14:11 CFG2_H_DEST_PER 10:7 CFG2_H_SRC_PER 6:4 RSVD 3 CFG2_H_PROTCTL 2:1 RSVD 0 CFG2_H_FCMODE

Bit

Symbol

Access

INI

Description

31:17

RSVD

R

-

Reserved

16

CFG2_H_EXTENDED_DEST_PER1

R/W

0x0

The extened 4th bit of DEST_PER when hardware handshake interfaces number is configured to 32.

15

CFG2_H_EXTENDED_SRC_PER1

R/W

0x0

The extened 4th bit of SRC_PER when hardware handshake interfaces number is configured to 32.

14:11

CFG2_H_DEST_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the destination of channel x if the FGx.HS_SEL_DST field is 0; otherwise, this field is ignored. The channel can then communicate with the destinationperipheral connected to that interface through the assignedhardware handshaking interface.

NOTE1: For correct DMA operation, only one peripheral (sourceor destination) should be assigned to the same handshaking interface

NOTE2: This field does not exist if the configuration parameterDMAC_NUM_HS_INT is set to 0.

10:7

CFG2_H_SRC_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the source of channel x if the CFGx.HS_SEL_SRC field is 0; otherwise, this field is ignored. The channel can then communicate with the source peripheral connected to that interface through the assigned hardware handshaking interface.

NOTE1: For correct RTK_DMAC operation, only one peripheral (source or destination) should be assigned to the same handshaking interface.

NOTE2: This field does not exist if the configuration parameter DMAC_NUM_HS_INT is set to 0.

6:4

RSVD

R

-

Reserved

3

CFG2_H_PROTCTL

R/W

0x1

Protection Control.Set the bit 35 to 0 will enable the channel secure DMA transfer.

Set the bit 35 to 1 will enable the channel non-secure DMAC transfer.

Note

if user not define DMAC_SECURE_MODE, it only can be readed.

2:1

RSVD

R

-

Reserved

0

CFG2_H_FCMODE

R/W

0x0

Flow Control Mode. Determines when source transaction requests are serviced when the Destination Peripheral is the flow controller.

0 = Source transaction requests are servied when they occur. Data pre-fetching is enabled.

1 = Source transaction requests are not serviced until a destination transaction request occurs. Data pre-fetching is disabled.

Note

Please keep this bit 0 when Transfer Type and Flow Control is not ”destination peripheral is the flow controller and transfer type is peripheral to peripheral” (TT_FC!=7).

REG_SAR3

  • Name: Channel 3 Source Address Register

  • Size: 32

  • Address offset: 108h

  • Read/write access: R/W

Source address register for DMA channel x, specifies the source memory address

31:0 SAR3

Bit

Symbol

Access

INI

Description

31:0

SAR3

R/W

Unknown

Source Address of DMA transfer.Updated after each source transfer. The SINC field in the CTLx register determines whether the address increments, or is left unchanged on every source transfer throughout the block transfer.

REG_CURR_SAR3

  • Name: The read back value is channel 3 source reading address at present

  • Size: 32

  • Address offset: 10Ch

  • Read/write access: R

Current source address register for DMA channel x, indicates the current source address during

transfer

31:0 CURR_SAR3

Bit

Symbol

Access

INI

Description

31:0

CURR_SAR3

R

0x0

The read back value is source reading address at present

REG_DAR3

  • Name: Channel 3 Destination Address Register

  • Size: 32

  • Address offset: 110h

  • Read/write access: R/W

Destination address register for DMA channel x, specifies the destination memory address

31:0 DAR3

Bit

Symbol

Access

INI

Description

31:0

DAR3

R/W

Unknown

Destination address of DMA transfer.Updated after each destination transfer. The DINC field in the CTLx register determines whether the address increments, or is left unchanged on every destination transfer throughout the block transfer.

REG_CURR_DAR3

  • Name: The read back value is channel 3 destination writing address at present

  • Size: 32

  • Address offset: 114h

  • Read/write access: R

Current destination address register for DMA channel x, indicates the current destination address

during transfer

31:0 CURR_DAR3

Bit

Symbol

Access

INI

Description

31:0

CURR_DAR3

R

0x0

The read back value is destination writing address at present

REG_LLP3_L

  • Name: Channel 3 low-32 bits Linked List Pointer Register

  • Size: 32

  • Address offset: 118h

  • Read/write access: R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list

item

31:2 LLP3_L_LOC 1:0 RSVD

Bit

Symbol

Access

INI

Description

31:2

LLP3_L_LOC

R/W

Unknown

Starting Address In Memory of next LLI if block chaining is enabled. Note that the two LSBs of the starting address are not stored because the address is assumed to be aligned to a 32-bit boundary.LLI accesses are always 32-bit accesses aligned to 32-bit boundaries and cannot be changed or programmed to anything other than 32-bit.

1:0

RSVD

R

-

Reserved

REG_CTL3_L

  • Name: Channel 3 low-32 bits Control Register

  • Size: 32

  • Address offset: 120h

  • Read/write access: R/W

Control register low for DMA channel x, configures channel control settings

31:29 RSVD 28 CTL3_L_LLP_SRC_EN 27 CTL3_L_LLP_DST_EN 26:23 RSVD 22:20 CTL3_L_TT_FC 19 RSVD 18 CTL3_L_DST_SCATTER_EN 17 CTL3_L_SRC_GATHER_EN 16:14 CTL3_L_SRC_MSIZE 13:11 CTL3_L_DEST_MSIZE 10:9 CTL3_L_SINC 8:7 CTL3_L_DINC 6:4 CTL3_L_SRC_TR_WIDTH 3:1 CTL3_L_DST_TR_WIDTH 0 CTL3_L_INT_EN

Bit

Symbol

Access

INI

Description

31:29

RSVD

R

-

Reserved

28

CTL3_L_LLP_SRC_EN

R/W

0x0

Block chanining is enabled on the source side only if the LLP_SRC_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

27

CTL3_L_LLP_DST_EN

R/W

0x0

Block chanining is enabled on the destination side only if the LLP_DST_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

26:23

RSVD

R

-

Reserved

22:20

CTL3_L_TT_FC

R/W

0x0

Transfer Type and Flow Control.The following transfer types are supported.

  • Memory to Memory

  • Memory to Peripheral

  • Peripheral to Memory

  • Peripheral to Peripheral

Flow Control can be assigned to the RTK_DMAC, the source peripheral, or the destination peripheral. Table 6-4 lists the decoding for this field. For more information on transfer types and flow control, refer to “Setup/Operation of RTK_DMAC Transfers”.

Reset Value: 3’h0

Dependencies: If hardware handshake isn’t support, then TT_FC can only be set to 3’b0. TT_FC[2] can only be read.

19

RSVD

R

-

Reserved

18

CTL3_L_DST_SCATTER_EN

R/W

0x0

Destination scatter enable bit:0 = Scatter disabled1 = Scatter enabledScatter on the destination side is applicable only when the CTLx_L.DINC bit indicates an incrementing address control and DARx should be aligned with DST_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_DST_SCA_EN is not selected.

17

CTL3_L_SRC_GATHER_EN

R/W

0x0

Source gather enable bit:

0 = Gather disabled

1 = Gather enabled

Gather on the source side is applicable only when the CTLx_L.SINC bit indicates an incrementing address control and SARx should be aligned with SRC_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_SRC_GAT_EN is not selected.

16:14

CTL3_L_SRC_MSIZE

R/W

0x1

Source Burst Transaction Length.

Number of data items, each of width CTLx_L.SRC_TR_WIDTH if source is not memory, otherwise each of width DMAC_TR_WIDTH_DEFAULT, to be read from the source every time a source burst transaction request is made from either the corresponding hardware or software handshaking interface.

Read burst transaction length on bus (ARLen) will not exceed this value, but may be less than this value. If SINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-0 lists the decoding for this field.

13:11

CTL3_L_DEST_MSIZE

R/W

0x1

Destination Burst Transaction Length.

Number of data items, each of width DATA_WIDTH, to be written to the destination every time a destination burst transaction request is made from either the corresponding hardware or software handshaking interface.

Write burst transaction length on bus (AWLen) will not exceed this value, but may be less than this value. If DINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-1 lists the decoding for this field.

10:9

CTL3_L_SINC

R/W

0x0

Source Address Increment. Indicates whether to increment the source address on every source transfer. If the device is fetching data from a source peripheral FIFO with a fixed address, then set this field to “No change.”If source is memory appointed by CTLx_L.TT_FC, and set SINC=No change, then SRC_TR_WIDTH must be set to BUS width. And DMAC will read data from the fixed memory address until block transfer finish, but It is not recommended to read memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01 =Not support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.SRC_TR_WIDTH boundary.

8:7

CTL3_L_DINC

R/W

0x0

Destination Address Increment. Indicates whether to increment destination address on every destination transfer. If your device is writing data to a destination peripheral FIFO with a fixed address, then set this field to “No change.”If destination is memory appointed by CTLx_L.TT_FC, and set DINC=No change, then DST_TR_WIDTH must be set to BUS width. And DMAC will write data to the fixed memory address until block transfer finish, but It is not recommended to write memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01=Not Support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.DST_TR_WIDTH boundary.

6:4

CTL3_L_SRC_TR_WIDTH

R/W

0x0

Source Transfer Width.

Table 6-3 lists the decoding for this field.It can’t be mapped to AXI bus data width directly. Since AXI bus data width is fixed (such as 32bit/64bit), AXI use byte enable signal for byte/half word transfer (still burst). So, the SRC_TR_WIDTH is only used for total block data size calculation and streaming mode byte/half word transfer (for FIFO transfer).

Note

SRC_TR_WIDTH must not be bigger than BUS width.

3:1

CTL3_L_DST_TR_WIDTH

R/W

0x0

Destination Transfer Width.Table 6-3 lists the decoding for this field. It can’t be mapped to AXI bus data width directly. For a non-memory peripheral, typically the peripheral (destination) FIFO width.Note: DST_TR_WIDTH must not be bigger than BUS width

0

CTL3_L_INT_EN

R/W

0x1

Interrupt Enable Bit. If set, then all interrupt-generating sources are enabled. Functions as a global mask bit for all interrupts for the channel; raw* interrupt registers still assert if CTLx_L.INT_EN = 0.

REG_CTL3_H

  • Name: Channel 3 high-32 bits Control Register

  • Size: 32

  • Address offset: 124h

  • Read/write access: R

Control register high for DMA channel x for block size

31:0 CTL3_H_TRANS_DATA_CNT

Bit

Symbol

Access

INI

Description

31:0

CTL3_H_TRANS_DATA_CNT

R

0x0

Data Transfered Count.Once the transfer starts, the read-back value is the total number of data bytes already write to destination memory or peripheral.

REG_CFG3_L

  • Name: Channel 3 low-32 bits Configuration Register

  • Size: 32

  • Address offset: 148h

  • Read/write access: R/W

Configuration register low for DMA channel x, configures transfer parameters

31 CFG3_L_RELOAD_DST 30 CFG3_L_RELOAD_SRC 29:20 RSVD 19 CFG3_L_SRC_HS_POL 18 CFG3_L_DST_HS_POL 17:12 RSVD 11 CFG3_L_HS_SEL_SRC 10 CFG3_L_HS_SEL_DST 9 CFG3_L_FIFO_EMPTY 8 CFG3_L_CH_SUSP 7:4 CFG3_L_CH_PRIOR 3 RSVD 2 CFG3_L_DST_PCTL_OVER 1 CFG3_L_SRC_PCTL_OVER 0 CFG3_L_INACTIVE

Bit

Symbol

Access

INI

Description

31

CFG3_L_RELOAD_DST

R/W

0x0

Automatic Destination Reload. The DARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.This register does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

30

CFG3_L_RELOAD_SRC

R/W

0x0

Automatic Source Reload. The SARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.

This field does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

29:20

RSVD

R

-

Reserved

19

CFG3_L_SRC_HS_POL

R/W

0x0

Source Handshaking Interface Polarity.

0 = Active high

1 = Active low

18

CFG3_L_DST_HS_POL

R/W

0x0

Destination Handshaking Interface Polarity.

0 = Active high

1 = Active low

For information on this, refer to “Handshaking Interface” .

17:12

RSVD

R

-

Reserved

11

CFG3_L_HS_SEL_SRC

R/W

0x1

Source Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for source requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware-initiated transaction requests are ignored. If the source peripheral is memory, then this bit is ignored.

10

CFG3_L_HS_SEL_DST

R/W

0x1

Destination Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for destination requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware- initiated transaction requests are ignored. If the destination peripheral is memory, then this bit is ignored.

9

CFG3_L_FIFO_EMPTY

R

0x1

Indicates if there is data left in the channel FIFO.

1 = Channel FIFO empty

0 = Channel FIFO not empty

8

CFG3_L_CH_SUSP

R/W

0x0

Channel Suspend. Suspends all DMA data transfers from the source until this bit is cleared. There is no guarantee that the current transaction will complete. Can also be used in conjunction with CFGx_l.INACTIVE to cleanly disable a channel without losing any data.

0 = Not suspended

1 = Suspend DMA transfer from the source.

This field will be reset to 0 after “Disabling a Channel Prior to Transfer Completion” automatically by hardware.For more information, refer to “7.7 Disabling a Channel Prior to Transfer Completion” .

Note

if user not define DMAC_CH*_SUPPORT_SUSPEND, it only can be readed.

7:4

CFG3_L_CH_PRIOR

R/W

0x0

Channel priority.

RTK DMAC supports three kinds of channel priority now, fixed priority, round robin priority and programmable priority. The default way is fixed priority to reduce area, and channel0 has the highest priority, channel15 has the lowest priority. Changing the definition of parameter FIX_PRIORITY or Programmable_PRIORITY can change priority way.

If RTK DMAC is configured to support Programmable priority, this field will be used to set priority between channels. CH_PRIOR’s legal value is 0 ~ (DMAC_NUM_CHANNELS-1), and 0 is the highest priority value, (DMAC_NUM_CHANNELS-1) is the lowest priroty value. If more than one channel are set with the same priroty value, the channel with small channel number index has higher priority.

If DMAC is configured to support fix priority or round-robin priority, this field is not exist.

Note

if user not define ProgrammablePriority, it only can be readed.

3

RSVD

R

-

Reserved

2

CFG3_L_DST_PCTL_OVER

R

0x1

DMA destination bus protocol finish, indicating the current write command has finished.

1

CFG3_L_SRC_PCTL_OVER

R

0x1

DMA Source bus protocol finish, indicating the current read command has finished.

0

CFG3_L_INACTIVE

R

0x1

Indicates if the channel is inactive. Can be used in conjunction with CFGx_L.CH_SUSP to cleanly disable a channel when destination is peripheral. For more information, refer to “Disabling a Channel Prior to Transfer Completion” .

1 = Channel Inactive for axi interface

0 = Channel not Inactive for axi interface

REG_CFG3_H

  • Name: Channel 3 high-32 bits Configuration Register

  • Size: 32

  • Address offset: 14Ch

  • Read/write access: R/W

Configuration register high for DMA channel x, configures additional transfer parameters

31:17 RSVD 16 CFG3_H_EXTENDED_DEST_PER1 15 CFG3_H_EXTENDED_SRC_PER1 14:11 CFG3_H_DEST_PER 10:7 CFG3_H_SRC_PER 6:4 RSVD 3 CFG3_H_PROTCTL 2:1 RSVD 0 CFG3_H_FCMODE

Bit

Symbol

Access

INI

Description

31:17

RSVD

R

-

Reserved

16

CFG3_H_EXTENDED_DEST_PER1

R/W

0x0

The extened 4th bit of DEST_PER when hardware handshake interfaces number is configured to 32.

15

CFG3_H_EXTENDED_SRC_PER1

R/W

0x0

The extened 4th bit of SRC_PER when hardware handshake interfaces number is configured to 32.

14:11

CFG3_H_DEST_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the destination of channel x if the FGx.HS_SEL_DST field is 0; otherwise, this field is ignored. The channel can then communicate with the destinationperipheral connected to that interface through the assignedhardware handshaking interface.

NOTE1: For correct DMA operation, only one peripheral (sourceor destination) should be assigned to the same handshaking interface

NOTE2: This field does not exist if the configuration parameterDMAC_NUM_HS_INT is set to 0.

10:7

CFG3_H_SRC_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the source of channel x if the CFGx.HS_SEL_SRC field is 0; otherwise, this field is ignored. The channel can then communicate with the source peripheral connected to that interface through the assigned hardware handshaking interface.

NOTE1: For correct RTK_DMAC operation, only one peripheral (source or destination) should be assigned to the same handshaking interface.

NOTE2: This field does not exist if the configuration parameter DMAC_NUM_HS_INT is set to 0.

6:4

RSVD

R

-

Reserved

3

CFG3_H_PROTCTL

R/W

0x1

Protection Control.Set the bit 35 to 0 will enable the channel secure DMA transfer.

Set the bit 35 to 1 will enable the channel non-secure DMAC transfer.

Note

if user not define DMAC_SECURE_MODE, it only can be readed.

2:1

RSVD

R

-

Reserved

0

CFG3_H_FCMODE

R/W

0x0

Flow Control Mode. Determines when source transaction requests are serviced when the Destination Peripheral is the flow controller.

0 = Source transaction requests are servied when they occur. Data pre-fetching is enabled.

1 = Source transaction requests are not serviced until a destination transaction request occurs. Data pre-fetching is disabled.

Note

Please keep this bit 0 when Transfer Type and Flow Control is not ”destination peripheral is the flow controller and transfer type is peripheral to peripheral” (TT_FC!=7).

REG_SAR4

  • Name: Channel 4 Source Address Register

  • Size: 32

  • Address offset: 160h

  • Read/write access: R/W

Source address register for DMA channel x, specifies the source memory address

31:0 SAR4

Bit

Symbol

Access

INI

Description

31:0

SAR4

R/W

Unknown

Source Address of DMA transfer.Updated after each source transfer. The SINC field in the CTLx register determines whether the address increments, or is left unchanged on every source transfer throughout the block transfer.

REG_CURR_SAR4

  • Name: The read back value is channel 4 source reading address at present

  • Size: 32

  • Address offset: 164h

  • Read/write access: R

Current source address register for DMA channel x, indicates the current source address during

transfer

31:0 CURR_SAR4

Bit

Symbol

Access

INI

Description

31:0

CURR_SAR4

R

0x0

The read back value is source reading address at present

REG_DAR4

  • Name: Channel 4 Destination Address Register

  • Size: 32

  • Address offset: 168h

  • Read/write access: R/W

Destination address register for DMA channel x, specifies the destination memory address

31:0 DAR4

Bit

Symbol

Access

INI

Description

31:0

DAR4

R/W

Unknown

Destination address of DMA transfer.Updated after each destination transfer. The DINC field in the CTLx register determines whether the address increments, or is left unchanged on every destination transfer throughout the block transfer.

REG_CURR_DAR4

  • Name: The read back value is channel 4 destination writing address at present

  • Size: 32

  • Address offset: 16Ch

  • Read/write access: R

Current destination address register for DMA channel x, indicates the current destination address

during transfer

31:0 CURR_DAR4

Bit

Symbol

Access

INI

Description

31:0

CURR_DAR4

R

0x0

The read back value is destination writing address at present

REG_LLP4_L

  • Name: Channel 4 low-32 bits Linked List Pointer Register

  • Size: 32

  • Address offset: 170h

  • Read/write access: R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list

item

31:2 LLP4_L_LOC 1:0 RSVD

Bit

Symbol

Access

INI

Description

31:2

LLP4_L_LOC

R/W

Unknown

Starting Address In Memory of next LLI if block chaining is enabled. Note that the two LSBs of the starting address are not stored because the address is assumed to be aligned to a 32-bit boundary.LLI accesses are always 32-bit accesses aligned to 32-bit boundaries and cannot be changed or programmed to anything other than 32-bit.

1:0

RSVD

R

-

Reserved

REG_CTL4_L

  • Name: Channel 4 low-32 bits Control Register

  • Size: 32

  • Address offset: 178h

  • Read/write access: R/W

Control register low for DMA channel x, configures channel control settings

31:29 RSVD 28 CTL4_L_LLP_SRC_EN 27 CTL4_L_LLP_DST_EN 26:23 RSVD 22:20 CTL4_L_TT_FC 19 RSVD 18 CTL4_L_DST_SCATTER_EN 17 CTL4_L_SRC_GATHER_EN 16:14 CTL4_L_SRC_MSIZE 13:11 CTL4_L_DEST_MSIZE 10:9 CTL4_L_SINC 8:7 CTL4_L_DINC 6:4 CTL4_L_SRC_TR_WIDTH 3:1 CTL4_L_DST_TR_WIDTH 0 CTL4_L_INT_EN

Bit

Symbol

Access

INI

Description

31:29

RSVD

R

-

Reserved

28

CTL4_L_LLP_SRC_EN

R/W

0x0

Block chanining is enabled on the source side only if the LLP_SRC_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

27

CTL4_L_LLP_DST_EN

R/W

0x0

Block chanining is enabled on the destination side only if the LLP_DST_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

26:23

RSVD

R

-

Reserved

22:20

CTL4_L_TT_FC

R/W

0x0

Transfer Type and Flow Control.The following transfer types are supported.

  • Memory to Memory

  • Memory to Peripheral

  • Peripheral to Memory

  • Peripheral to Peripheral

Flow Control can be assigned to the RTK_DMAC, the source peripheral, or the destination peripheral. Table 6-4 lists the decoding for this field. For more information on transfer types and flow control, refer to “Setup/Operation of RTK_DMAC Transfers”.

Reset Value: 3’h0

Dependencies: If hardware handshake isn’t support, then TT_FC can only be set to 3’b0. TT_FC[2] can only be read.

19

RSVD

R

-

Reserved

18

CTL4_L_DST_SCATTER_EN

R/W

0x0

Destination scatter enable bit:0 = Scatter disabled1 = Scatter enabledScatter on the destination side is applicable only when the CTLx_L.DINC bit indicates an incrementing address control and DARx should be aligned with DST_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_DST_SCA_EN is not selected.

17

CTL4_L_SRC_GATHER_EN

R/W

0x0

Source gather enable bit:

0 = Gather disabled

1 = Gather enabled

Gather on the source side is applicable only when the CTLx_L.SINC bit indicates an incrementing address control and SARx should be aligned with SRC_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_SRC_GAT_EN is not selected.

16:14

CTL4_L_SRC_MSIZE

R/W

0x1

Source Burst Transaction Length.

Number of data items, each of width CTLx_L.SRC_TR_WIDTH if source is not memory, otherwise each of width DMAC_TR_WIDTH_DEFAULT, to be read from the source every time a source burst transaction request is made from either the corresponding hardware or software handshaking interface.

Read burst transaction length on bus (ARLen) will not exceed this value, but may be less than this value. If SINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-0 lists the decoding for this field.

13:11

CTL4_L_DEST_MSIZE

R/W

0x1

Destination Burst Transaction Length.

Number of data items, each of width DATA_WIDTH, to be written to the destination every time a destination burst transaction request is made from either the corresponding hardware or software handshaking interface.

Write burst transaction length on bus (AWLen) will not exceed this value, but may be less than this value. If DINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-1 lists the decoding for this field.

10:9

CTL4_L_SINC

R/W

0x0

Source Address Increment. Indicates whether to increment the source address on every source transfer. If the device is fetching data from a source peripheral FIFO with a fixed address, then set this field to “No change.”If source is memory appointed by CTLx_L.TT_FC, and set SINC=No change, then SRC_TR_WIDTH must be set to BUS width. And DMAC will read data from the fixed memory address until block transfer finish, but It is not recommended to read memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01 =Not support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.SRC_TR_WIDTH boundary.

8:7

CTL4_L_DINC

R/W

0x0

Destination Address Increment. Indicates whether to increment destination address on every destination transfer. If your device is writing data to a destination peripheral FIFO with a fixed address, then set this field to “No change.”If destination is memory appointed by CTLx_L.TT_FC, and set DINC=No change, then DST_TR_WIDTH must be set to BUS width. And DMAC will write data to the fixed memory address until block transfer finish, but It is not recommended to write memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01=Not Support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.DST_TR_WIDTH boundary.

6:4

CTL4_L_SRC_TR_WIDTH

R/W

0x0

Source Transfer Width.

Table 6-3 lists the decoding for this field.It can’t be mapped to AXI bus data width directly. Since AXI bus data width is fixed (such as 32bit/64bit), AXI use byte enable signal for byte/half word transfer (still burst). So, the SRC_TR_WIDTH is only used for total block data size calculation and streaming mode byte/half word transfer (for FIFO transfer).

Note

SRC_TR_WIDTH must not be bigger than BUS width.

3:1

CTL4_L_DST_TR_WIDTH

R/W

0x0

Destination Transfer Width.Table 6-3 lists the decoding for this field. It can’t be mapped to AXI bus data width directly. For a non-memory peripheral, typically the peripheral (destination) FIFO width.Note: DST_TR_WIDTH must not be bigger than BUS width

0

CTL4_L_INT_EN

R/W

0x1

Interrupt Enable Bit. If set, then all interrupt-generating sources are enabled. Functions as a global mask bit for all interrupts for the channel; raw* interrupt registers still assert if CTLx_L.INT_EN = 0.

REG_CTL4_H

  • Name: Channel 4 high-32 bits Control Register

  • Size: 32

  • Address offset: 17Ch

  • Read/write access: R

Control register high for DMA channel x for block size

31:0 CTL4_H_TRANS_DATA_CNT

Bit

Symbol

Access

INI

Description

31:0

CTL4_H_TRANS_DATA_CNT

R

0x0

Data Transfered Count.Once the transfer starts, the read-back value is the total number of data bytes already write to destination memory or peripheral.

REG_CFG4_L

  • Name: Channel 4 low-32 bits Configuration Register

  • Size: 32

  • Address offset: 1A0h

  • Read/write access: R/W

Configuration register low for DMA channel x, configures transfer parameters

31 CFG4_L_RELOAD_DST 30 CFG4_L_RELOAD_SRC 29:20 RSVD 19 CFG4_L_SRC_HS_POL 18 CFG4_L_DST_HS_POL 17:12 RSVD 11 CFG4_L_HS_SEL_SRC 10 CFG4_L_HS_SEL_DST 9 CFG4_L_FIFO_EMPTY 8 CFG4_L_CH_SUSP 7:4 CFG4_L_CH_PRIOR 3 RSVD 2 CFG4_L_DST_PCTL_OVER 1 CFG4_L_SRC_PCTL_OVER 0 CFG4_L_INACTIVE

Bit

Symbol

Access

INI

Description

31

CFG4_L_RELOAD_DST

R/W

0x0

Automatic Destination Reload. The DARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.This register does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

30

CFG4_L_RELOAD_SRC

R/W

0x0

Automatic Source Reload. The SARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.

This field does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

29:20

RSVD

R

-

Reserved

19

CFG4_L_SRC_HS_POL

R/W

0x0

Source Handshaking Interface Polarity.

0 = Active high

1 = Active low

18

CFG4_L_DST_HS_POL

R/W

0x0

Destination Handshaking Interface Polarity.

0 = Active high

1 = Active low

For information on this, refer to “Handshaking Interface” .

17:12

RSVD

R

-

Reserved

11

CFG4_L_HS_SEL_SRC

R/W

0x1

Source Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for source requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware-initiated transaction requests are ignored. If the source peripheral is memory, then this bit is ignored.

10

CFG4_L_HS_SEL_DST

R/W

0x1

Destination Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for destination requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware- initiated transaction requests are ignored. If the destination peripheral is memory, then this bit is ignored.

9

CFG4_L_FIFO_EMPTY

R

0x1

Indicates if there is data left in the channel FIFO.

1 = Channel FIFO empty

0 = Channel FIFO not empty

8

CFG4_L_CH_SUSP

R/W

0x0

Channel Suspend. Suspends all DMA data transfers from the source until this bit is cleared. There is no guarantee that the current transaction will complete. Can also be used in conjunction with CFGx_l.INACTIVE to cleanly disable a channel without losing any data.

0 = Not suspended

1 = Suspend DMA transfer from the source.

This field will be reset to 0 after “Disabling a Channel Prior to Transfer Completion” automatically by hardware.For more information, refer to “7.7 Disabling a Channel Prior to Transfer Completion” .

Note

if user not define DMAC_CH*_SUPPORT_SUSPEND, it only can be readed.

7:4

CFG4_L_CH_PRIOR

R/W

0x0

Channel priority.

RTK DMAC supports three kinds of channel priority now, fixed priority, round robin priority and programmable priority. The default way is fixed priority to reduce area, and channel0 has the highest priority, channel15 has the lowest priority. Changing the definition of parameter FIX_PRIORITY or Programmable_PRIORITY can change priority way.

If RTK DMAC is configured to support Programmable priority, this field will be used to set priority between channels. CH_PRIOR’s legal value is 0 ~ (DMAC_NUM_CHANNELS-1), and 0 is the highest priority value, (DMAC_NUM_CHANNELS-1) is the lowest priroty value. If more than one channel are set with the same priroty value, the channel with small channel number index has higher priority.

If DMAC is configured to support fix priority or round-robin priority, this field is not exist.

Note

if user not define ProgrammablePriority, it only can be readed.

3

RSVD

R

-

Reserved

2

CFG4_L_DST_PCTL_OVER

R

0x1

DMA destination bus protocol finish, indicating the current write command has finished.

1

CFG4_L_SRC_PCTL_OVER

R

0x1

DMA Source bus protocol finish, indicating the current read command has finished.

0

CFG4_L_INACTIVE

R

0x1

Indicates if the channel is inactive. Can be used in conjunction with CFGx_L.CH_SUSP to cleanly disable a channel when destination is peripheral. For more information, refer to “Disabling a Channel Prior to Transfer Completion” .

1 = Channel Inactive for axi interface

0 = Channel not Inactive for axi interface

REG_CFG4_H

  • Name: Channel 4 high-32 bits Configuration Register

  • Size: 32

  • Address offset: 1A4h

  • Read/write access: R/W

Configuration register high for DMA channel x, configures additional transfer parameters

31:17 RSVD 16 CFG4_H_EXTENDED_DEST_PER1 15 CFG4_H_EXTENDED_SRC_PER1 14:11 CFG4_H_DEST_PER 10:7 CFG4_H_SRC_PER 6:4 RSVD 3 CFG4_H_PROTCTL 2:1 RSVD 0 CFG4_H_FCMODE

Bit

Symbol

Access

INI

Description

31:17

RSVD

R

-

Reserved

16

CFG4_H_EXTENDED_DEST_PER1

R/W

0x0

The extened 4th bit of DEST_PER when hardware handshake interfaces number is configured to 32.

15

CFG4_H_EXTENDED_SRC_PER1

R/W

0x0

The extened 4th bit of SRC_PER when hardware handshake interfaces number is configured to 32.

14:11

CFG4_H_DEST_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the destination of channel x if the FGx.HS_SEL_DST field is 0; otherwise, this field is ignored. The channel can then communicate with the destinationperipheral connected to that interface through the assignedhardware handshaking interface.

NOTE1: For correct DMA operation, only one peripheral (sourceor destination) should be assigned to the same handshaking interface

NOTE2: This field does not exist if the configuration parameterDMAC_NUM_HS_INT is set to 0.

10:7

CFG4_H_SRC_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the source of channel x if the CFGx.HS_SEL_SRC field is 0; otherwise, this field is ignored. The channel can then communicate with the source peripheral connected to that interface through the assigned hardware handshaking interface.

NOTE1: For correct RTK_DMAC operation, only one peripheral (source or destination) should be assigned to the same handshaking interface.

NOTE2: This field does not exist if the configuration parameter DMAC_NUM_HS_INT is set to 0.

6:4

RSVD

R

-

Reserved

3

CFG4_H_PROTCTL

R/W

0x1

Protection Control.Set the bit 35 to 0 will enable the channel secure DMA transfer.

Set the bit 35 to 1 will enable the channel non-secure DMAC transfer.

Note

if user not define DMAC_SECURE_MODE, it only can be readed.

2:1

RSVD

R

-

Reserved

0

CFG4_H_FCMODE

R/W

0x0

Flow Control Mode. Determines when source transaction requests are serviced when the Destination Peripheral is the flow controller.

0 = Source transaction requests are servied when they occur. Data pre-fetching is enabled.

1 = Source transaction requests are not serviced until a destination transaction request occurs. Data pre-fetching is disabled.

Note

Please keep this bit 0 when Transfer Type and Flow Control is not ”destination peripheral is the flow controller and transfer type is peripheral to peripheral” (TT_FC!=7).

REG_SAR5

  • Name: Channel 5 Source Address Register

  • Size: 32

  • Address offset: 1B8h

  • Read/write access: R/W

Source address register for DMA channel x, specifies the source memory address

31:0 SAR5

Bit

Symbol

Access

INI

Description

31:0

SAR5

R/W

Unknown

Source Address of DMA transfer.Updated after each source transfer. The SINC field in the CTLx register determines whether the address increments, or is left unchanged on every source transfer throughout the block transfer.

REG_CURR_SAR5

  • Name: The read back value is channel 5 source reading address at present

  • Size: 32

  • Address offset: 1BCh

  • Read/write access: R

Current source address register for DMA channel x, indicates the current source address during

transfer

31:0 CURR_SAR5

Bit

Symbol

Access

INI

Description

31:0

CURR_SAR5

R

0x0

The read back value is source reading address at present

REG_DAR5

  • Name: Channel 5 Destination Address Register

  • Size: 32

  • Address offset: 1C0h

  • Read/write access: R/W

Destination address register for DMA channel x, specifies the destination memory address

31:0 DAR5

Bit

Symbol

Access

INI

Description

31:0

DAR5

R/W

Unknown

Destination address of DMA transfer.Updated after each destination transfer. The DINC field in the CTLx register determines whether the address increments, or is left unchanged on every destination transfer throughout the block transfer.

REG_CURR_DAR5

  • Name: The read back value is channel 5 destination writing address at present

  • Size: 32

  • Address offset: 1C4h

  • Read/write access: R

Current destination address register for DMA channel x, indicates the current destination address

during transfer

31:0 CURR_DAR5

Bit

Symbol

Access

INI

Description

31:0

CURR_DAR5

R

0x0

The read back value is destination writing address at present

REG_LLP5_L

  • Name: Channel 5 low-32 bits Linked List Pointer Register

  • Size: 32

  • Address offset: 1C8h

  • Read/write access: R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list

item

31:2 LLP5_L_LOC 1:0 RSVD

Bit

Symbol

Access

INI

Description

31:2

LLP5_L_LOC

R/W

Unknown

Starting Address In Memory of next LLI if block chaining is enabled. Note that the two LSBs of the starting address are not stored because the address is assumed to be aligned to a 32-bit boundary.LLI accesses are always 32-bit accesses aligned to 32-bit boundaries and cannot be changed or programmed to anything other than 32-bit.

1:0

RSVD

R

-

Reserved

REG_CTL5_L

  • Name: Channel 5 low-32 bits Control Register

  • Size: 32

  • Address offset: 1D0h

  • Read/write access: R/W

Control register low for DMA channel x, configures channel control settings

31:29 RSVD 28 CTL5_L_LLP_SRC_EN 27 CTL5_L_LLP_DST_EN 26:23 RSVD 22:20 CTL5_L_TT_FC 19 RSVD 18 CTL5_L_DST_SCATTER_EN 17 CTL5_L_SRC_GATHER_EN 16:14 CTL5_L_SRC_MSIZE 13:11 CTL5_L_DEST_MSIZE 10:9 CTL5_L_SINC 8:7 CTL5_L_DINC 6:4 CTL5_L_SRC_TR_WIDTH 3:1 CTL5_L_DST_TR_WIDTH 0 CTL5_L_INT_EN

Bit

Symbol

Access

INI

Description

31:29

RSVD

R

-

Reserved

28

CTL5_L_LLP_SRC_EN

R/W

0x0

Block chanining is enabled on the source side only if the LLP_SRC_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

27

CTL5_L_LLP_DST_EN

R/W

0x0

Block chanining is enabled on the destination side only if the LLP_DST_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

26:23

RSVD

R

-

Reserved

22:20

CTL5_L_TT_FC

R/W

0x0

Transfer Type and Flow Control.The following transfer types are supported.

  • Memory to Memory

  • Memory to Peripheral

  • Peripheral to Memory

  • Peripheral to Peripheral

Flow Control can be assigned to the RTK_DMAC, the source peripheral, or the destination peripheral. Table 6-4 lists the decoding for this field. For more information on transfer types and flow control, refer to “Setup/Operation of RTK_DMAC Transfers”.

Reset Value: 3’h0

Dependencies: If hardware handshake isn’t support, then TT_FC can only be set to 3’b0. TT_FC[2] can only be read.

19

RSVD

R

-

Reserved

18

CTL5_L_DST_SCATTER_EN

R/W

0x0

Destination scatter enable bit:0 = Scatter disabled1 = Scatter enabledScatter on the destination side is applicable only when the CTLx_L.DINC bit indicates an incrementing address control and DARx should be aligned with DST_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_DST_SCA_EN is not selected.

17

CTL5_L_SRC_GATHER_EN

R/W

0x0

Source gather enable bit:

0 = Gather disabled

1 = Gather enabled

Gather on the source side is applicable only when the CTLx_L.SINC bit indicates an incrementing address control and SARx should be aligned with SRC_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_SRC_GAT_EN is not selected.

16:14

CTL5_L_SRC_MSIZE

R/W

0x1

Source Burst Transaction Length.

Number of data items, each of width CTLx_L.SRC_TR_WIDTH if source is not memory, otherwise each of width DMAC_TR_WIDTH_DEFAULT, to be read from the source every time a source burst transaction request is made from either the corresponding hardware or software handshaking interface.

Read burst transaction length on bus (ARLen) will not exceed this value, but may be less than this value. If SINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-0 lists the decoding for this field.

13:11

CTL5_L_DEST_MSIZE

R/W

0x1

Destination Burst Transaction Length.

Number of data items, each of width DATA_WIDTH, to be written to the destination every time a destination burst transaction request is made from either the corresponding hardware or software handshaking interface.

Write burst transaction length on bus (AWLen) will not exceed this value, but may be less than this value. If DINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-1 lists the decoding for this field.

10:9

CTL5_L_SINC

R/W

0x0

Source Address Increment. Indicates whether to increment the source address on every source transfer. If the device is fetching data from a source peripheral FIFO with a fixed address, then set this field to “No change.”If source is memory appointed by CTLx_L.TT_FC, and set SINC=No change, then SRC_TR_WIDTH must be set to BUS width. And DMAC will read data from the fixed memory address until block transfer finish, but It is not recommended to read memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01 =Not support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.SRC_TR_WIDTH boundary.

8:7

CTL5_L_DINC

R/W

0x0

Destination Address Increment. Indicates whether to increment destination address on every destination transfer. If your device is writing data to a destination peripheral FIFO with a fixed address, then set this field to “No change.”If destination is memory appointed by CTLx_L.TT_FC, and set DINC=No change, then DST_TR_WIDTH must be set to BUS width. And DMAC will write data to the fixed memory address until block transfer finish, but It is not recommended to write memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01=Not Support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.DST_TR_WIDTH boundary.

6:4

CTL5_L_SRC_TR_WIDTH

R/W

0x0

Source Transfer Width.

Table 6-3 lists the decoding for this field.It can’t be mapped to AXI bus data width directly. Since AXI bus data width is fixed (such as 32bit/64bit), AXI use byte enable signal for byte/half word transfer (still burst). So, the SRC_TR_WIDTH is only used for total block data size calculation and streaming mode byte/half word transfer (for FIFO transfer).

Note

SRC_TR_WIDTH must not be bigger than BUS width.

3:1

CTL5_L_DST_TR_WIDTH

R/W

0x0

Destination Transfer Width.Table 6-3 lists the decoding for this field. It can’t be mapped to AXI bus data width directly. For a non-memory peripheral, typically the peripheral (destination) FIFO width.Note: DST_TR_WIDTH must not be bigger than BUS width

0

CTL5_L_INT_EN

R/W

0x1

Interrupt Enable Bit. If set, then all interrupt-generating sources are enabled. Functions as a global mask bit for all interrupts for the channel; raw* interrupt registers still assert if CTLx_L.INT_EN = 0.

REG_CTL5_H

  • Name: Channel 5 high-32 bits Control Register

  • Size: 32

  • Address offset: 1D4h

  • Read/write access: R

Control register high for DMA channel x for block size

31:0 CTL5_H_TRANS_DATA_CNT

Bit

Symbol

Access

INI

Description

31:0

CTL5_H_TRANS_DATA_CNT

R

0x0

Data Transfered Count.Once the transfer starts, the read-back value is the total number of data bytes already write to destination memory or peripheral.

REG_CFG5_L

  • Name: Channel 5 low-32 bits Configuration Register

  • Size: 32

  • Address offset: 1F8h

  • Read/write access: R/W

Configuration register low for DMA channel x, configures transfer parameters

31 CFG5_L_RELOAD_DST 30 CFG5_L_RELOAD_SRC 29:20 RSVD 19 CFG5_L_SRC_HS_POL 18 CFG5_L_DST_HS_POL 17:12 RSVD 11 CFG5_L_HS_SEL_SRC 10 CFG5_L_HS_SEL_DST 9 CFG5_L_FIFO_EMPTY 8 CFG5_L_CH_SUSP 7:4 CFG5_L_CH_PRIOR 3 RSVD 2 CFG5_L_DST_PCTL_OVER 1 CFG5_L_SRC_PCTL_OVER 0 CFG5_L_INACTIVE

Bit

Symbol

Access

INI

Description

31

CFG5_L_RELOAD_DST

R/W

0x0

Automatic Destination Reload. The DARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.This register does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

30

CFG5_L_RELOAD_SRC

R/W

0x0

Automatic Source Reload. The SARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.

This field does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

29:20

RSVD

R

-

Reserved

19

CFG5_L_SRC_HS_POL

R/W

0x0

Source Handshaking Interface Polarity.

0 = Active high

1 = Active low

18

CFG5_L_DST_HS_POL

R/W

0x0

Destination Handshaking Interface Polarity.

0 = Active high

1 = Active low

For information on this, refer to “Handshaking Interface” .

17:12

RSVD

R

-

Reserved

11

CFG5_L_HS_SEL_SRC

R/W

0x1

Source Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for source requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware-initiated transaction requests are ignored. If the source peripheral is memory, then this bit is ignored.

10

CFG5_L_HS_SEL_DST

R/W

0x1

Destination Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for destination requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware- initiated transaction requests are ignored. If the destination peripheral is memory, then this bit is ignored.

9

CFG5_L_FIFO_EMPTY

R

0x1

Indicates if there is data left in the channel FIFO.

1 = Channel FIFO empty

0 = Channel FIFO not empty

8

CFG5_L_CH_SUSP

R/W

0x0

Channel Suspend. Suspends all DMA data transfers from the source until this bit is cleared. There is no guarantee that the current transaction will complete. Can also be used in conjunction with CFGx_l.INACTIVE to cleanly disable a channel without losing any data.

0 = Not suspended

1 = Suspend DMA transfer from the source.

This field will be reset to 0 after “Disabling a Channel Prior to Transfer Completion” automatically by hardware.For more information, refer to “7.7 Disabling a Channel Prior to Transfer Completion” .

Note

if user not define DMAC_CH*_SUPPORT_SUSPEND, it only can be readed.

7:4

CFG5_L_CH_PRIOR

R/W

0x0

Channel priority.

RTK DMAC supports three kinds of channel priority now, fixed priority, round robin priority and programmable priority. The default way is fixed priority to reduce area, and channel0 has the highest priority, channel15 has the lowest priority. Changing the definition of parameter FIX_PRIORITY or Programmable_PRIORITY can change priority way.

If RTK DMAC is configured to support Programmable priority, this field will be used to set priority between channels. CH_PRIOR’s legal value is 0 ~ (DMAC_NUM_CHANNELS-1), and 0 is the highest priority value, (DMAC_NUM_CHANNELS-1) is the lowest priroty value. If more than one channel are set with the same priroty value, the channel with small channel number index has higher priority.

If DMAC is configured to support fix priority or round-robin priority, this field is not exist.

Note

if user not define ProgrammablePriority, it only can be readed.

3

RSVD

R

-

Reserved

2

CFG5_L_DST_PCTL_OVER

R

0x1

DMA destination bus protocol finish, indicating the current write command has finished.

1

CFG5_L_SRC_PCTL_OVER

R

0x1

DMA Source bus protocol finish, indicating the current read command has finished.

0

CFG5_L_INACTIVE

R

0x1

Indicates if the channel is inactive. Can be used in conjunction with CFGx_L.CH_SUSP to cleanly disable a channel when destination is peripheral. For more information, refer to “Disabling a Channel Prior to Transfer Completion” .

1 = Channel Inactive for axi interface

0 = Channel not Inactive for axi interface

REG_CFG5_H

  • Name: Channel 5 high-32 bits Configuration Register

  • Size: 32

  • Address offset: 1FCh

  • Read/write access: R/W

Configuration register high for DMA channel x, configures additional transfer parameters

31:17 RSVD 16 CFG5_H_EXTENDED_DEST_PER1 15 CFG5_H_EXTENDED_SRC_PER1 14:11 CFG5_H_DEST_PER 10:7 CFG5_H_SRC_PER 6:4 RSVD 3 CFG5_H_PROTCTL 2:1 RSVD 0 CFG5_H_FCMODE

Bit

Symbol

Access

INI

Description

31:17

RSVD

R

-

Reserved

16

CFG5_H_EXTENDED_DEST_PER1

R/W

0x0

The extened 4th bit of DEST_PER when hardware handshake interfaces number is configured to 32.

15

CFG5_H_EXTENDED_SRC_PER1

R/W

0x0

The extened 4th bit of SRC_PER when hardware handshake interfaces number is configured to 32.

14:11

CFG5_H_DEST_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the destination of channel x if the FGx.HS_SEL_DST field is 0; otherwise, this field is ignored. The channel can then communicate with the destinationperipheral connected to that interface through the assignedhardware handshaking interface.

NOTE1: For correct DMA operation, only one peripheral (sourceor destination) should be assigned to the same handshaking interface

NOTE2: This field does not exist if the configuration parameterDMAC_NUM_HS_INT is set to 0.

10:7

CFG5_H_SRC_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the source of channel x if the CFGx.HS_SEL_SRC field is 0; otherwise, this field is ignored. The channel can then communicate with the source peripheral connected to that interface through the assigned hardware handshaking interface.

NOTE1: For correct RTK_DMAC operation, only one peripheral (source or destination) should be assigned to the same handshaking interface.

NOTE2: This field does not exist if the configuration parameter DMAC_NUM_HS_INT is set to 0.

6:4

RSVD

R

-

Reserved

3

CFG5_H_PROTCTL

R/W

0x1

Protection Control.Set the bit 35 to 0 will enable the channel secure DMA transfer.

Set the bit 35 to 1 will enable the channel non-secure DMAC transfer.

Note

if user not define DMAC_SECURE_MODE, it only can be readed.

2:1

RSVD

R

-

Reserved

0

CFG5_H_FCMODE

R/W

0x0

Flow Control Mode. Determines when source transaction requests are serviced when the Destination Peripheral is the flow controller.

0 = Source transaction requests are servied when they occur. Data pre-fetching is enabled.

1 = Source transaction requests are not serviced until a destination transaction request occurs. Data pre-fetching is disabled.

Note

Please keep this bit 0 when Transfer Type and Flow Control is not ”destination peripheral is the flow controller and transfer type is peripheral to peripheral” (TT_FC!=7).

REG_SAR6

  • Name: Channel 6 Source Address Register

  • Size: 32

  • Address offset: 210h

  • Read/write access: R/W

Source address register for DMA channel x, specifies the source memory address

31:0 SAR6

Bit

Symbol

Access

INI

Description

31:0

SAR6

R/W

Unknown

Source Address of DMA transfer.Updated after each source transfer. The SINC field in the CTLx register determines whether the address increments, or is left unchanged on every source transfer throughout the block transfer.

REG_CURR_SAR6

  • Name: The read back value is channel 6 source reading address at present

  • Size: 32

  • Address offset: 214h

  • Read/write access: R

Current source address register for DMA channel x, indicates the current source address during

transfer

31:0 CURR_SAR6

Bit

Symbol

Access

INI

Description

31:0

CURR_SAR6

R

0x0

The read back value is source reading address at present

REG_DAR6

  • Name: Channel 6 Destination Address Register

  • Size: 32

  • Address offset: 218h

  • Read/write access: R/W

Destination address register for DMA channel x, specifies the destination memory address

31:0 DAR6

Bit

Symbol

Access

INI

Description

31:0

DAR6

R/W

Unknown

Destination address of DMA transfer.Updated after each destination transfer. The DINC field in the CTLx register determines whether the address increments, or is left unchanged on every destination transfer throughout the block transfer.

REG_CURR_DAR6

  • Name: The read back value is channel 6 destination writing address at present

  • Size: 32

  • Address offset: 21Ch

  • Read/write access: R

Current destination address register for DMA channel x, indicates the current destination address

during transfer

31:0 CURR_DAR6

Bit

Symbol

Access

INI

Description

31:0

CURR_DAR6

R

0x0

The read back value is destination writing address at present

REG_LLP6_L

  • Name: Channel 6 low-32 bits Linked List Pointer Register

  • Size: 32

  • Address offset: 220h

  • Read/write access: R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list

item

31:2 LLP6_L_LOC 1:0 RSVD

Bit

Symbol

Access

INI

Description

31:2

LLP6_L_LOC

R/W

Unknown

Starting Address In Memory of next LLI if block chaining is enabled. Note that the two LSBs of the starting address are not stored because the address is assumed to be aligned to a 32-bit boundary.LLI accesses are always 32-bit accesses aligned to 32-bit boundaries and cannot be changed or programmed to anything other than 32-bit.

1:0

RSVD

R

-

Reserved

REG_CTL6_L

  • Name: Channel 6 low-32 bits Control Register

  • Size: 32

  • Address offset: 228h

  • Read/write access: R/W

Control register low for DMA channel x, configures channel control settings

31:29 RSVD 28 CTL6_L_LLP_SRC_EN 27 CTL6_L_LLP_DST_EN 26:23 RSVD 22:20 CTL6_L_TT_FC 19 RSVD 18 CTL6_L_DST_SCATTER_EN 17 CTL6_L_SRC_GATHER_EN 16:14 CTL6_L_SRC_MSIZE 13:11 CTL6_L_DEST_MSIZE 10:9 CTL6_L_SINC 8:7 CTL6_L_DINC 6:4 CTL6_L_SRC_TR_WIDTH 3:1 CTL6_L_DST_TR_WIDTH 0 CTL6_L_INT_EN

Bit

Symbol

Access

INI

Description

31:29

RSVD

R

-

Reserved

28

CTL6_L_LLP_SRC_EN

R/W

0x0

Block chanining is enabled on the source side only if the LLP_SRC_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

27

CTL6_L_LLP_DST_EN

R/W

0x0

Block chanining is enabled on the destination side only if the LLP_DST_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

26:23

RSVD

R

-

Reserved

22:20

CTL6_L_TT_FC

R/W

0x0

Transfer Type and Flow Control.The following transfer types are supported.

  • Memory to Memory

  • Memory to Peripheral

  • Peripheral to Memory

  • Peripheral to Peripheral

Flow Control can be assigned to the RTK_DMAC, the source peripheral, or the destination peripheral. Table 6-4 lists the decoding for this field. For more information on transfer types and flow control, refer to “Setup/Operation of RTK_DMAC Transfers”.

Reset Value: 3’h0

Dependencies: If hardware handshake isn’t support, then TT_FC can only be set to 3’b0. TT_FC[2] can only be read.

19

RSVD

R

-

Reserved

18

CTL6_L_DST_SCATTER_EN

R/W

0x0

Destination scatter enable bit:0 = Scatter disabled1 = Scatter enabledScatter on the destination side is applicable only when the CTLx_L.DINC bit indicates an incrementing address control and DARx should be aligned with DST_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_DST_SCA_EN is not selected.

17

CTL6_L_SRC_GATHER_EN

R/W

0x0

Source gather enable bit:

0 = Gather disabled

1 = Gather enabled

Gather on the source side is applicable only when the CTLx_L.SINC bit indicates an incrementing address control and SARx should be aligned with SRC_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_SRC_GAT_EN is not selected.

16:14

CTL6_L_SRC_MSIZE

R/W

0x1

Source Burst Transaction Length.

Number of data items, each of width CTLx_L.SRC_TR_WIDTH if source is not memory, otherwise each of width DMAC_TR_WIDTH_DEFAULT, to be read from the source every time a source burst transaction request is made from either the corresponding hardware or software handshaking interface.

Read burst transaction length on bus (ARLen) will not exceed this value, but may be less than this value. If SINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-0 lists the decoding for this field.

13:11

CTL6_L_DEST_MSIZE

R/W

0x1

Destination Burst Transaction Length.

Number of data items, each of width DATA_WIDTH, to be written to the destination every time a destination burst transaction request is made from either the corresponding hardware or software handshaking interface.

Write burst transaction length on bus (AWLen) will not exceed this value, but may be less than this value. If DINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-1 lists the decoding for this field.

10:9

CTL6_L_SINC

R/W

0x0

Source Address Increment. Indicates whether to increment the source address on every source transfer. If the device is fetching data from a source peripheral FIFO with a fixed address, then set this field to “No change.”If source is memory appointed by CTLx_L.TT_FC, and set SINC=No change, then SRC_TR_WIDTH must be set to BUS width. And DMAC will read data from the fixed memory address until block transfer finish, but It is not recommended to read memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01 =Not support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.SRC_TR_WIDTH boundary.

8:7

CTL6_L_DINC

R/W

0x0

Destination Address Increment. Indicates whether to increment destination address on every destination transfer. If your device is writing data to a destination peripheral FIFO with a fixed address, then set this field to “No change.”If destination is memory appointed by CTLx_L.TT_FC, and set DINC=No change, then DST_TR_WIDTH must be set to BUS width. And DMAC will write data to the fixed memory address until block transfer finish, but It is not recommended to write memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01=Not Support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.DST_TR_WIDTH boundary.

6:4

CTL6_L_SRC_TR_WIDTH

R/W

0x0

Source Transfer Width.

Table 6-3 lists the decoding for this field.It can’t be mapped to AXI bus data width directly. Since AXI bus data width is fixed (such as 32bit/64bit), AXI use byte enable signal for byte/half word transfer (still burst). So, the SRC_TR_WIDTH is only used for total block data size calculation and streaming mode byte/half word transfer (for FIFO transfer).

Note

SRC_TR_WIDTH must not be bigger than BUS width.

3:1

CTL6_L_DST_TR_WIDTH

R/W

0x0

Destination Transfer Width.Table 6-3 lists the decoding for this field. It can’t be mapped to AXI bus data width directly. For a non-memory peripheral, typically the peripheral (destination) FIFO width.Note: DST_TR_WIDTH must not be bigger than BUS width

0

CTL6_L_INT_EN

R/W

0x1

Interrupt Enable Bit. If set, then all interrupt-generating sources are enabled. Functions as a global mask bit for all interrupts for the channel; raw* interrupt registers still assert if CTLx_L.INT_EN = 0.

REG_CTL6_H

  • Name: Channel 6 high-32 bits Control Register

  • Size: 32

  • Address offset: 22Ch

  • Read/write access: R

Control register high for DMA channel x for block size

31:0 CTL6_H_TRANS_DATA_CNT

Bit

Symbol

Access

INI

Description

31:0

CTL6_H_TRANS_DATA_CNT

R

0x0

Data Transfered Count.Once the transfer starts, the read-back value is the total number of data bytes already write to destination memory or peripheral.

REG_CFG6_L

  • Name: Channel 6 low-32 bits Configuration Register

  • Size: 32

  • Address offset: 250h

  • Read/write access: R/W

Configuration register low for DMA channel x, configures transfer parameters

31 CFG6_L_RELOAD_DST 30 CFG6_L_RELOAD_SRC 29:20 RSVD 19 CFG6_L_SRC_HS_POL 18 CFG6_L_DST_HS_POL 17:12 RSVD 11 CFG6_L_HS_SEL_SRC 10 CFG6_L_HS_SEL_DST 9 CFG6_L_FIFO_EMPTY 8 CFG6_L_CH_SUSP 7:4 CFG6_L_CH_PRIOR 3 RSVD 2 CFG6_L_DST_PCTL_OVER 1 CFG6_L_SRC_PCTL_OVER 0 CFG6_L_INACTIVE

Bit

Symbol

Access

INI

Description

31

CFG6_L_RELOAD_DST

R/W

0x0

Automatic Destination Reload. The DARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.This register does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

30

CFG6_L_RELOAD_SRC

R/W

0x0

Automatic Source Reload. The SARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.

This field does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

29:20

RSVD

R

-

Reserved

19

CFG6_L_SRC_HS_POL

R/W

0x0

Source Handshaking Interface Polarity.

0 = Active high

1 = Active low

18

CFG6_L_DST_HS_POL

R/W

0x0

Destination Handshaking Interface Polarity.

0 = Active high

1 = Active low

For information on this, refer to “Handshaking Interface” .

17:12

RSVD

R

-

Reserved

11

CFG6_L_HS_SEL_SRC

R/W

0x1

Source Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for source requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware-initiated transaction requests are ignored. If the source peripheral is memory, then this bit is ignored.

10

CFG6_L_HS_SEL_DST

R/W

0x1

Destination Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for destination requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware- initiated transaction requests are ignored. If the destination peripheral is memory, then this bit is ignored.

9

CFG6_L_FIFO_EMPTY

R

0x1

Indicates if there is data left in the channel FIFO.

1 = Channel FIFO empty

0 = Channel FIFO not empty

8

CFG6_L_CH_SUSP

R/W

0x0

Channel Suspend. Suspends all DMA data transfers from the source until this bit is cleared. There is no guarantee that the current transaction will complete. Can also be used in conjunction with CFGx_l.INACTIVE to cleanly disable a channel without losing any data.

0 = Not suspended

1 = Suspend DMA transfer from the source.

This field will be reset to 0 after “Disabling a Channel Prior to Transfer Completion” automatically by hardware.For more information, refer to “7.7 Disabling a Channel Prior to Transfer Completion” .

Note

if user not define DMAC_CH*_SUPPORT_SUSPEND, it only can be readed.

7:4

CFG6_L_CH_PRIOR

R/W

0x0

Channel priority.

RTK DMAC supports three kinds of channel priority now, fixed priority, round robin priority and programmable priority. The default way is fixed priority to reduce area, and channel0 has the highest priority, channel15 has the lowest priority. Changing the definition of parameter FIX_PRIORITY or Programmable_PRIORITY can change priority way.

If RTK DMAC is configured to support Programmable priority, this field will be used to set priority between channels. CH_PRIOR’s legal value is 0 ~ (DMAC_NUM_CHANNELS-1), and 0 is the highest priority value, (DMAC_NUM_CHANNELS-1) is the lowest priroty value. If more than one channel are set with the same priroty value, the channel with small channel number index has higher priority.

If DMAC is configured to support fix priority or round-robin priority, this field is not exist.

Note

if user not define ProgrammablePriority, it only can be readed.

3

RSVD

R

-

Reserved

2

CFG6_L_DST_PCTL_OVER

R

0x1

DMA destination bus protocol finish, indicating the current write command has finished.

1

CFG6_L_SRC_PCTL_OVER

R

0x1

DMA Source bus protocol finish, indicating the current read command has finished.

0

CFG6_L_INACTIVE

R

0x1

Indicates if the channel is inactive. Can be used in conjunction with CFGx_L.CH_SUSP to cleanly disable a channel when destination is peripheral. For more information, refer to “Disabling a Channel Prior to Transfer Completion” .

1 = Channel Inactive for axi interface

0 = Channel not Inactive for axi interface

REG_CFG6_H

  • Name: Channel 6 high-32 bits Configuration Register

  • Size: 32

  • Address offset: 254h

  • Read/write access: R/W

Configuration register high for DMA channel x, configures additional transfer parameters

31:17 RSVD 16 CFG6_H_EXTENDED_DEST_PER1 15 CFG6_H_EXTENDED_SRC_PER1 14:11 CFG6_H_DEST_PER 10:7 CFG6_H_SRC_PER 6:4 RSVD 3 CFG6_H_PROTCTL 2:1 RSVD 0 CFG6_H_FCMODE

Bit

Symbol

Access

INI

Description

31:17

RSVD

R

-

Reserved

16

CFG6_H_EXTENDED_DEST_PER1

R/W

0x0

The extened 4th bit of DEST_PER when hardware handshake interfaces number is configured to 32.

15

CFG6_H_EXTENDED_SRC_PER1

R/W

0x0

The extened 4th bit of SRC_PER when hardware handshake interfaces number is configured to 32.

14:11

CFG6_H_DEST_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the destination of channel x if the FGx.HS_SEL_DST field is 0; otherwise, this field is ignored. The channel can then communicate with the destinationperipheral connected to that interface through the assignedhardware handshaking interface.

NOTE1: For correct DMA operation, only one peripheral (sourceor destination) should be assigned to the same handshaking interface

NOTE2: This field does not exist if the configuration parameterDMAC_NUM_HS_INT is set to 0.

10:7

CFG6_H_SRC_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the source of channel x if the CFGx.HS_SEL_SRC field is 0; otherwise, this field is ignored. The channel can then communicate with the source peripheral connected to that interface through the assigned hardware handshaking interface.

NOTE1: For correct RTK_DMAC operation, only one peripheral (source or destination) should be assigned to the same handshaking interface.

NOTE2: This field does not exist if the configuration parameter DMAC_NUM_HS_INT is set to 0.

6:4

RSVD

R

-

Reserved

3

CFG6_H_PROTCTL

R/W

0x1

Protection Control.Set the bit 35 to 0 will enable the channel secure DMA transfer.

Set the bit 35 to 1 will enable the channel non-secure DMAC transfer.

Note

if user not define DMAC_SECURE_MODE, it only can be readed.

2:1

RSVD

R

-

Reserved

0

CFG6_H_FCMODE

R/W

0x0

Flow Control Mode. Determines when source transaction requests are serviced when the Destination Peripheral is the flow controller.

0 = Source transaction requests are servied when they occur. Data pre-fetching is enabled.

1 = Source transaction requests are not serviced until a destination transaction request occurs. Data pre-fetching is disabled.

Note

Please keep this bit 0 when Transfer Type and Flow Control is not ”destination peripheral is the flow controller and transfer type is peripheral to peripheral” (TT_FC!=7).

REG_SAR7

  • Name: Channel 7 Source Address Register

  • Size: 32

  • Address offset: 268h

  • Read/write access: R/W

Source address register for DMA channel x, specifies the source memory address

31:0 SAR7

Bit

Symbol

Access

INI

Description

31:0

SAR7

R/W

Unknown

Source Address of DMA transfer.Updated after each source transfer. The SINC field in the CTLx register determines whether the address increments, or is left unchanged on every source transfer throughout the block transfer.

REG_CURR_SAR7

  • Name: The read back value is channel 7 source reading address at present

  • Size: 32

  • Address offset: 26Ch

  • Read/write access: R

Current source address register for DMA channel x, indicates the current source address during

transfer

31:0 CURR_SAR7

Bit

Symbol

Access

INI

Description

31:0

CURR_SAR7

R

0x0

The read back value is source reading address at present

REG_DAR7

  • Name: Channel 7 Destination Address Register

  • Size: 32

  • Address offset: 270h

  • Read/write access: R/W

Destination address register for DMA channel x, specifies the destination memory address

31:0 DAR7

Bit

Symbol

Access

INI

Description

31:0

DAR7

R/W

Unknown

Destination address of DMA transfer.Updated after each destination transfer. The DINC field in the CTLx register determines whether the address increments, or is left unchanged on every destination transfer throughout the block transfer.

REG_CURR_DAR7

  • Name: The read back value is channel 7 destination writing address at present

  • Size: 32

  • Address offset: 274h

  • Read/write access: R

Current destination address register for DMA channel x, indicates the current destination address

during transfer

31:0 CURR_DAR7

Bit

Symbol

Access

INI

Description

31:0

CURR_DAR7

R

0x0

The read back value is destination writing address at present

REG_LLP7_L

  • Name: Channel 7 low-32 bits Linked List Pointer Register

  • Size: 32

  • Address offset: 278h

  • Read/write access: R/W

Linked list pointer register low for DMA channel x, points to the starting address of linked list

item

31:2 LLP7_L_LOC 1:0 RSVD

Bit

Symbol

Access

INI

Description

31:2

LLP7_L_LOC

R/W

Unknown

Starting Address In Memory of next LLI if block chaining is enabled. Note that the two LSBs of the starting address are not stored because the address is assumed to be aligned to a 32-bit boundary.LLI accesses are always 32-bit accesses aligned to 32-bit boundaries and cannot be changed or programmed to anything other than 32-bit.

1:0

RSVD

R

-

Reserved

REG_CTL7_L

  • Name: Channel 7 low-32 bits Control Register

  • Size: 32

  • Address offset: 280h

  • Read/write access: R/W

Control register low for DMA channel x, configures channel control settings

31:29 RSVD 28 CTL7_L_LLP_SRC_EN 27 CTL7_L_LLP_DST_EN 26:23 RSVD 22:20 CTL7_L_TT_FC 19 RSVD 18 CTL7_L_DST_SCATTER_EN 17 CTL7_L_SRC_GATHER_EN 16:14 CTL7_L_SRC_MSIZE 13:11 CTL7_L_DEST_MSIZE 10:9 CTL7_L_SINC 8:7 CTL7_L_DINC 6:4 CTL7_L_SRC_TR_WIDTH 3:1 CTL7_L_DST_TR_WIDTH 0 CTL7_L_INT_EN

Bit

Symbol

Access

INI

Description

31:29

RSVD

R

-

Reserved

28

CTL7_L_LLP_SRC_EN

R/W

0x0

Block chanining is enabled on the source side only if the LLP_SRC_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

27

CTL7_L_LLP_DST_EN

R/W

0x0

Block chanining is enabled on the destination side only if the LLP_DST_EN field id high and LLPx_L.LOC is non-zero; for more information,see 7.4.1.1 “Block Chaining Using Linked Lists”

Dependencies:This field does not exist if the configuration parameterDMAC_CHx_MULTI_BLK_EN is not selected or if DMAC_CHx_HC_LLP is selected; in this case, the read-back value is always 0.

26:23

RSVD

R

-

Reserved

22:20

CTL7_L_TT_FC

R/W

0x0

Transfer Type and Flow Control.The following transfer types are supported.

  • Memory to Memory

  • Memory to Peripheral

  • Peripheral to Memory

  • Peripheral to Peripheral

Flow Control can be assigned to the RTK_DMAC, the source peripheral, or the destination peripheral. Table 6-4 lists the decoding for this field. For more information on transfer types and flow control, refer to “Setup/Operation of RTK_DMAC Transfers”.

Reset Value: 3’h0

Dependencies: If hardware handshake isn’t support, then TT_FC can only be set to 3’b0. TT_FC[2] can only be read.

19

RSVD

R

-

Reserved

18

CTL7_L_DST_SCATTER_EN

R/W

0x0

Destination scatter enable bit:0 = Scatter disabled1 = Scatter enabledScatter on the destination side is applicable only when the CTLx_L.DINC bit indicates an incrementing address control and DARx should be aligned with DST_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_DST_SCA_EN is not selected.

17

CTL7_L_SRC_GATHER_EN

R/W

0x0

Source gather enable bit:

0 = Gather disabled

1 = Gather enabled

Gather on the source side is applicable only when the CTLx_L.SINC bit indicates an incrementing address control and SARx should be aligned with SRC_TR_WIDTH.

Dependencies: This field does not exist if DMAC_CHx_SRC_GAT_EN is not selected.

16:14

CTL7_L_SRC_MSIZE

R/W

0x1

Source Burst Transaction Length.

Number of data items, each of width CTLx_L.SRC_TR_WIDTH if source is not memory, otherwise each of width DMAC_TR_WIDTH_DEFAULT, to be read from the source every time a source burst transaction request is made from either the corresponding hardware or software handshaking interface.

Read burst transaction length on bus (ARLen) will not exceed this value, but may be less than this value. If SINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-0 lists the decoding for this field.

13:11

CTL7_L_DEST_MSIZE

R/W

0x1

Destination Burst Transaction Length.

Number of data items, each of width DATA_WIDTH, to be written to the destination every time a destination burst transaction request is made from either the corresponding hardware or software handshaking interface.

Write burst transaction length on bus (AWLen) will not exceed this value, but may be less than this value. If DINC is setted to “no change”, this value should not be greater than 16 to conform to the AXI protocol.

If enabled ‘DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH’ feature, to improve performance, can set CTLx_L.SRC_MSIZE to a high value to make DMAC send longer burst length command. But to avoid deadlock, if Source slave and Destination slave is the same slave, should not set CTLx_L.SRC_MSIZE over than FIFO_depth; Table 6-2-1 lists the decoding for this field.

10:9

CTL7_L_SINC

R/W

0x0

Source Address Increment. Indicates whether to increment the source address on every source transfer. If the device is fetching data from a source peripheral FIFO with a fixed address, then set this field to “No change.”If source is memory appointed by CTLx_L.TT_FC, and set SINC=No change, then SRC_TR_WIDTH must be set to BUS width. And DMAC will read data from the fixed memory address until block transfer finish, but It is not recommended to read memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01 =Not support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.SRC_TR_WIDTH boundary.

8:7

CTL7_L_DINC

R/W

0x0

Destination Address Increment. Indicates whether to increment destination address on every destination transfer. If your device is writing data to a destination peripheral FIFO with a fixed address, then set this field to “No change.”If destination is memory appointed by CTLx_L.TT_FC, and set DINC=No change, then DST_TR_WIDTH must be set to BUS width. And DMAC will write data to the fixed memory address until block transfer finish, but It is not recommended to write memory like this, because some memory controller not support fixed burst transaction and may transform the fixed burst transaction to incremental burst transaction.

00 = Increment

01=Not Support

1x = No change

Note

Incrementing is done for alignment to the next CTLx_L.DST_TR_WIDTH boundary.

6:4

CTL7_L_SRC_TR_WIDTH

R/W

0x0

Source Transfer Width.

Table 6-3 lists the decoding for this field.It can’t be mapped to AXI bus data width directly. Since AXI bus data width is fixed (such as 32bit/64bit), AXI use byte enable signal for byte/half word transfer (still burst). So, the SRC_TR_WIDTH is only used for total block data size calculation and streaming mode byte/half word transfer (for FIFO transfer).

Note

SRC_TR_WIDTH must not be bigger than BUS width.

3:1

CTL7_L_DST_TR_WIDTH

R/W

0x0

Destination Transfer Width.Table 6-3 lists the decoding for this field. It can’t be mapped to AXI bus data width directly. For a non-memory peripheral, typically the peripheral (destination) FIFO width.Note: DST_TR_WIDTH must not be bigger than BUS width

0

CTL7_L_INT_EN

R/W

0x1

Interrupt Enable Bit. If set, then all interrupt-generating sources are enabled. Functions as a global mask bit for all interrupts for the channel; raw* interrupt registers still assert if CTLx_L.INT_EN = 0.

REG_CTL7_H

  • Name: Channel 7 high-32 bits Control Register

  • Size: 32

  • Address offset: 284h

  • Read/write access: R

Control register high for DMA channel x for block size

31:0 CTL7_H_TRANS_DATA_CNT

Bit

Symbol

Access

INI

Description

31:0

CTL7_H_TRANS_DATA_CNT

R

0x0

Data Transfered Count.Once the transfer starts, the read-back value is the total number of data bytes already write to destination memory or peripheral.

REG_CFG7_L

  • Name: Channel 7 low-32 bits Configuration Register

  • Size: 32

  • Address offset: 2A8h

  • Read/write access: R/W

Configuration register low for DMA channel x, configures transfer parameters

31 CFG7_L_RELOAD_DST 30 CFG7_L_RELOAD_SRC 29:20 RSVD 19 CFG7_L_SRC_HS_POL 18 CFG7_L_DST_HS_POL 17:12 RSVD 11 CFG7_L_HS_SEL_SRC 10 CFG7_L_HS_SEL_DST 9 CFG7_L_FIFO_EMPTY 8 CFG7_L_CH_SUSP 7:4 CFG7_L_CH_PRIOR 3 RSVD 2 CFG7_L_DST_PCTL_OVER 1 CFG7_L_SRC_PCTL_OVER 0 CFG7_L_INACTIVE

Bit

Symbol

Access

INI

Description

31

CFG7_L_RELOAD_DST

R/W

0x0

Automatic Destination Reload. The DARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.This register does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

30

CFG7_L_RELOAD_SRC

R/W

0x0

Automatic Source Reload. The SARx register can be automatically reloaded from its initial value at the end of every block for multi-block transfers. A new block transfer is then initiated.

This field does not exist if the configuration parameter DMAC_CHx_MULTI_BLK_EN is not selected; in this case, the read-back value is always 0.

29:20

RSVD

R

-

Reserved

19

CFG7_L_SRC_HS_POL

R/W

0x0

Source Handshaking Interface Polarity.

0 = Active high

1 = Active low

18

CFG7_L_DST_HS_POL

R/W

0x0

Destination Handshaking Interface Polarity.

0 = Active high

1 = Active low

For information on this, refer to “Handshaking Interface” .

17:12

RSVD

R

-

Reserved

11

CFG7_L_HS_SEL_SRC

R/W

0x1

Source Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for source requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware-initiated transaction requests are ignored. If the source peripheral is memory, then this bit is ignored.

10

CFG7_L_HS_SEL_DST

R/W

0x1

Destination Software or Hardware Handshaking Select. This register selects which of the handshaking interfaces – hardware or software – is active for destination requests on this channel.

0 = Hardware handshaking interface. Software-initiated transaction requests are ignored.

1 = Software handshaking interface. Hardware- initiated transaction requests are ignored. If the destination peripheral is memory, then this bit is ignored.

9

CFG7_L_FIFO_EMPTY

R

0x1

Indicates if there is data left in the channel FIFO.

1 = Channel FIFO empty

0 = Channel FIFO not empty

8

CFG7_L_CH_SUSP

R/W

0x0

Channel Suspend. Suspends all DMA data transfers from the source until this bit is cleared. There is no guarantee that the current transaction will complete. Can also be used in conjunction with CFGx_l.INACTIVE to cleanly disable a channel without losing any data.

0 = Not suspended

1 = Suspend DMA transfer from the source.

This field will be reset to 0 after “Disabling a Channel Prior to Transfer Completion” automatically by hardware.For more information, refer to “7.7 Disabling a Channel Prior to Transfer Completion” .

Note

if user not define DMAC_CH*_SUPPORT_SUSPEND, it only can be readed.

7:4

CFG7_L_CH_PRIOR

R/W

0x0

Channel priority.

RTK DMAC supports three kinds of channel priority now, fixed priority, round robin priority and programmable priority. The default way is fixed priority to reduce area, and channel0 has the highest priority, channel15 has the lowest priority. Changing the definition of parameter FIX_PRIORITY or Programmable_PRIORITY can change priority way.

If RTK DMAC is configured to support Programmable priority, this field will be used to set priority between channels. CH_PRIOR’s legal value is 0 ~ (DMAC_NUM_CHANNELS-1), and 0 is the highest priority value, (DMAC_NUM_CHANNELS-1) is the lowest priroty value. If more than one channel are set with the same priroty value, the channel with small channel number index has higher priority.

If DMAC is configured to support fix priority or round-robin priority, this field is not exist.

Note

if user not define ProgrammablePriority, it only can be readed.

3

RSVD

R

-

Reserved

2

CFG7_L_DST_PCTL_OVER

R

0x1

DMA destination bus protocol finish, indicating the current write command has finished.

1

CFG7_L_SRC_PCTL_OVER

R

0x1

DMA Source bus protocol finish, indicating the current read command has finished.

0

CFG7_L_INACTIVE

R

0x1

Indicates if the channel is inactive. Can be used in conjunction with CFGx_L.CH_SUSP to cleanly disable a channel when destination is peripheral. For more information, refer to “Disabling a Channel Prior to Transfer Completion” .

1 = Channel Inactive for axi interface

0 = Channel not Inactive for axi interface

REG_CFG7_H

  • Name: Channel 7 high-32 bits Configuration Register

  • Size: 32

  • Address offset: 2ACh

  • Read/write access: R/W

Configuration register high for DMA channel x, configures additional transfer parameters

31:17 RSVD 16 CFG7_H_EXTENDED_DEST_PER1 15 CFG7_H_EXTENDED_SRC_PER1 14:11 CFG7_H_DEST_PER 10:7 CFG7_H_SRC_PER 6:4 RSVD 3 CFG7_H_PROTCTL 2:1 RSVD 0 CFG7_H_FCMODE

Bit

Symbol

Access

INI

Description

31:17

RSVD

R

-

Reserved

16

CFG7_H_EXTENDED_DEST_PER1

R/W

0x0

The extened 4th bit of DEST_PER when hardware handshake interfaces number is configured to 32.

15

CFG7_H_EXTENDED_SRC_PER1

R/W

0x0

The extened 4th bit of SRC_PER when hardware handshake interfaces number is configured to 32.

14:11

CFG7_H_DEST_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the destination of channel x if the FGx.HS_SEL_DST field is 0; otherwise, this field is ignored. The channel can then communicate with the destinationperipheral connected to that interface through the assignedhardware handshaking interface.

NOTE1: For correct DMA operation, only one peripheral (sourceor destination) should be assigned to the same handshaking interface

NOTE2: This field does not exist if the configuration parameterDMAC_NUM_HS_INT is set to 0.

10:7

CFG7_H_SRC_PER

R/W

0x0

Assigns a hardware handshaking interface(0 – DMAC_NUM_HS_INT-1) to the source of channel x if the CFGx.HS_SEL_SRC field is 0; otherwise, this field is ignored. The channel can then communicate with the source peripheral connected to that interface through the assigned hardware handshaking interface.

NOTE1: For correct RTK_DMAC operation, only one peripheral (source or destination) should be assigned to the same handshaking interface.

NOTE2: This field does not exist if the configuration parameter DMAC_NUM_HS_INT is set to 0.

6:4

RSVD

R

-

Reserved

3

CFG7_H_PROTCTL

R/W

0x1

Protection Control.Set the bit 35 to 0 will enable the channel secure DMA transfer.

Set the bit 35 to 1 will enable the channel non-secure DMAC transfer.

Note

if user not define DMAC_SECURE_MODE, it only can be readed.

2:1

RSVD

R

-

Reserved

0

CFG7_H_FCMODE

R/W

0x0

Flow Control Mode. Determines when source transaction requests are serviced when the Destination Peripheral is the flow controller.

0 = Source transaction requests are servied when they occur. Data pre-fetching is enabled.

1 = Source transaction requests are not serviced until a destination transaction request occurs. Data pre-fetching is disabled.

Note

Please keep this bit 0 when Transfer Type and Flow Control is not ”destination peripheral is the flow controller and transfer type is peripheral to peripheral” (TT_FC!=7).

REG_RAWTFR_L

  • Name: Raw Status for IntTfr Interrupt

  • Size: 32

  • Address offset: 2C0h

  • Read/write access: R

Raw transfer complete interrupt status register, shows unmasked transfer complete interrupts

31:16 RSVD 15:0 RAWTFR_L_RAW_TFR

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:0

RAWTFR_L_RAW_TFR

R

0x0

Raw interrupt status for chn0-chn15

REG_RAWBLOCK_L

  • Name: Raw Status for IntBlock Interrupt

  • Size: 32

  • Address offset: 2C8h

  • Read/write access: R

Raw block transfer complete interrupt status register, shows unmasked block transfer complete

interrupts

31:16 RSVD 15:0 RAWBLOCK_L_RAW_BLOCK

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:0

RAWBLOCK_L_RAW_BLOCK

R

0x0

Raw interrupt status for chn0-chn15

REG_RAWERR_L

  • Name: Raw Status for IntErr Interrupt(protocol error)

  • Size: 32

  • Address offset: 2E0h

  • Read/write access: R

Raw error interrupt status register low, shows unmasked protocol error interrupts

31:16 RSVD 15:0 RAWERR_L_RAW_ERR

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:0

RAWERR_L_RAW_ERR

R

0x0

Raw interrupt status for chn0-chn15. (Protocol error)

REG_RAWERR_H

  • Name: Raw Status for non-secure access secure register error if defined

  • Size: 32

  • Address offset: 2E4h

  • Read/write access: R

Raw error interrupt status register high, shows unmasked secure error interrupts

31:16 RSVD 15:0 RAWERR_H_RAW_ERR

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:0

RAWERR_H_RAW_ERR

R

0x0

Raw interrupt status. (Non-secure access secure register error) if DMAC_SECURE_MODE has been defined; else it is reserved.

REG_STATUSTFR_L

  • Name: Status for IntTfr Interrupt

  • Size: 32

  • Address offset: 2E8h

  • Read/write access: R

Transfer complete interrupt status register, shows masked transfer complete interrupts

31:16 RSVD 15:0 STATUSTFR_L_STATUS_TFR

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:0

STATUSTFR_L_STATUS_TFR

R

0x0

Interrupt status for chn0-chn15

REG_STATUSBLOCK_L

  • Name: Status for IntBlock Interrupt

  • Size: 32

  • Address offset: 2F0h

  • Read/write access: R

Block transfer complete interrupt status register, shows masked block transfer complete interrupts

31:16 RSVD 15:0 STATUSBLOCK_L_STATUS_BLOCK

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:0

STATUSBLOCK_L_STATUS_BLOCK

R

0x0

Interrupt status for chn0-chn15

REG_STATUSERR_L

  • Name: Status for IntErr Interrupt

  • Size: 32

  • Address offset: 308h

  • Read/write access: R

Error interrupt status register low, shows masked protocol error interrupts

31:16 RSVD 15:0 STATUSERR_L_STATUS_ERR

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:0

STATUSERR_L_STATUS_ERR

R

0x0

Interrupt status for chn0-chn15. (Protocol error)

REG_STATUSERR_H

  • Name: Status for non-secure access secure register error if defined

  • Size: 32

  • Address offset: 30Ch

  • Read/write access: R

Error interrupt status register high, shows masked secure error interrupts

31:16 RSVD 15:0 STATUSERR_H_STATUS_ERR

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:0

STATUSERR_H_STATUS_ERR

R

0x0

Interrupt status. (Non-secure access secure register error, Sec Error) if DMAC_SECURE_MODE has been defined; else it is reserved.

REG_MASKTFR_L

  • Name: Mask for IntTfr Interrupt (chn0-7)

  • Size: 32

  • Address offset: 310h

  • Read/write access: R/W

Transfer complete interrupt mask register, enables or disables transfer complete interrupts

31:16 RSVD 15:8 MASKTFR_L_INT_MASK_WE 7:0 MASKTFR_L_INT_MASK

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:8

MASKTFR_L_INT_MASK_WE

R/W

0x0

Interrupt Mask Write Enable(chn0-chn7)

0 = write disabled

1 = write enabled

7:0

MASKTFR_L_INT_MASK

R/W

0x0

Interrupt Mask(chn0-chn7)

0 = masked

1 = unmasked

REG_MASKBLOCK_L

  • Name: Mask for IntBlock Interrupt

  • Size: 32

  • Address offset: 318h

  • Read/write access: R/W

Block transfer complete interrupt mask register, enables or disables block transfer complete

interrupts

31:16 RSVD 15:8 MASKBLOCK_L_INT_MASK_WE 7:0 MASKBLOCK_L_INT_MASK

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:8

MASKBLOCK_L_INT_MASK_WE

R/W

0x0

Interrupt Mask Write Enable(chn0-chn7)

0 = write disabled

1 = write enabled

7:0

MASKBLOCK_L_INT_MASK

R/W

0x0

Interrupt Mask(chn0-chn7)

0 = masked

1 = unmasked

REG_MASKERR_L

  • Name: Mask for IntErr Interrupt

  • Size: 32

  • Address offset: 330h

  • Read/write access: R/W

Error interrupt mask register low, enables or disables protocol error interrupts

31:16 RSVD 15:8 MASKERR_L_INT_MASK_WE 7:0 MASKERR_L_INT_MASK

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:8

MASKERR_L_INT_MASK_WE

R/W

0x0

Interrupt Mask Write Enable(chn0-chn7)

0 = write disabled

1 = write enabled

7:0

MASKERR_L_INT_MASK

R/W

0x0

Interrupt Mask(chn0-chn7)

0 = masked

1 = unmasked

REG_MASKERR_H

  • Name: Mask for non-secure access secure register error if defined

  • Size: 32

  • Address offset: 334h

  • Read/write access: R/W

Error interrupt mask register high, enables or disables secure error interrupts

31:16 RSVD 15:8 MASKERR_H_INT_MASK_WE 7:0 MASKERR_H_INT_MASK

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:8

MASKERR_H_INT_MASK_WE

R/W

0x0

Interrupt Mask Write Enable(chn0-chn7)

0 = write disabled

1 = write enabled

These bits only exist when DMAC_ SECURE_MODE has beed defined

7:0

MASKERR_H_INT_MASK

R/W

0x0

Interrupt Mask(chn0-chn7)

0 = masked

1 = unmasked

These bits only exist when DMAC_ SECURE_MODE has beed defined

REG_CLEARTFR_L

  • Name: Clear for IntTfr Interrupt

  • Size: 32

  • Address offset: 338h

  • Read/write access: R/W

Transfer complete interrupt clear register, clears transfer complete interrupt status

31:16 RSVD 15:0 CLEARTFR_L_CLEAR_TFR

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:0

CLEARTFR_L_CLEAR_TFR

R/W

0x0

Interrupt clear for chn0-chn15

0 = no effect

1= clear interrupt

REG_CLEARBLOCK_L

  • Name: Clear for IntBlock Interrupt

  • Size: 32

  • Address offset: 340h

  • Read/write access: R/W

Block transfer complete interrupt clear register, clears block transfer complete interrupt status

31:16 RSVD 15:0 CLEARBLOCK_L_CLEAR_BLOCK

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:0

CLEARBLOCK_L_CLEAR_BLOCK

R/W

0x0

Interrupt clear for chn0-chn15

REG_CLEARERR_L

  • Name: Clear for IntErr Interrupt

  • Size: 32

  • Address offset: 358h

  • Read/write access: R/W

Error interrupt clear register low, clears protocol error interrupt status

31:16 RSVD 15:0 CLEARERR_L_CLEAR_PROTOCOL_ERROR

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:0

CLEARERR_L_CLEAR_PROTOCOL_ERROR

R/W

0x0

Interrupt clear for chn0-chn15. (Protocol error)

REG_CLEARERR_H

  • Name: Clear for non-secure access secure register error if defined

  • Size: 32

  • Address offset: 35Ch

  • Read/write access: R/W

Error interrupt clear register high, clears secure error interrupt status

31:16 RSVD 15:0 CLEARERR_H_CLEAR_SEC_ERROR

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:0

CLEARERR_H_CLEAR_SEC_ERROR

R/W

0x0

Interrupt clear for chn0-chn15 (Non-secure access secure register error, Sec Error) when DMAC_SECURE_MODE has beed defined, else it is reserved;

REG_STATUSINT_L

  • Name: Combined Interrupt Sataus Register

  • Size: 32

  • Address offset: 360h

  • Read/write access: R

Interrupt status register low, shows combined interrupt status

31:5 RSVD 4 STATUSINT_L_ERROR 3:2 RSVD 1 STATUSINT_L_BLOCK 0 STATUSINT_L_TFR

Bit

Symbol

Access

INI

Description

31:5

RSVD

R

-

Reserved

4

STATUSINT_L_ERROR

R

0x0

OR of the contents of StatusErr register.

3:2

RSVD

R

-

Reserved

1

STATUSINT_L_BLOCK

R

0x0

OR of the contents of StatusBlock register.

0

STATUSINT_L_TFR

R

0x0

OR of the contents of StatusTfr register.

REG_STATUSINT_H

  • Name: Combined Interrupt Sataus Register

  • Size: 32

  • Address offset: 364h

  • Read/write access: R

Interrupt status register high, shows combined interrupt status

31:0 RSVD

Bit

Symbol

Access

INI

Description

31:0

RSVD

R

-

Reserved

REG_DMACFGREG_L

  • Name: DMA low-32 bits Configuration Register

  • Size: 32

  • Address offset: 398h

  • Read/write access: R/W

DMA configuration register, configures global DMA controller settings

31:1 RSVD 0 DMACFGREG_L_DMA_EN

Bit

Symbol

Access

INI

Description

31:1

RSVD

R

-

Reserved

0

DMACFGREG_L_DMA_EN

R/W

0x1

RTK_DMAC Enable bit.

0 = RTK_DMAC Disabled

1 = RTK_DMAC Enabled

REG_CHENREG_L_1

  • Name: DMA low-32 bits Channel Enable Register if configed chn number is less than or equal to 8

  • Size: 32

  • Address offset: 3A0h

  • Read/write access: R/W

Channel enable register, enables or disables DMA channels

31:16 RSVD 15:8 CHENREG_L_1_CH_EN_WE 7:0 CHENREG_L_1_CH_EN

Bit

Symbol

Access

INI

Description

31:16

RSVD

R

-

Reserved

15:8

CHENREG_L_1_CH_EN_WE

R/W

0x0

Channel enable write enable.

7:0

CHENREG_L_1_CH_EN

R/W

0x0

Enables/Disables the channel. Setting this bit enables a channel; clearing this bit disables the channel.

0 = Disable the Channel

1 = Enable the Channel

The CHENREG_L.CH_EN bit is automatically cleared by hardware to disable the channel after the last AXI transfer of the DMA transfer to the destination has completed. Software can therefore poll this bit to determine when this channel is free for a new DMA transfer.

REG_DMAIDREG_L

  • Name: DMA low-32 bits ID Register

  • Size: 32

  • Address offset: 3A8h

  • Read/write access: R

DMA ID register, Hardcoded RTK_DMAC peripheral ID

31:0 DMAIDREG_L_DMA_ID

Bit

Symbol

Access

INI

Description

31:0

DMAIDREG_L_DMA_ID

R

32’h22101416

Hardcoded RTK_DMAC Peripheral ID

REG_DMA_COMP_PARAMS_6_L

  • Name: Refer to the bit table in the description for it

  • Size: 32

  • Address offset: 3C8h

  • Read/write access: R

DMA component parameters register 6 low, contains component identification information

31:24 CH7_MAX_BLK_SIZE 23:16 CH6_MAX_BLK_SIZE 15:8 CH5_MAX_BLK_SIZE 7:0 CH4_MAX_BLK_SIZE

Bit

Symbol

Access

INI

Description

31:24

CH7_MAX_BLK_SIZE

R

0x10

The value of this register is derived from the DMAC_CH7_MAX_BLK_SIZE from config_form.vh

CH7_MAX_BLK_SIZE = log2(DMAC_CH7_MAX_BLK_SIZE) + 1

23:16

CH6_MAX_BLK_SIZE

R

0x10

The value of this register is derived from the DMAC_CH6_MAX_BLK_SIZE from config_form.vh

CH6_MAX_BLK_SIZE = log2(DMAC_CH6_MAX_BLK_SIZE) + 1

15:8

CH5_MAX_BLK_SIZE

R

0x10

The value of this register is derived from the DMAC_CH5_MAX_BLK_SIZE from config_form.vh

CH5_MAX_BLK_SIZE = log2(DMAC_CH5_MAX_BLK_SIZE) + 1

7:0

CH4_MAX_BLK_SIZE

R

0x10

The value of this register is derived from the DMAC_CH4_MAX_BLK_SIZE from config_form.vh

CH4_MAX_BLK_SIZE = log2(DMAC_CH4_MAX_BLK_SIZE) + 1

REG_DMA_COMP_PARAMS_6_H

  • Name: Refer to the bit table in the description for it

  • Size: 32

  • Address offset: 3CCh

  • Read/write access: R

DMA component parameters register 6 high, contains component identification information

31 RSVD 30:28 CH7_FIFO_DEPTH 27:19 RSVD 18:16 CH7_MAX_MULT_SIZE 15:14 CH7_FC 13 CH7_HC_LLP 12 CH7_CTL_WB_EN 11 CH7_MULTI_BLK_EN 10 CH7_LOCK_EN 9 CH7_SRC_GAT_EN 8 CH7_DST_SCA_EN 7 CH7_STAT_SRC 6 CH7_STAT_DST 5:3 CH7_STW 2:0 CH7_DTW

Bit

Symbol

Access

INI

Description

31

RSVD

R

-

Reserved

30:28

CH7_FIFO_DEPTH

R

0x2

The value of this register is derived from the DMAC_CH7_FIFO_DEPTH parameter. Default value is 0x0.

CH7_FIFO_DEPTH = log2(DMAC_CH7_FIFO_DEPTH/8)

0x0 = 8 bytes

0x1 = 16

0x2 = 32

0x3 = 64

0x4 = 128

0x5 = Reserved

0x6 = Reserved

0x7 = Reserved

27:19

RSVD

R

-

Reserved

18:16

CH7_MAX_MULT_SIZE

R

0x3

The value of this register is derived from the DMAC_CH7_MULT_SIZE parameter. Maxium burst transaction size.

CH7_MAX_MULT_SIZE = log2(256/DMAC_DATA_WIDTH)

0x3 = 32 bits

0x2 = 64 bits

0x1 = 128 bits

15:14

CH7_FC

R

0x3

The value of this register is derived from the DMAC_CH7_FC parameter.

0x0 = DMA

0x1 = SRC

0x2 = DST

0x3 = ANY

13

CH7_HC_LLP

R

0x0

The value of this register is derived from the DMAC_CH7_HC_LLP parameter.

0x0 = FALSE

0x1 = TRUE

12

CH7_CTL_WB_EN

R

0x0

The value of this register is derived from the DMAC_CH7_CTL_WB_EN parameter.

0x0 = FALSE

0x1 = TRUE

11

CH7_MULTI_BLK_EN

R

0x1

The value of this register is derived from the DMAC_CH7_CTL_WB_EN parameter.

0x0 = FALSE

0x1 = TRUE

10

CH7_LOCK_EN

R

0x0

The value of this register is derived from the DMAC_CH7_LOCK_EN parameter.

0x0 = FALSE

0x1 = TRUE

9

CH7_SRC_GAT_EN

R

0x0

The value of this register is derived from the DMAC_CH7_SRC_GAT_EN parameter. For a description of this parameter, refer to page 112.

0x0 = FALSE

0x1 = TRUE

8

CH7_DST_SCA_EN

R

0x0

The value of this register is derived from the DMAC_CH7_DST_SCA_EN parameter.

0x0 = FALSE

0x1 = TRUE

7

CH7_STAT_SRC

R

0x0

The value of this register is derived from the DMAC_CH7_STAT_SRC parameter.

0x0 = FALSE

0x1 = TRUE

6

CH7_STAT_DST

R

0x0

The value of this register is derived from the DMAC_CH7_STAT_DST parameter.

0x0 = FALSE

0x1 = TRUE

5:3

CH7_STW

R

0x3

The value of this register is derived from the DMAC_CH7_STW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

2:0

CH7_DTW

R

0x3

The value of this register is derived from the DMAC_CH7_DTW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

REG_DMA_COMP_PARAMS_5_L

  • Name: Refer to the bit table in the description for it

  • Size: 32

  • Address offset: 3D0h

  • Read/write access: R

DMA component parameters register 5 low, contains component identification information

31 RSVD 30:28 CH6_FIFO_DEPTH 27:19 RSVD 18:16 CH6_MAX_MULT_SIZE 15:14 CH6_FC 13 CH6_HC_LLP 12 CH6_CTL_WB_EN 11 CH6_MULTI_BLK_EN 10 CH6_LOCK_EN 9 CH6_SRC_GAT_EN 8 CH6_DST_SCA_EN 7 CH6_STAT_SRC 6 CH6_STAT_DST 5:3 CH6_STW 2:0 CH6_DTW

Bit

Symbol

Access

INI

Description

31

RSVD

R

-

Reserved

30:28

CH6_FIFO_DEPTH

R

0x2

The value of this register is derived from the DMAC_CH6_FIFO_DEPTH parameter. Default value is 0x0.

0x0 = 8 bytes

0x1 = 16

0x2 = 32

0x3 = 64

0x4 = 128

0x5 = Reserved

0x6 = Reserved

0x7 = Reserved

27:19

RSVD

R

-

Reserved

18:16

CH6_MAX_MULT_SIZE

R

0x3

The value of this register is derived from the DMAC_CH6_MULT_SIZE parameter. Maxium burst transaction size.

CH6_MAX_MULT_SIZE = log2(256/DMAC_DATA_WIDTH)

0x3 = 32 bits

0x2 = 64 bits

0x1 = 128 bits

15:14

CH6_FC

R

0x3

The value of this register is derived from the DMAC_CH6_FC parameter.

0x0 = DMA

0x1 = SRC

0x2 = DST

0x3 = ANY

13

CH6_HC_LLP

R

0x0

The value of this register is derived from the DMAC_CH6_HC_LLP parameter.

0x0 = FALSE

0x1 = TRUE

12

CH6_CTL_WB_EN

R

0x0

The value of this register is derived from the DMAC_CH6_CTL_WB_EN parameter.

0x0 = FALSE

0x1 = TRUE

11

CH6_MULTI_BLK_EN

R

0x1

The value of this register is derived from the DMAC_CH6_MULTI_BLK_EN parameter.

0x0 = FALSE

0x1 = TRUE

10

CH6_LOCK_EN

R

0x0

The value of this register is derived from the DMAC_CH6_LOCK_EN parameter.

0x0 = FALSE

0x1 = TRUE

9

CH6_SRC_GAT_EN

R

0x0

The value of this register is derived from the DMAC_CH6_SRC_GAT_EN parameter.

0x0 = FALSE

0x1 = TRUE

8

CH6_DST_SCA_EN

R

0x0

The value of this register is derived from the DMAC_CH6_DST_SCA_EN parameter.

0x0 = FALSE

0x1 = TRUE

7

CH6_STAT_SRC

R

0x0

The value of this register is derived from the DMAC_CH6_STAT_SRC parameter.

0x0 = FALSE

0x1 = TRUE

6

CH6_STAT_DST

R

0x0

The value of this register is derived from the DMAC_CH6_STAT_DST parameter.

0x0 = FALSE

0x1 = TRUE

5:3

CH6_STW

R

0x3

The value of this register is derived from the DMAC_CH6_STW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

2:0

CH6_DTW

R

0x3

The value of this register is derived from the DMAC_CH6_DTW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

REG_DMA_COMP_PARAMS_5_H

  • Name: Refer to the bit table in the description for it

  • Size: 32

  • Address offset: 3D4h

  • Read/write access: R

DMA component parameters register 5 high, contains component identification information

31 RSVD 30:28 CH5_FIFO_DEPTH 27:19 RSVD 18:16 CH5_MAX_MULT_SIZE 15:14 CH5_FC 13 CH5_HC_LLP 12 CH5_CTL_WB_EN 11 CH5_MULTI_BLK_EN 10 CH5_LOCK_EN 9 CH5_SRC_GAT_EN 8 CH5_DST_SCA_EN 7 CH5_STAT_SRC 6 CH5_STAT_DST 5:3 CH5_STW 2:0 CH5_DTW

Bit

Symbol

Access

INI

Description

31

RSVD

R

-

Reserved

30:28

CH5_FIFO_DEPTH

R

0x2

The value of this register is derived from the DMAC_CH5_FIFO_DEPTH parameter. Default value is 0x0.

0x0 = 8 bytes

0x1 = 16

0x2 = 32

0x3 = 64

0x4 = 128

0x5 = Reserved

0x6 = Reserved

0x7 = Reserved

27:19

RSVD

R

-

Reserved

18:16

CH5_MAX_MULT_SIZE

R

0x3

The value of this register is derived from the DMAC_CH5_MULT_SIZE parameter. Maxium burst transaction size.

CH5_MAX_MULT_SIZE = log2(256/DMAC_DATA_WIDTH)

0x3 = 32 bits

0x2 = 64 bits

0x1 = 128 bits

15:14

CH5_FC

R

0x3

The value of this register is derived from the DMAC_CH5_FC parameter.

0x0 = DMA

0x1 = SRC

0x2 = DST

0x3 = ANY

13

CH5_HC_LLP

R

0x0

The value of this register is derived from the DMAC_CH5_HC_LLP parameter.

0x0 = FALSE

0x1 = TRUE

12

CH5_CTL_WB_EN

R

0x0

The value of this register is derived from the DMAC_CH5_CTL_WB_EN parameter.

0x0 = FALSE

0x1 = TRUE

11

CH5_MULTI_BLK_EN

R

0x1

The value of this register is derived from the DMAC_CH5_MULTI_BLK_EN parameter.

0x0 = FALSE

0x1 = TRUE

10

CH5_LOCK_EN

R

0x0

The value of this register is derived from the DMAC_CH5_LOCK_EN parameter.

0x0 = FALSE

0x1 = TRUE

9

CH5_SRC_GAT_EN

R

0x0

The value of this register is derived from the DMAC_CH5_SRC_GAT_EN parameter. For a description of this parameter, refer to page 112.

0x0 = FALSE

0x1 = TRUE

8

CH5_DST_SCA_EN

R

0x0

The value of this register is derived from the DMAC_CH5_DST_SCA_EN parameter.

0x0 = FALSE

0x1 = TRUE

7

CH5_STAT_SRC

R

0x0

The value of this register is derived from the DMAC_CH5_STAT_SRC parameter.

0x0 = FALSE

0x1 = TRUE

6

CH5_STAT_DST

R

0x0

The value of this register is derived from the DMAC_CH5_STAT_DST parameter.

0x0 = FALSE

0x1 = TRUE

5:3

CH5_STW

R

0x3

The value of this register is derived from the DMAC_CH5_STW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

2:0

CH5_DTW

R

0x3

The value of this register is derived from the DMAC_CH5_DTW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

REG_DMA_COMP_PARAMS_4_L

  • Name: Refer to the bit table in the description for it

  • Size: 32

  • Address offset: 3D8h

  • Read/write access: R

DMA component parameters register 4 low, contains component identification information

31 RSVD 30:28 CH4_FIFO_DEPTH 27:19 RSVD 18:16 CH4_MAX_MULT_SIZE 15:14 CH4_FC 13 CH4_HC_LLP 12 CH4_CTL_WB_EN 11 CH4_MULTI_BLK_EN 10 CH4_LOCK_EN 9 CH4_SRC_GAT_EN 8 CH4_DST_SCA_EN 7 CH4_STAT_SRC 6 CH4_STAT_DST 5:3 CH4_STW 2:0 CH4_DTW

Bit

Symbol

Access

INI

Description

31

RSVD

R

-

Reserved

30:28

CH4_FIFO_DEPTH

R

0x2

The value of this register is derived from the DMAC_CH4_FIFO_DEPTH parameter. Default value is 0x0.

0x0 = 8 bytes

0x1 = 16

0x2 = 32

0x3 = 64

0x4 = 128

0x5 = Reserved

0x6 = Reserved

0x7 = Reserved

27:19

RSVD

R

-

Reserved

18:16

CH4_MAX_MULT_SIZE

R

0x3

The value of this register is derived from the DMAC_CH4_MULT_SIZE parameter. Maxium burst transaction size.

CH4_MAX_MULT_SIZE = log2(256/DMAC_DATA_WIDTH)

0x3 = 32 bits

0x2 = 64 bits

0x1 = 128 bits

15:14

CH4_FC

R

0x3

The value of this register is derived from the DMAC_CH4_FC parameter.

0x0 = DMA

0x1 = SRC

0x2 = DST

0x3 = ANY

13

CH4_HC_LLP

R

0x0

The value of this register is derived from the DMAC_CH4_HC_LLP parameter.

0x0 = FALSE

0x1 = TRUE

12

CH4_CTL_WB_EN

R

0x0

The value of this register is derived from the DMAC_CH4_CTL_WB_EN parameter.

0x0 = FALSE

0x1 = TRUE

11

CH4_MULTI_BLK_EN

R

0x1

The value of this register is derived from the DMAC_CH4_MULTI_BLK_EN parameter.

0x0 = FALSE

0x1 = TRUE

10

CH4_LOCK_EN

R

0x0

The value of this register is derived from the DMAC_CH4_LOCK_EN parameter.

0x0 = FALSE

0x1 = TRUE

9

CH4_SRC_GAT_EN

R

0x0

The value of this register is derived from the DMAC_CH4_SRC_GAT_EN parameter. For a description of this parameter, refer to page 112.0x0 = FALSE

0x1 = TRUE

8

CH4_DST_SCA_EN

R

0x0

The value of this register is derived from the DMAC_CH4_DST_SCA_EN parameter.

0x0 = FALSE

0x1 = TRUE

7

CH4_STAT_SRC

R

0x0

The value of this register is derived from the DMAC_CH4_STAT_SRC parameter.

0x0 = FALSE

0x1 = TRUE

6

CH4_STAT_DST

R

0x0

The value of this register is derived from the DMAC_CH4_STAT_DST parameter.

0x0 = FALSE

0x1 = TRUE

5:3

CH4_STW

R

0x3

The value of this register is derived from the DMAC_CH4_STW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

2:0

CH4_DTW

R

0x3

The value of this register is derived from the DMAC_CH4_DTW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

REG_DMA_COMP_PARAMS_4_H

  • Name: Refer to the bit table in the description for it

  • Size: 32

  • Address offset: 3DCh

  • Read/write access: R

DMA component parameters register 4 high, contains component identification information

31 RSVD 30:28 CH3_FIFO_DEPTH 27:19 RSVD 18:16 CH3_MAX_MULT_SIZE 15:14 CH3_FC 13 CH3_HC_LLP 12 CH3_CTL_WB_EN 11 CH3_MULTI_BLK_EN 10 CH3_LOCK_EN 9 CH3_SRC_GAT_EN 8 CH3_DST_SCA_EN 7 CH3_STAT_SRC 6 CH3_STAT_DST 5:3 CH3_STW 2:0 CH3_DTW

Bit

Symbol

Access

INI

Description

31

RSVD

R

-

Reserved

30:28

CH3_FIFO_DEPTH

R

0x2

The value of this register is derived from the DMAC_CH3_FIFO_DEPTH parameter. Default value is 0x0.

0x0 = 8 bytes

0x1 = 16

0x2 = 32

0x3 = 64

0x4 = 128

0x5 = Reserved

0x6 = Reserved

0x7 = Reserved

27:19

RSVD

R

-

Reserved

18:16

CH3_MAX_MULT_SIZE

R

0x3

The value of this register is derived from the DMAC_CH3_MULT_SIZE parameter. Maxium burst transaction size.

CH3_MAX_MULT_SIZE = log2(256/DMAC_DATA_WIDTH)

0x3 = 32 bits

0x2 = 64 bits

0x1 = 128 bits

15:14

CH3_FC

R

0x3

The value of this register is derived from the DMAC_CH3_FC parameter.

0x0 = DMA

0x1 = SRC

0x2 = DST

0x3 = ANY

13

CH3_HC_LLP

R

0x0

The value of this register is derived from the DMAC_CH3_HC_LLP parameter.

0x0 = FALSE

0x1 = TRUE

12

CH3_CTL_WB_EN

R

0x0

The value of this register is derived from the DMAC_CH3_CTL_WB_EN parameter.

0x0 = FALSE

0x1 = TRUE

11

CH3_MULTI_BLK_EN

R

0x1

The value of this register is derived from the DMAC_CH3_MULTI_BLK_EN parameter.

0x0 = FALSE

0x1 = TRUE

10

CH3_LOCK_EN

R

0x0

The value of this register is derived from the DMAC_CH3_LOCK_EN parameter.

0x0 = FALSE

0x1 = TRUE

9

CH3_SRC_GAT_EN

R

0x0

The value of this register is derived from the DMAC_CH3_SRC_GAT_EN parameter.

0x0 = FALSE

0x1 = TRUE

8

CH3_DST_SCA_EN

R

0x0

The value of this register is derived from the DMAC_CH3_DST_SCA_EN parameter.

0x0 = FALSE

0x1 = TRUE

7

CH3_STAT_SRC

R

0x0

The value of this register is derived from the DMAC_CH3_STAT_SRC parameter.

0x0 = FALSE

0x1 = TRUE

6

CH3_STAT_DST

R

0x0

The value of this register is derived from the DMAC_CH3_STAT_DST parameter.

0x0 = FALSE

0x1 = TRUE

5:3

CH3_STW

R

0x3

The value of this register is derived from the DMAC_CH3_STW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

2:0

CH3_DTW

R

0x3

The value of this register is derived from the DMAC_CH3_DTW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

REG_DMA_COMP_PARAMS_3_L

  • Name: Refer to the bit table in the description for it

  • Size: 32

  • Address offset: 3E0h

  • Read/write access: R

DMA component parameters register 3 low, contains component identification information

31 RSVD 30:28 CH2_FIFO_DEPTH 27:19 RSVD 18:16 CH2_MAX_MULT_SIZE 15:14 CH2_FC 13 CH2_HC_LLP 12 CH2_CTL_WB_EN 11 CH2_MULTI_BLK_EN 10 CH2_LOCK_EN 9 CH2_SRC_GAT_EN 8 CH2_DST_SCA_EN 7 CH2_STAT_SRC 6 CH2_STAT_DST 5:3 CH2_STW 2:0 CH2_DTW

Bit

Symbol

Access

INI

Description

31

RSVD

R

-

Reserved

30:28

CH2_FIFO_DEPTH

R

0x2

The value of this register is derived from the DMAC_CH2_FIFO_DEPTH parameter. Default value is 0x0.

0x0 = 8 bytes

0x1 = 16

0x2 = 32

0x3 = 64

0x4 = 128

0x5 = Reserved

0x6 = Reserved

0x7 = Reserved

27:19

RSVD

R

-

Reserved

18:16

CH2_MAX_MULT_SIZE

R

0x3

The value of this register is derived from the DMAC_CH2_MULT_SIZE parameter. Maxium burst transaction size.

CH2_MAX_MULT_SIZE = log2(256/DMAC_DATA_WIDTH)

0x3 = 32 bits

0x2 = 64 bits

0x1 = 128 bits

15:14

CH2_FC

R

0x3

The value of this register is derived from the DMAC_CH2_FC parameter.

0x0 = DMA

0x1 = SRC

0x2 = DST

0x3 = ANY

13

CH2_HC_LLP

R

0x0

The value of this register is derived from the DMAC_CH2_HC_LLP parameter.

0x0 = FALSE

0x1 = TRUE

12

CH2_CTL_WB_EN

R

0x0

The value of this register is derived from the DMAC_CH2_CTL_WB_EN parameter.

0x0 = FALSE

0x1 = TRUE

11

CH2_MULTI_BLK_EN

R

0x1

The value of this register is derived from the DMAC_CH2_MULTI_BLK_EN parameter.

0x0 = FALSE

0x1 = TRUE

10

CH2_LOCK_EN

R

0x0

The value of this register is derived from the DMAC_CH2_LOCK_EN parameter.

0x0 = FALSE

0x1 = TRUE

9

CH2_SRC_GAT_EN

R

0x0

The value of this register is derived from the DMAC_CH2_SRC_GAT_EN parameter. For a description of this parameter, refer to page 112.

0x0 = FALSE

0x1 = TRUE

8

CH2_DST_SCA_EN

R

0x0

The value of this register is derived from the DMAC_CH2_DST_SCA_EN parameter.

0x0 = FALSE

0x1 = TRUE

7

CH2_STAT_SRC

R

0x0

The value of this register is derived from the DMAC_CH2_STAT_SRC parameter.

0x0 = FALSE

0x1 = TRUE

6

CH2_STAT_DST

R

0x0

The value of this register is derived from the DMAC_CH2_STAT_DST parameter.

0x0 = FALSE

0x1 = TRUE

5:3

CH2_STW

R

0x3

The value of this register is derived from the DMAC_CH2_STW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

2:0

CH2_DTW

R

0x3

The value of this register is derived from the DMAC_CH2_DTW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

REG_DMA_COMP_PARAMS_3_H

  • Name: Refer to the bit table in the description for it

  • Size: 32

  • Address offset: 3E4h

  • Read/write access: R

DMA component parameters register 3 high, contains component identification information

31 RSVD 30:28 CH1_FIFO_DEPTH 27:19 RSVD 18:16 CH1_MAX_MULT_SIZE 15:14 CH1_FC 13 CH1_HC_LLP 12 CH1_CTL_WB_EN 11 CH1_MULTI_BLK_EN 10 CH1_LOCK_EN 9 CH1_SRC_GAT_EN 8 CH1_DST_SCA_EN 7 CH1_STAT_SRC 6 CH1_STAT_DST 5:3 CH1_STW 2:0 CH1_DTW

Bit

Symbol

Access

INI

Description

31

RSVD

R

-

Reserved

30:28

CH1_FIFO_DEPTH

R

0x4

The value of this register is derived from the DMAC_CH1_FIFO_DEPTH parameter. Default value is 0x0.

0x0 = 8 bytes

0x1 = 16

0x2 = 32

0x3 = 64

0x4 = 128

0x5 = Reserved

0x6 = Reserved

0x7 = Reserved

27:19

RSVD

R

-

Reserved

18:16

CH1_MAX_MULT_SIZE

R

0x3

The value of this register is derived from the DMAC_CH1_MULT_SIZE parameter. Maxium burst transaction size.

CH1_MAX_MULT_SIZE = log2(256/DMAC_DATA_WIDTH)

0x3 = 32 bits

0x2 = 64 bits

0x1 = 128 bits

15:14

CH1_FC

R

0x3

The value of this register is derived from the DMAC_CH1_FC parameter.

0x0 = DMA

0x1 = SRC

0x2 = DST

0x3 = ANY

13

CH1_HC_LLP

R

0x0

The value of this register is derived from the DMAC_CH1_HC_LLP parameter.

0x0 = FALSE

0x1 = TRUE

12

CH1_CTL_WB_EN

R

0x0

The value of this register is derived from the DMAC_CH1_CTL_WB_EN parameter.

0x0 = FALSE

0x1 = TRUE

11

CH1_MULTI_BLK_EN

R

0x1

The value of this register is derived from the DMAC_CH1_MULTI_BLK_EN parameter.

0x0 = FALSE

0x1 = TRUE

10

CH1_LOCK_EN

R

0x0

The value of this register is derived from the DMAC_CH1_LOCK_EN parameter.

0x0 = FALSE

0x1 = TRUE

9

CH1_SRC_GAT_EN

R

0x0

The value of this register is derived from the DMAC_CH1_SRC_GAT_EN parameter.

0x0 = FALSE

0x1 = TRUE

8

CH1_DST_SCA_EN

R

0x0

The value of this register is derived from the DMAC_CH1_DST_SCA_EN parameter.

0x0 = FALSE

0x1 = TRUE

7

CH1_STAT_SRC

R

0x0

The value of this register is derived from the DMAC_CH1_STAT_SRC parameter.

0x0 = FALSE

0x1 = TRUE

6

CH1_STAT_DST

R

0x0

The value of this register is derived from the DMAC_CH1_STAT_DST parameter.

0x0 = FALSE

0x1 = TRUE

5:3

CH1_STW

R

0x3

The value of this register is derived from the DMAC_CH1_STW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

2:0

CH1_DTW

R

0x3

The value of this register is derived from the DMAC_CH1_DTW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

REG_DMA_COMP_PARAMS_2_L

  • Name: Refer to the bit table in the description for it

  • Size: 32

  • Address offset: 3E8h

  • Read/write access: R

DMA component parameters register 2 low, contains component identification information

31 RSVD 30:28 CH0_FIFO_DEPTH 27:19 RSVD 18:16 CH0_MAX_MULT_SIZE 15:14 CH0_FC 13 CH0_HC_LLP 12 CH0_CTL_WB_EN 11 CH0_MULTI_BLK_EN 10 CH0_LOCK_EN 9 CH0_SRC_GAT_EN 8 CH0_DST_SCA_EN 7 CH0_STAT_SRC 6 CH0_STAT_DST 5:3 CH0_STW 2:0 CH0_DTW

Bit

Symbol

Access

INI

Description

31

RSVD

R

-

Reserved

30:28

CH0_FIFO_DEPTH

R

0x4

The value of this register is derived from the DMAC_CH0_FIFO_DEPTH parameter. Default value is 0x0.

0x0 = 8 bytes

0x1 = 16

0x2 = 32

0x3 = 64

0x4 = 128

0x5 = Reserved

0x6 = Reserved

0x7 = Reserved

27:19

RSVD

R

-

Reserved

18:16

CH0_MAX_MULT_SIZE

R

0x3

The value of this register is derived from the DMAC_CH0_MULT_SIZE parameter. Maxium burst transaction size.

CH0_MAX_MULT_SIZE = log2(256/DMAC_DATA_WIDTH)

0x3 = 32 bits

0x2 = 64 bits

0x1 = 128 bits

15:14

CH0_FC

R

0x3

The value of this register is derived from the DMAC_CH0_FC parameter.

0x0 = DMA

0x1 = SRC

0x2 = DST

0x3 = ANY

13

CH0_HC_LLP

R

0x0

The value of this register is derived from the DMAC_CH0_HC_LLP parameter.

0x0 = FALSE

0x1 = TRUE

12

CH0_CTL_WB_EN

R

0x0

The value of this register is derived from the DMAC_CH0_CTL_WB_EN parameter.

0x0 = FALSE

0x1 = TRUE

11

CH0_MULTI_BLK_EN

R

0x1

The value of this register is derived from the DMAC_CH0_MULTI_BLK_EN parameter.

0x0 = FALSE

0x1 = TRUE

10

CH0_LOCK_EN

R

0x0

The value of this register is derived from the DMAC_CH0_LOCK_EN parameter.

0x0 = FALSE

0x1 = TRUE

9

CH0_SRC_GAT_EN

R

0x0

The value of this register is derived from the DMAC_CH0_SRC_GAT_EN parameter. For a description of this parameter, refer to page 112.

0x0 = FALSE

0x1 = TRUE

8

CH0_DST_SCA_EN

R

0x0

The value of this register is derived from the DMAC_CH0_DST_SCA_EN parameter.

0x0 = FALSE

0x1 = TRUE

7

CH0_STAT_SRC

R

0x0

The value of this register is derived from the DMAC_CH0_STAT_SRC parameter.

0x0 = FALSE

0x1 = TRUE

6

CH0_STAT_DST

R

0x0

The value of this register is derived from the DMAC_CH0_STAT_DST parameter.

0x0 = FALSE

0x1 = TRUE

5:3

CH0_STW

R

0x3

The value of this register is derived from the DMAC_CH0_STW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

2:0

CH0_DTW

R

0x3

The value of this register is derived from the DMAC_CH0_DTW parameter.

0x0 = NO_HARDCODE

0x1 = 8

0x2 = 16

0x3 = 32

0x4 = 64

0x5 = 128

0x6 = 256

0x7 = reserved

REG_DMA_COMP_PARAMS_2_H

  • Name: Refer to the bit table in the description for it

  • Size: 32

  • Address offset: 3ECh

  • Read/write access: R

DMA component parameters register 2 high, contains component identification information

31:28 CH7_MULTI_BLK_TYPE 27:24 CH6_MULTI_BLK_TYPE 23:20 CH5_MULTI_BLK_TYPE 19:16 CH4_MULTI_BLK_TYPE 15:12 CH3_MULTI_BLK_TYPE 11:8 CH2_MULTI_BLK_TYPE 7:4 CH1_MULTI_BLK_TYPE 3:0 CH0_MULTI_BLK_TYPE

Bit

Symbol

Access

INI

Description

31:28

CH7_MULTI_BLK_TYPE

R

0x0

The values of these bit fields are derived from the DMAC_CHx_MULTI_BLK_TYPE parameter.

0x0 = NO_HARDCODE

0x1 = CONT_RELOAD

0x2 = RELOAD_CONT

0x3 = RELOAD_RELOAD

0x4 = CONT_LLP

0x5 = RELOAD_LLP

0x6 = LLP_CONT

0x7 = LLP_RELOAD

0x8 = LLP_LLP

27:24

CH6_MULTI_BLK_TYPE

R

0x0

The values of these bit fields are derived from the DMAC_CHx_MULTI_BLK_TYPE parameter.

0x0 = NO_HARDCODE

0x1 = CONT_RELOAD

0x2 = RELOAD_CONT

0x3 = RELOAD_RELOAD

0x4 = CONT_LLP

0x5 = RELOAD_LLP

0x6 = LLP_CONT

0x7 = LLP_RELOAD

0x8 = LLP_LLP

23:20

CH5_MULTI_BLK_TYPE

R

0x0

The values of these bit fields are derived from the DMAC_CHx_MULTI_BLK_TYPE parameter.

0x0 = NO_HARDCODE

0x1 = CONT_RELOAD

0x2 = RELOAD_CONT

0x3 = RELOAD_RELOAD

0x4 = CONT_LLP

0x5 = RELOAD_LLP

0x6 = LLP_CONT

0x7 = LLP_RELOAD

0x8 = LLP_LLP

19:16

CH4_MULTI_BLK_TYPE

R

0x0

The values of these bit fields are derived from the DMAC_CHx_MULTI_BLK_TYPE parameter.

0x0 = NO_HARDCODE

0x1 = CONT_RELOAD

0x2 = RELOAD_CONT

0x3 = RELOAD_RELOAD

0x4 = CONT_LLP

0x5 = RELOAD_LLP

0x6 = LLP_CONT

0x7 = LLP_RELOAD

0x8 = LLP_LLP

15:12

CH3_MULTI_BLK_TYPE

R

0x0

The values of these bit fields are derived from the DMAC_CHx_MULTI_BLK_TYPE parameter.

0x0 = NO_HARDCODE

0x1 = CONT_RELOAD

0x2 = RELOAD_CONT

0x3 = RELOAD_RELOAD

0x4 = CONT_LLP

0x5 = RELOAD_LLP

0x6 = LLP_CONT

0x7 = LLP_RELOAD

0x8 = LLP_LLP

11:8

CH2_MULTI_BLK_TYPE

R

0x0

The values of these bit fields are derived from the DMAC_CHx_MULTI_BLK_TYPE parameter.

0x0 = NO_HARDCODE

0x1 = CONT_RELOAD

0x2 = RELOAD_CONT

0x3 = RELOAD_RELOAD

0x4 = CONT_LLP

0x5 = RELOAD_LLP

0x6 = LLP_CONT

0x7 = LLP_RELOAD

0x8 = LLP_LLP

7:4

CH1_MULTI_BLK_TYPE

R

0x0

The values of these bit fields are derived from the DMAC_CHx_MULTI_BLK_TYPE parameter.

0x0 = NO_HARDCODE

0x1 = CONT_RELOAD

0x2 = RELOAD_CONT

0x3 = RELOAD_RELOAD

0x4 = CONT_LLP

0x5 = RELOAD_LLP

0x6 = LLP_CONT

0x7 = LLP_RELOAD

0x8 = LLP_LLP

3:0

CH0_MULTI_BLK_TYPE

R

0x0

The values of these bit fields are derived from the DMAC_CHx_MULTI_BLK_TYPE parameter.

0x0 = NO_HARDCODE

0x1 = CONT_RELOAD

0x2 = RELOAD_CONT

0x3 = RELOAD_RELOAD

0x4 = CONT_LLP

0x5 = RELOAD_LLP

0x6 = LLP_CONT

0x7 = LLP_RELOAD

0x8 = LLP_LLP

REG_DMA_COMP_PARAMS_1_L

  • Name: Refer to the bit table in the description for it

  • Size: 32

  • Address offset: 3F0h

  • Read/write access: R

DMA component parameters register 1 low, contains component identification information

31:24 CH3_MAX_BLK_SIZE 23:16 CH2_MAX_BLK_SIZE 15:8 CH1_MAX_BLK_SIZE 7:0 CH0_MAX_BLK_SIZE

Bit

Symbol

Access

INI

Description

31:24

CH3_MAX_BLK_SIZE

R

0x10

The value of this register is derived from the DMAC_CH3_MAX_BLK_SIZE from config_form.vh

CH3_MAX_BLK_SIZE = log2(DMAC_CH3_MAX_BLK_SIZE) + 1

23:16

CH2_MAX_BLK_SIZE

R

0x10

The value of this register is derived from the DMAC_CH2_MAX_BLK_SIZE from config_form.vh

CH2_MAX_BLK_SIZE = log2(DMAC_CH2_MAX_BLK_SIZE) + 1

15:8

CH1_MAX_BLK_SIZE

R

0x10

The value of this register is derived from the DMAC_CH1_MAX_BLK_SIZE from config_form.vh

CH1_MAX_BLK_SIZE = log2(DMAC_CH1_MAX_BLK_SIZE) + 1

7:0

CH0_MAX_BLK_SIZE

R

0x10

The value of this register is derived from the DMAC_CH0_MAX_BLK_SIZE from config_form.vh

CH0_MAX_BLK_SIZE = log2(DMAC_CH0_MAX_BLK_SIZE) + 1

REG_DMA_COMP_PARAMS_1_H

  • Name: Refer to the bit table in the description for it

  • Size: 32

  • Address offset: 3F4h

  • Read/write access: R

DMA component parameters register 1 high, contains component identification information

31 HIGH_BIT_NUM_HS_INT3 30 HIGH_BIT_NUM_HS_INT2 29 HIGH_BIT_NUM_HS_INT1 28 STATIC_ENDIAN_SELECT 27 ADD_ENCODED_PARAMS 26:22 NUM_HS_INT 21:18 RSVD 17:16 M2_DATA_WIDTH 15:14 M1_DATA_WIDTH 13:12 S_DATA_WIDTH 11:10 NUM_MASTER_INT 9:6 NUM_CHANNELS 5:2 RSVD 1:0 INTR_IO

Bit

Symbol

Access

INI

Description

31

HIGH_BIT_NUM_HS_INT3

R

0x0

Number of hardware handshake interfaces. If it is 128, this bit read value is 1.

30

HIGH_BIT_NUM_HS_INT2

R

0x0

Number of hardware handshake interfaces. If it is greater than 63 and less than 128, this bit read value is 1.

29

HIGH_BIT_NUM_HS_INT1

R

0x0

Number of hardware handshake interfaces. If it is greater than 31 and less than 64, this bit read value is 1.

28

STATIC_ENDIAN_SELECT

R

0

The value of this register is derived from the DMAC_STATIC_ENDIAN_SELECT parameter.

0 = FALSE (dynamic endian fixed)

1 = TRUE (not supported)

27

ADD_ENCODED_PARAMS

R

1

The value of this register is derived from the DMAC_ADD_ENCODED_PARAMS parameter.

0 = FALSE

1 = TRUE

26:22

NUM_HS_INT

R

0x1E

Number of hardware handshake interfaces. The value of this register is derived from the DMAC_NUM_HS_INT parameter.

NUM_HAS_INT = DMAC_NUM_HS_INT[4:0]

0x00 = 0

0x10 = 16

21:18

RSVD

R

-

Reserved

17:16

M2_DATA_WIDTH

R

0x0

AXI Master2 data width. The value of this register is derived from the DMAC_M2_DATA_WIDTH parameter. Master2 data width should be equal to that of Master 1.

M2_DATA_WIDTH = log2(DMAC_DATA_WIDTH/32)

0x0 = 32 bits

0x1 = 64 bits

0x2 = 128 bits

0x3 = Reserved

15:14

M1_DATA_WIDTH

R

0x0

AXI Master1 data width. The value of this register is derived from the DMAC_M1_DATA_WIDTH parameter. Master1 data width should be equal to that of Master 2.

M1_DATA_WIDTH = log2(DMAC_DATA_WIDTH/32)

0x0 = 32 bits

0x1 = 64 bits

0x2 = 128 bits

0x3 = Reserved

13:12

S_DATA_WIDTH

R

0x0

APB slave interface data width.The value of this register is derived from the DMAC_S_DATA_WIDTH parameter. The width is fixed to 32 bits for now.

S_DATA_WIDTH = log2(DMAC_DATA_WIDTH/32)

0x0 = 32 bits

0x1 = Reserved

0x2 = Reserved

0x3 = Reserved

11:10

NUM_MASTER_INT

R

0x1

Number of master interface. The value of this register is derived from the DMAC_NUM_MASTER_INT parameter. This value is fixed to 1 (only 2 AXI masters supported now.)

0x0 = Reserved

0x1 = 2

0x2 = Reserved

0x3 = Reserved

9:6

NUM_CHANNELS

R

0x7

Number of channels. The value of this register is derived from the DMAC_NUM_CHASNNELS parameter.

NUM_CHANNELS = DMAC_NUM_CHASNNELS -1

0x0 = 1

0xf = 16

5:2

RSVD

R

-

Reserved

1:0

INTR_IO

R

0x0

Interrupt output format.The value of this register is derived from the DMAC_INTR_IO parameter.

0x0 = ALL

0x1 = TYPE

0x2 = COMBINED

0x3 = reserved

REG_DMA_COMPONENT_ID_REGS_L

  • Name: DMAC ID

  • Size: 32

  • Address offset: 3F8h

  • Read/write access: R

DMA component ID register low, identifies the DMA controller release date

31:0 DMA_COMPONENT_ID

Bit

Symbol

Access

INI

Description

31:0

DMA_COMPONENT_ID

R

32’h22101416

DMAC ID (release_date_. Configure it in config form.

REG_DMA_COMPONENT_ID_REGS_H

  • Name: It is obtained from the high 32 bits from git logs in git server.

  • Size: 32

  • Address offset: 3FCh

  • Read/write access: R

DMA component ID register high, identifies the DMA controller rtl version

31:0 RTL_GIT_VER

Bit

Symbol

Access

INI

Description

31:0

RTL_GIT_VER

R

32’h00201028

It is obtained from the high 32 bits from git logs in git server.