Synopsys AXI DMAC模块协议总结及实例操作

目录

一、概述

本文主要讲解Synopsys AXI DMAC Databook中常见寄存器的功能,讲述DMAC配置流程。

二、协议解析

2.1 全局寄存器

1. DMAC_CFG(DMAC Configuration Register)

DMA 控制器全局使能

bit 名称 说明
0 DMAC_EN 1 = 使能 DMAC
others - 保留

Note:

所有 channel 配置完成后再置 DMAC_EN=1

Disable DMAC 会强制停止所有通道

2. DMAC_CHEN(Channel Enable Register)
bit 名称 说明
[7:0] CH_EN 对应 channel 使能
[15:8] CH_EN_WE 写 1 才允许修改对应 CH_EN
典型写法:
c 复制代码
DMAC_CHEN = (1 << ch) | (1 << (ch + 8));
3. DMAC_ID / DMAC_VERSION
寄存器 说明
DMAC_ID 固定 IP ID
DMAC_VERSION IP 版本号(区分 v3/v4/v5)

2.2 通道寄存器

以下寄存器 每个 Channel 都有一组,基地址一般是:

bash 复制代码
CHn_BASE = DMAC_BASE + 0x100 * n
1. CH_SAR(Source Address Register)

解析:DMA传输源地址

特性:

物理地址

支持 32 / 64 bit(取决于配置)

2. CH_DAR(Destination Address Register)

解析:DMA传输目的地址

物理地址

3. CH_BLOCK_TS(Block Transfer Size)

BLOCK_TS 一次 block 传输的传输次数

📌 真实传输字节数

bash 复制代码
bytes = BLOCK_TS × SRC/DST Transfer Width

Note:

如果有burst传输,则需要再乘以MSIZE(在CH_CTL对应bit设置),具体计算如下公式。

具体示例:


4. CH_CTL(Channel Control Register)

最关键寄存器之一

常见字段:

bit 名称
SRC_TR_WIDTH 源传输宽度(8/16/32/64bit)
DST_TR_WIDTH 目的传输宽度
SRC_INC 源地址是否递增
DST_INC 目的地址是否递增
SRC_MSIZE Source burst 长度
DST_MSIZE Dest burst 长度
IOC_BLKTFR Block 完成产生中断

注意设置MSIZ的意义在于:DMA在一次总线控制权获取之后,连续传输多个数据单元,而不是每传输一个数据就重新请求一次总线。

5. CH_CFG(Channel Configuration Register)
字段 说明
HS_SEL_SRC 源 handshake:HW / SW
HS_SEL_DST 目的 handshake
SRC_PER 源外设号
DST_PER 目的外设号
TT_FC Transfer Type & Flow Control

TT_FC(重点)决定传输的方向

含义
0x0 M2M (DMA 控制)
0x1 M2P
0x2 P2M
0x3 P2P

Note:CH_CFG是针对小于等于8个channel的控制器,大于8小于16的控制器要使用CH_CFG2

6. CH_LLP(Linked List Pointer)

链表模式:

指向下一个 LLI 描述符,非LLP模式,每次DMA都需要重新配置DMAC_CFG,采用LLP模式,相当于将配置统一存放在申请的内存中,由硬件按偏移一次读取配置进行DMA操作。

支持 scatter-gather

📌 如果不用链表:

CH_LLP = 0

LLI具体解析

LLI 是用于组织多个 DMA 传输描述符的数据结构,使 DMA 控制器可以自动连续处理多个传输任务,而无需 CPU 干预。

普通的 DMA 传输一次只能处理一段数据(源地址、目的地址、传输长度),当要传多个段时,就需要 CPU 多次配置 DMA。为减少 CPU 负担,引入 LLI 机制,允许将多个传输任务以链表的形式预设好,DMA 控制器可自动跳转执行下一个任务

2.3 中断相关寄存器

1. DMAC_INTSTATUS

中断总状态,此寄存器是在DMA channnel小于等于8时使用,大于8时读DMAC_INTSTATUSREG2。

当总的对应中断触发后,可查看对应的channel中断,确定中断触发类型。

2. DMAC_COMMON_INTCLEAR

清除中断

3. Channel 中断状态
寄存器 说明
CH_INTSTATUS 单 channel 中断状态
CH_INTCLEAR 清除 channel 中断
CH_INTMASK 中断屏蔽

三、配置流程

DMAC_CFG.DMAC_EN = 0 配置 CH_SAR / CH_DAR 配置 CH_CTL 配置 CH_CFG CH_LLP = 0非链表 使能中断--可选 DMAC_CHEN 使能 channel DMAC_CFG.DMAC_EN = 1

四、其他相关链接

1. Synopsys APB I2C协议总结

2. SPI协议详细总结附实例图文讲解通信过程

3. Synopsys APB UART协议总结

相关推荐
cy4130266 天前
总线的atmotic与lock/exclusive
axi
CinzWS9 天前
车规级高可靠性DMA控制器(G-DMA)架构设计--第一章 设计需求与规格定义 1.1 核心驱动力与应用场景
架构·dma
CinzWS9 天前
车规级高可靠性DMA控制器(G-DMA)架构设计--第二章 IP核心架构设计 2.1 顶层系统架构
架构·系统架构·dma
一个平凡而乐于分享的小比特16 天前
DMA详解:让数据传输“甩掉”CPU的搬运工
嵌入式硬件·dma
赖small强20 天前
【Linux驱动开发】Linux DMA 技术详解与驱动开发实战
linux·dma·直接内存访问
时光の尘1 个月前
【STM32】DMA超详细解析·入门级教程
stm32·单片机·嵌入式硬件·mcu·串口·dma·usart
brave and determined1 个月前
MCU学习Day24——STM32G030多路ADC DMA采集深度解析:完全可配置序列器与不完全可配置序列器的陷阱与抉择
stm32·单片机·嵌入式硬件·dma·adc·hal·多通道采集
时光の尘2 个月前
STM32外设面试速通:UART、I2C、SPI、DMA、RAM/FLASH与ADC/DAC
stm32·dma·iic·adc·flash·spi·ram
draracle2 个月前
RP2040 I2S MAX98357音频驱动开发
dma·i2s·rp2040·max98357