中断方式实现主机与单片机之间的dma操作

上传人:E**** 文档编号:115017748 上传时间:2019-11-12 格式:PDF 页数:4 大小:161.14KB
返回 下载 相关 举报
中断方式实现主机与单片机之间的dma操作_第1页
第1页 / 共4页
中断方式实现主机与单片机之间的dma操作_第2页
第2页 / 共4页
中断方式实现主机与单片机之间的dma操作_第3页
第3页 / 共4页
中断方式实现主机与单片机之间的dma操作_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《中断方式实现主机与单片机之间的dma操作》由会员分享,可在线阅读,更多相关《中断方式实现主机与单片机之间的dma操作(4页珍藏版)》请在金锄头文库上搜索。

1、中断方式实现主机与单片机之间的D M A 操作 罗晓丹 解放军信息工程学院基础部郑州4 5 0 0 0 2 I m 要本文主要讨论了 在主机与单片机之间以 中断方 式进行 D R 、 传输的程 序设计中 的地址计算和中断 服务程序中对该地址的引 用、D M A 初 始化等问 题。 关键词D M A : D M A 初始化:段址:偏移最 引言 在实际的实时应用系统中,经常需要同 时 进行多种信号的 采集,每 种信号的 类型、和 数据量的 大小都有所不同。对于数据量小的 信号,主 机可以 直 接从 U O口 读取,而对于数 据量较大的 信号,由 于系统实时性的要求, 经常 采用 D M A的方式

2、进行 数据传输。主机在 接收这些 信号的数据时,为了 避免不断查询数 据是否到达而降 低主机的实时处理效率,可 以采 用中 断方式进行数据的读取。即当各个工 作模块的 数据己 采集好, 需送交主机时,由 用户电路给主机产生一中断信号,主机在接到此中断信号后,进入中断服务程序,在中断 服务程序内,主机根据事先己 确定了的各工作 模块采集数据量的大小, 对于小量的数据直 接由阳 口 读取, 对于 量大的数据,由 对应工作模块的D M A电 路产生D M A申 请, 主机 在 中断 服务程序内进行D M A初始化, 允许该模块的D M A申 请, 于是 实现主机和对应模块的 单片机之间的D MA数据

3、传输。 ) 丛 2 D M A 控制 D M A ( D i r e c t Me m o ry A c c e s s ) 控制, 也即 直接存储器存取 控制。 它是利用 D M A控制 器 ( D M A C ) 这样的专用处理器硬件来完 成外设与存储器之间的高 速数 据传送。 D M A C 具 有独立的访问存储器能力, 它能象M P U那 样提供内 存的 地址和必要的读 写控制信号, 将数 据总线上的信息写入存储器或从存储器读出。 2 . 1 D M A C 内 部寄存器 8 2 3 7 A - 5 是I n t e l 公司生产的 一种高 性能的 可编程D M A控制 器芯片, 可以

4、方便地实现外设 与存储器之间的 直接数据交换。它 有四个 独立的D M A通道, 每个通道都有6 4 K B寻址和 字节计数能力。 对于2 8 6以 上档次的微机, 系统一般支持7 个D M A通道, 它们是由 两片8 2 3 7 A - S D M A 控制器按级连的方式得到的。 为了扩大 D MA的寻址范围, D MA C增加了8 位的页寄存器, 和每个 通道的 1 6 位地址寄 存器一起形成2 4 位的 地址长度,从 而使得每个通道的寻址范围 增加到1 6 M。两片 D M A控制器的内部寄 存器和 各通道对应的页 面寄 存器的 I / O端口地 址 如 下: 1/ 0端口地址 ( 十六

5、进制)通道号页面寄存器 1 / 0端口地址 DMAC DMA 2内部寄存器名称0 S O H 0 CD通道 0 基地址和当前地址寄存器1 8 3 H 3 5 3 C 2 通道0 墓计数和当前计数寄存册 C 4通道1 基地址和当前地址寄存餐 C 6通道1 基计数和当前计数寄存器 C 8通道2 基地址 和当前地址寄存册 C A通道2 荃计数和当前计数寄存册 C C通道3 荃地址 和当前 地址寄 存器 C E通道 3 荃计数和当前计数寄存器 D O读状态寄存御写命令寄 存器 D 2写诸求寄存器 D 4写单一屏蔽寄 存器位 D 6写方式寄存器 D8清除先l 后指针触发器 D 人读暂存寄存器l 写总清

6、D C清除屏蔽寄存器 DE写四位屏蔽寄存器位 8 1 H 9 2 H S B H 8 9 H S A H 23567 12.3456789ABcDEF 2 . 2 D M A 传输数据的地址生成原则 上面已 经提到现在的微 机系统内一般有7 个D M A通道。 其中: 通道0 - 3 由D MA I 控制, 这些通道只进行8 位的 数据传输, 一次最大可传送6 4 K字 节数据。1 6 M地址空间 被分为 2 5 6 个页,每页6 4 K B , D M A I 的地址输入端A o - A i 是和外 部地址总线的X A o - X A 7 相对应,故数 据的 实际地址与 地址寄 存器中 的内

