ARM GPIO简介

什么是LPC2148和GPIO

LPC2148是基于ARM7TDMI-S家族的32位微控制器。它由NXP半导体(以前是飞利浦)制造,是广泛使用且非常成功的基于ARM7的微控制器之一。

即使引入许多高级处理器和控制器时,ARM7家族被认为已过时,但它是为基于ARM的微控制器的初学者工作的最佳和最简单的微控制器之一。

在进入输入/输出引脚的详细信息之前,我们将看到LPC2148微控制器的一些关键功能。

  • LPC2148是基于ARM7家族(特定于ARM7TDMI -S)的一个 - 位微控制器,可在64 PIN pin LQFP包装(低调Quad Flat Flat套件)中使用。
  • 它具有32KB的片上静态RAM和一个512KB的片上闪存。
  • LPC2148具有片上启动加载程序软件,可用于使用系统内编程的功能来对微控制器进行编程。
  • 它还具有使用应用程序编程的功能,用户可以在不使用引导加载器软件的情况下对微控制器进行编程。
  • 它具有一个嵌入式的电路模拟器,可实时调试。
  • LPC2148具有连续近似类型的两个10位ADC(ADC0和ADC1)。
  • 它还具有10位电阻弦类型的DAC。

其他功能可以在官方数据表和用户手册中找到。

微控制器的通用输入输出(GPIO)引脚是开始启动其嵌入式编程之前需要学习的第一件事,因为输入/输出引脚是与微控制器接口的唯一方法。GPIO引脚可用于驾驶负载,阅读数字和模拟信号,控制外部组件,生成外部设备等的触发器。

LPC2148有两个IO端口,即端口0(P0)和端口1(P1)。这两个IO端口为32位宽,由微控制器的64个引脚提供。

The naming convention of the I/O pins on the LPC2148 Microcontroller is Pa.bc where ‘a’ is the number of the port i.e. 0 or 1 (as LPC2148 has only two ports) and ‘bc’ is the number of the pin in the port a. For example, P0.1 indicates pin number 1 of PORT0 and P1.10 indicates pin number 10 of PORT1.

port0是一个32位宽的输入/输出端口,每个物理销都具有专用方向控制位。在32个引脚中,可以将28个引脚用作通用双向I/O引脚。引脚P0.31是仅输出引脚。端口0的引脚P0.24,P0.26和P0.27不可用。

port1也是一个32位宽的输入/输出端口。在Port1中,销钉P1.0至P1.15不可用,PINS P1.16至P1.31是可用的通用输入/输出引脚。

LPC2148的I/O端口中的大多数引脚都具有多个函数,即它们与不同的函数多路复用。例如,LPC2148的引脚19具有三个功能,即P0.0,一个通用I/O PIN,TXD0,UART0和PWM1的发射机O/P,脉冲宽度调制器O/P 1。

在任何操作点,每个引脚都可以具有一个功能,并且可以在三个配置寄存器的帮助下选择该功能,这些配置寄存器控制多路复用器以允许外部引脚和芯片外围设备之间的连接。

配置寄存器称为Pinsel,分为三个寄存器:Pinsel0,Pinsel1和Pinsel2。这些配置寄存器为32位宽。LPC2148上的任何引脚都可以具有最大4个功能。因此,为了选择这四个功能之一,需要两个相应的针脚寄存器位。因此,32位平底寄存器可以控制16个用2位控制每个引脚的销钉。

PISEL0控制端口0引脚P0.0至P0.15,Pinsel1控制端口0引脚P0.16至P0.31,Pinsel2控制Port1 Pin1 Pins P1.16至P1.31。

下表显示了端口0上的Pinsel0和相应功能。

Pinsel0表

所有引脚的默认函数是GPIO。但是,要提及“ Pinsel0 = 0”是一个很好的编程实践,以便选择引脚的GPIO函数。

GPIO函数是微控制器最常用的功能。两个端口中的GPIO函数均由一组4个寄存器控制:IOPIN,IODIR,ioset和IOCLR。

Iopin:这是GPIO端口引脚值寄存器,可用于直接读取或写入引脚。无论PIN(输入或输出)设置的方向如何,都可以从此寄存器中读取为GPIO的引脚的状态。

该寄存器的语法是IOXPIN,其中“ X”是端口号,即port0的IO0PIN和port1的IO1pin。

iodir:它是GPIO端口方向控制寄存器,用于设置方向,即单个引脚的输入或输出。当此寄存器中的位置设置为“ 0”时,将MicroController中的相应引脚配置为输入。同样,当位设置为“ 1”时,将相应的引脚配置为输出。

该寄存器的语法是IOXDIR,其中“ X”是端口号,即port0的IO0DIR,而port1的IO1DIR。

ioset:它是GPIO端口输出集寄存器,可用于设置将其配置为输出为高的GPIO引脚的值(逻辑1)。当iOSET寄存器中的一点设置为“ 1”时,相应的引脚设置为逻辑1。在此寄存器中设置一些“ 0”对PIN没有影响。

此寄存器的语法是IOXSET,其中“ X”是端口号,即port0的IO0SET,而port1的IO1Set。

ioclr:这是GPIO端口输出清除寄存器,可用于设置将其配置为输出为低的GPIO引脚的值(逻辑0)。当IOCLR寄存器中的一点设置为“ 1”时,相应端口中的相应引脚设置为逻辑0,同时清除iOSET寄存器中的相应位。在IOCLR中设置“ 0”对PIN没有影响。

