实验五DAMtoSDRAM例程详解_第1页
实验五DAMtoSDRAM例程详解_第2页
实验五DAMtoSDRAM例程详解_第3页
实验五DAMtoSDRAM例程详解_第4页
实验五DAMtoSDRAM例程详解_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、信号与信息处理综合实验实验报告实验五DAM to SDRAM 例程详解.一、实验目的 :1. 熟悉 Visual DSP 软件。2. 了解 Blankfin 系列 DSP芯片的内存管理情况以及 DMA寄存器的配置和基于描述符的 DMA 传送机制二、实验要求:例程详解: visual 4.5 版本的安装目录下, 找 exzmple/blackfin535/DMA to SDRAM的文件,写一份例程详解报告 。三、实验分析:1.相关知识 DMABlackfin使用 DMA进行存储器空间内部或者存储器空间与外设之间的数据传送.DMA控制器允许Blackfin或外部设备指定数据传送操作,然后其返回到正

2、常操作中。DMA控制器传送数据的过程独立于处理器的活动。DMA控制器将数据传输完成后会给处理器内核一个信号来表示数据已经传完。 SDRAM同步 DRAM。其工作频率与系统工作频率相同。内存管理21535 的内存管理把存储器视为一个统一的4GB 的地址空间,使用32 位地址。所有的资源,包括内部存储器、外部存储器、PCI 地址空间和I/O 控制寄存器,都具有独立的地址空间。芯 片 内 部 的308KB RAM 中 ,L1( 一 级 缓 存 )52KB , L2( 二 级 缓 存 )256KB(0xF003FFFF0xF000000) ;内存地址的具体配置空间如下图所示.L1 内存访问速度最快,

3、每个处理器周期能完成一次访问。 L2 内存远离内核处理器, 用于存储更大量的程序代码和数据。存储器的 DMA控制器提供高带宽的数据传输能力, 它能够在内部 L1/L2 存储器和外部存储器 ( 包括 PCI 存储空间 ) 之间执行代码或者数据的块传输。 DMA寄存器的配置为了描述Mem DMA序列, DMA控制器使用一套名为描述子块(Descriptor)的参数。当需要后继的DMA序列时, 这些描述子块被链接起来。这样, 一个 DMA序列完成时能够自动初始化下一个序列, 并将其启动。 如果不需启动下一个序列,只要将其指向一个内容为0 的地址空间即可。如果下一次链接指向原描述子块,则DMA完成后暂

4、停。.为访问整个ADSP-21535的地址空间, 源地址和目的地址描述子块采用了全32 位地址的基指针。两个描述子块均为5 个字的连续空间,需要注意的是该连续空间必须定义在L2 范围内。描述子块内包含的内容如下图所示:MemDMA规定,描述子块所在的首地址必须传入相关的寄存器。描述子块首地址的高16位装入 DMA_DBP寄存器 (DMA Descriptor Base Pointer Register,DMA描述子块基地址寄存器 ) 内。由于该寄存器严格限定必须在0xF000 0xF003,这就限定了源和目的地址描述子块只能定义在L2 存储器内,并且高16 位地址相同。描述子块首地址的低16

5、位放在两个寄存器中,源地址描述子块低16 位装入 MDS_DND寄存器 (Source Memory DMA Next Descriptor Pointer Register, DMA源地址下一个描述子块寄存器 ) ,而目的地址描述子块低16 位装入 MDD_DND寄存器 (DestinationMemoryDMANextDescriptorPointerRegister ,DMA目的地址下一个描述子块寄存器) 。其说明如图3 所示。2. 例程解析首先调用Setup_SDRAM子程序:start:_main:CALL Setup_SDRAM;/ routine sets up SDRAM 。初

6、始化SDRAM 的控制寄存器在对 SDRAM进行读写操作前首先须对 SDRAM进行初始化, 在 Blackfin 处理器中, SDRAM 初始就是对 Blackfin 处理器的 SDRAM控制器( EBIU_SDRRC,EBIU_SDBCTL和 EBIU_SDGCTL)进行初始化配置,这三个控制寄存器的值要根据所选用的SDRAM参数进行设置。/*SDRAM Setup*/.Setup_SDRAM:/P0 指向 SDRAM 的 REFRESH RATE CONTROL(刷新率控制)寄存器p0.l = EBIU_SDRRC & 0xffff;/ Assign LSBs of p0 to point

