基于LPC2114的嵌入式系统的应用tjpu.docx
- 文档编号:24399729
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:20
- 大小:252.95KB
基于LPC2114的嵌入式系统的应用tjpu.docx
《基于LPC2114的嵌入式系统的应用tjpu.docx》由会员分享,可在线阅读,更多相关《基于LPC2114的嵌入式系统的应用tjpu.docx(20页珍藏版)》请在冰豆网上搜索。
基于LPC2114的嵌入式系统的应用tjpu
基于LPC2114的嵌入式系统的应用
摘要:
给出了LPC2114设计的系统框图及应用原理图,详细介绍了LPC2114的结构、最小应用系统,应用LPC2114实现了双机通讯,并给出了软件流程图及程序清单。
关键词:
LPC2114双机通讯最小应用系统
0概述
LPC2114/2124基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-SCPU,并带有128/256k字节(KB)嵌入的高速Flash存储器。
128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。
对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。
由于LPC2114/2124非常小的64脚封装、极低的功耗、多个32位定时器、4路10位ADC、PWM输出、46个GPIO以及多达9个外部中断使它们特别适用于工业控制、医疗系统、访问控制和电子收款机(POS)。
由于内置了宽范围的串行通信接口,它们也非常适合于通信网关、协议转换器、嵌入式软件调制解调器以及其它各种类型的应用。
(1)特性
16/32位ARM7TDMI-S核,超小LQFP64封装;
16kB片内SRAM;
128/256kB片内Flash程序存储器,128位宽度接口/加速器可实现高达60MHz工作频率;
通过片内boot装载程序实现在系统编程(ISP)和在应用编程(IAP)。
EmbeddedICE可实现断点和观察点。
当使用片内RealMonitor软件对前台任务进行调试时,中断服务程序可继续运行;
嵌入式跟踪宏单元(ETM)支持对执行代码进行无干扰的高速实时跟踪;
4路10位A/D转换器,转换时间低至2.44μs;
2个32位定时器(带4路捕获和4路比较通道)、PWM单元(6路输出)、实时时钟和看门狗;
多个串行接口,包括2个16C550工业标准UART、高速I2C接口(400kHz)和2个SPI接口;
通过片内PLL可实现最大为60MHz的CPU操作频率;
向量中断控制器。
可配置优先级和向量地址;
多达46个通用I/O口(可承受5V电压),9个边沿或电平触发的外部中断引脚;
片内晶振频率范围:
10~25MHz;
2个低功耗模式:
空闲和掉电;
通过外部中断将处理器从掉电模式中唤醒;
双电源
-CPU操作电压范围:
1.65~1.95V(1.8V±0.15V);
-I/O操作电压范围:
3.0~3.6V(3.0V±10%),可承受5V电压。
(2)引脚图
1最小系统设计
由LPC2114/2124/2119/2129/2194的构造的最小应用系统由电源电路、复位电路、系统时钟电路、JTAG接口电路、串口及MODEM接口电路、键盘电路、LED显示电路、蜂鸣器及PWM电路等组成。
系统框图见图1。
图1系统框图
(1)电源电路
LPC2114/2124/2119/2129/2194要使用两组电源,I/O口供电电源为3.3V,内核及片内外设供电电源为1.8V,所以系统设计为3.3V应用系统。
首先,由CZ1电源接口输入9V直流电源,二极管D2防止电源反接,经过C1、C3滤波,然后通过78M05将电源稳压至5V,再使用LDO芯片(低压差电源芯片)稳压输出3.3V及1.8V电压。
LDO芯片采用了LM1117MPX-1.8和LM1117MPX-3.3,其特点为输出电流大,输出电压精度高,稳定性高。
系统电源电路如图2所示。
(2)复位电路
由于ARM芯片的高速、低功耗、低工作电压导致其噪声容限低,对电源的纹波、瞬态响应性能、时钟源的稳定性、电源监控可靠性等诸多方面也提出了更高的要求。
本复位电路使用了专用微处理器电源监控芯片MAX708SD,提高系统的可靠性。
由于在进行JTAG调试时,nRST、TRST是可由JTAG仿真器控制复位的,所以使用了三态缓冲门74HC125进行驱动,电路如图3所示。
信号nRST连接到LPC2114芯片的复位脚RESET,信号nTRST连接到LPC2114芯片内部JTAG接口电路复位脚TRST。
当复位按键RST按下时,MAX708SD立即输出复位信号,其引脚RST输出低电平导致74HC125C、74HC125D导通,信号nRST、nTRST将输出低电平使系统复位。
平时MAX708SD的RST输出高电平,74HC125C、74HC125D截止,由上拉电阻R4、R5将信号nRST、nTRST上拉为高电平,系统可正常运行或JTAG仿真调试。
(3)系统时钟电路
LPC2114/2124/2119/2129/2194可使用外部晶振或外部时钟源,内部PLL电路可调整系统时钟,使系统运行速度更快(CPU最大操作时钟为60MHz)。
倘若不使用片内PLL功能及ISP下载功能,则外部晶振频率范围是1MHz~30MHz,外部时钟频率范围是1MHz~50MHz;若使用了片内PLL功能或ISP下载功能,则外部晶振频率范围是10MHz~25MHz,外部时钟频率范围是10MHz~25MHz。
使用了外部11.0592MHz晶振,电路如图4所示,用1MΩ电阻R6并接到晶振的两端,使系统更容易起振。
用11.0592MHz晶振的原因是使串口波特率更精确,同时能够支持LPC2114/2124/2119/2129/2194芯片内部PLL功能及ISP功能。
(4)JTAG接口电路
采用ARM公司提出的标准20脚JTAG仿真调试接口,JTAG信号的定义及与LPC2114的连接如图5所示。
图中,JTAG接口上的信号nRST、nTRST与复位电路连接(参考图3),形成线与的关系,达到共同控制系统复位的目的。
在RTCK引脚接一个4.7KΩ的下拉电阻,使系统复位后LPC2114内部JTAG接口使能,这样就可以直接进行JTAG仿真调试了。
(5)串口及MODEM接口电路
由于系统是3.3V系统,所以使用了MAX3232进行RS232电平转换,MAX3232是3V工作电源的RS232转换芯片。
另外,LPC2114/2124/2119/2129/2194的UART1带有完整的调制解调器(MODEM)接口,所以要使用8路的RS232转换芯片SP3243ECA(或MAX3243ECA)。
如图6所示,JP5、JP6分别为UART0、UART1口线连接跳线。
(6)键盘电路
设计6个独立按键,分别为KEY1~KEY6,如图7所示。
由于GPIO作为输入时,内部无上拉电阻,所以要使用R17~R22等6个上拉电阻,当没有按键时,口线值为1,当按键按下时为0;而R11~R16为口线保护电阻,即当连接按键的I/O设置为输出时,这几个电阻保证了输出口不会直接对地短路。
(7)LED显示电路
在显示方面,采用了一片74HC595驱动一位静态共阳LED数码管,如图8所示。
具有4个独立的发光二极管LED1~LED4,分别由P0.22~P0.25输出控制,输出1时对应的LED熄灭,输出0时对应的LED点亮,电路如图9所示。
电路采用了I/O口灌电流的驱动方式来驱动LED,这样做主要是因为I/O口能提供的灌电流大于其拉电流,保证了LED的显示亮度。
限流电阻为470Ω,则当I/O输出0时,流过LED的电流计算公式如公式1所示。
(8)蜂鸣器及PWM电路
如图10所示,蜂鸣器使用PNP三极管Q1进行驱动控制,当P0.7控制电平输出0时,Q1导通,蜂鸣器蜂鸣;当P0.7控制电平输出1时,Q1截止,蜂鸣器停止蜂鸣;若把JP7断开,Q1截止,蜂鸣器停止蜂鸣。
Q1采用开关三极管8550,R36用于限制Q1的基极电流,为蜂鸣器提供足够的电流。
2双机通讯电路设计
3软件设计
/*******************************************************************************
*文件名:
LPC2000A.C
*功 能:
本程序将LPC2000B设置为从机,而将LPC2000A设置为主机,两者进行通信。
*主机向从机发送命令数据,从机读取数据并校验,如果校验正确,
*蜂鸣器发声、蜂鸣器停止、LED闪亮、LED全亮。
*作 者:
XibinWang
*日 期:
2007年3月28日
******************************************************************************/
#include "config.h"
#include"LPC2….h"
#define KEY1 ((uint32)1<<23)
#define KEY2 ((uint32)1<<24)
#defineTX_BUFSIZE80
staticunsignedchartxbuf[TX_BUFSIZE];
staticunsignedchartxptr=0;
staticunsignedchartyptr=0;
voidUART1_Init(void)
{
Fpclk=12.000.000MHz
DLM,DLH=Fpclk/(9600*16)=78=0x4e
PINSEL0|=0x00050000;
U1FCR=7;
U1LCR=0x83;
U1DLL=0x27;
U1DLM=0;
U1LCR=3;
}
staticvoidSendString(INITdata11)
{
if(txptr==0)
{
typtr=0;
while(data11)
{
txbuf[txptr++]=data11++;
if(txptr>=TX_BUFSIZE)
{
txptr=0;
}
}
}
}
staticvoidkeyword(data11)
{
if(key1==0)
{
if(key2==0)
{
data11=0;
}
else
{
data11=0x01;
}
}
else
{
if(key2==0)
{
data11=0x02;
}
else
{
data11=0x03;
}
}
Return(data11)
}
staticvoidUART1_Tx_Int(void)
{
chari=16;
if(U1LCR&&0x20)
{
while(i&&txptr)
{
U1THR=txbuf[typtr++];
txptr--;
i--;
}
}
}
intmain(void)
{
UART1_Init();
while
(1)
{
Keyword();
SendString(data11);
UART1_Tx_Int();
}
}
/*******************************************************************************
*文件名:
LPC2000B.C
*功 能:
LPC2000B接收LPC2000A发送命令数据
*从机读取数据并校验,如果校验正确,
*蜂鸣器发声、蜂鸣器停止、LED闪亮、LED全亮。
*作 者:
XibinWang
*日 期:
2007年3月28日
******************************************************************************/
#include "config.h"
#include"LPC2….h"
#define KEY1 ((uint32)1<<23)
#define KEY2 ((uint32)1<<24)
#define LED0 ((uint32)1<<10)
#define LED1 ((uint32)1<<11)
#define LED2 ((uint32)1<<12)
#define LED3 ((uint32)1<<13)
#define LED4 ((uint32)1<<14)
#define LED5 ((uint32)1<<15)
#define LED6 ((uint32)1<<16)
#define LED7 ((uint32)1<<17)
#define BUZZER ((uint32)0X2<<17)
#defineTX_BUFSIZE80
staticunsignedchartxbuf[TX_BUFSIZE];
staticunsignedchartxptr=0;
staticunsignedchartyptr=0;
voidUART1_Init(void)
{
Fpclk=12.000.000MHz
DLM,DLH=Fpclk/(9600*16)=78=0x4e
PINSEL0|=0x00050000;
U1FCR=7;
U1LCR=0x83;
U1DLL=0x27;
U1DLM=0;
U1LCR=3;
}
staticvoidDelay(uint32count)
{
uint32i;
for(;count>0;count--)
for(i=0;i<50000;i++);
}
staticvoidLED_SLOW()
{
Delay();
Led0=0;
Delay();
Led0=1;
Led1=0;
Delay();
Led1=1;
Led2=0;
Delay();
Led2=1;
Led3=0;
Delay();
Led3=1;
Led4=0;
Delay();
Led4=1;
Led5=0;
Delay();
Led5=1;
Led6=0;
Delay();
Led6=1;
Led7=0;
}
staticvoidLED_all()
{
Led0=0;
Led1=0;
Led2=0;
Led3=0;
Led4=0;
Led5=0;
Led6=0;
Led7=0;
}
staticvoidrecive(initdata11)
{
if(typtr==0)
{
chari=16;
while(i&&typtr)
{
Data11=tybuf[typtr++];
txptr--;
i--;
}
}
Return(data11);
}
staticvoidUART1_Tx_Int(void)
{
chari=16;
if(U1LCR&&0x20)
{
while(i&&txptr)
{
U1THR=txbuf[typtr++];
txptr--;
i--;
}
}
}
intmain(void)
{
UART1_Init();
while
(1)
{
recive(initdata11);
if(data11==0)
{
buzzer=0;
}
Elseif
{
if(data11==0x01)
{
buzzer=1;
}
}
Elseif
{
if(data11==0x02)
{
Led_slow();
}
}
Elseif
{
if(data11==0x03)
{
Led_all();
}
}
UART1_Tx_Int();
}
}
4结束语
本文基于PHILIPS公司最新的ARM7内核微处理器LPC2114实现了双机通讯的控制单元部分的设计。
LPC2114使用简单、开发容易、具有较高的性价比,非常适用于嵌入式系统中。
LPC2114在开发的过程中有一些需要特殊注意的问题,总结如下:
(1)当用户程序写入Flash后不能运行时,首先,需要考虑中断向量表是否正确,中断向量表累加和必须为0。
其次,需要考虑向量表的定位,向量表是否已经定位在0x00000000地址。
然后,需要考虑MEMMAP寄存器的设置是否正确,否则中断无法执行。
此外,还需要考虑ISP硬件条件是否满足,LPC2114的P0.14脚在#RESET为低时,该引脚线上的低电平将强制芯片进入ISP状态,硬件设计时必须在该引脚加10K上拉电阻,否则,该引脚不稳定,对设备启动将会有影响。
(2)LPC2114共有46个GPIO,这些I/O可以任意配置,但是个别引脚开漏输出(P0.2、P0.3),需加上拉电阻。
(3)LPC2114芯片加密后,只能通过ISP对芯片全局擦除后才能恢复JTAG调试以及下载等功能。
当#RESET为低时,P1.26的低电平使P1.26~P1.31复位后作为调试端口,注意在P1.26引脚和地之间需接一个弱偏置电阻。
参考文献
[1]LABROSSEJJ.!
C/OS-II:
theRealTimeKernel.RS:
R&DBooks,1999
[2]周立功.ARM微控制器基础与实战.北京:
北京航空航天大学出版社,2003
[3]LabrosseJ著,邵贝贝译.嵌入式实时操作系统!
C/OS-II(第二版).北京:
北京航空航天大学出版社,2003
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 LPC2114 嵌入式 系统 应用 tjpu