ISA DMA驱动源地址和目的地址设置的问题
unsigned long flags = claim_dma_lock();
disable_dma(channel);
// 清除dma触发器
clear_dma_ff(channel);
set_dma_mode(channel, mode);
// 为DMA缓冲区分配地址。该函数将addr的最低24位存储到控制器中。addr参数必须是总线地址
set_dma_addr(channel, virt_to_bus((void*)buf));
// 给传输的字节数赋值
set_dma_count(channel, count);
release_dma_lock(flags);
我要从某个硬件地址A开始的64k大小的区域循环读数,用DMA方式做
看LDD里面,有这么一段代码,是用来设置和启动DMA的
里面set_dma_addr()这个函数的第二个参数,我感觉应该是自己申请的dma缓冲区的地址,也就是目的地址,
那源地址在哪里设置呢?也就是说地址A是哪里设置的呢?
谢谢~
...全文
相关推荐
Linux对ISA总线DMA的实现.rar_ISA DMA_ISA总线_linux ISA_linux dma_pci总线
**DMA设置**:驱动程序需要配置DMA控制器,包括选择通道、设置传输模式、设定地址和长度等。这些设置通过编程ISA DMA控制器的寄存器完成。4.
isa-dma.rar_ISA DMA_isa
**硬件交互**:驱动程序需要知道如何与具体的ISA DMA硬件交互,这通常涉及读写特定的I/O端口,设置控制寄存器,以及处理中断。
Linux系统对ISA总线DMA的实现.rar
**DMA设置**:驱动程序需要配置ISA设备的DMA通道,包括选择合适的DMA模式、设置起始地址和传输长度,并激活DMA操作。4.
Linux对ISA总线DMA的实现
- 计数寄存器:设置本次DMA传输的总数据量。- 控制寄存器:管理DMA操作的状态和模式。
Linux驱动中的DMA和Cache一致性问题
这就意味着,当CPU访问外设时,需要将虚拟地址转换为物理地址,这通常是通过总线根桥和内存控制器之间的地址转换部件来完成的。在Linux驱动开发中,程序员必须注意DMA地址段的限制。


驱动开发/核心开发
