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.编译测试
加载驱动,小灯灭
卸载驱动,小灯亮