带你玩转基于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