ImageVerifierCode 换一换
你正在下载:

DMA实验.doc

[预览]
格式:DOC , 页数:7 ,大小:72KB ,
资源ID:3550894      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3550894.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DMA实验.doc)为本站会员(hw****26)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

DMA实验.doc

1、实验 x DMA 实验一、实验目的1、了解 DMA 传送原理;2、掌握 S3C2410 DMA 控制器的使用;3、掌握 DMA 软件编程方法。二、实验内容1、编写单字节方式、双字节方式和四字节方式常规内存拷贝及时间检测程序;2、编写 DMA 方式内存拷贝及时间检测程序;3、比较 DMA 方式内存拷贝及常规内存拷贝的效率。三、实验设备1、硬件:DM2410 实验板;测控与显示扩展板;PC 机;JTAG 仿真器;2、软件:PC 机操作系统(WINDOWS 2000);ARM Developer Suite v1.2;Multi-ICE V2.2.5(Build1319);四、基础知识1、掌握 AD

2、S 开发环境的基本功能;2、了解 DMA 的原理以及处理步骤。五、实验说明1、DMA 基本知识计算机系统中常用的传输数据的控制方式通常包括三种:查询方式、中断方式和 DMA方式。对于高速外设与系统内存,或者系统内存的不同区域之间,进行大量数据的快速传送时,采用 DMA 方式可以大大提高系统的效率。DMA(直接存储器存取)方式是指在一定时间段内,由 DMA 控制器取代 CPU,获得总线控制权,来实现内存与外设,或者内存的不同区域之间大量数据的快速传递。典型 DMA 控制器(DMAC )的数据传送过程如下:1) DMAC 发出 DMA 传送请求;2) DMAC 通过连接到 CPU 的 HOLD 信

3、号向 CPU 提出 DMA 请求;3) CPU 在完成当前总线操作后立即对 DMA 请求响应。 CPU 的响应包括两部分: 1CPU 将控制总线、数据总线和地址总线浮空,即放弃对各总线的控制权; CPU 2将有效的 HLDA 信号加到 DMAC 上,以通知 DMAC CPU 已经放弃了总线的控制权;4) CPU 放弃总线控制权后,DMAC 接管系统总线的控制权,并向外设送出 DMA 的应答信号;5) DMAC 送出地址信号和控制信号,实现外设与内存或内存之间大量数据的快速传送;6) DMAC 将规定的数据字节传送完后,通过向 CPU 发 HOLD 信号,撤销对 CPU的 DMA 请求。CPU

4、收到此信号后,使 HLDA 信号无效,同时又重新开始控制总线,实现正常取指令、分析指令和执行指令的操作。【注意】1)在内存与外设之间进行 DMA 传送期间,DMAC 只输出地址信号和控制信号而数据传送是直接在内存和外设端口之间进行的,并不经过 DMAC;2)对于内存不同区域之间的 DMA 传送,则应先用一个 DMA 存储器读周期将数据从内存的源区域读出,存入到 DMAC 的内部数据暂存器中,再利用一个 DMA 存储器写周期将该数据写到内存的目的区域中去。2、S3c2410 的 DMA 控制器典型的 DMA 控制器如下图所示:S3c2410 支持位于系统总线和外设总线之间的 4 个通道的 DMA

5、C,每个通道可以处理四种情况:源和目的都在系统总线上; 1源在系统总线上,目的在外设总线上; 2源在外设总线上,目的在系统总线上; 3源和目的都在外设总线上。 4关于每个寄存器的详细说明,请参考 S3c2410 的数据手册。3、实验参考代码及其结果本实验通过 DMA 方式实现存储器到存储器的数据传送。1) 头文件、函数声明及特殊功能寄存器#include #include “def.h“#include “option.h“#include “2410addr.h“#include “2410lib.h“#include “2410slib.h“/函数声明存储器CPU数据端口状态/控制端口数据

6、缓冲寄存器DMA请求触发器DMA 控制器地址寄存器控制/状态寄存器计数器HOLDHLDA输入外设ReadyDMA请求DMA响应static void _irq Dma0Done(void);static void _irq Dma1Done(void);static void _irq Dma2Done(void);static void _irq Dma3Done(void);void DMA_M2M(int ch,int srcAddr,int dstAddr,int tc,int dsz,int burst);/DMA 特殊功能寄存器typedef struct tagDMAvolati

