有什么linux的系统函数能够实现对给定地址的RAM传送数据呢?
我想问一下有什么linux的系统函数能够实现对给定地址的RAM传送数据呢?writeb()可以吗?因为我们的数据位是8位,RAM要接收的数据是32位的,所以只能用writeb(),而不是writew(),writel()。
谢谢大家指点:)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
为什么要这么做呢???
为了向地址固定的RAM中写大量的数据啊,在驱动中实现:)
writeb()可以,地址每写一次加一就可以了。
也可以把数据打包成4字节的,调用writel,效率更高些。
ps:你用的什么处理器?
我们用的是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*/
佩服你的勇气。你以前是做什么的
涉及到具体硬件编程以及时序配合的问题,我感觉主要是读手册,看相关器件的参数。
做硬件相关的软件开发,要求知识比较全面的,还会经常用到示波器,逻辑分析仪等~~
强列建议打好基础先。
ps:你那段程序直接对物理地址进行访问了吧,在linux是不可以的~~。我没有用过ppc处理器
回smalloc:
呵呵,我以前什么也没做过:)我学通信的,导师接了个ATM交换机的项目,我就做MPC这块了:)目前主要是写芯片的驱动程序:)
回gaocheng:
我操作的地址是我分给SCI_RAM在mpc内存中的地址,应该是虚拟地址吧,我用ioremap()转换过的:)
PPC和ARM差不多,PPC更高端一些,主要用于路由器和交换机这些网络通信器件上:)
我对时序也就是数电,微机原理上那一点点理解,现在好多也都忘了:)我和负责信元预处理的FPGA同学沟通了,他们是在时钟上升沿读取数据,这个for()循环也不知道能实现全部读进去不?:)
现在数据位不匹配已经解决了:)他们那边做一个寄存器,我们给4个8比特数他们读一次:)mpc只是数组存成8bit的数,虚拟地址空间开辟原来的4倍:)
我们现在的硬件芯片还没出来也就不用调试程序,分析仪之类的到时候再学:)我先把驱动搞定再说:)中断这块还没编呢:)慢慢入门啊:)
谢谢你的指点:)