ioremap函数可以实现物理地址到虚拟地址的转化
void gpl2_device_init(void)
{
//物理地址起始地址0x11000100→0x11000108
phys_addr = 0x11000100;
//0x11000100是GPL2CON的物理地址
virt_addr =(unsigned long)ioremap(phys_addr,0x10);
//指定需要操作的寄存器地址
GPL2CON = (unsigned long *)(virt_addr+0x00);
GPL2DAT = (unsigned long *)(virt_addr+0x04);
GPL2PUD =(unsigned long *)(virt_addr+0x08);
}
1.硬件
KP_COL0→GPL2_0
datasheet物理地址
GPL2CON = 0x1100_0000+0x0100 = 0x11000000+0x0100=0x11000100
GPL2DAT = 0x11000104
GPL2PUD = 0x11000108
寄存器不一定都是32位的,也有16位和8位
2.软件
3.编译测试
加载驱动,小灯灭
卸载驱动,小灯亮
本文深入探讨了ioremap函数在嵌入式系统中的作用,详细解析了如何使用该函数将物理地址转换为虚拟地址,并通过实例展示了在硬件寄存器操作中的具体应用。
7175

被折叠的 条评论
为什么被折叠?



