Firefly开源社区
标题:
【开发基础】 使用io来操作寄存器_android_linux_register_kernel_debug
[打印本页]
作者:
54zw
时间:
2016-7-12 16:57
标题:
【开发基础】 使用io来操作寄存器_android_linux_register_kernel_debug
本帖最后由 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:
snap0003.jpg
(87.97 KB, 下载次数: 483)
下载附件
2016-7-14 14:35 上传
读:
使用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来操作寄存器而已
作者:
jpchen
时间:
2016-7-13 11:42
32个赞
作者:
zhansb
时间:
2016-7-14 09:53
赞{:2_27:},可惜外链图片挂了
作者:
54zw
时间:
2016-7-14 14:37
zhansb 发表于 2016-7-14 09:53
赞,可惜外链图片挂了
谢谢提醒,补上了图片:lol
欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/)
Powered by Discuz! X3.1