系列文章目录
第一章 [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的地址映射
上两图中我标出了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