Firefly开源社区

打印 上一主题 下一主题

【开发基础】 使用io来操作寄存器_android_linux_register_kernel_debug

582

积分

10

威望

8

贡献

技术大神

Rank: 3Rank: 3

积分
582
QQ

【开发基础】 使用io来操作寄存器_android_linux_register_kernel_debug

发表于 2016-7-12 16:57:26      浏览:5932 | 回复: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来操作寄存器而已
回复

使用道具 举报

3747

积分

17

威望

18

贡献

官方团队

Rank: 9Rank: 9Rank: 9

积分
3747
发表于 2016-7-13 11:42:25        只看该作者  沙发
32个赞
回复

使用道具 举报

2918

积分

56

威望

46

贡献

高级创客

Rank: 6Rank: 6

积分
2918

优秀版主论坛元老

发表于 2016-7-14 09:53:38        只看该作者  板凳
赞{:2_27:},可惜外链图片挂了
回复

使用道具 举报

582

积分

10

威望

8

贡献

技术大神

Rank: 3Rank: 3

积分
582
QQ
发表于 2016-7-14 14:37:09        只看该作者  地板
zhansb 发表于 2016-7-14 09:53
赞,可惜外链图片挂了

谢谢提醒,补上了图片:lol
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表