此寄存器的语法是IOXCLR,其中“ X”是端口号,即port0的IO0CLR,而port1的IO1CLR。

要记住的一个重要注意事项是,由于LPC2148是32位微控制器,因此提到的所有寄存器的长度也为32位。上述寄存器中的每个位直接链接到微控制器中的相应引脚,即IO0SET中的位“ A”对应于端口0中的pin“ a”。

LPC2148中的寄存器遵循Big Endian格式,即位0是寄存器极右侧的LSB,位31是寄存器左侧的MSB。

另一个重要说明是,当重置时,将所有引脚设置为GPIO引脚,并且每个引脚的方向都设置为输入。

现在,我们将看到如何在编程中使用上述寄存器。首先是设置针的方向。例如,如果我们要设置4Th端口0的引脚即p0.3作为输出,然后可以以各种方式设置它,如下所示。

方法1:io0dir =(1 << 3);

这是一种直接分配方法,其中二进制值(1)直接在引脚上设置。所有其他引脚都设置为0。应该避免使用该方法,因为该值直接在寄存器中分配,而P0.3被分配为“ 1”,则所有其他引脚被迫分配“ 0”。

该方法的替代方法是在寄存器上打击,然后分配值。这可以通过两种方式完成。

方法2:io0dir |= 0x00000008;

在这种方法中,在用自身的寄存器上分配寄存器的十六进制值。这样,除所需引脚以外的其他引脚(在这种情况下为P0.3)不影响。如果我们要分配许多引脚而不影响其他引脚,则此方法很有用。

方法3:io0dir |=(1 << 3);

这类似于上述方法,但只有一个引脚受到影响。

其他寄存器也可以使用相同的方法设置。现在,我们将看到一个设置端口0的引脚15的示例,即p0.15作为输出并将引脚驱动。

为此,我们需要使用两个寄存器:iodir和ioset。

io0dir |=(1 << 15);//将P0.15配置为输出。

io0set |=(1 << 15);//将O/P引脚p0.15升高

我们将看到另一个示例,其中port0的引脚11设置为输出,并且该引脚的输出设置为逻辑1,然后将其设置为逻辑0。

为此,我们需要使用三个寄存器:iodir,ioset和ioclr。

io0dir |=(1 << 11);//将P0.11配置为输出。

io0set |=(1 << 11);//将O/P引脚p0.11升高。

io0clr |=(1 << 11);//使O/P引脚P0.11低。

现在,我们将看到一个示例,其中必须将多个引脚设置为输出,并且该引脚的值必须高。考虑端口0的第7和14号(P0.7和P0.14)。

io0dir |=(1 << 7)|(1 << 14);//将引脚P0.7和P0.14配置为输出。

io0set |=(1 << 7)|(1 << 14);//将PIN p0.7和P0.14的O/P升高。

一旦我们看到了如何设置引脚的方向,将销钉设置为高或低,现在我们将跳入实时嵌入式编程。类似于C语言中的“ Hello,World”程序,闪烁的LED是嵌入式系统中的基本程序。

我们将用于开发基于LPC2148的项目的IDE是Keil µVision。LPC214X系列微控制器的所有寄存器均在“ LPC214X.H”标头文件中定义。

在此示例中,我们将反复眨眼连接到MCU的端口1引脚。

#include

int延迟;

int main(void)

{

Pinsel2 = 0x00000000;

io1dir = 0xffffffff;// port1的所有引脚均配置为输出

而(1)

{

io1set = 0xffffffff;//将逻辑1设置为所有端口1引脚,即打开LED

(延迟= 0;延迟<500000; delay ++)

io1clr = 0xffffffff;//将逻辑0设置为所有端口1引脚,即关闭LED

(延迟= 0;延迟<500000; delay ++)

}

返回0;

}

该程序是不言自明的。首先,使用IO1DIR寄存器将port1引脚配置为输出。然后,在无限循环中,使用IO1Set寄存器打开销(或连接到它们的LED),并使用IO1CLR寄存器关闭。使用“ for”循环在LED的打开和关闭之间引入延迟,以便可见LED的闪烁。

如何将程序上传到LPC2148微控制器

首先,我们需要安装凯尔基于ARM的微控制器的微控制器开发套件。然后,将代码复制并粘贴到源代码编辑器中。编译代码并为目标(即LPC2148)构建代码。

Keil汇编

为了将代码(即十六进制文件)上传到微控制器,我们需要使用称为Flash Magic的工具。在上传程序之前,我们需要确认有关ARM7开发委员会的信息。

该系列项目中使用的ARM7开发委员会具有一个ON - 板USB到串行转换器,如下图所示。

USB到串行

在这种情况下,我们可以使用USB连接直接上传程序,因为LPC2148 MicroController具有ON - 芯片引导加载程序。

如果您使用的ARM开发板没有USB到串行转换器,那么我们需要使用外部模块作为下图中显示的模块。

外部USB到串行

有一次,我们已经决定了接口的类型,下一步是启动Flash Magic软件并设置适当的COM端口。我们可以在Windows中的设备管理器中看到COM端口。设置COM端口后,我们将选择“ .hex”文件,该文件是在编译和构建后从KEIL软件创建的。

选择十六进制文件后,我们需要单击“启动”按钮,并且软件开始上传程序。

Flash Magic

如果程序成功上传,我们可以立即在LPC2148开发板上看到输出。

闪烁的LED

2个回应

发表评论

您的电子邮件地址不会被公开。

电子豪华粉丝
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu
map