linux 寄存器访问出现Bus error

shatoufeng 2013-01-18 05:31:49
#define PHYS_TO_K1(x) ((x) | 0xa0000000)

#define BCHP_PHYSICAL_OFFSET 0x10000000
#define BCHP_HIF_MSPI_SPCR0_LSB 0x00413200 /* SPCR0_LSB REGISTER */

#define WRITEREG(csr,val) (*(((volatile unsigned int *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+csr))) = (val))
void __TEST()
{
unsigned int lval = 100;
printf("[%s][%d]ptr: 0x%x\n", __FUNCTION__, __LINE__, (((volatile unsigned int *)PHYS_TO_K1(BCHP_PHYSICAL_OFFSET+BCHP_HIF_MSPI_SPCR0_LSB))));
printf("[%s][%d]ptr: 0x%x\n", __FUNCTION__, __LINE__, &lval);
printf("[%s][%d]%d, %d\n", __FUNCTION__, __LINE__, sizeof(unsigned int), sizeof(volatile unsigned int *));

WRITEREG(BCHP_HIF_MSPI_SPCR0_LSB, lval);
printf("[%s][%d]\n", __FUNCTION__, __LINE__);

}

上面的一段代码,只一个写寄存器的操作,最后一行打印没出来就bus error了,运行结果如下
*** 00:00:01.469 nexus_platform: initialized
[__TEST][835]ptr: 0xb0413200
[__TEST][836]ptr: 0x7fecc720
[__TEST][837]4, 4
Bus error

网上看了很多说是内存对齐访问的问题,但是从打印的情况来看好像不是,求大神!
...全文
1349 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
todo9351 2013-02-06
  • 打赏
  • 举报
回复
mmu设置,如2楼所言
seaglow007 2013-01-20
  • 打赏
  • 举报
回复
是不是寄存器的地址错了
zhengmeifu 2013-01-19
  • 打赏
  • 举报
回复
跟踪一下,BUS ERR哪里打印出来的。看看这个寄存器设置对了吗?
jdygrdzh 2013-01-19
  • 打赏
  • 举报
回复
看到你是linux了、、、用户态?劝你补下操作系统基础知识。
jdygrdzh 2013-01-19
  • 打赏
  • 举报
回复
还有,是不是你的需要的虚拟到物理地址映射还没做完?物理地址到模块的映射做了么? 你这个应该是在uboot之类的裸系统上吧?
jdygrdzh 2013-01-19
  • 打赏
  • 举报
回复
bus error指的应该是你的cpu前端总线发生错误,引发cpu异常,原因可能是地址线,可能是数据线,等等。 你的处理器应该有一些状态寄存器,错误寄存器等告诉你错误的指令或者数据地址。 你应该从你的寄存器地址找原因。这个地址是物理地址还是虚拟地址?他附近的寄存器能访问?

21,619

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