打印
[嵌入式Linux]

求教Linux驱动多个寄存器读

[复制链接]
1814|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hudianrong|  楼主 | 2013-7-26 12:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,我在编写SPI Linux驱动的时候要实现对两个寄存器的读(状态寄存器和接收数据寄存器),在read()操作中用ioread8()实现:
    for(i=0;i<4;i++)
    {
      *(buffer+i)=(char)ioread8((SPI_ADDR+64)+i);
    }
i取到4的时候是对状态寄存器的完整的读,这样运行的时候没问题。但是我i<8(想读下一个寄存器的值)的时候运行就报错:Segmentation fault。我还试了添加
for(j=0;j<4;j++)

     *(buffer+j+4)=(char)ioread8((SPI_ADDR+6c)+j);

想在buffer[0]~buffer[3]中存状态寄存器SPISR的值,buffer[4]~buffer[7]中存接收数据寄存器SPIDRR的值。这样运行也是报错:Segmentation fault。
哪位大侠能指点下,同时读取两个寄存器该如何操作。

相关帖子

沙发
jlass| | 2013-7-26 13:53 | 只看该作者
Segmentation fault这么严重
如果你的寄存器地址没写错的话,问题只能出在ioread8身上了

使用特权

评论回复
板凳
hudianrong|  楼主 | 2013-7-26 14:11 | 只看该作者
jlass 发表于 2013-7-26 13:53
Segmentation fault这么严重
如果你的寄存器地址没写错的话,问题只能出在ioread8身上了 ...

就是我不确定,读多个寄存器的值可不可以这样用ioread8连续的读....地址应该没问题吧,我单独的读写都没问题,想读多个就出问题了

使用特权

评论回复
地板
jlass| | 2013-7-29 10:05 | 只看该作者
本帖最后由 jlass 于 2013-7-29 10:06 编辑
hudianrong 发表于 2013-7-26 14:11
就是我不确定,读多个寄存器的值可不可以这样用ioread8连续的读....地址应该没问题吧,我单独的读写都没 ...

Segmentation fault一般是使用的mmu以后地址(SPI_ADDR)溢出比较常见,可是你竟然可以读到前4个,真的很莫名其妙。
ioread8在内核中的定义一般就是*(地址),如果假设你没有使用mmu的话,根本没理由会出错。
所以,我也很莫名其妙。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

28

帖子

1

粉丝