第一章 NXP LPC1768—— GPIO
开发环境:集成开发环境μVision4 IDE版本4.60.0.0
主机系统:Microsoft Windows XP
开发平台:旺宝NXP LPC1768开发板
1.1 GPIO简介
1.2 硬件描述
1.3 程序说明
1.4 实验现象
1、GPIO:GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读出引脚的状态-是高电平或是低电平。GPIO 口是个比较重要的概念,用户可以通过 GPIO 口和硬件进行数据交互(如 UART),控制硬件工作(如 LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。因此,GPIO 口的使用非常广泛。
2、硬件描述:
想要控制LED,当然是通过控制LPC1768 I/0的高低电平来实现,在LPC1768上,I/O引脚可以被软件设置成不同的功能,如输入或输出,所以被称为GPIO (General-purpose I/O)。在本实验中,主要是用GPIO来控制开发板上的LED,实现跑马灯的效果。注意要短接JP8。
3、程序说明:我们先来简单了解一下系统时钟分频倍频。假如我们要得到PLL0=400MHz的时钟,计算公式如下:
FCCO=(2×M×FIN)/ N
PLL输入和设定必须满足下面的条件:
1) FIN的范围:32KHz~50MHz;
2) FCCO的范围:275MHz~550MHz。
可通过求解PLL等式来得到其它的PLL参数:
M =(FCCO×N)/(2×FIN)
N =(2×M×FIN)/ FCCO
FIN=(FCCO×N)/(2×M)
这里FIN=12,FCCO=400。由此可计算M=100,N=6;PLL0CFG寄存器包含PLL0倍频器和分频器值,我们往这个寄存器写值来实现分频与倍频
上面我们算得M=100,N=6,把他们分别减一,换算成16进制
#define PLL0CFG_Val 0x00050063
接下来就可以配置我们的CPU时钟了,PLL0输出时钟必须要经过分频才能
提供给CPU使用,PLL0输出的分频由CCLKCFG寄存器进行控制。当PLL0被旁路时,可通过1分频。当PLL0正在运行时,输出必须经过分频以使CPU时钟频率(CCLK)工作在限定的范围内。可使用一个8位分频器进行选择,包括降低CPU的操作频率来暂时节省功耗而无需关闭PLL0。
CCLK从PLL0输出信号中得到,通过CCLKSEL+1分频。当CCLKSEL=1时,CCLK的频率是PLL0输出频率的一半;当CCLKSEL=3时,CCLK的频率是PLL0输出频率的四分之一,如此类推。这里我们把它设置成
#define CCLKCFG_Val 0x00000007
即CCLK的频率 = PLL0输出频率的八分之一 =50MHz
现在我们一步一步来点亮LED。
在端口配置的函数里面,有两个重要寄存器,FIODIR和FIOPIN。
我们从这张表可以看到,要把某个端口方向设置成输出,只需把FIODIR这个寄存器的某个位写1即可。根据手册说明,除了32位长和仅可以进行字访问的FIODIR寄存器外,每个高速GPIO口也可通过一些字节和半字访问的寄存器来控制。这些额外的寄存器除了提供与FIODIR寄存器相同的功能外,还可以更容易、更高速地访问物理端口引脚。比如LPC_GPIO2->FIODIR = 0x000000ff; 我们也可以写成LPC_GPIO2->FIODIR0 = 0xff;
设置好方向之后,即可按我们自己的要求输出高低电平来实现我们当初设计的功能。
细心的你一定发现了,在void LED_config(void)这个函数里,有配置GPIO0的语句。奇怪啊!LED没有接在GPIO0的IO口啊。通过计算我们可以知道这两句配置的是P0.21这个IO口。打开我们的原理图,可以看到P0.21接到了SN74ALVC164245的DIR这个端口,74ALVC164245是 双电源供电,实现3.3V和5V电平转换,宝马1768的板子没有用5V的IO,所以电源都接3v3,其中DIR控制传输方向,DIR高电平 A to B ;DIR低电平 B TO A
我们把DIR拉高,数据的传输方向是A to B,目的是防止数据被意外干扰。
4、实验现象:
把程序下载到板子上,程序运行后,可以看到LED从左到右,然后从右到左流动,流到最左边时LED全亮,最后全灭,以此循环。
例程附件可以到这个帖子下载:在这里就不在上传了
https://bbs.eeworld.com.cn/thread-453270-1-1.html