linux 寄存器访问出现Bus error
#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
网上看了很多说是内存对齐访问的问题,但是从打印的情况来看好像不是,求大神!