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.

  • 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 non-memory 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.SRC_TR_WIDTH or CTLx.DST_TR_WIDTH) without interruption. The burst length is defined by the source or destination burst size parameters (CTLx.SRC_MSIZE or CTLx.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.SRC_TR_WIDTH or CTLx.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 single transactions to be executed in a single block transfer (one single transaction = one single AXI 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 LLPx_L 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.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.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.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.FCMODE is valid only when the transfer type is peripheral-to-peripheral and the destination peripheral is the flow controller (i.e., CTLx.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 non-memory 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.SRC_MSIZE / CTLx.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.SRC_MSIZE[2:0] / CTLx.DEST_MSIZE[2:0]

Burst Length

000

1

001

4

010

8

011

16

100 and above

Not Supported

Supported Transfer Widths:

CTLx.SRC_TR_WIDTH[2:0] / CTLx.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 (CTL_Lx.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.SRC_TR_WIDTH in Bytes)
    
  • Source Burst Transaction Bytes

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

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

    dst_burst_size_bytes = (Decoded value of CTLx.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.BLOCK_TS register. Total block bytes:

    blk_size_bytes_dma = CTLx.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.SRC_TR_WIDTH / CTLx.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.

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.

  • Before reading the destination data after a DMA transfer completes, software must perform a D-Cache Invalidate operation; otherwise, severe data incoherency issues will occur.

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.

  • Non-memory peripherals use the handshake interface to indicate to the DMAC that they are ready to transfer or accept data over the bus.

  • Non-memory 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.SRC_HS_POL or CFGx.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.HS_SEL_SRC and CFGx.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:

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 CFG_Lx.SRC_HS_POL and CFG_Lx.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 CTL_Lx.SRC_MSIZE / CTL_Lx.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 (CTL_Lx.SRC_MSIZE and CTL_Lx.DEST_MSIZE) must be 0.

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

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

Transaction Requests and Bus Control

Peripheral Transfer Requests and FIFO Thresholds

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: CTL_Lx.SRC_MSIZE

  • Corresponding destination configuration: CTL_Lx.DEST_MSIZE

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.

Single Transaction Region

During a DMA block transfer, depending on the role of the flow controller, the conditions for triggering a single transaction are categorized into the following two scenarios:

  • 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 enter the single transaction region, executing transfers as single transactions:

    • The configured burst transfer length for the source or destination is 0.

    • 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 (i.e., the underlying hardware automatically downgrades to handle the tail data).

  • When the peripheral is the flow controller, the total transfer data amount is unknown. The peripheral must explicitly request single transfers via hardware 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 its asserted src.dma_single and src.dma_req signals are active in the same clock cycle.

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

Internal State Machine and AXI Master Arbitration

Each channel features a source state machine and a destination state machine running in parallel. These state machines generate request inputs for the arbiter, which handles arbitration for the AXI master interface.

Transfers between the peripheral and the DMAC (representing the granted state machine) can only proceed when the source/destination state machine is granted control of the AXI master interface, and the AXI master interface is granted control of the external bus.

AXI transfers from the source peripheral or to the destination peripheral cannot officially initiate until the channel FIFO is ready.

FIFO Readiness

In addition to bus arbitration, the initiation of an AXI transfer strictly depends on the readiness state of the internal channel FIFO within the DMAC:

  • For Single Transactions:

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

    • Destination Write Ready: The channel FIFO must have buffered enough data internally to construct at least one single data item of width CTL_Lx.DST_TR_WIDTH.

  • For Burst Transactions:

    • Source Read Ready: The channel FIFO must have sufficient remaining space internally to accommodate the data for the entire burst length.

    • Destination Write Ready: The channel FIFO must have buffered the data for the entire burst length internally.

Note

  • Special Handling Near Transfer Completion: When the number of remaining data items to be transferred at the source is less than DMAC_CHx_FIFO_DEPTH / 2, the source state machine will no longer strictly wait for more than half of the FIFO space to become idle; instead, it will directly initiate the final read to terminate the transfer. Similarly, when the remaining data volume required by the destination is less than half of the FIFO depth, the destination state machine will also lift the half-full waiting restriction.

  • AXI Bus Burst Length Restrictions: The actual read/write burst length (ARLEN/AWLEN) on the physical bus will not exceed FIFO_DEPTH / 2, particularly under the following circumstances:

    • SAR / DAR are unaligned with DMAC_DATA_WIDTH.

    • src_gather or dst_scatter is enabled, and the transfer type is INCR.

    • When DMAC_CHx_MSIZE_BIGGER_THAN_FIFO_DEPTH_ENABLE is not defined, the FIFO_DEPTH_len under the bus width does not exceed 256.

Transaction Requests

Synthesizing the above handshake signals and FIFO statuses, the ultimate logic for generating bus operations at the underlying level is as follows:

  • Non-Memory Peripheral Transfers: The source/destination state machine first waits for single or burst handshake requests issued by the peripheral. Upon receiving a request, the state machine will formally issue a bus read/write request to the AXI master interface only if the channel FIFO satisfies the readiness conditions mentioned above.

  • Memory Transfers: Because memory lacks handshake signals, the state machine merely needs to wait for the channel FIFO to meet the readiness conditions before directly issuing bus requests to the AXI master interface.

Caution

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

Multi-block Transfer

Based on the number of transferred data blocks, DMA transfers can be divided into:

  • Single-block transfer: Contains only one independent data block within the entire DMA transfer lifecycle.

  • Multi-block transfer: A single DMA transfer contains multiple consecutive data blocks. The implementation of multi-block transfers relies on three underlying addressing and control mechanisms supported by the hardware. The source and destination can completely independently choose which mechanism to adopt.

    • Block chaining using linked lists: Points to the physical base address of the next LLI in system memory via the linked list pointer register (LLPx). An LLI is essentially a set of register configurations stored in memory (i.e., a block descriptor), which contains not only the configuration parameters for the next data block but also a pointer to the subsequent LLI. When block chaining is enabled, the DMAC hardware state machine actively fetches the LLI via the bus at the beginning of each data block transfer.

    • Auto-reload of channel registers: At the end of each data block transfer, the DMAC hardware automatically restores the corresponding channel registers to the initial configuration values written by the software when the channel was first enabled, and uses this to directly start the next block.

    • Contiguous block addresses: During the alternation of consecutive data blocks, the starting address of the current data block is automatically set by the hardware to strictly follow the ending address of the previous data block transfer.

In a multi-block transfer scenario, when block chaining is employed, it is recommended to use Linked Lists as the preferred method for managing multiple blocks. For successive data blocks, the DMAC Linked List Pointer register (LLPx) is always updated via the linked-list mechanism.

A Block Descriptor consists of six register fields: SARx, DARx, LLPx, CTLx, SSTATx, and DSTATx. Among these, the first four registers, together with the CFGx register, are used by the DMAC hardware to load and describe the specific transfer attributes of each data block.

Note

  • 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

In this mode, before the start of each data block, the DMAC fetches the block descriptor for that data block from system memory to reprogram the channel registers. This process is called an LLI update.

The DMAC block chaining mechanism uses a linked list pointer register (LLPx), which stores the address of the next linked list item (LLI) in system memory. Each LLI contains the complete descriptor for the corresponding data block: SARx, DARx, LLPx, CTLx, SSTATx, and DSTATx.

To establish block chaining, you need to program a linked list sequence in memory.

Warning

Memory access to the LLI is fixed as strictly 32-bit aligned 32-bit accesses. Even if the master interface where the LLI resides supports a data width exceeding 32 bits, this access behavior cannot be changed or programmed to any other width than 32 bits.

During an LLI update, the DMAC fetches the values of the SARx, DARx, LLPx, and CTLx registers from system memory. If the configuration parameter DMAC_CHx_CTL_WB_EN = True, the updated contents of the CTLx, SSTATx, and DSTATx registers will be written back to memory upon completion of the data block transfer.

The following figure illustrates how to use a linked list in memory to define a multi-block transfer based on block chaining:

../../_images/multi_block_transfer_using_linked_lists.png

Multi-block transfer using linked lists when DMAC_CHx_STAT_SRC = True

When the configuration parameter DMAC_CHx_STAT_SRC = False, it is assumed that no space is allocated for the source status in system memory. In this case, the physical arrangement order of the linked list items is as follows: SARx -> DARx -> LLPx -> CTLx -> DSTATx.

../../_images/multi_block_transfer_using_linked_lists_when_dmac_chx_stat_src_set_to_false.png

Multi-block transfer using linked lists when DMAC_CHx_STAT_SRC = False

Note

To avoid confusing the SARx, DARx, LLPx, CTLx, SSTATx, and DSTATx register locations of the LLI with the corresponding DMAC memory-mapped physical registers, this document uniformly adds the LLI. prefix to the LLI register locations; i.e., LLI.SARx, LLI.DARx, LLI.LLPx, LLI.CTLx, LLI.SSTATx, and LLI.DSTATx.

The following figure illustrates the mapping process from the linked list item stored in memory to the channel register block descriptor:

../../_images/mapping_of_block_descriptor_lli_in_memory_to_channel_registers_when_dmac_chx_stat_src_set_to_true.png

Mapping of the block descriptor (LLI) in memory to channel registers when DMAC_CHx_STAT_SRC = True

Rows 6 to 10 of Table Programming Configuration Matrix for Transfer Types and Channel Register Update Methods provide the required configuration values for the LLPx, CTLx, and CFGx registers when using block chaining for multi-block DMA transfers.

Note

  • For rows 6 to 10 in the table: At the beginning of each data block, the LLI.CTLx, LLI.LLPx, LLI.SARx, and LLI.DARx registers in the LLI are always fetched.

  • The fetched LLI.LLPx and LLI.CTLx locations are always used to reprogram the DMAC’s LLPx and CTLx registers. However, whether the fetched LLI.SARx/LLI.DARx addresses are used to reprogram the hardware’s SARx/DARx registers depends on the specific row number configuration selected in the table.

Programming Configuration Matrix for Transfer Types and Channel Register Update Methods

No.

Transfer Type

LLP.LOC=0

LLP_SRC_EN (CTLx)

RELOAD_SRC (CFGx)

LLP_DST_EN (CTLx)

RELOAD_DST (CFGx)

CTLx, LLPx Update Method

SARx Update Method

DARx Update Method

Write Back

1

Single-block transfer or the last transfer of a multi-block transfer

Yes

0

0

0

0

None, user reprogrammed

None (Single)

None (Single)

No

2

Auto-reload multi-block transfer with contiguous SAR

Yes

0

0

0

1

CTLx, LLPx reloaded from initial values

Contiguous

Auto-reload

No

3

Auto-reload multi-block transfer with contiguous DAR

Yes

0

1

0

0

CTLx, LLPx reloaded from initial values

Auto-reload

Contiguous

No

4

Auto-reload multi-block transfer

Yes

0

1

0

1

CTLx, LLPx reloaded from initial values

Auto-reload

Auto-reload

No

5

Single-block transfer or the last transfer of a multi-block transfer

No

0

0

0

0

None, user reprogrammed

None (Single)

None (Single)

Yes

6

Linked list multi-block transfer with contiguous SAR

No

0

0

1

0

CTLx, LLPx loaded from next LLI

Contiguous

Linked list

Yes

7

Linked list multi-block transfer with auto-reload SAR

No

0

1

1

0

CTLx, LLPx loaded from next LLI

Auto-reload

Linked list

Yes

8

Linked list multi-block transfer with contiguous DAR

No

1

0

0

0

CTLx, LLPx loaded from next LLI

Linked list

Contiguous

Yes

9

Linked list multi-block transfer with auto-reload DAR

No

1

0

0

1

CTLx, LLPx loaded from next LLI

Linked list

Auto-reload

Yes

10

Linked list multi-block transfer

No

1

0

1

0

CTLx, LLPx loaded from next LLI

Linked list

Linked list

Yes

Note

  • Memory location calculation: Throughout the table, the exact memory location for fetching the LLI.CTLx register from the position pointed to by the LLPx register is equal to the base address of the LLI (stored in the LLPx register) plus a fixed hardware offset. For example, the location of the LLI.CTLx register is LLPx.LOC + 0xc.

  • Status write-back: Referring to the configuration matrix, if the “Write Back” column is “Yes” and DMAC_CHx_CTL_WB_EN = True, then at the end of each block transfer, CTLx[63:32] is always written to system memory. Furthermore, if the corresponding source/destination status update is enabled (CFGx.SS_UPD_EN / CFGx.DS_UPD_EN) and supported by hardware (DMAC_CHx_STAT_SRC / DMAC_CHx_STAT_DST = True), the corresponding status will also be fetched and written back to system memory.

  • If the configuration parameter DMAC_CHx_CTL_WB_EN = False, the control and status registers will never be written back, regardless of the transfer type (all rows in this column are considered “No”).

Auto-reloading of Channel Registers

Under the auto-reload mechanism, the channel registers are restored to their initial values at the completion of each data block, and these new values are used for the new data block transfer. Depending on the row number in the configuration matrix, some or all of the SARx, DARx, and CTLx channel registers are reloaded from their initial values at the beginning of the data block transfer.

Contiguous Address between Blocks

In this mode, the starting address between consecutive data blocks is set as a continuation immediately following the ending address of the previous data block. Whether contiguous source or destination addresses between blocks can be enabled is determined by the combined function of the CTLx.LLP_SRC_EN, CFGx.RELOAD_SRC, CTLx.LLP_DST_EN, and CTLx.RELOAD_DST registers (see the configuration matrix).

Caution

Addressing conflict limit: You cannot configure the update method for both SARx and DARx as contiguous simultaneously. If you require dual-ended contiguous functionality, you should increase the data block transfer size (CTLx.BLOCK_TS); or when this value has reached its maximum limit, please use the row 10 configuration in the table and manually set the LLI.SARx and LLI.DARx addresses of the block descriptor in memory to be equal to the corresponding addresses at the end of the previous data block.

Suspension of Transfers between Blocks

At the end of each data block transfer, an end-of-block interrupt is triggered if the following conditions are met:

  1. Interrupts are enabled (CTLx.INT_EN = 1).

  2. The block interrupt for the channel is not masked (MaskBlock[n] = 1, where n is the channel number).

Note

The block-complete interrupt is generated after the data block transfer to the destination is completely finished.

  • For the linked list mode (Rows 6, 8, and 10 in the table), the DMA transfer does not stall between data blocks. For example, at the end of block N, the DMAC automatically continues processing block N+1.

  • For the auto-reload mode (Rows 2, 3, 4, 7, and 9 in the table), if the end-of-block interrupt is enabled and not masked, the DMA transfer automatically stalls after triggering the interrupt.

The DMAC will not proceed with the transfer of the next data block until the hardware detects that the software has executed a write operation to the ClearBlock[n] register (used to clear the block complete interrupt for that channel).

Warning

In auto-reload mode, if interrupts are disabled (CTLx.INT_EN = 0) or block interrupts are masked (MaskBlock[n] = 0), the DMA transfer does not stall. The purpose of the inter-block channel suspend mechanism is to ensure that the processor has time to execute the Interrupt Service Routine (ISR) for the penultimate data block before the transmission of the final data block begins. This ensures that the ISR clears the .RELOAD_SRC and/or .RELOAD_DST reload bits before the final block is completed.

Ending Multi-Block Transfers

The final state of all multi-block transfer sequences must be as shown in row 1 or row 5 of the configuration matrix. Towards the end of each data block transfer, the DMAC samples the row number; if it is currently in the state of row 1 or row 5, it indicates that the previously transferred block is the last data block, and the DMA transfer will subsequently be terminated.

  • Terminating auto-reload loops (Rows 2, 3, 4): Because LLPx.LOC = 0 and reload is set, the multi-block DMA transfer will continue continuously. The software must clear both the .RELOAD_SRC and .RELOAD_DST registers simultaneously in the ISR processing the penultimate data block transfer; this operation causes the DMAC state to transition to row 1.

  • Terminating linked list transfers (Rows 6, 8, 10): The user must properly set the block descriptor of the last data block in system memory so that both LLI.CTLx.LLP_SRC_EN and LLI.CTLx.LLP_DST_EN are 0, thereby entering the state of row 5.

Note

  • Row 1 and row 5 are dedicated to single-block transfers or terminating multi-block transfers. Ending with the row 5 state allows status fetching and write-back for the last data block; ending with the row 1 state disables status fetching and write-back for the last data block.

  • The sampling of the LLPx.LOC bit occurs only once during the start phase of the transfer when the channel is enabled. It determines whether the write-back mechanism is enabled throughout the entire transfer period; attempts to modify this bit in subsequent consecutive data blocks will have no effect.

Caution

Valid state transitions: The only state transition allowed in the configuration matrix is moving from any row to row 1 or row 5 (to terminate the DMA transfer); switching between other rows in the table is not allowed. Software must ensure that illegal state transitions do not occur between data blocks of a multi-block transfer. For example, if the configuration for data block N is in row 10, the only allowable configuration for data block N+1 can only be row 10 or row 5.

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 (DSR_Lx.DSI) field, multiplied by the number of bytes per single AXI transfer to the destination (decoded value of CTL_Lx.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 DSR_Lx register.

Scatter is enabled by writing a 1 to the CTL_Lx.DST_SCATTER_EN field. The CTL_Lx.DINC field determines whether the address increments or remains fixed. If CTL_Lx.DINC dictates fixed address control for the entire DMA transfer, the CTL_Lx.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)
DSR_Lx.DSI = 0x16
DSR_Lx.DSC = 0x04 (destination scatter count)
CTL_Lx.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 (SGR_Lx.SGC) field.

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

Gather is enabled by writing a 1 to the CTL_Lx.SRC_GATHER_EN field. The CTL_Lx.SINC field determines whether the address increments or remains fixed when reaching the gather boundary. If CTL_Lx.SINC dictates fixed address control for the entire DMA transfer, the CTL_Lx.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 SGR_Lx.SGC field. Upon hitting the gather boundary, the source address increments or decrements by the value in SGR_Lx.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)
SGR_Lx.SGI = 0x01
SGR_Lx.SGC = 0x04 (source gather count)
CTL_Lx.SRC_GATHER_EN = 1 (source gather enabled)
SARx = A0 (starting source address)

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

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

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

Where TWB is the Transfer Width in Bytes (decoded value of CTL_Lx.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 (SGR_Lx.SGC) and Destination Scatter Count (DSR_Lx.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 a channel is correctly configured for secure mode will the DMAC’s internal AXI master interface output attributes indicating Secure Access within its bus transactions, thereby legitimately penetrating the secure check nodes of peripherals and memory.

Note

Execution Privilege Requirements: 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 CFG_Lx.CH_SUSP and CFG_Lx.INACTIVE flags:

  1. Trigger Suspend: Write 1 to CFG_Lx.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 CFG_Lx.INACTIVE bit until it reads 1. This indicates that the channel FIFO is empty and all DMA transactions on the bus have concluded. If using a hardware handshake interface, the peripheral must continually assert the handshake signal (dma_req / dma_single) until INACTIVE is set, ensuring 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. (If INACTIVE is not set, the write to 0 is ignored by hardware). After disabling, the hardware automatically clears CH_SUSP.

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

Note

  • Register Retention: 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.

  • Data Integrity: Under certain conditions, when INACTIVE is asserted, partial data may still reside in the FIFO. If the channel is disabled at this precise moment, how the residual data is handled and the read-back accuracy of the address registers depend on the transfer flow direction:

    • Memory-to-Memory (mem-to-mem): If the channel is disabled after CFG_Lx.INACTIVE is asserted, no data is lost. The DMAC flushes the remaining data from the channel FIFO to the destination memory. Read-back values for CURR_SARx, CURR_DARx, and CTL_Hx are precise following suspend and disable.

    • Peripheral-to-Memory (peri-to-mem): If the channel is disabled after CFG_Lx.INACTIVE is asserted, no data is lost. The DMAC flushes the remaining data from the channel FIFO to the destination memory. Read-back values for CURR_SARx, CURR_DARx, and CTL_Hx are precise.

    • Memory-to-Peripheral (mem-to-peri): If disabled after CFG_Lx.INACTIVE is asserted, residual data in the channel FIFO might be lost. Since the source is memory, data read by the DMAC from memory is not destroyed, but the DMAC may abandon some data in the FIFO to conclude the hardware handshake with the destination peripheral during the suspend. Additionally, the DMAC cannot foresee whether the destination peripheral will assert handshake signals post-suspend. If the user suspends the channel because the destination peripheral cannot ingest more data, the DMAC is unable to write out the remainder and thus discards data left in the FIFO. Read-back values for CURR_SARx and CURR_DARx (fixed address) are imprecise; CTL_Hx read-back is precise.

    • Peripheral-to-Peripheral (peri-to-peri): Similar to mem-to-peri, residual data in the FIFO might be lost. The DMAC may abandon FIFO data to satisfy hardware handshakes during suspend. Read-back values for CURR_SARx and CURR_DARx (fixed address) are imprecise; CTL_Hx read-back is precise.

Channel Resume

If software writes 0 back into CFG_Lx.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.

Abnormal Transfer Termination

Software can abruptly terminate a DMAC transfer by forcibly clearing the enable bits, but it must strictly adhere to polling mechanisms and accept subsequent side effects.

  • Single Channel Termination: Clear the CHENREG_L/H.CH_EN bit for the channel.

  • Global Termination: Clear the global enable bit in the DMAC configuration register (DmaCfgReg[0]).

Warning

Polling for Disabled Status is Mandatory: Clearing the enable bit via the APB slave interface merely signifies a disable request issued by software; the channel will absolutely not disable instantaneously. If the source or destination is processing an AXI SPLIT or RETRY response (the target device is busy), the DMAC must persistently retry until an OKAY response is received; otherwise, it constitutes a protocol violation. Therefore, after issuing the request, software MUST poll and read back a 0 (polling the channel’s CH_EN) before it can confirm the channel has been entirely shut down.

Side Effects and Limitations of Abnormal Termination:

  1. Permanent Data Truncation: If data remains in the FIFO during a forced disable, this data is irrevocably discarded. For read-sensitive source peripherals (like source FIFOs), this results in substantial data loss; for non-read-sensitive devices (like memory), one can simply re-initiate the read.

  2. Handshake Interruption: A forcibly disabled channel may fail to send an acknowledge signal (ACK) to active Single or Burst transactions.

  3. Defined Length Burst Limitation: If the channel is configured to use defined length bursts (DMAC_INCR_BURSTS = 0), forcibly disabling the channel via software prior to transfer completion is unsupported.

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 Programming Configuration Matrix for Transfer Types and Channel Register Update Methods.

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, CTL_Lx.LLP_SRC_EN, CFG_Lx.RELOAD_SRC, CTL_Lx.LLP_DST_EN, and CFG_Lx.RELOAD_DST other than those listed in Programming Configuration Matrix for Transfer Types and Channel Register Update Methods 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 Programming Configuration Matrix for Transfer Types and Channel Register Update Methods.

Note

Row 5 in Programming Configuration Matrix for Transfer Types and Channel Register Update Methods 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 Programming Configuration Matrix for Transfer Types and Channel Register Update Methods. 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 non-memory peripherals) and the flow control device by programming the TT_FC field in CTL_Lx.

      • 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 CTL_Lx.SRC_GATHER_EN is enabled), program the SGR_L/Hx register.

    7. If Scatter is enabled (DMAC_CHx_DST_SCA_EN = True and CTL_Lx.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 CTL_Lx.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 CTL_Lx register locations for all LLI entries (except the final one) are configured as depicted in Row 10 of Programming Configuration Matrix for Transfer Types and Channel Register Update Methods. 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 CFG_Lx.RELOAD_SRC and CFG_Lx.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 CFG_Lx.RELOAD_SRC and CFG_Lx.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 CTL_Lx 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 CFG_Lx.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 CFG_Lx.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.CTL_Lx 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 CTL_Lx 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 RTK_DMAC component is an address definition (memory map) C header file. This can be used when the RTK_DMAC is programmed in a C environment

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.