日期:2014-05-16  浏览次数:20820 次

关于CPU寄存器的访问
在ARM中,我想访问一个寄存器,应该如何访问?假设寄存器的地址为0x87

------解决方案--------------------
看看你arm如果是32位寄存器,那么可以这么访问

#define READ_ARM(addr) *(volatile unsigned int*)addr

然后你就可以用READ_ARM函数去读写操作了。这是是代表取值,也可以用来赋值
------解决方案--------------------
呵呵,,内存地址和寄存器地址是一回事,,现在比较流行的做法是将寄存器地址挂接到内存地址空间中,而不是挂接到IO空间中,在IO空间中软件要用专门的指令,不利于用高级语言开发。而在寄存器等在内存空间中就可以操作寄存器象操作内存一样,还能使用指针。但是注意要使用volatile,不然的话编译器可能对代码进行优化。寄存器毕竟和内存还是有点差别的,寄存器值可能不经过cpu控制而变化。
------解决方案--------------------
__raw_writel 32 bits reg
__raw_writew 16 bits reg
__raw_writeb 8 bit reg