7、 容相同。 通道4 - 7 由D M A 2 控制, 其中通道4 用于级连通道0 - 3 , 通道5 - 7 则 支持 1 6 位的 数据传输,一次最 大可传送6 4 K W 即1 2 8 K B的数据。1 6 M地址空间可分成 1 2 8 页,每页 1 2 8 K B 。由于传送时以 字为单位, 故当这些通道在作D M A传输时, 就必须在偶字节界上 进行, 以 免出 现单字节传输。 因此D M A 2 的地 址输入端A o - A , 是与外 部地址总线的X A r - X A ) 汁 、 。 助1杏D7, 基地址寄存器 主机申请内存的逻辑地址 和实际物理地址的计算如下 ( 设数据传输 量

8、为N W ( 3 2 K B , 内存分配空间为I M): in t d m a b u ff e r ; u n s ig n e d in t d m a s e g m e n t , d m a o ff s e t ; l o n g d ma a d d r e s s ; i n t b u ff e r o ff s e t ; d m a b u ff e r= ( in t * ) c a l lo c ( 2 N, s iz e o 双 in t ) ) ;/ 分配2 N个类型为in t 的内 存空间 d m a s e g m e n t= F P 一 S E G (d

9、 m a b u ff e r ) ; d m a o ff s e t= F P - O F F ( d m a b u ff e r ) ; d m a a d d re s s - ( ( ( ( l o n g ) d m a _ s e g m e n t / 实际取下一段 d m a o ff s e t ; / / 实际偏移量为新段的 起始处 b u ff e r o ff s e t- 6 5 5 3 6一 d ma a d d r e s s ; e ls e / 分配在本段中的字节数大于2 N d m a es s e g m e n t- ( d m a s e g m

10、e n t 1 2 ) d m a o ff s e t - d m a a d d re s s ; b u ff e r o ff s e t ; d m a o ff s e t = ( d m a s e g m e n t 1 ) I ; / 送 给页 面寄 存器的 值 3 . 2 高 级语言与 汇编程序之间的参数传递 由 于 D M A的 初始化工作是放在主机的中 断服务程序中 进行的, 这就存在 着如何把在 3 . 1 中 用高 级语言 计算出来的地址信息传到 汇编的中断 服务程序中的问 题。 为此 我们总结了 在汇编程序中引用 C语言全程变量的方法:在变量名前加一下 划线,并在

11、数据段内 用 E X T R N说明该变量。这样,在中断服务程序内 引用3 . 1 中变量d m a s e g m e n t 和d m a o ff s e t 的 程序片 段如下: d a ta s e g me n t E X T R N E X T R N d m a es s e g me n t : WO R D d m a o ff s e t : WOR D d a ta m ov e n d s s i , o f f s e t d m a s e g m e n t ;取变量d m a s e g m e n t 的 地址中的 偏移量部 分 3 5 5 m ov m o

12、v m ov m ov s e ges d m a s e g m e n t ;取 变 量d m a s e g m e n t 的 地 址 中 的 段 址 部 分 日X e s : s i ;取变盘d m a s e g m e n t 中的值 _) b . o ff s e t d m a o ff s e t ; 取 变 皿d m a o ff s e t 的 地 址中 的 偏 移 盆 部 分 s e g 一m a o ff s e t ;取变里d m a o ff s e t 的地址中的段址部分 ax,临bx.弘ax,es,ax, m o vm ov axes :si; 取变盘d m

13、a o ff s e t 中的值_) a x 在将变量 d m a s e g m e n t 和d m a o ff s e t 的 值传给b x 和a x 后, 就可以 通过 1 / O口 分别把 它们写入页面寄存器和基地址寄存器中。 3 . 3 中断服务程序中的。 M A 初始化 下面给出中断服务子程序中D M A的 初始化部分 ( 以7 号通道进行 1 6 位数据传输为 例): o u t O c c h , a l ;装入基地址寄存器低字节,基地址己按3 . 2 中方法放入A X中 m o v a l , a h o u t O c c h , a l ;装入基地址寄存器高字节 m

14、o v a l , b l;取页面地址,页面地址也按 3 . 2中方法事先存入B X中 a n d a l , O f h o u t 8 a h , a l ;装 入7 号 通道页寄存器 mo v a x , N:传输字节数为N o u t O c c h , a l;装入基字节数寄存器低字节 mo v a l, a h o u t O c e h , a l :装入基字节数寄存器高字节 m o v a l , 8 7 h ;方式字,定义通道 7以块字节方式执行写操作 o u t O d 6 h , a l ;写入DM A 2的方式寄存器 m o v a l , 0 o u t O d O

15、h , a l ;初始化命令寄存器 mo v a l , 0 3 h ;屏蔽字,允许通道 7的D MA申请 o u t O d 4 h , a l :写入屏蔽字 o u t O d 2 h, a l ;写入请求寄存器,产生一个D MA请求 4 小结 本文讨论了在实际工 作中经常遇到的主机与单片 机之间 利用中断的方式进行 D M A数 据传输的程序实现。 其中 主要涉及了主机中传输数据空间的地址计算、汇编程序对高 级语 言 程序中全程变量的引用以 及 D M A在中断 服务 程序中的 初始化等问题。 文中所述方法通 用性强,实时效率较高, 通 过实际应用系统的检验, 取得了较好的 实时处理效果。 参考文献 鲍明忠. 高档微机开发指南. 北京:中 科院 希望高级电 脑技术公司 , 1 9 9 1 , 8 9 - 1 0 2 邹途兴. 微型计算机接口 原理与技术. 长沙:国 防科技大学出 版社, 1 9 9 3 , 1 6 3 - - 1 9 5 Il2 3 5 6 les

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号