资讯详情

通用输入/输出接口 GPIO

GPIO的介绍

GPIO(General Purpose Input/Output),一般来说,有些引脚可以通过它们向外输出高低电平,也可以读入引脚状态。GPIO 接口技术是众多接口技术中最简单的一种。

GPIO 接口具有功率损耗低、布线简单、包装尺寸小、控制简单等优点,应用广泛,占嵌入式系统的很大比例。

GPIO 接口通常有两个寄存器:通用I/O 和 通用I/O。 数据寄存器外部设备直接引入芯片外部,通过设置控制寄存器,可以输入或输出相应的信号独立控制。 除了这两种基本寄存器,有时还有上拉寄存器,可以设置I/O输出模式为高阻态或带拉电平输出或无拉电平输出。

S5PV210的GPIO寄存器

GPIO接口组寄存器由四位控制,扩展GPIO所以S5PV210的GPIO不仅有GPIO其它功能,如串口,也可重复使用。

实验中使用的寄存器详细说明

S5PV210的GPIO寄存器很多。每个接口组有两种控制寄存器,一种在正常模式下工作,另一种在断电模式下工作。以下仅用于本章实验GPC0进行介绍,其他的GPIO接口用法可根据葫芦画瓢。 GPC0:5 in/out port GPC有五个引脚。

GPC0控制寄存器包括:GPC0CON、GPC0DAT、GPC0PUD、GPC0DRV; GPC0CONPDN、GPC0PUDPDN。前四类工作正常,后两类工作正常。

(1)GPC0CON寄存器 此寄存器为GPC主要用于配置各引脚功能的0引脚控制寄存器。相应地址为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。寄存器是一个控制引脚的人。

(3)GPC0PUD寄存器 当值为0b00时,对应引脚无上拉/下拉电阻;当值为0b01时,有内部下拉电阻;当值为0b10时,内部有上拉电阻;当值为0b11时为保留。 对应的内存地址为0xE0200068。寄存器用两位控制一个引脚。

(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     ///在C函数中跳转执行  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)) //3号引脚[15:12]0001 输出 #define GPC0_4_out (1<<(4*4)) //4号引脚[19:16]设为0001 输出 #define GPC0_3_MASK (0xF<<(3*4)) //3号引脚[15:12]设为1111 #define GPC0_4_MASK (0xF<<(4*4)) //4号引脚[19:16]设为1111 void delay(volatile unsigned long dly) { 
          volatile unsigned int t = 0xFFFF; while(dly--) for(;t>0;t--); //循环次数必须设置大一点,否则看不出闪烁效果 } int main() { 
          unsigned long i = (1<<3); //1左移3位,0001变为1000。i用于指示当前亮着的灯。初始化为3号灯亮。 //&= 碰1不变,碰0清零。~ 取反。| 连接作用。 GPC0CON &= ~(GPC0_3_MASK|GPC0_4_MASK); //括号里表示:[19:12]是11111111 //GPC0CON共有20位,控制5个引脚,这一步将3、4引脚清零,其余引脚保持不变。 //|= 碰1变1,碰0不变。 GPC0CON |= (GPC0_3_out|GPC0_4_out); //括号里表示:[19:12]是00010001 //配置3、4引脚为输出引脚。 while(1) { 
          delay(0x50000); GPC0DAT &= ~(0x3<<3); //0011左移3位得到11000,~得到00111,&=将3、4位清零,即两灯全关。 if(i==0x08) //0x08用二进制表示为1000,即三号灯。若当前亮的是三号灯, i=(1<<4); //0001变到10000指示4号灯 else i=(1<<3); //指示到三号灯 GPC0DAT |= i; //|=之后3、4位要么是01(3号灯亮),要么是10(4号灯亮)。循环点亮。 } return 0; } 

&= 主要目的是将某几位清零,其余不变 |= 主要目的是将某几位变为1,其余不变

标签: 二极管s5

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台