1、DMA 实验-MDMA 部分一、 实验目的1. 掌握 DSP MDMA 的工作原理。2. 熟悉 DMA 各个寄存器的作用。二、 实验内容编写程序,使用 MDMA 完成数据的复制。三、 预备知识1. ADSP-BF533 集成开发环境的使用,程序的编写和调试;2. DMA 的工作原理;3. 中断控制器的使用;四、 实验设备及工具硬件:EBF-LAB533 实验平台、 Blackfin 仿真器、PC 机。软件:操作系统 Win2000 或 Win XP、VisualDSP+集成开发环境。五、 实验原理1. 实验框图B F 5 3 3M e m o r y AM e m o r y B数据搬移图 D
2、MA 实验示意图2. DMA 概述 Blackfin 使用直接存储器访问(DMA)进行存储器空间内部或者存储器空间与外设之间的数据传送操作。ADSP-BF533 有多个独立的 DMA 控制器,能够以最小的 DSP 内核开销完成数据自动传输。DMA 传输可以发生在 ADSP- BF533 的内部存储器和任一有DMA 能力的外设之间。此外,DMA 传输也可以在任一有 DMA 能力的外设和已连接到外部存储器接口的外部设备之间完成(包括 SDRAM 控制器、异步存储器控制器) 。有DMA 传输能力的外设包括 SPORT、SPI 端口、UART 和 PPI 端口。每个独立的有 DMA 能力的外设至少有一
3、个专用 DMA 通道。ADSP- BF533 DMA 控制器能够支持一维(1D )或二维( 2D)DMA 传输。DMA 传输的初始化可以由寄存器或名为描述子块的参数来实现。二维 DMA 支持任意的行列数量,最大可达 64K 乘 64K 单位,支持任意数量的行列的步进,最大可达 +/-32K 单位。而且,列步进的值可以小于行步进的值,这就允许实现隔行扫描的数据流。这个特性对于视频应用非常有用,可以在空闲时进行数据的隔行存储。ADSP-BF533 DMA 控制器支持的典型 DMA 操作包括: 单一的、传输完成时停止的线性缓冲区; 自动刷新循环缓冲区,当全部或部分缓冲区满时中断; 一维或二维 DMA
4、,使用描述子链表; 二维 DMA,使用一个描述子阵列,仅指定公共页内的基 DMA 地址;除专用外设的 DMA 通道以外,在 ADSP-BF533 的不同存储器之间有 2 个存储器DMA 通道。这使得任意的存储器(包括外部 SDRAM、 ROM、SRAM 和 FLASH)之间的数据块传输成为可能,并使处理器干预降到最小。存储器 DMA 传输可以通过一套非常灵活的基于描述子的方法或标准的基于寄存器的自动缓冲机制来控制。3. DMA 的传输模式 DMA 传送可以使基于描述符的,也可以是基于自动缓冲的,基于描述符的 DMA 传送在发送 DMA 传送序列时,需要一组存储在存储器中的参数。这类传送允许将多
5、个 DMA序列链接在一起。在基于描述符的 DMA 传送中,一个 DMA 通道可以被编程建立,并且在当前序列完成之后自动启动另外一个 DMA 传送。基于自动缓冲的 DMA 传送允许处理器直接编程 DMA 控制寄存器,以发起一个 DMA 传送。完成传送时,控制寄存器被它们的原始设定值自动更新。(1) 基于描述符的 DMA 传送基于描述符的 DMA 传送是 Blackfin 控制 DMA 传送的最普通方法。使用该方法时,DMA 通道需要一组称之为 DMA 描述符的参数,该参数存储在存储器中。每个描述符包含特定 DMA 传送序列所需的所有信息,其结构主要由要传送的数据块的 32 位起始地址、要传送的数
6、据量、其他各种控制信息、指向下一个描述符的指针组成。 DMA 描述符的结构DMA 描述符中各元素的定义如下表:地址 地址内容名称 描述ASE DMA 配置字 描述符所有者,DMA 配置完成状态BASE+2DMA 传送计数 需要传送的数据元的数目BASE+4DMA 起始地址 传送起始地址的低 16 位BASE+6DMA 起始地址 传送起始地址的高 16 位BASE+8下一个描述符的指针 下一个描述符块的头地址的低 16 位表 DMA 描述符定义其中 BASE 是描述符的真实地址。处理器可以将表示多个传送的多组描述符放入存储器中,并构成一个链表。当链表被生成时,DMA 通道就有了完成多个传送序列所
7、需的所有信息,这些传送序列不需要处理器干预。当一个传送序列结束时,下一个描述符指针必须指向包含一个 16 位数据的存储单元,该 16 位数据的第 15 位为 0。如果该数据的第 0 位为 1,DMA 通道仍被使能,但被延迟,并且剩余的 FIFO 值不被丢弃。(2) 基于寄存器的 DMA 传送 下图为 DMA 配置寄存器中各个位的配置情况:DMA 配置寄存器每个 DMA 通道都有独立外设的一些功能。通过 DMA 配置字可以控制和监视独立外设的下列行为: 数据传送的方向独立外设的方向位是可读写的。对于某些外设和 MemDMA,该位是不能被修改的。 数据尺寸独立外设数据长度可以是 8 位 16 位
8、32 位。某些外设仅仅支持 16 位和 32 位。对于每次传送,DMA 地址的变化与数据的尺寸有关。传送 8 位数据时,DMA 地址增 1,传送 16位数据时,DMA 地址增 2,传送 32 位数据时,DMA 地址增 4。下表说明在 DMA 配置字如何配置有效的数据尺寸第 12 位 第 3 位 数据长度0 0 16 位半字0 1 32 位字1 0 保留1 1 8 位字节表 DMA 数据尺寸定义 外设控制位独立外设控制位提供了通过描述符对外设的控制。 外设状态独立外设状态位包含与当前描述符 DMA 传送有关的,包括缓冲器状态在内的外设 说明信息。在 DMA 传送完成时,该信息被写回当前描述符的
9、DMA 配置字中。4. Memory DMA(MDMA)Memory DMA 控制器提供在 Blackfin 存储空间的存储器与存储器的 DMA 传送,这些存储器空间包括外设组件互连地址空间,L1,L2 以及外部的同步和异步存储器。MDMA控制器控制器由两个通道组成。一个源通道,用于读存储器;一个目的通道,用于写存储器。两个通道共享一个可存放 16 条记录的 32 位 FIFO,源 DMA 通道写 FIFO,目的 DMA通道读 FIFO。 FIFO 支持 8 位 16 位 32 位传送。注意:MDMA 控制器不支持基于自动缓冲的 DMA。操作流程: MDMA_S0_START_ADDR 装入源
10、内存首地址(32 位) ; MDMA_D0_START_ADDR 装入目的内存首地址(32 位) ; 配置 Peripheral Map Register,使之 DMA 通道类型为 MDMA.; 写描述字,配置 DMA 控制寄存器。六、 实验设计1. 设计思路本实验采用 MDMA 方式实现了内存之间数据块搬移的功能。实验设计思路如下:(1) 初始化一块大小为 2000 字节的源缓冲区 Src_Buf,全局变量;(2) 初始化一块大小为 2000 字节的目标缓冲区 Dest_Buf,全局变量;(3) 将 Src_Buf 的内容用 MDMA 复制到 Dest_Buf 中。2. 设计实现MDMA 共
11、有 2 路分别是: MDMA_D0/S0 MDMA_D1/S1他们之间的差异仅在于优先级高低的不同。这里我们选择 MDMA_D0/S0 来实现数据的拷贝。我们设计一下 MDMA 的数据搬移方案:我们需要将 2000 字节的数据进行数据搬移。我们这里采用 16bit 位的 DMA 的方式 2000 字节按 16bit 划分,一共有 1000 个单元。在此,我们可以确定: MDMA 的 MODIFY 应该为 2,即为 16bit。 COUNT 应该为 1000, (1000 Project .,导入 MDMA 目录下的“MDMA.dpj”工程3. 编译(F7)并加载工程;打开 Project 菜单
12、,选择 Build Project。4. 加断点,运行程序(F5);(1) 在 MDMA 工程的中断服务程序“MDMA_Exp.c“中加断点,如下图:图 MDMA 实验断点位置(2) 打开菜单栏的 Register 项,选择 Peripherals-MEMDMAFlex-Source Channel-0,Peripherals-MEMDMAFlex- Destination Channel-0,观察寄存器里的值;图 MDMA 寄存期初始值运行程序,当 MDMA 搬移完成后,程序会运行至断点处,观察 MDMA 通道 0 的寄存器里的值图 MDMA 进入中断后,即完成一次 DMA 后状态(3) 运行程序,观察实验平台上 LED 的状态。八、 实验结果程序运行后,如果 MDMA 搬运完毕并且全部正确的话,实验平台上的 LED 会全亮。九、 思考如何使用描述子方式实现本实验中的数据