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

下载本文档

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

文档简介

信号与信息处理综合实验实验报告实验五DAM to SDRAM例程详解 一、实验目的:1. 熟悉Visual DSP软件。2. 了解Blankfin系列DSP芯片的内存管理情况以及DMA寄存器的配置和基于描述符的DMA传送机制二、实验要求:例程详解:visual 4.5版本的安装目录下,找exzmple/blackfin535/DMA to SDRAM 的文件,写一份例程详解报告。三、实验分析:1. 相关知识 DMABlackfin使用 DMA进行存储器空间内部或者存储器空间与外设之间的数据传送.DMA控制器允许Blackfin或外部设备指定数据传送操作,然后其返回到正常操作中。DMA控制器传送数据的过程独立于处理器的活动。DMA控制器将数据传输完成后会给处理器内核一个信号来表示数据已经传完。 SDRAM同步DRAM。其工作频率与系统工作频率相同。内存管理21535的内存管理把存储器视为一个统一的4GB的地址空间,使用32位地址。所有的资源,包括内部存储器、外部存储器、PCI地址空间和I/O控制寄存器,都具有独立的地址空间。芯片内部的308KB RAM中, L1(一级缓存)52KB,L2(二级缓存)256KB (0xF003FFFF0xF000000);内存地址的具体配置空间如下图所示.L1 内存访问速度最快,每个处理器周期能完成一次访问。L2 内存远离内核处理器,用于存储更大量的程序代码和数据。存储器的DMA控制器提供高带宽的数据传输能力,它能够在内部L1/L2存储器和外部存储器(包括PCI存储空间)之间执行代码或者数据的块传输。 DMA寄存器的配置为了描述Mem DMA序列,DMA控制器使用一套名为描述子块(Descriptor)的参数。当需要后继的DMA序列时,这些描述子块被链接起来。这样,一个DMA序列完成时能够自动初始化下一个序列,并将其启动。如果不需启动下一个序列,只要将其指向一个内容为0的地址空间即可。如果下一次链接指向原描述子块,则DMA完成后暂停。为访问整个ADSP-21535的地址空间,源地址和目的地址描述子块采用了全32位地址的基指针。两个描述子块均为5个字的连续空间,需要注意的是该连续空间必须定义在L2范围内。描述子块内包含的内容如下图所示:Mem DMA规定,描述子块所在的首地址必须传入相关的寄存器。描述子块首地址的高16位装入DMA_DBP寄存器(DMA Descriptor Base Pointer Register,DMA描述子块基地址寄存器)内。由于该寄存器严格限定必须在0xF0000xF003,这就限定了源和目的地址描述子块只能定义在L2存储器内,并且高16位地址相同。描述子块首地址的低16位放在两个寄存器中,源地址描述子块低16位装入MDS_DND寄存器(Source Memory DMA Next Descriptor Pointer Register,DMA源地址下一个描述子块寄存器),而目的地址描述子块低16位装入MDD_DND寄存器(Destination Memory DMA Next Descriptor Pointer Register,DMA目的地址下一个描述子块寄存器)。其说明如图3所示。2. 例程解析首先调用Setup_SDRAM 子程序:start:_main:CALL Setup_SDRAM; / routine sets up SDRAM。初始化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 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 aboveSSYNC;/该指令中处理下一条指令前终结所有挂起的指令,并且刷新内核缓冲和所有的写缓冲,/且向外部系统产生一个同步请求信号,得到答复信号后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 Bank 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 point 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; / 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 & 0xFFFF;/基址指针寄存器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 = 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 Register调用Setup_DMA_descriptor子程序,将上面的初始值载入对应寄存器在描述子块的地址传入相应寄存器后,后面的四项先配置,然后设置第一项。DMA 通道需要一组称为 DMA 描述符的参数,该参数存储在存储器中。每个描述符包含特定 DMA 传送序列所需要的所有信息,其组成结构如下:1、要传送数据块的 32 位起始地址; 2、要传送的数据量 ;3、其他各种控制信息如该 DMA 做什么,传送何时完成等配置信息; 4、指向下一个描述符的指针。Setup_DMA_descriptor子程序如下:/*DMA descriptorSetup*/Setup_DMA_descriptor: / Because 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+0x8 = 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 = WP5;BITSET(R6,0);/设置R6的最低位为1,表示准备启动读DMA Enable DMA for DMAR7.L = WI0;BITSET(R7,0);/设置R7的最低位为1,表示准备启动写DMAEnable DMA for DMAWP5 = R6;WI0 = R7.L;/R6和R7的低16位写入两个配置寄存器中,真正启动DMADMA_WAIT:/等待DMA结束Wait for DMA to CompleteR6 = WP1;cc = bittst(R6,15); / poll bit for completionIF cc JUMP DMA_WAIT;/如果为1,表示还在DMA状态RTS;/*/使能后,DMA程序将sdram_blink_test这段小程序移到SDRAM中执行,知道执行结束,控制器返回给处理器。设置基于描述符的 DMA 的典型时序的流程:将 DMA 配置字(其 15 位置为 1 ), DMA 传送计数, DMA 起始地址( 15:0 ), DMA 起始地址( 31:16 )以及下一个描述符指针( 15:0 ),写入描述符存储器地址 BASE+0BASE+8 中。如果描述符是链表中的最后一个元素,或者是链表中的唯一元素,那么该描述符中的下一个描述符指针应该指向下一个存储单元,该存储单元的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=0x0(z);light:cc=

温馨提示

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

评论

0/150

提交评论