fsowen
驱动牛犊
驱动牛犊
  • 注册日期2004-05-25
  • 最后登录2004-05-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:821回复:1

向各位高手请教DOS下用C驱动8237进行DMA传送的问题

楼主#
更多 发布于:2004-05-26 09:58
我需要在dos下驱动DMA从外设传数进内存,用的是8237,现在把它的页面寄存器,地址寄存器,字数寄存器,模式寄存器,命令寄存器等都设置好了,运行后A/D触发DMA后检查它的DMA状态寄存器发现该通道的DMA传送已经完成,但在我设的内存地址却没有发现有数据传进来,是不是我有什么步骤没干阿???请高手指点一下~~~谢谢!!

outportb(DMA+0x0F,0xff);                                     /*全部通道屏蔽位置1*/
outportb(DMA+2,Hight_address);                               /*设置通道1的内存地址初值*/
outportb(DMA+2,Low_address);
outportb(DMA+3,a);                                           /*设置通道1的计数值初值*/
outportb(DMA+3,b);
outportb(DMA+0x000B,0x85);                                   /*DMA通道1方式字:块模式,写传送,禁止自动初始化,选择地址递增*/
outportb(DMA+8,0);                                           /*命令寄存器全置0*/
outportb(0x83,Page);                                         /*设置页面寄存器,选择Page*64k开始的64k内存为页面*/
outportb(BASE+2,channel);                                    /*通道选择*/
outportb(BASE+9,0x07);                                       /*DMA使能,并选择Pacer作为A/D触发源*/
                                                          
outportb(BASE+15,0x76);                                      /*Counter工作于模式3*/
outportb(BASE+13,e);                                         /*Counter的频率*/
outportb(BASE+13,f);
outportb(BASE+15,0xB6);
outportb(BASE+14,c);
outportb(BASE+14,d);
outportb(BASE+10,0);                                          /*Pacer使能*/
outportb(DMA+0x0F,0x0d);                                      /*启动通道1*/

fsowen
驱动牛犊
驱动牛犊
  • 注册日期2004-05-25
  • 最后登录2004-05-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-26 19:54
请高手帮帮忙~~~
游客

返回顶部