实验报告--GPIO
1 GPIO基础知识
GPIO (General-purpose input/output),通用型之输入输出的简称,功能类似8051的PO—P3,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI或通用输出(GPO)或通用输入与输出(GPIO),如当clk generator, chip select等。
既然一个引脚可以用于输入、输出或其他特殊功能,那么一定有寄存器用来选择这些功能。对于输入,一定可以通过读取某个寄存器来确定引脚电位的高低;对于输出,一定可以通过写入某个寄存器来让这个引脚输出高电位或者低电位;对于其他特殊功能,则有另外的寄存器来控制它们。
GPIO口一是个比较重要的概念,用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。GPIO口的使用非常广泛。
GPIO的优点(端口扩展器)
低功耗:GPIO具有更低的功率损耗(大约11A,C的工作电流则为100uA)。
集成IPC从机接口:GPIO内置IC从机接口,即使在待机模式下也能够全速工作。
小封装:GPIO器件提供最小的封装尺寸—3mm x 3mm QFN!
低成本:您不用为没有使用的功能买单!
快速上市:不需要编写额外的代码、文档,不需要任何维护工作!
灵活的灯光控制:内置多路高分辨率的PWM输出。p
可预先确定响应时间:缩短或确定外部事件与中断之间的响应时间。
更好的灯光效果:匹配的电流输出确保均匀的显示亮度。
布线简单:仅需使用2条1C总线或3条SPI总线
1.1 GPI0寄存器框架
一般的ARM SoC都有大概500+的IO,一般情况下会将IO进行分组如GPIOA(GroupA)一般系统作为WAKEUP GPIO ,大概有16个IO口,WAKEUP GPIO的意思就是在系统进入休眠后,这部分的Power Domain是 always ON的。在系统休眠后这部分的是不断电的。举个例子系统进入休眠后,这时候来了一个电话,如果不是使用WAKE UP GPIO作为中断源的话,BP (BASEBAND PROCESS)是无法唤醒CPU进行UI显示,响铃等一系列的操作的。还有一个我们常用的Power key,如果 powerkey所使用的IO不说采用wakeup的GPIO的话也是无法唤醒系统的。
剩下的IO SoC会将SoC按照32个IO为一组分为GPIOB(GroupB),GPIOC-GPIOx这个根据SoC自己的IO数量去划分,为什么使用32个IO为一组进行划分呢?我们仔细想一下,一般 SoC寄存器的位宽是32bit,如果按照32个分组的话刚好一个 bit 代表一个IO的状态。所以我们在进行硬件逻辑设计的时候,也要考虑软件上的便利性。
再介绍一个概念,那就是IO复用,IO复用顾名思义是一个IO可以配置成多个功能,一般SoC在设计的时候为了提升IO的利用率,在内部逻辑门电路设计的时候会进行IO复用,意思就是一个IO可以配置为一般的IO功能,也可以配置成如I2C SDA或者SCL的功能,也可以配置成UART的TX或者RX功能,这样的目的就是为了开发者能够进行灵活的设计和布