就翻译一下IP手册中的重要信息
地址 | 定义 | 比特位 | |
0x00 | CDMA控制寄存器 CDMACR | bit[2]:复位bit位 bit[3]:SGMod bit[6]:BD循环使能开关 bit[12]:DMA完成产生中断标志 | |
0x04 | CDMA状态寄存器 CDMASR | bit[1]:Idle---1表示Idle,0表示Not Idle | |
0x08 | 当前描述符指针 CURDESC_PNTR | bit[31:6]R/W bit[5:0]Reserved,SG模式下可用 ,CDMACR.IDLE = 1时写入,写入此字段的描述符地址必须对齐到64字节边界(8个64bit),示例是0x00,0x40,0x80 | |
0x10 | 末尾描述符指针 TAILDESC_PNTR | bit[31:6]R/W bit[5:0]Reserved,SG模式下可用 ,CDMACR.IDLE = 1时写入,写入该寄存器会启动SG模式DMA传输 | |
0x18 | 取数的源地址 SA | bit[31:0]R/W, Simple模式下可用,CDMACR.IDLE = 1时写入 | |
0x20 | 送往目的地的地址 DA | bit[31:0]R/W, Simple模式下可用,CDMACR.IDLE = 1时写入 | |
0x28 | 要转移的字节数 BTT | bit[25:0]R/W, bit[31:26]Reserved, Simple模式下可用,CDMACR.IDLE = 1时写入,写入BTT寄存器会启动Simple模式DMA传输,不允许值为零(0),会导致DMA内部错误 | |
Simple DMA 模式操作步骤:
在此模式下, CDMA执行一个编程的DMA命令后停止。需要外部AXI4主机为每个所需的DMA操作设置CDMA寄存器。
以下步骤描述了如何在简单操作模式下建立和启动CDMA传输。
a). 验证CDMASR.IDLE = 1。
b). 将CDMACR.IOC_IrqEn bit[12]位编程为传输完成时产生中断所需的状态。还可以设置错误中断启用(CDMACR.ERR_IrqEn)。
c). 将传输源地址写入源地址(SA)寄存器, 该源地址的传输数据必须有效并准备好传输。如果地址空间大于32位,还得写SA_MSB寄存器。
d). 将传输目标地址写入(DA)寄存器。如果地址空间大于32位,则还要写入DA_MSB寄存器。
e). 写入要传输的字节数。一次传输最多可以指定8,388,607(8M)个字节(使用DataMover Lite除外),写入BTT寄存器开始数据传输。
f). 轮询CDMASR.IDLE位进行断言(CDMASR.IDLE = 1)或等待CDMA产生输出中断(假设CDMACR.IOC_IrqEn = 1) 。
g). 如果基于中断,则确定中断源(传输完成或发生错误)。
h). 通过向DMASR.IOC_Irq位写入1来清除CDMASR.IOC_Irq位。
i). 准备另一次传输,回到第1步。
循环CDMA模式:
通过对BD链设置进行一些更改,可以在循环模式下运行AXI CDMA。在循环模式中, CDMA获取并处理相同的BD而没有任何中断。 该CDMA继续获取和处理,直到被停止或复位。它工作的流程与Scatter Gather Mode操作步骤一致,在编写尾部描述符寄存器之后, CDMA开始获取和处理BD(以环形方式设置),直到CDMA停止或复位。
Scatter Gather Mode操作步骤:
SG DMA模式由AXI CDMA SG接口访问相关指令,该指令列表被组织成传输描述符链。每个描述符都有一个指向要处理的下一个顺序描述符的地址指针。链中的最后一个描述符通常指向链中的第一个描述符,但也不是必需的。传输描述符由8个32bit的字组成,描述符表示单个CDMA传输加上到下一个顺序描述符的地址链接所需的控制和状态信息。
a).清除CDMACR.SGMode
b).设置CDMACR.SGMode。SGMode位的切换迫使CDMA SG引擎使用在步骤3中写入到CURDESC_PNTR的新值。
c). 写一个有效指针到通道CURDESC_PNTR寄存器(0x08),如果选择的地址空间大于32,则写入CURDESC_PNTR_MSB以指定当前描述符指针的高位。
d). 如果需要得话将控制信息写入通道CDMACR寄存器(0x00)以设置中断使能和键孔功能。
e). 写一个有效指针到通道TAILDESC_PNTR寄存器(0x10),将启动通道数据提取和处理描述符。如果选择的地址空间大于32,则写入TAILDESC_PNTR_MSB指定当前的高位描述符指针。
f). CDMA数据搬移操作继续,直到处理 TAILDESC_PNTR 处的描述符,然后引擎才空闲,此时CDMASR.Idle = 1。
该IP在满足时序的极限时钟频率下的资源占用率:
内部各选项配置如下:
手册中都有详细介绍,就不赘述了