打印
[其他MCU]

NXP LPC1768宝马开发板 第一章GPIO实验

[复制链接]
1610|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Mancherstun|  楼主 | 2015-12-23 17:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
开发环境:集成开发环境μVision4 IDE版本4.60.0.0
主机系统:Microsoft Windows XP
开发平台:旺宝NXP LPC1768开发板

1.1 GPIO简介
1.2 硬件描述
1.3 程序说明
1.4 实验现象

1GPIO
GPIOGeneral Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读出引脚的状态-是高电平或是低电平。GPIO 口是个比较重要的概念,用户可以通过 GPIO 口和硬件进行数据交互(UART),控制硬件工作(LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。因此,GPIO 口的使用非常广泛。
2硬件描述:

相关帖子

沙发
Mancherstun|  楼主 | 2015-12-23 17:05 | 只看该作者
想要控制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倍频器和分频器值,我们往这个寄存器写值来实现分频与倍频

使用特权

评论回复
板凳
Mancherstun|  楼主 | 2015-12-23 17:06 | 只看该作者
上面我们算得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。

使用特权

评论回复
地板
Mancherstun|  楼主 | 2015-12-23 17:06 | 只看该作者
我们从这张表可以看到,要把某个端口方向设置成输出,只需把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,目的是防止数据被意外干扰。

使用特权

评论回复
5
Mancherstun|  楼主 | 2015-12-23 17:07 | 只看该作者
4、实验现象:
把程序下载到板子上,程序运行后,可以看到LED从左到右,然后从右到左流动,流到最左边时LED全亮,最后全灭,以此循环。

使用特权

评论回复
6
追逐浪花| | 2015-12-23 20:03 | 只看该作者
这个LPC的有没有库函数版本的啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

294

帖子

2

粉丝