项 伟
(长江工程职业技术学院,武汉 430212)
天嵌S3C2440开发板是一款ARM9的学习板,目前该开发板虽然配套了使用手册,但是对于刚接触ARM又没有嵌入式技术基础的学生来说不够简洁直观,学起来较有难度。本文给出了在该开发板下通过GPIO接口实现LED灯点亮的开发过程,以良好的简洁性、实用性来激发学生学习ARM的兴趣。
GPIO是通用可编程输入/输出接口,是ARM处理器中结构比较简单的外部设备/电路,往往通过它的引脚值来控制外部设备。
S3C2440处理器含有130个多功能的输入/输出引脚,它们分成9组输入/输出端口,分别是Port A~Port J,即GPA~GPJ。每组GPIO接口又有不同数量的引脚,如GPA有25个引脚,GPB有11个引脚等。除了GPA端口外,其余8组端口都有端口控制寄存器GPnCON、端口数据寄存器GPnDAT、端口上拉寄存器GPnUP。端口控制寄存器用于定义每个引脚的功能;端口数据寄存器的每位数据都直接引到芯片外部,依据定义端口的功能供外部设备读或写;端口上拉寄存器用于控制每个端口组的上接电阻的允许/禁止。
端口B控制寄存器GPBCON描述如表1所示。
表1 GPBCON控制寄存器控制位状态表
端口B数据寄存器GPBDAT是1个[10:0]位的寄存器,它的每一位用来分别存放GPBn的数据。当端口被配置成输入时,外部数据可以从对应的端口中读出;当端口被置成输出时,写入该寄存器的数据会被送到对的引脚上;当端口被配置成功能引脚时,此寄存器未定义。
天嵌S3C2440开发板的LED电路原理图如图1所示,它含有LED1、LED2、LED3、LED4共四个LED灯,每个LED灯实际上就是一个发光二极管,若使某个LED灯亮,必须供给对应的发光二极管低电平,反之,LED灯灭,必须供给对应的发光二极管高电平。
LED1~LED4分别与GPB组端口的GPB5~GPB8相连,通过GPB5~GPB8引脚的低电平控制LED1~LED4灯亮。所以需要通过GPBCON寄存器将GPB5~GPB8设置为输出功能,将数据0供给LED3的发光二极管。
图1 LED电路原理图
GPBCON寄存器将GPB5~GPB8设置为输出功能,GPBCON寄存器的某两位为01时表示设置该引脚为Output功能,所以,配置GPBCON寄存器的GPB5[11:10]~GPB8[16:17]都为01,其余位都为00,二进制数据经过转换得到十六进制数据是0×00015400。
为使LED1~LED4灯亮,将数据0存放到GPBDAT数据寄存器的对应5~8位,其余位不管。若是灯灭,就将数据1存放到GPBDAT数据寄存器的对应5~8位,二进制数据经过转换得到十六进制数据是0×1e0。端口初始化代码:
四个LED灯亮代码:
四个LED灯灭代码:
为了更好地观察LED灯亮,使LED灯交替亮灭,需要延时。
延时功能代码: