linux的dma驱动
来源:互联网 发布:广联达造价软件价格 编辑:程序博客网 时间:2024/06/05 07:48
硬件平台:TI的3530
内核:linux-2.6.36
功能:将fpga的数据从内存的一个地方复制到内存另一个地方
初学dma感到很是吃力,编写的内核驱动代码仔细看了一个星期,才将dma的工作原理和程序流程给看明白
工作原理:通过软件配置dma控制器的寄存器,让dma自己讲数据从外部读入到内存中,使得linux系统可以直接访问,而在这数据传送的期间,cpu不参与数据的传输,这也大大提高了cpu的利用率,使得系统的运行性能大大提高(这种方式通常适用于大数据量的传输,dma也正是为他而存在)。在每次dma将数据传送完成之后,就会向cpu发送一个中断信号,cpu响应中断,并执行我们传入的回调函数(中断函数),实际上dma每次进行传输时都要经过2次的传输:source -> dma->dest,每次传完,都会发送一个中断给cpu,同样的cpu也会进入中断处理中断函数(也就是我们传入的回调函数)。
-----------------> 配置dma到dest(目的)dma控制器 -> dma到dest的中断处理函数
|
程序流程:开始 -> 初始化dma控制器 -> 配置读取fpga到dma的控制器 -> fpga到dma开始传输数据 -> fpga到dma的中断处理函数 ---
^ |
| |
----------------------------------------------------------------------------------------------------
如此便可循环的读取fpga的数据到内存中,供系统去处理这些数据。
注意:配置的寄存器,主要是源地址寄存器,目的地址寄存器 ,这两个寄存器由于是物理地址,所以不能直接被内核空间和用户空间去访问,我们一般都是通过ioremap和mmap映射物理地址分别到内核虚拟地址和用户空间的虚拟地址。而内核空间提供给用户空间的接口也是通过这个函数实现的。
另外还有需要配置控制器的控制寄存器,会涉及到dma的传输模式和传输通道
- linux的dma驱动
- Linux驱动之DMA
- Linux下DMA驱动
- linux下DMA驱动
- linux驱动-DMA
- linux驱动之DMA驱动
- SPI的驱动 dma
- Linux驱动开发--linux下的DMA编程
- Linux DMA驱动构架分析
- Linux DMA驱动构架分析
- Linux s3c2410 DMA驱动开发
- Linux s3c2410 DMA驱动开发
- Linux DMA驱动构架分析
- s3c6410 linux DMA驱动分析
- linux驱动初始化dma功能
- s3c6410 linux DMA驱动分析
- 嵌入式linux之DMA驱动
- Linux DMA 驱动学习总结
- 浙大PAT甲级 1084
- hibernate初体验
- weka Apriori算法实例操作详解
- 售电模拟应用简介
- Xposed学习入门篇
- linux的dma驱动
- Java (final)分析
- Springmvc中文乱码解决办法
- leetcode 260. Single Number III
- 算法竞赛入门第七章:回溯与路径寻找
- Factorials_usaco3.2_数论?暴力!
- 由一个MFC程序引发的对编程严谨性的思考
- Leetcode 344. Reverse String
- 超长正整数相加