读书人

关于CPU寄存器的访问解决方法

发布时间: 2012-02-26 20:19:45 作者: rapoo

关于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

读书人网 >UNIXLINUX

热点推荐