带你玩转基于SkyEye的TLE987 DMA控制器实现
01
DMA 介绍
DMA,全称Direct Memory Access,即直接存储器访问。
DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。
02
TLE987 DMA控制器
2.1 TLE987 DMA控制器功能介绍
DMA 控制器的主要特点是:
1) 与AHB-Lite 兼容进行DMA 传输。
2) 与APB 兼容进行寄存器编程。
3) 它有一个单独的 AHB-Lite 主设备,用于使用 32 位地址总线和 32 位数据总线传输数据。
4) 最多支持14 个DMA 通道。
5) 每个DMA 通道都有专用的握手信号。
6) 每个DMA 通道都有一个可编程的优先级。
7) 每个优先级都使用由 DMA 通道编号确定的固定优先级进行仲裁。
8) DMA 还支持多种传输类型:
- 内存到内存
- 内存到外设
- 外设到内存
9) 支持多种DMA 周期类型。
10) 支持多种DMA 传输数据宽度。
11) 每个DMA 通道都可以访问一个主通道和一个备用通道控制数据结构。
12) 所有通道控制数据都以小端格式存储在系统内存(RAM) 中。
13) 它使用单个AHB-Lite 突发类型执行所有DMA 传输。目标数据宽度等于源数据宽度。
14) 单个 DMA 周期中的传输次数可以设置为 1 到 1024。
2.2 TLE987 DMA控制器框架图

▲图 1 DMA控制器整体框架图
DMA控制器可以实现多达14个硬件DMA请求,如下图所示

▲图2 DMA控制器通道选择图
2.3 TLE987 DMA 工作模式
2.3.1 发送方式
1) 单次发送,一次dma请求(dma_req),产生一次数据传输
2) 多次发送,一次 dma 请求(dma_req), 产生多次数据传输
2.3.2 DMA控制器通道数据结构体
DMA 控制器通道控制数据结构体分为两种,基础数据结构体与备份数据结构体,需要用户来分配一块系统RAM区域给这两种数据结构体。两种通道控制数据结构体图如下所示:

▲图3 DMA通道控制数据结构图
寄存器CTRL_BASE_PTR 可以设置基础数据结构体的基地址,备份数据结构体的基地址由硬件计算得出,用户可以访问ALT_CTRL_BASE_PTR 寄存器获取备份数据结构体基地址。
2.3.4 DMA控制器通道数据结构体Control配置
DMA 通道配置表如下图所示:

图4 DMA控制器通道配置图
设置dst_inc值来设置目的地址增加值,设置dst_size值来设置目的地址的数据宽度。
设置 src_inc值来设置源地址增加值,设置src_size值来设置源地址的数据宽度,src_size 值应与 dst_size设置成一致。其他位域值可以根据官方数据手册进行配置,这里不再一一阐述。
2.3.3 DMA 周期类型
1) 无效类型
2) 基本类型
3) 自动请求类型
4) 乒乓类型
5) 内存分散-聚集类型
6) 外围分散-聚集类型
这里着重讲一下DMA周期基础类型工作模式,在此模式下可以将控制器配置为使用基础或备用数据结构体,工作流程为
① 控制器执行 2R(R_power) 传输。如果剩余的传输次数为零,则流程执行步骤 3
② 控制器仲裁:
– 如果更高优先级的通道正在请求服务,则控制器为该通道提供服务。
– 如果外围设备或软件向控制器发出请求,则继续执行步骤 1
③ 控制器向主机处理器发送信号,表明 DMA 周期已完成。
03
SkyEye TLE987 DMA控制器仿真
SkyEye,中文全称天目全数字实时仿真软件,是基于可视化建模的硬件行为级仿真平台,支持用户通过拖拽的方式对硬件进行行为级别的仿真和建模。
SkyEye目前支持主流的嵌入式硬件平台,可以运行主流的操作系统,此外还能适配国内自主研发的操作系统天脉。通过利用基于LLVM的动态二进制翻译技术,使虚拟处理器在典型的桌面计算机上运行速度可以达到2000MIPS以上。
3.1 实现TLE 987 DMA 通道控制器数据结构体仿真
如下图所示:

▲图5 DMA 通道控制器数据结构体仿真图
3.2 实现TLE987 DMA 相关寄存器读写操作
如下图所示:

▲图6 DMA 相关寄存器读操作图
3.3 实现TLE987 DMA 数据搬运操作
如下图所示:

▲图7 DMA 数据搬运操作操作图
3.4 SkyEye中 TLE 987 DMA实现gp模型图
如下图所示:

▲图 8 DMA实现gp模型图
引用:
1. 官方数据手册Infineon-TLE987x-UserManual-v01_60-EN.pdf