7、 to SDRAM Refresh Rate Control Registerp0.h = EBIU_SDRRC 16; / Assign MSBs of p0 to point to SDRAM Refresh Rate Control Register/为刷新率控制寄存器赋值r0 = 0x074A (z);/ Assign appropriate value to SDRAM Refresh Rate Control Register (zero extend)Wp0 = r0;/ from the calculations in the commented section aboveSS

8、YNC;/ 该指令中处理下一条指令前终结所有挂起的指令,并且刷新内核缓冲和所有的写缓冲,/且向外部系统产生一个同步请求信号,得到答复信号后SSYNC 才结束。/这样可以防止之前的指令对下一条指令产生影响/为 SDRAM 的 MEMORY BANK CONTROL寄存器赋值p0.l = EBIU_SDBCTL & 0xffff;/ Assign LSBs of p0 to point to SDRAM Memory Bank Control Registerp0.h = EBIU_SDBCTL 16;/ Assign MSBs of p0 to point to SDRAM Memory Ban

9、k Control Registerr0 = 0x0001(z); / assign control data word to r0p0 = r0;/ write control data word to EBIU_SDBCTlSSYNC;/为 SDRAM 的 MEMORY GLOBAL CONTROL寄存器赋值p0.l = EBIU_SDGCTL & 0xffff;/ Assign LSBs of p0 to point to SDRAM Memory Global Control Registerp0.h = EBIU_SDGCTL 16;/ Assign MSBs of p0 to po

10、int to SDRAM Memory Global Control Registerr0.l = 0x998d;/ assign LSBs of control data word to r0r0.h = 0x0091;/ assign LSBs of control data word to r0p0 = r0;/ write control data word to EBIU_SDGCTLSSYNC;RTS;/将源描述子块和目的描述模块地址分别装入P0、 P1,目的和源描述子块(Descriptor )的相关寄存器地址载入P2-P5 及 I0-I2 ;P0.L = SDRAM_READ;

11、 / set up DMA descriptors. SDRAM_READ:源描述子块P0.H = SDRAM_READ;.P1.L = SDRAM_WRITE; / set up DMA descriptors. SDRAM_WRITE:目的描述子块P1.H = SDRAM_WRITE;/P2 至 P5 指向 DMA 的寄存器P2.L = MDR_DND & 0xFFFF;/DMA源描述子块配置寄存器P2.H = (MDR_DND 16) & 0xFFFF;/DMA Memory DMA Next Descriptor Pointer RegisterP3.L = DB_NDBP & 0xF

12、FFF;/基址指针寄存器P3.H = (DB_NDBP 16) & 0xFFFF; /DMA Next Descriptor Base Pointer RegisterP4.L = MDW_DND & 0xFFFF;/DMA目的描述子块配置寄存器P4.H = (MDW_DND 16) & 0xFFFF;/DMA Memory DMA Next Descriptor Pointer RegisterP5.L = MDR_DCFG & 0xFFFF;/DMA源地址配置寄存器P5.H = (MDR_DCFG 16) & 0xFFFF;/DMA Memory Config RegisterI0.L =

13、 MDW_DCFG & 0xFFFF;/DMA目的地址配置寄存器I0.H = (MDW_DCFG 16) & 0xFFFF;/DMA Memory Config RegisterI1.L = MDR_DSAH & 0xFFFF;/DMA存储器内程序开始地址的高位寄存器I1.H = (MDR_DSAH 16) & 0xFFFF;/DMA Memory Start Address High RegisterI2.L = MDR_DSAL & 0xFFFF;/开始地址的低位寄存器I2.H = (MDR_DSAL 16) & 0xFFFF;/DMA Memory Start Address Low R

