GPIO的介绍
GPIO(General Purpose Input/Output),通俗点讲就是一些引脚,可以通过它们向外输出高低电平,或者读入引脚的状态。GPIO 接口技术是众多接口技术中最为简单的一种。
GPIO 接口具有:功率损耗低、布线简单、封装尺寸小、控制简单等优点,故其应用广泛,在嵌入式系统中占有很大的比重。
GPIO 接口通常至少有2个寄存器:通用I/O控制寄存器 和 通用I/O数据寄存器。 数据寄存器的各位直接引到芯片外部供外部设备使用,各位上对应的信号是输入还是输出,可通过设置控制寄存器中对应位独立地控制。 除这两种基本寄存器外,有时还有上拉寄存器,通过它可以设置I/O输出模式是高阻态的或带上拉电平输出的或不带上拉电平输出的。
S5PV210的GPIO寄存器
GPIO接口组寄存器由4位来控制,扩展了GPIO引脚的功能。所以S5PV210的GPIO不仅有GPIO的功能,还可复用作其他功能,如串口。
实验用到的寄存器详解
S5PV210的GPIO寄存器非常多,每个接口组有两种类型的控制寄存器,一种工作在正常模式,另一种工作在掉电模式。下面只针对本章实验用到的GPC0进行介绍,其他的GPIO接口用法可依葫芦画瓢。 GPC0:5 in/out port GPC0共有5个引脚。
GPC0的控制寄存器有:GPC0CON、GPC0DAT、GPC0PUD、GPC0DRV; GPC0CONPDN、GPC0PUDPDN。前四类工作在正常模式,后两类工作在掉电模式。
(1)GPC0CON寄存器 此寄存器为GPC0引脚的控制寄存器,主要用于配置各引脚的功能。其对应的地址为0xE0200060。 因为GPC0共有5个引脚,且每个引脚需用4位来控制,故GPC0CON共有20位,从右到左依次对应0-4号引脚。 3号引脚通常记作GPC0_3。 0000代表输入,0001代表输出。
GPC0CON | 位 |
---|
GPC0CON[4] | [19:16] | GPC0CON[3] | [15:12] | GPC0CON[2] | [11:8] | GPC0CON[1] | [7:4] | GPC0CON[0] | [3:0] |
(2)GPC0DAT寄存器 此寄存器用于决定引脚的输入或输出电平的状态: 当引脚设为输入(0000)时,可读出对应引脚的电平状态是高是低;当引脚设为输出(0001)时,可写入引脚的电平是高还是低。 其对应的内存地址为0xE0200064。该寄存器是1位控制一个引脚。
(3)GPC0PUD寄存器 当值为0b00时,对应引脚无上拉/下拉电阻;当值为0b01时,有内部下拉电阻;当值为0b10时,内部有上拉电阻;当值为0b11时为保留。 其对应的内存地址为0xE0200068。该寄存器用2位控制一个引脚。
(4)GPC0DRV寄存器 …… (5)GPC0CONPDN寄存器 …… (6)GPC0PUDPDN寄存器 ……
实验实例1
实验目的: 利用S5PV210的GPC0_3、GPC0_4这两个GPIO引脚控制2个LED发光二极管,用C语言实现。
1)启动代码start.S
.text
.global _start
_start:
bl main
halt_loop:
b halt_loop
2)循环点亮LED灯
#define GPC0CON *((volatile unsigned int*)0xE0200060)
#define GPC0DAT *((volatile unsigned int*)0xE0200064)
#define GPC0_3_out (1<<(3*4))
#define GPC0_4_out (1<<(4*4))
#define GPC0_3_MASK (0xF<<(3*4))
#define GPC0_4_MASK (0xF<<(4*4))
void delay(volatile unsigned long dly)
{
volatile unsigned int t = 0xFFFF;
while(dly--)
for(;t>0;t--);
}
int main()
{
unsigned long i = (1<<3);
GPC0CON &= ~(GPC0_3_MASK|GPC0_4_MASK);
GPC0CON |= (GPC0_3_out|GPC0_4_out);
while(1)
{
delay(0x50000);
GPC0DAT &= ~(0x3<<3);
if(i==0x08)
i=(1<<4);
else
i=(1<<3);
GPC0DAT |= i;
}
return 0;
}
&= 主要目的是将某几位清零,其余不变 |= 主要目的是将某几位变为1,其余不变
|