7、le U32 DISRC; /0x0 DMA 初始源寄存器volatile U32 DISRCC; /0x4 DMA 初始源控制寄存器volatile U32 DIDST; /0x8 DMA 初始目的寄存器volatile U32 DIDSTC; /0xc DMA 初始目的控制寄存器volatile U32 DCON; /0x10 DMA 控制寄存器volatile U32 DSTAT; /0x14 DMA 状态寄存器volatile U32 DCSRC; /0x18 当前源寄存器volatile U32 DCDST; /0x1c 当前目的寄存器volatile U32 DMASKTRIG;

8、/0x20 DMA 掩码触发寄存器DMA;static volatile int dmaDone;2) DMA 内存拷贝函数void DMA_M2M(int ch,int srcAddr,int dstAddr,int tc,int dsz,int burst)int i,time;volatile U32 memSum0=0,memSum1=0;DMA *pDMA;int length;length = tc*(burst ? 4:1)*(dsz=0)+(dsz=1)*2+(dsz=2)*4);Uart_Printf(“DMA%d MEM2MEM Testn“,ch);switch(ch)c

9、ase 0:pISR_DMA0 = (int)Dma0Done;rINTMSK pDMA = (void *)0x4b000000; /通道 0 地址break;case 1:pISR_DMA1 = (int)Dma1Done;rINTMSK pDMA = (void *)0x4b000040; /通道 1 地址break;case 2:pISR_DMA2 = (int)Dma2Done;rINTMSK pDMA = (void *)0x4b000080; /通道 2 地址break;case 3:pISR_DMA3 = (int)Dma3Done;rINTMSK pDMA = (void *

10、)0x4b0000c0; /通道 3 地址break;Uart_Printf(“DMA%d %8xh-%8xh,size=%xh(tc=%xh),dsz=%d,burst=%dn“,ch,srcAddr,dstAddr,length,tc,dsz,burst);Uart_Printf(“Initialize the src.n“);for(i=srcAddr; iDISRC = srcAddr;pDMA-DISRCC = (0DIDST = dstAddr;pDMA-DIDSTC = (0DCON = tc|(1DMASKTRIG = (1DISRC,写寄存器的代码 pDMA-DISRC =

11、1srcAddr。在读写寄存器之前,pDMA 寄存器必须首先赋值,否则将导致异常;DMA 内存拷贝: 2该程序中使用的是软件请求源(DCON 的第 23 位设置为 0) ,源和目的均使用系统总线(AHB,通过 DISRCC 和 DIDSTC 设置) ,并使用中断,当所有传输完成时产生 DMA 中断请求。在 DMA 中断处理程序中将 dmaDone 置零,以便在主程序中通过检验 dmaDone 是否置零来判断 DMA 传输是否完成。DMA 传输数据大小计算: 3该程序中传输数据的大小是通过 DCON 寄存器来设置的。一次 DMA 传输数据的大小计算公式是:DSZ * TSZ * TC(单位:字节

12、)其中,DSZ由 dst 参数传入,设置到 DCON 的第 2021 位。它可以选择数据宽度,此处包括单字节、双字节和四字节,其中四字节方式速度最快。TSZ由 burst 参数传入,设置到 DCON 的第 28 位。它可以选择突发模式和单元模式,其中突发模式速度更快。TC由 tc 参数传入,设置到 DCON 的第 019 位。拷贝动作的计时处理: 4该程序中采用定时器。采用函数 Timer_Start、Timer_Stop 分别启动和停止定时器。参数 divider 表示定时时间间隔,例如 0:16s、1:32s、2:64s、3:128s。函数Timer_Stop 的返回值就是计数值,该值乘以

13、 128s 就等于计时时间。在函数 Test_DMA 中用到了 DMA_M2M 函数,该函数中的第三个参数都是 5_NONCACHE_STARTADDRESS+0x800000,表示测试数据的长度都是 0x800000 字节。六、实验步骤1、仔细阅读实验说明部分,熟悉 S3C2410 的 DMA 控制器的原理;2、将实验系统光盘中“实验工程ADS 实验ADC”目录拷贝到本地硬盘,用 DMA 组件中的 CodeWarrior for ARM Developer Suite 工具软件打开打开其中的 ADC.mcp 工程文件。用实验一中的方法选用本机的地址中的 scat.scf 文件。3、在 DebugRel 目录下编译源文件。 (详见实验一) ,分析并熟悉程序。4、将 PC 机、仿真器和实验板连接并打开“Multi-ICE Server”和“AXD Debugger”对 CPU 进行初始化,导入本地硬盘上“实验工程ADS 实验DMA”中“DMA_DataDebugRelDMA.axf”文件或光盘上的实验项目文件。 (详见实验二)5、调试运行程序观察程序运行。验证 DMA 数据传输的速度与其它数据传输的差异。

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。