DMA Controller Registers
| Address Offset | Bit | Register Description | Operation |
|---|---|---|---|
| 0x00 | DMASG_CHANNEL_INPUT_ADDRESS | ||
| [31:0] | Write source address. | Write | |
| 0x08 | DMASG_CHANNEL_INPUT_STREAM | ||
| [7:0] | Write inputs ports to identify physical input port to use. | Write | |
| 0x0C | DMASG_CHANNEL_INPUT_CONFIG | ||
| 0 | Use to transfer to AXI4-stream port. The bit is always set to 0. | Write | |
| 12 | 0: Transfer from AXI4-stream port 1: Transfer from memory
port |
||
| 13 | Completion on packet. Limits the descriptor to only contain one packet and force its completion when it fully transferred into memory. | ||
| 14 | Wait on Packet. Ensures the channel waits for the beginning of a packet before capturing the data (avoid desync). | ||
| 0x10 | DMASG_CHANNEL_OUTPUT_ADDRESS | ||
| [31:0] | Write the destination address. | Write | |
| 0x18 | DMASG_CHANNEL_OUTPUT_STREAM | ||
| [7:0] | Write the outputs ports to identify the physical output port to use. | Write | |
| [15:8] | Write the source port ID. | ||
| [23:16] | Write the sink port ID. | ||
| 0x1C | DMASG_CHANNEL_OUTPUT_CONFIG | ||
| 0 | Transfer to AXI4-stream port. The bit is always set to 0. | Write | |
| 12 | 0: Transfer to AXI4-stream port 1: transfer to memory
port |
||
| 13 | Last bit. Specify end of packet to be sent at the end of a transfer. | ||
| 0x20 | DMASG_CHANNEL_DIRECT_BYTES | ||
| [31:0] | Write the number of bytes to be transferred in direct mode. | Write | |
| 0x2C | DMASG_CHANNEL_STATUS | ||
| 0 | Set to 1 to start DMA in direct mode (also as a busy bit). | Write | |
| 1 | Set to 1 to start self-restart. | ||
| 2 | Set to 1 to set a channel to stop itself. | ||
| 4 | Set to 1 to start a channel using a linked-list. Ensure linked-list support is enabled by the channel. | ||
| 0 | 1: Channel busy 0: Channel ready |
Read | |
| 0x44 | DMASG_CHANNEL_PRIORITY | ||
| [2:0] | Set the priority of channel 0 to 7 (7 has the highest priority). | Write | |
| [10:8] | Set the weight of channel 0 to 7 (7 has the highest priority). | ||
| 0x50 | DMASG_CHANNEL_INTERRUPT_ENABLE | ||
| 0 | Enable interrupt at the end of each descriptor. | Write | |
| 2 | Enable interrupt when the channel is out of busy. | ||
| 3 | Enable interrupt when the status of descriptor is updated. | ||
| 4 | Enable interrupt when the channel done transferring a packet (AXI4-stream to memory). | ||
| 0x54 | DMASG_CHANNEL_INTERRUPT_PENDING | ||
| 0 | Interrupt mask status at the end of each descriptor. | Read | |
| 2 | Interrupt mask status when the channel is out of busy. | ||
| 3 | Interrupt mask status when the status of descriptor is updated. | ||
| 4 | Interrupt mask status when done transferring a packet (AXI4-stream to memory) | ||
| 0 | Clear interrupt mask at the end of each descriptor. | Write | |
| 2 | Clear interrupt mask when the channel is out of busy. | ||
| 3 | Clear interrupt mask when the status of descriptor is updated. | ||
| 4 | Clear interrupt mask when the channel done transferring a packet (AXI4-stream to memory). | ||
| 0x60 | DMASG_CHANNEL_PROGRESS_BYTES | ||
| [31:0] | Read the numbers of bytes transferred for the current descriptor. This register monitors transfer progress in SG mode only. Refer to DMASG_CHANNEL_STATUS (bit 0) for Direct mode. | Read | |
| 0x70 | DMASG_CHANNEL_LINKED_LIST_HEAD | ||
| [31:0] | Write the address of first descriptor in a linked list. | Write | |
| Channel | Offset |
|---|---|
| 0 | 0x000 |
| 1 | 0x080 |
| 2 | 0x100 |
| 3 | 0x180 |
| 4 | 0x200 |
| 5 | 0x280 |
| 6 | 0x300 |
| 7 | 0x380 |