0x5600 0010是物理地址!0xF540 0010是虚拟地址!
要想使用0x56000010,需要映射。
如果开发板的B端口的端口控制寄存器的地址为0x56000010,数据寄存器的地址为0x56000014
那我在linux 驱动程序了 能不能这样进行映射:
void __iomem *base_addr;
#define GPB_BASE_ADD 0x56000010
#define rGPBCON (*(volatile unsigned long*)base_addr +0x00)
#define rGPBDAT (*(volatile unsigned long*)base_addr + 0x04)
base_add = ioremp(GPB_BASE_ADD,0x10);
然后通过iowrite与ioread类函数对rGPBCON与rGPBDAT进行读写啊???
这样能行吗?如果可以,想问下:用ioremp函数映射地址,物理地址和映射的虚拟地址成线性关系的吗?
能这样单独使用ioremap()函数,但是最好是先使用request_mem_region()向系统申请,否则很有可能导致系统不稳定或崩溃。
能不能读写那的要看那个寄存器支不支持
是线性关系,你可以不用ioread 和iowrite函数,可以直接base_add+offset来实现对寄存器寻址。
datasheet R/W 若为R则表示为可读,W则为可写