免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3379 | 回复: 8
打印 上一主题 下一主题

有什么linux的系统函数能够实现对给定地址的RAM传送数据呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-19 16:45 |只看该作者 |倒序浏览
我想问一下有什么linux的系统函数能够实现对给定地址的RAM传送数据呢?writeb()可以吗?因为我们的数据位是8位,RAM要接收的数据是32位的,所以只能用writeb(),而不是writew(),writel()。
谢谢大家指点:)

论坛徽章:
0
2 [报告]
发表于 2007-06-20 14:46 |只看该作者
为什么要这么做呢???

论坛徽章:
0
3 [报告]
发表于 2007-06-20 15:10 |只看该作者
为了向地址固定的RAM中写大量的数据啊,在驱动中实现:)

论坛徽章:
0
4 [报告]
发表于 2007-06-20 15:24 |只看该作者
writeb()可以,地址每写一次加一就可以了。
也可以把数据打包成4字节的,调用writel,效率更高些。

ps:你用的什么处理器?

论坛徽章:
0
5 [报告]
发表于 2007-06-21 10:08 |只看该作者
我们用的是MPC8280,数据线给信元预处理芯片分配了8位数据线,可是芯片上我们要写数据进去的SCI_RAM存储单元的数据线是32位,这个矛盾我希望能通过扩展数据线实现。
下面的程序是往固定地址写数据,没调用函数,用指针实现的,我不明白的是:
1.for()循环快,RAM要一个时钟周期读一次,我循环的时候全写进去它的速率能跟得上吗?
2.我们需要在初始化SCI_RAM的时候就把这些数据传给它们,这个SCI_RAM_WRITE函数我应该放在驱动哪里调用呢?

以前也就学过C语言编一些应用的小程序(C作业),和硬件没打过交道,所以不知道该考虑什么,也不知道怎么解决,还希望gaocheng 你能多多指点:)谢谢哦:)

#define sci_ram_base 0x30000000
#define sci_num 1040
int sci_ram_write()
{
  int i;
  unsigned long sci[sci_num]={};
  unsigned long *sci_p,*sci_addr;
  sci_p=sci;
  sci_addr=(unsigned long *)sci_ram_base;
  for(i=o;i<sci_num;i++)
          {*sci_addr=*sci_p;
         sci_p++;
        sci_addr++;                 
       }
  return o;
  
}  /*end write SCI to sci_ram*/

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
6 [报告]
发表于 2007-06-21 12:54 |只看该作者
佩服你的勇气。你以前是做什么的

论坛徽章:
0
7 [报告]
发表于 2007-06-21 15:01 |只看该作者
涉及到具体硬件编程以及时序配合的问题,我感觉主要是读手册,看相关器件的参数。
做硬件相关的软件开发,要求知识比较全面的,还会经常用到示波器,逻辑分析仪等~~
强列建议打好基础先。

ps:你那段程序直接对物理地址进行访问了吧,在linux是不可以的~~。我没有用过ppc处理器

论坛徽章:
0
8 [报告]
发表于 2007-06-21 17:09 |只看该作者
回smalloc:
呵呵,我以前什么也没做过:)我学通信的,导师接了个ATM交换机的项目,我就做MPC这块了:)目前主要是写芯片的驱动程序:)

论坛徽章:
0
9 [报告]
发表于 2007-06-21 17:17 |只看该作者
回gaocheng:
我操作的地址是我分给SCI_RAM在mpc内存中的地址,应该是虚拟地址吧,我用ioremap()转换过的:)
PPC和ARM差不多,PPC更高端一些,主要用于路由器和交换机这些网络通信器件上:)
我对时序也就是数电,微机原理上那一点点理解,现在好多也都忘了:)我和负责信元预处理的FPGA同学沟通了,他们是在时钟上升沿读取数据,这个for()循环也不知道能实现全部读进去不?:)
现在数据位不匹配已经解决了:)他们那边做一个寄存器,我们给4个8比特数他们读一次:)mpc只是数组存成8bit的数,虚拟地址空间开辟原来的4倍:)
我们现在的硬件芯片还没出来也就不用调试程序,分析仪之类的到时候再学:)我先把驱动搞定再说:)中断这块还没编呢:)慢慢入门啊:)
谢谢你的指点:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP