- 论坛徽章:
- 0
|
原帖由 yidou 于 2009-3-24 01:00 发表 ![]()
兄弟,你边界地址没对齐阿。
你应该是32位机,对不?
#define HPIA_LW (hpi_vbase+0x04)
#define HPIA_HW (hpi_vbase+0x06)
#define HPIA_LR ...
我用的arm9,就是你提到的32位机了。对边界地址的概念我不清楚,可是我一次读写的是外设16位的寄存器,我的地址只有这样映射啊。改成4字节的边界地址是不是意味着我要吧偏移值全部设置成4 的倍数,那样的话,这些地址都不能正确指向我的外设寄存器了。
我的地址是编码的,地址线的A4-A1接的dsp的hpi口的4跟控制线,根据给出不同的地址来控制不同的寄存器和进行不同的操作。HPIA_LWHE HPIA_LR这两个地址实际上要操作的空间是一样的,只是一个是读,一个是写,因为A4这跟地址线接的是外设的读写使能引脚。
[你可以对照datasheet再确认一下,即使你用readw/writew访问的是两字节对齐的寄存器,但是寄存器地址实际仍然是按照4字节边界定义的,跟具体芯片实现有关
还有一点就是你写入和读出的地址不同,你确认里面的数据是完全一致的吗?]
即使你用readw/writew访问的是两字节对齐的寄存器,但是寄存器地址实际仍然是按照4字节边界定义的?那如果是你说的那样的话,应怎么修改呢?写入和读出的地址不同,那是因为地址偏移的高位是接的外设的读写使能,就是说这以为不同位其它几位相同的话就表示一个是对这个寄存器写,一个是对它读。里边的数据应该是一致的,只是我在写的时候,写进去的值就发生了错误,所以读的时候就算读没问题,读到的也是一个错误的值,错误是写的时候造成的。 |
|