阅读:1544回复:0
各位大侠,救命呀!怎样向DMA控制器的请求寄存器端口发送请求命令
我在《虚拟设备驱动程序开发起步于进阶>>(人民邮电出版社)看到一个有关开发DMA的例程,其中有关测试该VXD的应用程序要向控制器的请求寄存器发请求命令。我在调试时出现一下错误F:\vtools\hello\testdlg\testdlgDlg.cpp(255) : error C2443: operand size conflict
我后来查有关DMA的资料才发现,DMA的请求寄存器是四位的,不能按常规的OUT方法来发请求命令。望高手出手相救。 我的测试程序如下 #define IO_DMA_BASE_ADDR 0X0000//DMA控制器的端口基地址 #define ADDR_DMA_CHANNEL3 IO_DMA_BASE_ADDR+6//通道3的地址寄存器段口号 #define COUNT_DMA_CHANNEL3 IO_DMA_BASE_ADDR+7//通道3的字节计数器端口号 #define MODE_DMA_CHANNEL3 IO_DMA_BASE_ADDR+11//DMA的模式寄存器端口号 #define REQ_DMA_CHANNEL3 IO_DAM_BASE_ADDR+9//DMA的请求寄存器端口号 #define MASK_DMA_CHANNEL3 IO_DMA_BASE_ADDR+10//DMA的屏蔽寄存器端口号 #define BUFFER_SIZE 65536 void main() { _asm { mov dx,ADDR_DMA_CHANNEL3 mov al,0x12 out dx,al//写地址寄存器的低字节 mov al,0x34 out dx,al//写地址寄存器的高字节 mov dx,COUNT_DMA_CHANNEL3 mov al,0x10 out dx,al//写字节的计数器的低字节 mov al,0x00 out dx,al//写字节计数器的高字节 mov al,0x0b mov dx,MODE_DMA_CHANNEL3 out dx,al//设置通道3的模式为读模式 mov al,0x03 mov dx,MASK_DMA_CHANNEL3 out dx,al//去除通道3的屏蔽寄存器的屏蔽位 mov al,0x07 mov dx,REQ_DMA_CHANNEL3 out dx, al//设置通道3的请求寄存器,产生DAM请求 } } |
|
|