当前位置:  技术问答>linux和unix

有关LINUX DMA驱动的问题

    来源: 互联网  发布时间:2016-07-29

    本文导语:  本帖最后由 guan323333 于 2010-01-06 09:24:22 编辑 小弟最近在学习写驱动,写了个最简单的DMA驱动但是用不起来,查了很久都不知道哪里有问题,贴出来大家看看哈.由于问题比较长也比较复杂,给50分.格式好难弄,大家将就...

本帖最后由 guan323333 于 2010-01-06 09:24:22 编辑
小弟最近在学习写驱动,写了个最简单的DMA驱动但是用不起来,查了很久都不知道哪里有问题,贴出来大家看看哈.由于问题比较长也比较复杂,给50分.格式好难弄,大家将就下,或者可以联系我发.C文件给你~~

编程步骤如下:(以下是初始化,一切结果表现的正常)
…………
result = register_chrdev(210,"mydma",&dmatest_fops);
 …………
Csr_Addr = DMA_ADDR_BASE+0x24;                           
Csr_Addr = (unsigned long)ioremap(Csr_Addr,4);
Sy_Addr = (unsigned long)ioremap(DMA_ADDR_BASE+0x28,4);
Cn_CFG_Addr = (unsigned long)ioremap(DMA_ADDR_BASE+0x1E4,4);
Cn_LLP_Addr = (unsigned long)ioremap(DMA_ADDR_BASE+0x1F0,4);
Cn_Size_Addr = (unsigned long)ioremap(DMA_ADDR_BASE+0x1f4,4);
Cn_Csr_Addr = (unsigned long)ioremap(DMA_ADDR_BASE+0x1e0,4);

(*(volatile unsigned long *)Csr_Addr) = 0x0001;                   //设置地址格式为小端,同时ENABLEDMA控制器
(*(volatile unsigned long *)Sy_Addr) = 0x0080;                    //设置同步模式
(*(volatile unsigned long *)Cn_CFG_Addr) = 0x00000003;            //设置允许中断
(*(volatile unsigned long *)Cn_LLP_Addr)  = 0x00000000;           //设置LLP为0,这个我也不知道为什么,不过编程手册上这么写的
(*(volatile unsigned long *)Cn_Size_Addr) = 0x00000400;           //设置传输大小为1K 
(*(volatile unsigned long *)Cn_Csr_Addr) = 0x80fc1204;            //设置权限、单次传输大小等
          …………
以下是ioctl的内容:
……
         Cn_SrcAddr = (unsigned long)ioremap(DMA_ADDR_BASE+0x1e8,4);
Cn_DesAddr = (unsigned long)ioremap(DMA_ADDR_BASE+0x1ec,4);
switch(cmd)
{
case SETSRC:
(*(volatile unsigned long *)Cn_SrcAddr) = arg;       //设置源地址
break;
case SETDES:
(*(volatile unsigned long *)Cn_DesAddr) = arg;       //设置目标地址
                                     break;
case STARTDMA:
(*(volatile unsigned long *)Cn_Csr_Addr) |= 0x01;    //开始DMA传输
break ;
case STOPDMA:
(*(volatile unsigned long *)Cn_Csr_Addr) &= 0xfffffffe;    //结束DMA传输
break ;
          }

接着在应用程序里:
          int ret;
int fileno;
char buff_src[32] = {"I AM THE SRC~~~~~~~~"};
char buff_des[32]  = {"DESDESDESDES"};
fileno = open("/dev/mydma",O_RDWR);
         …………
          ret = ioctl(fileno,SETSRC,&buff_src);
         ret = ioctl(fileno,SETDES,&buff_des);
         ret = ioctl(fileno,STARTDMA,NULL);
         ret = ioctl(fileno,STOPDMA,NULL);
         …………
结果是buff_des还是DESDESDESDES,没有变成I AM THE SRC~~~~~~~~",哪里有问题呢,高手指点下
         

|
     ret = ioctl(fileno,STARTDMA,NULL); 
        ret = ioctl(fileno,STOPDMA,NULL); 
~~~~~~~~~~~~~~~~~~~~~~

你应该根据DMA传输结束中断来判断DMA结束了没有,而不是不分青红皂白的给它来个stop。

|
做完ioremap,往地址写值最好用writeb,writew writel

|
不知道DMA中断有没有判断和提取

|
不知道

    
 
 

您可能感兴趣的文章:

  • 请教有关linux驱动开发,按关机键关机时,驱动应作哪些结束工作?
  • 有关UNIX 的驱动的问题,是不是在系统中已经有了?
  • 请问一下有关LINUX内核的网卡驱动一个弱弱的问题
  • 有关2440 DMA驱动的问题
  • 有关消息驱动bean的问题!!!!高手救我!!!!
  • 各位高人,关于IDE的驱动程序,我看蒙了,谁能告诉我到底linux源文件中到底那些是跟IDE硬盘驱动有关的?
  • 有关SQLSERVER 2000的JDBC驱动的问题
  • 有关编译网卡驱动问题
  • 真心需要各位前辈指点,谢谢 有关LINUX USB驱动程序编写的一个问题
  • 有关ldd中字符驱动程序的scull_devices
  • 请教高手,有关字符设备驱动程序问题
  • 求助有关驱动的问题
  • 有关驱动开发里面队列的问题
  • 求教有关smartupload的问题,有关就给分!!
  • 有关在sco unix5.0.4下有关网卡设置的问题(非常急,高分相送)
  • 有关snmp的一个很菜,但是困扰了我很久的问题,有关工作原理的,望大家赐教
  • 有关ResultSet的问题,帮助解决问题者另外加分...
  • (菜鸟问题)有关目录中文件执行的问题???
  • 有关Qt下编译的环境问题
  • 有关裁减内核及shell命令的问题
  • 有关cocoon的问题??
  • Helper! 有关Jbuilder使用问题???
  • 有关swing的问题,请高手回答
  • 一个有关分数的问题
  • 有关pcmaclan的打印机共享问题
  • 请教有关samba共享名大小写的问题
  • 想看一下吗?有关swing 组件的问题?
  • 有关L的问题(菜鸟求教)???
  • 有关jsp服务器的一个问题
  • java 进阶级问题,有关网络的问题,请多多帮助
  • 有关Liunx 的最低配置问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ​有关Docker的八个令人难以置信的事实
  • 有关内码转换(跟HttpServletRequest有关)
  • 求有关png图像处理的libpng库的有关中文资料
  • 有关jbuilder iis7站长之家
  • 有关KDevelop-3.0.4-0.1.i386.rpm的有关软件包
  • 有关KDevelop编程的资料
  • 有关集群与数据同步
  • 请教有关英文简历方面的词句!
  • 有关报表打印(在JAVA,WEB下应用)急用!
  • 请各位大哥告知JAVA中消息机制的有关资料,拜托!
  • 有关jbuilder
  • 我想看看有关Linux和Unix的源码,有什么好的建议
  • 有关J2ME的帮助文档!
  • 100分求助 能不能提供一些有关图像分割的算法和实现代码!谢谢
  • 在哪里可以弄到有关tomcat配置方面的资料?
  • 请问哪里有jboss有关配置的教程,最好是中文的,先谢了
  • 哪位兄弟知道有关QT的资料可以下,,谢谢!
  • 有关学习java的电子图书网址
  • 请介绍一本有关i386体系结构、汇编的书。
  • 有关shell返回值
  • 高分请教:请问怎么才能得到最近所有有关文件操作(新建,删除等)的记录


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3