GPIO裸机编程
时间:2018-08-09作者:华清远见
作者:李老师,华清远见教育科技集团讲师。 GPIO控制技术是接口技术中简单的一种。本章通过介绍S5PV210芯片的GPIO控制方法,让读者初步掌握控制硬件接口的方法。本章的主要内容: GPIO功能介绍。 S5PV210芯片的GPIO控制器详解。 S5PV210的GPIO应用。 1.1 GPIO功能介绍 首先应该理解什么是GPIO。GPIO的英文全称为General-Purpose IO ports,也就是通用IO接口。在嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路,有的需要CPU为之提供控制手段,有的则需要被CPU用做输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了。比如,控制某个LED灯亮与灭,或者通过获取某个引脚的电平属性来达到判断外围设备的状态。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立地加以设置。比如,可以设置某个引脚的属性为输入、输出或其他特殊功能。 在实际的MCU中,GPIO是有多种形式的。比如,有的数据寄存器可以按照位寻址,有些却不能按照位寻址,这在编程时就要区分了。比如传统的8051系列,就区分成可位寻址和不可位寻址两种寄存器。另外,为了使用的方便,很多MCU的 GPIO接口除必须具备两个标准寄存器外,还提供上拉寄存器,可以设置IO的输出模式是高阻,还是带上拉的电平输出,或者不带上拉的电平输出。这在电路设计中,外围电路就可以简化不少。 1.2 S5PV210芯片的GPIO控制器详解 1.2.1 特性 S5PV210的GPIO特性包括如下几点: 146个可中断通用控制I/O。 32个可控外部中断。 237个多路复用I/O口 睡眠模式引脚状态可控(除了GPH0、GPH1、GPH2和GPH3)。 1.2.2 GPIO分组预览 GPA0:8 in/out port – 2xUART 带控制流 GPA1:4 in/out port – 2xUART 不带控制流或1xUART 带控制流。 GPB:8 in/out port – 2x SPI总线接口。 GPC0:5 in/out port – I2S总线接口,PCM接口,AC97接口。 GPC1:5 in/out port – I2S总线接口,SPDIF接口,LCD_FRM接口。 GPD0:4 in/out port –PWM接口。 GPD1:6 in/out port – 3xI2C总线接口,PWM接口,IEM接口。 GPE0,1:13in/out port –摄像头接口。 GPF0,1,2,3:30 in/out port – LCD 接口。 GPG0,1,2,3:28 in/out port – 4xMMC通道。 GPH0,1,2,3:32 in/out port –键盘,大支持32位的睡眠可中断接口。 GPI:低功率I2S,PCM、低功耗PDN配置(通过AUDIO_SS PDN寄存器配置)。 GPJ0,1,2,3,4:35 in/out port–Modem IF, CAMIF, CFCON, KEYPAD, SROM ADDR[22:16] MP0_1,2,3: 20 in/out port – EBI信号控制 (SROM, NF, OneNAND) MP0_4,5,6,7: 32 in/out memory port – EBI MP1_0~8: 71 DRAM1 ports MP2_0~8: 71 DRAM2 ports ETC0, ETC1, ETC2, ETC4(ETC3保留): 28 in/out ETC ports - JTAG, Operating Mode, RESET, CLOCK 1.2.3 S5PV210的GPIO常用寄存器分类 (1) 端口控制寄存器(GPA0CON-GPJ4CON) 在S5PV210中,大多数的引脚都可复用,所以必须对每个引脚进行配置。端口控制寄存器(GPnCON)定义了每个引脚的功能。 (2) 端口数据寄存器(GPA0DAT-GPJ4DAT) 如果端口被配置成了输出端口,可以向GPnDAT的相应位写数据。如果端口被配置成了输入端口,可以从GPnDAT的相应位读出数据。 (3) 端口上拉寄存器(GPA0PULL - GPJ4PULL) 端口上拉寄存器控制了每个端口组的上拉/下拉电阻的使能/禁止。根据对应位的0/1组组合,设置对应端口的上拉/下拉电阻功能是否使能。如果端口的上拉电阻被使能,无论在哪种状态(输入、输出、DATAn、EINTn等)下,上拉电阻都起作用。 1.2.4 GPIO功能描述 GPIO功能概括图如图所示。
在S5PV210中,输出端口被分为如表所示的种类。 表
提示:GPxCON、GPxDAT、GPxPUD和GPxDRV工作在普通模式,GPxPDNCON、GPxPDNPULL工作在低功耗模式。 1.2.5 S5PV210I/O接口常用寄存器详解 对于GPIO控制寄存器,现在来看一下每一组IO的详细功能描述,考虑到GPIO的寄存器很多,这里只列出与后面GPIO示例有关的寄存器,如表所示。 表GPC0CON控制寄存器(可读/可写 Address = 0xE0200060)
GPIO数据寄存器 GPIO数据寄存器如表所示。 表GPC0DAT数据寄存器(可读/可写 Address = 0xE0200064)
1.3 实验5 GPIO控制实验 通过第4章的介绍,读者了解了GPIO的功能,以及S5PV210芯片GPIO控制器的配置方法。本章通过一个简单示例说明S5PV210的GPIO接口的应用。 1.3.1 实验目的 示例将利用S5PV210的GPC0_3、GPC0_4这2个I/O引脚控制2个LED发光二极管,使其有规律地闪烁。 1.3.2 实验原理 如图所示,LED1~LED2分别与GPC0_3、GPC0_4相连,通过GPC0_3、GPC0_4引脚的高低电平来控制三极管的导通性,从而控制LED的亮灭。
因此,当这几个引脚输出高电平时发光二极管点亮;反之,发光二极管熄灭。 1.3.3 实验内容 (1) 寄存器设置 为了实现控制LED的目的,需要通过配置GPC0CON寄存器将GPC0_3、GPC0_4设置为输出属性。通过设置GPC0DAT寄存器实现点亮与熄灭LED。 对于本例来说,GPC0上拉寄存器可以不用设置。 (2) 程序编写 相关代码如下:
/*相关GPIO端口的功能设定*/ 1.3.4 实验步骤 (1) 按照实验1的步骤,连接好开发板及FS-JTAG仿真器,并且连接好配线。
(2) 打开串口终端并配置。
(3) 启动开发板,在串口终端中输入任意按键讲开发板系统停在u-boot的位置。
(4) 打开FS-JTAG工具软件,点击“Connect”按钮连接仿真器,如下图所示即连接成功。如连接不成功请检查连线及步骤(3)。
注意:确定FS-JTAG驱动已经安装成功,USB线已经如第(1)步连接上。点击“Connect”出现如想Error表示连接成功。反之,出现Info等信息,1、有可能是FS-JTAG问题。2、核心板有问题。3、大多数是eclipse工具处理Debug状态,关闭或删除Debug(Terminate And Remove)。
(5) 打开eclipse软件,导入实验目录下的实验4“GPIO控制实验”。
(6) 选择菜单下“Run -> Debug Configurations”,双击左侧“Zylin Embedded debug(Native)”。
(7) 填写此程序的elf文件到“Main”菜单下的“C/C++ Application”下。
(8) 选择LED.elf文件
(9) 填写GCC工具集中的GDB工具路径到“Debugger”菜单下的“GDB debugger”下。
(10) 填写仿真器的配置文件到“Debugger”菜单下的“GDB command file”下。
(11) 填写初始化命令到“Commands”菜单下的“ ‘Initialize’ commands”中。
(12) 执行Debug后,eclipse进入Debug调试界面,可以看到程序停在reset的位置。
(13) 点击全速运行,可以看到开发板LED等闪烁。
1.3.5 实验现象 用FS-JTAG仿真器仿真程序,可以看到LED灯有规律的闪动。
发表评论
|