LPC21xx系列外部中断寄存器
- 格式:docx
- 大小:9.91 KB
- 文档页数:2
一.外部中断相关寄存器1.定时器/计数器控制寄存器控制寄存器(TCON)IT0:外部中断0触发方式控制位当IT0=0时,为电平触发方式(低电平有效)当IT0=1时,为边沿触发方式(下降沿有效)IT1:外部中断1触发方式控制位当IT1=0时,为电平触发方式(低电平有效)当IT1=1时,为边沿触发方式(下降沿有效)2.中断允许控制寄存器(IE)EX0:外部中断0允许位;EX1:外部中断1允许位;EA :CPU中断允许(总允许)位。
二.外部中断的处理过程1、设置中断触发方式,即IT0=1或0,IT1=1或02、开对应的外部中断,即EX0=1或EX1=1;3、开总中断,即EA=1;4、等待外部设备产生中断请求,即通过P3.2,P.3.3口连接外部设备产生中断5、中断响应,执行中断服务函数三.程序编写要求:通过两位按键连接外部中断0和1,设定外部中断0为下降沿触发方式,外部中断1为低电平触发方式,按键产生中断使数字加减,用一位共阳极数码管来显示数值。
目的:感受外部中断对程序的影响,体会低电平触发和下降沿触发的区别。
#include<reg51.h>#define uint unsigned int #define uchar unsigned char uchar code dat[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uint num;void main(){EA=1; //开总中断IT0=1; //下降沿触发IT1=0; //低电平触发EX0=1; //外部中断0允许EX1=1; //外部中断1允许while(1){P0=dat[num%10];}}void plus() interrupt 0//外部中断0 {EX0=0;num++;EX0=1;}void minus() interrupt 2//外部中断1 {EX1=0;num--; EX1=1; }。
解读LPC210X之外部中断寄存器LPC2101/02/03最多包含了三个外部中断输入作为可选择的管脚功能。
管脚进行组合后,外部事件可以处理成三个独立的中断信号。
外部中断输入能够可选择的用于将处理器从低功耗模式下唤醒。
此外,10个捕获输入没有可选择的将器件从低功耗模式唤醒功能,但也能够被用于外部中断。
Register descripTIon有四个寄存器涉及外部中断External Interrupt Flag register (EXTINT - 0xE01F C140)外部中断标志寄存器位信号描述复位值0EINT0对应管脚外部中断到来时,该标志位置位。
写1清除该位,如果该中断处于电平触发模式,那么电平触发期间该位不能清除。
01EINT1同EINT002EINT2同EINT007:3保留NA Interrupt Wake-up register (INTWAKE - 0xE01F C144)中断唤醒寄存器位信号描述复位值0EXTWAKE0置1时,指明EINT0中断将把处理器从低功耗模式唤醒01EXTWAKE1置1时,指明EINT1中断将把处理器从低功耗模式唤醒02EXTWAKE2置1时,指明EINT2中断将把处理器从低功耗模式唤醒014:3保留NA15RTCWAKE置1时,指明RTC中断将把处理器从低功耗模式唤醒External Interrupt Mode register (EXTMODE - 0xE01F C148)外部中断模式寄存器位信号描述复位值0EXTMODE00EINT0电平触发1EINT0边沿触发01EXTMODE10EINT1电平触发1EINT1边沿触发02EXTMODE20EINT2电平触发1EINT2边沿触发07:3保留NAExternal Interrupt Polarity register (EXTPOLAR - 0xE01F C14C)外部中断极性寄存器位信号描述复位值0EXTPOLAR00EINT0低电平或者上升沿触发1EINT0高电平后者下降沿触发01EXTPOLAR10EINT1低电平或者上升沿触发1EINT1高电平后者下降沿触发02EXTPOLAR20EINT2低电平或者上升沿触发1EINT2高电平后者下降沿触发07:3保留NA。
LPC21XX学习笔记之中断VIC操作方法1.快速中断主程序:1.在VICIntSelecet中将中断分配为FIQ中断;VICIntSelecet对应位为1,表示分配为FIQ中断2.然后在VICIntEnable中使能外设中断即可2.向量IRQ主程序:1. 在VICIntSelecet中将中断分配为IRQ中断,VICIntSelecet对应位为0,表示分配为IRQ中断2. 在VICV ectCntlx 中分配中断通道(优先级)3. 在VICV ectAddrx中设置中断服务程序的地址4. 通过VICIntEnable中使能外设中断即可中断服务程序:1. 中断处理2. 清除相应的中断标志,以响应下一次中断3. 对VICVectAddrx寄存器执行写操作(通常位0x00),以更新硬件优先级LPC21XX学习笔记之外部中断外部中断唤醒掉电的CPU,不产生中断步骤:1:使能寄存器EXW AKE允许外部中断唤醒处理器2:设置EXTMODE和EXTPOLAR,设置触发方式和触发电平3:设置PINSELn,将相应的管脚设置成外部中断4:外部中断产生后,可以通过向外部中断标志寄存器EXINT写1,清除中断标志再次进入掉电模式外部中断唤醒处理器,同时产生中断步骤:1:使能寄存器EXW AKE允许外部中断唤醒处理器2:设置EXTMODE和EXTPOLAR,设置触发方式和触发电平3:设置PINSELn,将相应的管脚设置成外部中断4:使能IRQ中断:代码如下IRQEnable;使能IRQ中断MRS R0, SPSR ;读回SPSR的值BIC R0, R0, #NoInt ;设置使能IRQ中断MSR SPSR_c, R0 ;回写SPSRMOVS PC, LR ;返回5:设置。
一文读懂LPC中的中断处理LPC中的中断处理小结近来在LPC的中断过程上看了点文献,作为一个初学者感觉这个内容与其它的处理器还是有很大的区别,比如说三星的S3C4510B,两者在中断的处理上理念是完全不同的,个人感觉LPC的要难一些,很多地方感觉上是在和ARM的规范打擦边球,下面具体说一下相关内容。
基础知识:LPC2294的EXT中断分为了三类,包括FIQ,Vectored IRQ,non-- Vectored IRQ,其中,以FIQ的优先级最高,而以non-- Vectored IRQ的优先级最低,系统一共提供了27个中断源,并且给这27个中断源进行了固定的编号,但是注意,这个编号和优先级没有任何的关系,并非是编号在前面的优先级就越高,见下面说明。
关键内容:两套控制渠道,第一套:在ARM体系中,本来有SWI,FIQ,IRQ等这些中断的定义,并且已经定义了这些中断的开关控制位,就是在CPSR寄存器中,该寄存器包含了一个I位和一个F位,I位用于控制IRQ中断的开关,F用于控制FIQ的开关,但是值得注意的是CPSR的读取和修改在用户模式下是不能完成的,必须要通过SWI指令进入到特权模式下才可以进行修改。
第二套:在LPC的SFR(特殊功能寄存器)中,也提供了一套寄存器用于控制相应的中断的进行,这组控制器叫做VIC寄存器(都以VIC开头),改组寄存器包括了所有的与中断有关的设置,开启,分类等功能,仅仅是将外部中断引脚对应的部分功能分离出去,由EXT系列的寄存器来处理,因此,对这一个系列的寄存器的掌握是非常重要的!两者间的关系:仅仅在第二套控制渠道下打开FIQ,IRQ中断是不够的,如果ARM内核没有开中断的话,整个系统就不会有中断产生,因此,常见的做法是这样:先将第二套渠道的控制内容处理好,然后通过SWI软件中断指令,将ARM 处理器的模式切换为特权模式,在特权模式下,对CPSR进行读出-修改-写回的操作,将中断打开,然后在返回到用户模式。
周立功NXP LPC21xx/22xx 系列ARM 芯片的启动程序分解关于LPC2200 启动程序分散加载描述文件的叙述在ADS LPC2200 的启动模板中有一个scf 文件夹,其中有mem_a.scf、mem_b.scf、mem_c.scf 这3 个文件,这3 个文件是ADS 的分散加载机制,其目的是将代码段和数据段分别定位到指定地址上。
可以在Arm Linker 中选择加载路径。
分散装载技术概述:分散装载技术可以把用户的应用程序分割成多个RO(只读)运行域和RW(可读写)运行域(一个存储区域块),并且给它们制定不同的地址。
一个嵌入式系统中,Flash、16 位RAM、32 位RAM 都可以存在于系统中,所以,将不同功能的代码定位在特定的位置会大大地提高系统的运行效率。
下面是最为常用的2 种情况:1、32 位的RAM 运行速度很快,因此就把中断服务程序作为一个单独的运行域,放在32 位的RAM,使它的响应时间达到最快。
2、程序在RAM 中运行,其效率要远远高于在ROM 中运行,所以将启动代码(Boot loader)以外的所有代码都复制在RAM 中运行,可以提高运行效率。
分散装载技术主要完成了2 个基本的功能:如何分散。
就是如何将输入段组成输出段和域。
如何装载。
就是确定装载域和运行域在存储空间里的地址是多少。
域可以分为装载域和运行域装载域描述运行前输出段和域在ROM/RAM 里的分布状态,运行域描述了运行时输出段和域在ROM/RAM 里的分布状态。
大多数情况下,映像文件在执行前把它装载到ROM 里,而当运行时,域里的有些输出段(比如RW 类型的输出段)必须复制到RAM 里,程序才能正常运行,所以,在装载和运行时,RW 类的输出段处在不同的位置(地址空间)。
Scatterfile 分散加载文件:在scatterfile 中可以为每一个代码或数据区在装载和执行时指定不同的存储区域地址,Scatlertoading 的存储区块可以分成二种类型:装载区:当系统启动或加载时应用程序的存放区。
51单片机中的21个寄存器ACC 累加器B 用于辅助累加器做某些运算的寄存器PSW 程序状态字其中最高位是进/借位标志C;PSW.6 是辅助进位标志AC,用于标识加减运算中低四位向高四位的进位;PSW.4 和PSW.3 是寄存器组选择位RS1 和RS0,用于从00H--1FH 的32 个存储器单元(4 组)中选出当前准备使用的一组工作寄存器的映射地址;PSW.2 是溢出标志OV;PSW.0 是ACC 的偶校验位P;PSW 的其余位不用IP 中断优先级控制寄存器在51 中IP.0--IP.4 依次控制INT0、T0、INT1、T1、UART 中断的优先级,高三位不用IE 中断使能控制器IE.7 是所有中断的总开关EA,IE.0--IE.4 依次控制INT0、T0、INT1、T1、UART 中断功能的开放或关断P0、P1、P2、P3 这四个寄存器用于读写51 单片机的四个I/O 端口SBUF 串行数据缓冲器将数据写入SBUF,单片机就自动将数据从UART 口发送出去SCON 串行口功能控制器最高两位SM0、SM1 控制串行口工作模式;第5 位SM2 通常用于多机通信中区分地址帧和数据帧;第4 位REN 是控制串口接收数据的使能位;第3 位TB8 和第2 位RB8 分别是在串口的相关工作模式下要发送的和接收到的第9 位数据;次低位TI 和最低位RI 分别标识一个发送或接收过程已结束,这两个标志位都会触发串口中断TH0、TL0 定时器T0 的计数单元的高8 位和低8 位TH1、TL1 定时器T1 的计数单元的高8 位和低8 位TMOD 定时/计数器工作模式控制器低4 位和高4 位的内容对应相同,分别控制T0 和T1 的工作模式,次低位和最低位控制对应定时/计数器的工作模式;最高位控制定时/计数器的计数是否由外中断口线参与控制;次高位控制对应的定时器/计数器工作在定时方式还是对相应口线的脉冲进行计数的方式TCON 定时/计数器控制字TCON.0 和TCON.2 分别是外中断INT0 和INT1 的触发方式选择位IT0 和IT1;TCON.1 和TCON.3 分别是外中断INT0 和INT1 的中断触发标志位IE0 和IE1;TCON.4 和TCON.6 分别是T0 和T1 的计数开关TR0 和TR1;TCON.5 和TCON.7 分别是T0 和T1 的中断触发标志位TF0 和TF1PCON 电源模式控制器最高位SMOD 用于串行口通信的波特率加倍,低4 位用于选择不同的低功耗模式,比如空闲模式、掉电模式、时钟停止模式等,但具体每一位的用法没有找到相关资料DPH、DPL 数据指针DPTR 的高、低字节DPTR 可以用于指向程序存储器、片内RAM、片外RAM 来读取数据SP 堆栈指针堆栈都是分配在片内RAMtips:感谢大家的阅读,本文由我司收集整编。
飞利浦ARM芯片LPC2119调试说明注:LPC2119FBD64和LPC2119FBD64/00在国外已经停产,最新版本是LPC2119FBD64/01,这个版本与旧版本不同的地方是CAN总线的控制器号由原来的1~2改为了0~1,以后如果更换为最新版本的芯片则需要在程序内把控制器号作相应的修改!二、系统控制模块1.外部中断输入✧由于外部中断管脚输入内部没有上拉电阻,所以管脚必须外接一上拉电阻,以确保管脚不会悬空。
✧对外部中断方式寄存器(EXTMODE)及外部中断极性寄存器(EXTPOLAR)设置时会影响VPBDIV寄存器,可用以下方法解决:1)VPBDIV写入0x02)写入想要设置的值到 EXTMODE 或 EXTPOLAR3)VPBDIV写入与2)中相同的值4)VPBDIV写入原来的值举例:设置EXTMODEVPBDIV = 0x0 //VPBDIV写入0EXTMODE = 0x1 //EXTMODE设置为1VPBDIV = 0x1 //VPBDIV写入与EXTMODE一样的值VPBDIV = 0x1 //VPBDIV恢复原来的值0x1 若原来的值为0则写0x0设置EXTPOLAR与EXTMODE一致,只要把第二行代码改为EXTPOLAR = 0x1即可2.存储器映射控制MAMMAP用于改变地址从0x00000000开始的中断向量的映射MAMMAP=0x2(用户RAM模式)表示产生中断时,从0x00000008的读数/取指是对0x40000008单元进行操作;MAMMAP=0x1(用户FLASH模式)表示产生中断时,从0x00000008的读数/取指是对片内FLASH单元的0x00000008进行操作;MAMMAP=0x2(BOOT装载程序模式)表示产生中断时,从0x00000008的读数/取指是对0x7fffe008单元进行操作。
3.PLLPLL频率计算方法Fosc:晶振频率;Fcco:PLL电流控制震荡器的频率;Fcclk:PLL输出频率(即CPU的时钟频率)M:PLLCFG寄存器中MSEL位的倍频器值;P:PLLCFG寄存器中PSEL位的分频器值。
ARM中定时器浅谈
LPC21XX/22XX 含有两个32 位定时器:定时器0 和定时器1。
这两个定时器除了外设基地址不同外,其他都相同。
他们具有如下特性:1.两个32 位定时器/计数器各含有一个可编程32 位预分频器。
2.具有多达4 路捕获通道,当输入信号跳变时可取得定时器的瞬时值,也可以选择捕获事件产生中断。
3.4 个32 位匹配寄存器,匹配时的动作有如下3 种:A 匹配时定时器继续工作,可选择产生中断;B 匹配时停止定时器,可选择产生中断; C 匹配时复位定时器,可选择产生中断。
4.4 个对应于匹配寄存器的外部输出,匹配时的输出有如下4 种:A 匹配时设置为低电平,B 匹配时设置为高电平;C 匹配时翻转;D 匹配时无动作。
定时器的时钟源是PCLK,工作流程如下:
1.定时器内部的预分频器对定时器时钟源进行分频;
2.分频后,输出的时钟才是定时器内部的计数器时钟源;因此预分频器起着转换时钟频率的作用;
3.计数值与匹配寄存器不断的比较,当两者相等时,发生匹配事件,然后执行相应的操作--产生中断,匹配输出引脚(MAT)输出指定信号等等;
4.当捕获引脚出现有效边沿时,定时器会将当前的计数值保存到捕获寄存器中,同时也可以产生中断。
因此我们可以看到,ARM 中的定时器主要由三部分构成:计数器部分,匹
配功能部分,捕获功能部分。
所以寄存器也相应分成了基本寄存器组,匹配功。
基于ARM7的LPC21XX系列微控制器在BAS中的应用1. 楼宇自动化系统概述楼宇自动化系统(Building Automation System,简称BAS),实际上是一套中央监控系统。
它通过对建筑物(或建筑群)内的各种电力设备、空调设备、冷热源设备、防火、防盗设备等进行集中监控,达到在确保建筑内环境舒适、充分考虑能源节约和环境保护的条件下,使建筑内的各种设备状态及利用率均达到最佳的目的。
图1 BAS 的组成图1 是BAS 的组成示意图,其中的中央控制室(数据中心)主要包括中央处理机(一台微型计算机、存储器、磁带机和接口装置)、外围设备(显示终端、键盘、打印机)和不间断电源三部分。
传感器是指装设在现场的各种敏感元件、触点和限位开关、以及变送器,用来检测现场设备的各种参数(温度、湿度、压力、液位等),并发出信号送到控制器(分站、数据中心等)。
执行机构是指装设在现场接受分站控制器的输出指令信号,控制现场运行设备的机构,如电动阀、执行机构和调节机构。
分站控制器是以微处理器为基础的直接数字控制器(DDC),它接收来自传感器的信号,进行数字运算,逻辑判断,处理后自动输出控制信号,至执行机构。
分站控制器是整个控制系统的核心,它具有AI、AO、DI、DO 四种输入/输出接口。
2.ARM 及LPC21XX 系列微控制器概述我们在这里采用的是基于ARM7 内核的PHILIPS 公司的LPC21XX 微控制器。
ARM 的文字含义是Advanced RISC Microprocessor(高级RISC 微处理器)。
ARM 系列是32 位微处理器RISC 微控制器方案,在便携式通讯、数字化多媒体和工业控制中,使用ARM 正成为一种标准的趋势。
根据有关报告,2001 年,在众多RISC 微处理器的销售量中,74.6%是ARM 微处理器。
ARM 将其技术授权给世界上许多著名的半导体、计。
S12的输入/输入端口(I/O 口)I/O端口功能可设置为通用I/O 口、驱动、内部上拉/下拉、中断输入等功能。
设置I/O口工作方式的寄存器有:DDR、10、RDR、PE、IE 和 PS。
DDR :设定I/O 口的数据方向。
IO :设定输出电平的高低。
RDR :选择I/O 口的驱动能力。
PE:选择上拉/下拉。
IE:允许或禁止端口中断。
PS: 1、中断允许位置位时,选择上升沿/下降沿触发中断;2、中断禁止时且PE有效时,用于选择上拉还是下拉。
I/O端口设置1、A 口、B 口、E 口寄存器(1)数据方向寄存器 DDRA、DDRB、DDREDDRA、DDRB、DDRE均为8位寄存器,复位后其值均为 0。
当 DDRA=0、DDRB=0、 DDRE=0 时 A 口、B 口和 E 口均为输入口。
否则,A 口、B口、E 口为输出口。
当 DDRA、DDRB、DDRE的任何一位置1时,则该位对应的引脚被设置为输出。
例如,将A 口设置为输出口,则其 C语言程序的语句为:DDRA=0xff ;(2) A 口、B 口、E 口上拉控制寄存器PUCRPUCR 初:PUPKE —— ----- --------- -——RUPEE ——-————-——PUPBE PUR\EWrite: | | |PUCR为8位寄存器,复位后的值为 0。
当PUPAE、PUPBE、PUPEE被设置为1时,A 口、B 口、E 口具有内部上拉功能;为0时,上拉无效。
当A 口、 B 口、E 口为地址/数据总线时,PUPAE和PUPBE无效。
(3)A 口、B 口、E 口降功率驱动控制寄存器RDRIVRDRIV 篇眾?RDPK 口| | 良DPE 口口| 嵐DPB RDPARDRIV为8位寄存器,复位后的值为 0,此时,A 口、B 口、E 口驱动保持全功率;当 RDPA、RDPB、RDPE为1时,A 口、B 口、E 口输出引脚的驱动功率下降(4)数据寄存器PORTA、PORTB、PORTEPORTA、PORTB、PORTE均为8位寄存器,复位后的值为 0,端口引脚输出低电平;要使引脚输出高电平,相应端口对应位应该置1。
ARM LPC2103定时器中断方式寄存器设置
定时器查询方式定时器初始化:
1、设置定时器分频数,为(x+1)分频
2、匹配通道 X 中断并复位 TxTC
3、比较值( 1S 定时值)
4、启动并复位 TxTC
如:
T1PR = 99; // 设置定时器 0 分频为 100 分频,得 110592Hz
T1MCR = 0x03; //匹配通道0匹配中断并复位T0TC
T1MR0 = 110592/2; // 比较值( 1S 定时值)
T1TCR = 0x03; // 启动并复位 T0TC
T1TCR = 0x01;
研究了好长一段时间,LPC210X 的定时器,查询方式定时很简单如上面,但中断方式要操作好多寄存器,太麻烦,一直是一头雾水。
好不容易理出了思路,现将一段例程粘贴备忘。
#include 《 intrinsics.h》
#include 《 stdio.h》
#include 《 iolpc2103.h》
// OSC [ Hz]
#define FOSC 11059200UL
// Core clk [Hz]
#define FCCLK FOSC
// Per clk [Hz]
#define PCCLK (FOSC/4)
// TImer TIck per second。
LPC2103学习之外部中断
今天下午学习了LPC2103的外部中断,相对来说比较简单。
只是几个寄存器的操作。
LPC2103有三个外部中断源。
分别是外部中断0(EINT0),外部中断
1(EINT1),外部中断2(EINT2)。
另外LPC2103的10个捕获输入也可以作为外部中断输入,跟外部中断不同之处就是不能将掉电模式下的CPU唤醒。
下面的图展示了LPC2103的外部中断系统的结构,看到这个结构,对寄存器的操作一下也明白了不少。
下面是4个跟外部中断有关的寄存器
下面是寄存器的具体介绍,首先是外部中断标志寄存器EXINT。
其中需要我们注意的是相应中断使标志位置1时,我们需要向相应寄存器位写1以清除标志位。
而且在电平触发方式下,只有引脚处于无效状态时才又可能将标志位清除。
比如设置的为高电平触发,则直到相应引脚变为低电平时我们才能将标志位清0.具体寄存器说明如图:
外部中断唤醒寄存器EXTWAKE.
EXTWAKE寄存器中的位允许相应的外部中断将处理器从掉电模式下唤醒。
且实现掉电唤醒不需要在向量中断控制器中使能相应的中断。
这样做的好处是允许外部中断唤醒处理器,但不产生中断。
具体寄存器说明如图:
外部中断模式寄存器EXTMODE。
此寄存器主要用来选择中断方式是电平触发还是边沿触发。
注意的是只有选择用作EINT功能的引脚,并通过VICIntEnable使能相应中断,才能产生外部中断。
LPC21XX 的UA TA1. UA TR 接收器缓冲寄存器—UART Receiver Buffer RegisterUxRBR 是UART Rx FIFO 的最高字节,它包含了最早接收的字符,可通过总线接口读出。
LSB 代表最早接收到的数据位。
如果接收的字符小于8位,未使用的MSB 填充为0如果要访问UxRBR ,UxLCR 的除数锁存访问寄存器位(DLAB )必须为0,UxRBR 为只读寄存器。
由于PE 、PE 和BI 位于RBR FIFO 顶端的字节相对应,因此,将接收的字节机器状态位成对读出得正确方法是先读U0LSR ,再读U0RBR2. UART 发送保持寄存器—UART Transmitter Holding RegisterUxTHR 是UART Tx FIFO 的最高字节,它包含了Tx FIFO 中最新的字符,可通过总线接口写入。
LSB 代表最先发送的位如果要访问UxTHR,UxLCR 的除数锁存访问位(DLAB )必须为0.U0THR 为只写寄存器3. UART 除数锁存LSB 寄存器和UART 除数锁存MSB 寄存器除数锁存寄存器是波特率发生器的一部分,它保存了用于产生波特率时钟的VPB 时钟分频值,波特率时钟必须是波特率的16倍,等式如下16 = × baud = UxDLL UxDLM,Fpclk ,则UxDLM,UxDLL= baud *16FpclkUxDLL 和UxDLM 寄存器一起构成一个16位除数,访问UART 除数锁存寄存器时,除数锁存访问位必须为15. UART 中断使能寄存器—UART Interrupt Enable RegisterUxIER 用于使能4个UART 中断源UxIER.0使能UART 接收数据中断,还控制字符接收超时中断UxIER.1使能UART THRE 中断,该中断状态可从U0LSR.5读出UxIER.2使能UART Rx 线状态中断,该中断的状态可从UxLSR[4:0]读出6. UART 中断标识寄存器—UART Interrupt Identification RegisterUxIIR 提供状态代码用于指示一个挂起中断的中断源和优先级。
LPC21xx C 程序的精确延时方法引言随着微处理器技术的发展,微处理器不断升级,内核的处理速度越来越快,同时也出现了精确延时的问题。
由于ARM7 微控制器LPC21xx 使用了三级流水线技术,精确延时对开发者特别是初学者带来了一定的难度。
下面介绍几种LPC21xx 在C 程序下实现精确延时的实用方法。
实现延时通常有两种方法:一种是硬件延时,采用定时器/计数器实现精确延时,可以提高CPU 的工作效率;另一种是软件延时,这种方法主要采用循环体进行。
1 硬件延时Philips 公司的LPC21xx 系列微控制器具有2 个32 位可编程定时器/计数器,均具有4 路捕获、4 路比较并输出电路。
定时器对外设时钟周期进行计数,在到达指定的定时值时可选择产生中断来执行其他动作。
可用作对内部事件进行计数的间隔定时器,或自由运行的定时器,亦可通过捕获输入实现脉宽调制。
LPC21xx 系列具有4 个32 位匹配寄存器。
匹配时,可选择产生中断使定时器继续工作、停止或复位。
使PO.7 口输出方波的波形。
匹配时复位定时器,产生中断使高低电平持续时间均为O.5 s,如图1 所示。
在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。
从程序的执行效率和稳定性两方面考虑,使用定时器/计数器延时是最佳的方案。
但是占用了一个定时器,比较浪费,并且可移植性也比较差。
因此,在并非要求精确定时的情况下,一般不建议采用。
2 软件延时2.1 使用系统函数延时LPC21xx 微控制器可以采用嵌入式操作系统进行任务的管理,如果需要延时可以使用系统的延时函数实现。
采用μC/0S-II 实时操作系统时,可以使用系统提供的延时函数。
(1)任务延时函数OSTimeDly()。
延时长短由指定的时钟节拍数目(O~65535)来确定。
调用该函数会使系统进行。
LPC21XX 的UA TA1. UA TR 接收器缓冲寄存器—UART Receiver Buffer RegisterUxRBR 是UART Rx FIFO 的最高字节,它包含了最早接收的字符,可通过总线接口读出。
LSB 代表最早接收到的数据位。
如果接收的字符小于8位,未使用的MSB 填充为0如果要访问UxRBR ,UxLCR 的除数锁存访问寄存器位(DLAB )必须为0,UxRBR 为只读寄存器。
由于PE 、PE 和BI 位于RBR FIFO 顶端的字节相对应,因此,将接收的字节机器状态位成对读出得正确方法是先读U0LSR ,再读U0RBR2. UART 发送保持寄存器—UART Transmitter Holding RegisterUxTHR 是UART Tx FIFO 的最高字节,它包含了Tx FIFO 中最新的字符,可通过总线接口写入。
LSB 代表最先发送的位如果要访问UxTHR,UxLCR 的除数锁存访问位(DLAB )必须为0.U0THR 为只写寄存器3. UART 除数锁存LSB 寄存器和UART 除数锁存MSB 寄存器除数锁存寄存器是波特率发生器的一部分,它保存了用于产生波特率时钟的VPB 时钟分频值,波特率时钟必须是波特率的16倍,等式如下16 = × baud = UxDLL UxDLM,Fpclk ,则UxDLM,UxDLL= baud *16FpclkUxDLL 和UxDLM 寄存器一起构成一个16位除数,访问UART 除数锁存寄存器时,除数锁存访问位必须为15. UART 中断使能寄存器—UART Interrupt Enable RegisterUxIER 用于使能4个UART 中断源UxIER.0使能UART 接收数据中断,还控制字符接收超时中断UxIER.1使能UART THRE 中断,该中断状态可从U0LSR.5读出UxIER.2使能UART Rx 线状态中断,该中断的状态可从UxLSR[4:0]读出6. UART 中断标识寄存器—UART Interrupt Identification RegisterUxIIR 提供状态代码用于指示一个挂起中断的中断源和优先级。
LPC21xx系列外部中断寄存器
LPC2114有4个外部中断,分别为EINT0、EINT1、EINT2、EINT3,具有4个相关得寄存器。
外部中断输入可以用于将处理器从掉电模式唤醒。
EXTINT是外部中断标志寄存器。
当一个管脚选择使用外部中断功能时,对
应在EXTMODE和EXTPOLAR寄存器中得位选择得电平或边沿将置位EXTINT寄存器的中断标志。
这样来向VIC提出中断请求,如果管脚中断使能,则产生中断。
低4位与外部中断引脚EINT3、EINT2、EINT1、EINT0对应,为1时表示外部中断有效。
可以通过软件对其相应位写入1清零标志位。
电平激活方式下,该方式只有在管脚处于无效状态时才有效。
一旦EINT0~EINT3 中的一位被置位并开始执行相应代码时,该位必须清零。
否则EINT刚触发得
事件以后将不会被识别。
电平激活方式下,如果管脚的EINT功能被选用且管脚处于有效状态时,该
位置位;边沿激活方式下,如果管脚的EINT功能被选用且管脚上出现所选边
沿时,该位置位。
EXTWAKE是中断唤醒寄存器。
EXTWAKE寄存器中的使能位允许外部中断和其他源将处理器从掉电模式中唤醒。
相应的EINTn功能必须映射到管脚才能实现掉电唤醒。
这样做的好处是允许外部中断输入将处理器从掉电唤醒,但不产生中断;或者在掉电模式下使能中断而不会将处理器唤醒。
[3:0]
=EXTWAKE3~EXTWAKE0,为1时允许唤醒。
EXTMODE是外部中断模式寄存器。
该寄存器中的位用来选择EINTn的引脚是电平还是边沿激活。
只有选择用作EINT功能,并且已通过VICIntEnable寄。