User manual

Table Of Contents
Zynq-7000 AP SoC Technical Reference Manual www.xilinx.com 260
UG585 (v1.11) September 27, 2016
Chapter 9: DMA Controller
The appropriate APB interface must be used depending on the security state in which the SLCR
register TZ_DMA_NS initializes the DMA manager to operate. For example, if the DMA manager is in
the secure state, the instruction using the secure APB interface must be used or the DMAC ignores
the instruction. The non-secure APB interface is the suggested port to use to start or restart a DMA
channel when the DMA manager is in the non-secure state, however, the secure APB interface can be
used in non-secure mode. (Refer to section 9.2.12 Security for more details.) For additional
information related to the use of the DMA PL330 controller with ARM TrustZone, refer to UG1019,
Programming ARM TrustZone Architecture on the Zynq-7000 All Programmable SoC.
Before issuing instructions using the Debug Instruction registers or the DBGCMD register, the
DBGSTATUS register must be read to ensure that debug is idle, otherwise, the DMA manager ignores
the instructions. Refer to the Debug Command register and Debug Status register in Appendix B,
Register Details.
When the DMA manager receives an instruction from an APB slave interface, it can take several clock
cycles before it can process the instruction — for example, if the pipeline is busy processing another
instruction.
Prior to issuing DMAGO, the system memory must contain a suitable program for the DMA channel
thread to execute, starting at the address that the DMAGO specifies.
Example: Start DMA Channel Thread
The following example shows the steps required to start a DMA channel thread using the debug
instruction registers.
1. Create a program for the DMA channel.
2. Store the program in a region of system memory.
Use one of the APB interfaces on the DMAC to program a DMAGO instruction as follows:
3. Poll the dmac.DBGSTATUS register to ensure that debug is idle, that is, the dbgstatus bit is 0.
Refer to the Debug Status register in Appendix B, Register Details.
4. Write to the dmac.DBGINST0 register and enter the:
a. Instruction byte 0 encoding for DMAGO.
b. Instruction byte 1 encoding for DMAGO.
c. Debug thread bit to 0. This selects the DMA manager. Refer to the Debug Instruction-0
register in Appendix B, Register Details.
5. Write to the dmac.DBGINST1 register with the DMAGO instruction byte [5:2] data, refer to the
Debug Instruction-1 register in Appendix B, Register Details. These four bytes must be set to the
address of the first instruction in the program that was written to system memory in Step 2.
Instruct the DMAC to execute the instruction that the debug instruction registers contain:
6. Write a 0 to the dmac.DBGCMD register. The DMAC starts the DMA channel thread and sets the
dbgstatus bit to 1. Refer to the Debug Command register in Appendix B, Register Details. After
the DMAC completes execution of the instruction, it clears the dbgstatus bit to 0.