- 论坛徽章:
- 0
|
本帖最后由 testh 于 2012-11-08 10:22 编辑
使用的是arm9核心的soc。在头文件中有 #define XXX_BASE IO_ADDRESS(0x6000000),其中,0x60000000是datasheet中的物理地址。
#define IO_ADDRESS(x) ((x)&0x0fffffff)+0xf0000000)
我在driver中使用
base=ioremap(0x60000000,size);
writel(val,base+offset);
read(base+offset)
这样操作的时候就可以把数值写进0x60000000寄存器,也可以读出来。
刚才经过实际测试,使用IO_ADDRESS(0x60000000)这个转换后的地址作为read()/write()参数中的address值对寄存器进行读写操作也是可以正常读写寄存器的。但是这两个有什么不一样吗?
一个是静态的,一个是动态的?
应该不是简单对0x60000000这样的地址作偏移就可以的,肯定是事先在哪里进行过了“注册”或者类似的操作通知了kernel,但是一直没有找到相应的源码在哪里? 望知道的兄弟能够给予指点。先谢了。 |
|