[RK3399][Uboot]使用内存映射方式直接控制IO

本文详细介绍了如何在RK3399平台上通过内存映射方式直接操作GPIO寄存器,涉及GPIO的IOMUX、PullUp/PullDown、DDR及DR设置,以GPIO4_A1和GPIO4_D6为例,演示了如何设置GPIO的输入输出及电平。代码示例展示了在Uboot中初始化和验证GPIO状态的流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录

第一章 [RK3399][Uboot]使用内存映射方式直接控制IO



前言

嵌入式工作这么多年,经常会用到GPIO,通常是使用内核的API或Sysfs来操作GPIO,直接操作GPIO寄存器的情况或GPIO内存映射的情况比较少,本文就针对RK3399平台的GPIO,以操作GPIO地址映射的方式来控制一下GPIO。会涉及到GPIO的IOMUX,Pull Up/Pull Down, 设置输入输出,给输出设置高电平等方面。本文重点会跟踪GPIO4_A1和GPIO4_D6这两个GPIO。


目标

1.查看并设置GPIO4_A1的IOMUX和Pull Up/Pull Down状态,并设置其默认Pull Down.
2.查看并设置GPIO4_D6输入输出状态,并设置其输出高电平。

一、GPIO的地址映射

GRF

RK3399地址映射
GPIO DR DDR

上两图中我标出了GPIO使用的几个基地址。
涉及到GPIO的IOMUX和Pull Up/Pull Down的有GRF和PMUGRF。
涉及到具体GPIO输入输出的有GPIO0/GPIO1/GPIO2/GPIO3/GPIO4这几个基地址。
GPIO4_A1要查看IOMUX和Pull Up/Pull Down,所以要用到它的GRF基地址,从第二个图中可知,GRF基地址为:0xFF770000
IOMUX用GRF_GPIO4A_IOMUX地址:GRF基地址+偏移地址=0xFF770000 + 0x0E020 = 0xFF77E020
Pull Up/Pull Down用GRF_GPIO4A_P地址:GRF基地址 + 偏移地址 = 0xFF7700 + 0x0E060 = 0xFF77E060
GPIO4_D6要查看并设置输入输出,所以要用到GPIO4的基地址,从第二个图中可知,GPIO4的基地址为:0xFF790000
DDR输入输出方向设置寄存器,使用GPIO_SWPORTA_DDR地址:GPIO4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值