I work on zynq 7000 soc whose the DMA component is the pl330.I am trying to do a "scatter-gather" dma transfer, in a channel thread by programming the debug instruction registers via the APB bus.For example, I load from the source, an entire bloc of 64 bytes using one DMALD instruction.After that, I would like to scatter the data in a custom mapping in the destination buffer.For that I use DMAADDH/DMADNH before DMAST instructions.
Let's take an simple example :
DMAMOV SAR ... ;; address aligned on 64 bytesDMAMOV DAR ... ;; address aligned on 64 bytesDMAMOV CCR SB8 SS8 DB1 DS32 ;; with src_inc = 1 and dst_inc = 1
DMALDDMAST ;; store one 32b wordDMAST ;; store the second 32b wordDMAADDH DAR, 4DMAST ;; KO : this word is not stored and an error occurs DMAWMB DMASEV e3DMAEND
My problem is the third word is not stored and the DMAC raise the error "st_data_unavailable" (bit 13 in the XDMAPS_FTCx_OFFSET register).
The third store works if the offset added to the destination address is a multiple of 8 : DMAADDH DAR, 8 is ok for example.
I think something is unclear for me about mfifo usage.
Thank you for your help.
Hello,
Thank you for your reply. So, could you move my question to the forum " Architectures and Processors forum" please ?
Many thanks.
Guillaume