`
tomhibolu
  • 浏览: 1380245 次
文章分类
社区版块
存档分类
最新评论

Linux驱动修炼之道-DMA框架源码分析(下)

 
阅读更多

努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2011/06/02/6462149.aspx

DMA通道的使用:申请通道,申请中断,设置寄存器,安装回调函数,设置标志,将数据放入队列,最后就是调用static int s3c2410_dma_start(struct s3c2410_dma_chan *chan)来开始DMA的传输了。
首先看通道的申请:

下面的函数是找通道好,先在板子通道映射中找,再在芯片通道映射中找。

设置寄存器,设置寄存器的工作由s3c2410_dma_devconfig和s3c2410_dma_config完成:


设置回调函数:

设置标志:


将数据放入队列,先看一下一个结构:

每个struct s3c2410_dma_chan维护了一个缓冲区队列,每个缓冲区用上边的结构表示。在struct s3c2410_dma_chan中的结构是:

下边这个函数就是完成将s3c2410_dma_buf放入这个队列中排队:

channel在运行的时候会有很多状态,在arch/arm/mach-s3c2410/include/mach/dma.h,注意已经很清楚了,我就不多解释了。

中断处理函数:

可以选择不同的dma操作:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics