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

发布于 2022-09-29 15:36:52 字数 126 浏览 14 评论 0

我想问一下有什么linux的系统函数能够实现对给定地址的RAM传送数据呢?writeb()可以吗?因为我们的数据位是8位,RAM要接收的数据是32位的,所以只能用writeb(),而不是writew(),writel()。
谢谢大家指点:)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

憧憬巴黎街头的黎明 2022-10-06 15:36:52

为什么要这么做呢???

我也只是我 2022-10-06 15:36:52

为了向地址固定的RAM中写大量的数据啊,在驱动中实现:)

绝對不後悔。 2022-10-06 15:36:52

writeb()可以,地址每写一次加一就可以了。
也可以把数据打包成4字节的,调用writel,效率更高些。

ps:你用的什么处理器?

玻璃人 2022-10-06 15:36:52

我们用的是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*/

心凉怎暖 2022-10-06 15:36:52

佩服你的勇气。你以前是做什么的

栖竹 2022-10-06 15:36:52

涉及到具体硬件编程以及时序配合的问题,我感觉主要是读手册,看相关器件的参数。
做硬件相关的软件开发,要求知识比较全面的,还会经常用到示波器,逻辑分析仪等~~
强列建议打好基础先。

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

挽清梦 2022-10-06 15:36:52

回smalloc:
呵呵,我以前什么也没做过:)我学通信的,导师接了个ATM交换机的项目,我就做MPC这块了:)目前主要是写芯片的驱动程序:)

毁虫ゝ 2022-10-06 15:36:52

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文