ARM之GPIO介绍(Exynos4412平台)

GPIO

概述:GPIO的英文全称是General-Purpose Input/Output,也就是通用输入输出。在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO.接口至少有两个寄存器,即“通用IO控制寄存器”和“通用IO数据寄存器”。
特性

  • 46个可中断通用控制I/O;
  • 172个外部中断;
  • 32个外部可唤醒中断;
  • 252个多路复用I/O口;
  • 睡眠模式引脚状态可控(除了GPX0,GPX1,GPH2,GPH3);

GPIO常用寄存器

引脚控制寄存器(GPxCON x=A0~V4)

在exynos4412中,大多数的引脚都是功能复用的,所以必须对每个引脚进行配置。引脚控制寄存器(GPxCON)用来配置每个引脚的功能。
ARM之GPIO介绍(Exynos4412平台)_第1张图片
ARM之GPIO介绍(Exynos4412平台)_第2张图片
ARM之GPIO介绍(Exynos4412平台)_第3张图片

引脚数据寄存器(GPxDAT x=A0~V4)

如果引脚功能被配置为输出功能,可以通过向GPxDAT寄存器对应位写入数据,控制引脚输出相应电平。如果引脚被配置为输入功能,则可以从GPxDAT寄存器对应位读出数据读回的数据就是当前引脚的电平状态。
ARM之GPIO介绍(Exynos4412平台)_第4张图片

引脚上拉下拉设置寄存器(GPxPUD x=A0~V4)

exynos4412芯片的内部给引脚设置了上拉电路和下拉电路,通过引脚上下拉设置寄存器控制引脚上拉电阻和下拉电阻的使能和禁止。如果引脚的上拉电阻被使能,则无论在哪种状态(输入、输出、DATAn、EINTn等其他功能)下,上拉电阻都起作用。
ARM之GPIO介绍(Exynos4412平台)_第5张图片

引脚驱动能力寄存器(GPxDRV x=A0~V4)

根据和引脚连接的外设电器特性,设置引脚合适的驱动电流,达到既能满足正常驱动的需求,也不浪费功耗。
ARM之GPIO介绍(Exynos4412平台)_第6张图片

低功耗模式引脚功能控制寄存器(GPxCONPDn x=A0~V4)

该寄存器用来控制exynos4412芯片在低功耗模式下的引脚功能,类似GPxCON寄存器,部分引脚没有这个功能。

低功耗引脚上下拉设置寄存器(GPxPUDPDN x=A0~V4)

该寄存器用来控制exynos4412芯片在低功耗模式下的引脚上拉和下拉功能的使能和禁止,类似GPxPUDPDN寄存器,部分引脚诶呦这个功能。
注意
GPIO模块的基地址是0x1100_0000
GPx2组的配置寄存器GPx2DRV的地址是:基地址+偏移量
0x1100 0000+0x0c4c=0x11000c4c

GPIO寄存器的封装

直接封装
#define GPx2CON (*(volatie unsigned int *)0x1100 0c40)

这里定义了一个宏,宏定义在预处理阶段进行直接替换。0x11000c40是一个十六进制的数据,前面用(unsigned *)修饰,表示把0x11000c40强制转换成一个指向unsigned int型的指针变量。
volatile 是C 语言的 32个关键字之一,是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件中断或者线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,每次读取这个变量的值都要从内存单元里读取,而不是直接使用放在高速缓存或寄存器里的备份,从而可以提供对特殊地址的稳定访问。

结构体封装

和直接封装是相同的道理,在这里就不进行赘述,一般都是使用直接封装的方法,有兴趣的可以将直接封装改写为结构体封装。

你可能感兴趣的:(ARM开发)