|
【开发基础】 使用io来操作寄存器_android_linux_register_kernel_debug
发表于 2016-7-12 16:57:26
浏览:7911
|
回复:3
打印
只看该作者
[复制链接]
楼主
本帖最后由 54zw 于 2016-7-14 14:36 编辑
使用android 上的io 来操作 和读写GPIO举例(这个io只是简单的应用程序而已,不够强大,有兴趣的可以去看下Freescale imx 里的memtool, 在各种不同的平台开发过发现这个是最舒服的,Freescale 的工程师们确实花了更多的心思):
How to use memtool to debug your kernel 搜索memtool即可
回到正题,如何使用io:
从系统内存映射和device tree中都可以知道,GPIO0-GPIO3这4个bank的寄存器基地址是多少:
下面一gpio0为例:
gpio0@2007c000 {
compatible = "rockchip,gpio-bank";
reg = <0x2007c000 0x100>;
interrupts = <0x0 0x24 0x4>;
clocks = <0x4d 0x9>;
gpio-controller;
#gpio-cells = <0x2>;
interrupt-controller;
#interrupt-cells = <0x2>;
linux,phandle = <0x74>;
phandle = <0x74>;
};
可以看到GPIO0的寄存器基地址是0x2007c000
从GPIO控制器的手册可以查到这个对应的寄存器是GPIO_SWPORTA_DR:
读:
使用io 读出这个寄存器的值:(每一位对应GPIO0这个bank上的每一个管脚即GPIO0_A0-GPIO0-D7)
root@fireprime:/ # io -r -l 16 0x2007c000
2007c000: 00 00 00 02 00 00 00 4a 00 00 00 00 00 00 00 00
写:
比如要将GPIO0_D1拉高 对应的是这个寄存器的bit26
io -w 0x2007c003 2
注意这里并没有操作dir 和 mux 因为这里只是演示io来操作寄存器而已
|
|