14、egister调用 Setup_DMA_descriptor子程序,将上面的初始值载入对应寄存器在描述子块的地址传入相应寄存器后,后面的四项先配置,然后设置第一项。DMA 通道需要一组称为DMA 描述符的参数,该参数存储在存储器中。每个描述符包含特定DMA 传送序列所需要的所有信息,其组成结构如下:1、要传送数据块的32位起始地址;2、要传送的数据量;3、其他各种控制信息如该DMA 做什么,传送何时完成等配置信息;4、指向下一个描述符的指针。Setup_DMA_descriptor子程序如下:/*DMA descriptorSetup*/Setup_DMA_descriptor:/ Becau

15、se we use the memDMA, the setup is given for the source and destinationWP0+0x2 = R0;/DMA CountDMA 长度(计数值)写入源描述块第二个字中P0+0x4 = R1;/DMA Start Address 将 DMA 的 32 位源起始地址写入源描述块第三第四个字中WP0+0x8 = R2;/DMA Next Descriptor Pointer 将下一个源描述子块的地址写入源描述块第五个字中WP1+0x2 = R0;/DMA CountP1+0x4 = R3;/DMA Start AddressWP1+0

16、x8 = R4;/DMA Next Descriptor PointerWP0 = R0.H;/DMA Config Word配置字 R0.H = 0x8001WP1 = R2.H;/DMA Config Word配置字 R2.H = 0x8003;.RTS;/*/调用 Enable_DMA子程序/*Enable DMA*/Enable_DMA:R6 = P0;WP2 = R6.L;/ 将 DMA源描述子块配置寄存器的地址传给P2。WP3 = R6.H;/ 将描述子块基地址寄存器的地址传给P3R6 = P1;WP4 = R6.L;/ 将目的描述子块所在地址的低16 位传给配置目的地址寄存器R6

17、 = WP5;BITSET(R6,0);/ 设置 R6的最低位为 1,表示准备启动读DMAEnable DMA for DMAR7.L = WI0;BITSET(R7,0);/ 设置 R7的最低位为 1,表示准备启动写DMAEnable DMA for DMAWP5 = R6;WI0 = R7.L;/R6 和 R7 的低 16 位写入两个配置寄存器中,真正启动 DMADMA_W AIT:/ 等待 DMA结束 Wait for DMA to CompleteR6 = WP1;cc = bittst(R6,15);/ poll bit for completionIF cc JUMP DMA_WA

18、IT;/如果为 1,表示还在 DMA 状态RTS;/*/使能后, DMA程序将 sdram_blink_test 这段小程序移到 SDRAM中执行,知道执行结束,控制器返回给处理器。设置基于描述符的DMA 的典型时序的流程:.将 DMA 配置字(其 15 位置为 1 ), DMA 传送计数,DMA 起始地址( 15:0 ), DMA起 始 地 址 (31:16 ) 以 及 下 一 个 描 述 符 指 针 ( 15:0), 写 入 描 述 符 存 储 器 地 址BASE+0BASE+8中。如果描述符是链表中的最后一个元素,或者是链表中的唯一元素, 那么该描述符中的下一个描述符指针应该指向下一个存

19、储单元,该存储单元的15 位必全为零。基于上述要求,下一个描述符指针可以指向当前描述符的基地址BASE+0 。在 DMA 传送序列完成之后,DMA 配置字的 15 位被清零。控制器返回给处理器。 Blink Code在 SDRAM中执行, sdram_blink_test程序如下所示:start_code_to_dma: nop;sdram_blink_test:/ This code is DMAed to SDRAMblink:P0.L = FIO_DIR & 0xFFFF;P0.H = FIO_DIR 16;R1 = 0x000f(z);WP0 = R1;/*Set PF 0 - PF 3 as outputs*/ssync;P1.L = FIO_FLAG_S & 0xFFFF;/FIO_FLAG_S:标志置位寄存器P1.H = FIO_FLAG_S 16;P2.L = FIO_FLAG_C & 0xFFFF;/FIO_FLAG_C:标志清除寄存器P2.H = FIO_FLAG_C 16;Wp2=r1;P5.H=0x1000;/*Delay loop count*/P5.L=0x0000;r2=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论