阅读:2103回复:12
对DMA传输过程的理解,大虾进来指教啊!
设备有数据-〉中断通知应用程序-〉驱动程序启动DMA完成一次数据传输-〉写往公共缓冲区<-用户进程读取
整个的传输过程是不是如上所述,望各位指教! |
|
最新喜欢:Xman |
沙发#
发布于:2003-03-04 14:16
设备有数据-〉中断通知驱动程序-〉驱动程序启动DMA完成一次数据传输-〉写往公共缓冲区<-用户进程读取
刚才写错了 |
|
板凳#
发布于:2003-03-04 22:11
可以是
1)设备有数据-〉中断通知应用程序-〉驱动程序启动DMA完成一次数据传输-〉写往符合DMA要求的缓冲区-〉写入用户缓冲区,用户进程读取 2)查询方式,若有数据,进行DMA传输 |
|
|
地板#
发布于:2003-03-05 08:41
那么什么样的缓冲区才算得上是符合dma要求的呢
|
|
地下室#
发布于:2003-03-05 09:47
DMA操作需要连续的内存空间!!!
|
|
5楼#
发布于:2003-03-05 10:39
硬件向dma缓冲区写数据完成后发出一个中断,中断处理程序获得输入数据,应答中断,唤醒进程可以读数据,如何唤醒?
|
|
6楼#
发布于:2003-03-05 14:27
那时不是一次完整的DMA传输需要两次中断呢?在准备数据传输前有次中断,在传输完后有一次中断呢?没次中断都对应各自的ISR和DPC吗?是怎么回事?
|
|
|
7楼#
发布于:2003-03-05 15:05
我是看到linux设备驱动程序上面这样描述的:dma被异步的使用
1、硬件发出中断,表明新的数据到达了; 2、中断处理程序分配一个缓冲区,告诉硬件将数据传往何处; 3、外围设备将数据写入缓冲区,当写完时,再次发出中断; 4、处理程序派发新数据,唤醒所有相关进程,处理一些杂务。 |
|
8楼#
发布于:2003-03-05 15:06
这与你的硬件有关,准备好数据这次中断在很多情况下,可以没有,只是在DMA传输玩后,响应中断,通知用户线程!!!
|
|
9楼#
发布于:2003-03-05 15:10
楼上这位老兄,在响应中断的时候,是怎么样通知特定的用户线程的,能讲述一下嘛?谢谢!
|
|
10楼#
发布于:2003-03-05 17:36
在完成DMA数据传输的时候,产生硬件中断,这个中断,你们的硬件是怎么设计的?我的总线是ISA,我是这样设计的,对吗?
把总线上的记数结束信号T/C连接到总线上的一个中断输入信号,比如IRQ5,那么当发生中断的时候我怎么判断是不是我的中断,换句话说,我找不到我硬件里的中断控制寄存器! |
|
|
11楼#
发布于:2003-03-06 11:29
mailway
发表于: 2003/3/5 - 15:10 楼上这位老兄,在响应中断的时候,是怎么样通知特定的用户线程的,能讲述一下嘛?谢谢! ------这应该是一个异步过程调用吧,就是说用户线程先初始化一个内核同步对象(event、mutex...),把这个对象传递给驱动程序,然后阻塞该线程,驱动在数据传输完成后设置这个event,用户线程就知道驱动已经完成处理了。不过这只是异步响应中断的一些知识,dma没做过,不知道是否也这样,希望大侠指正 |
|
|
12楼#
发布于:2003-03-11 08:23
送分啦!
|
|