




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本篇包括第一至四章,为全书的硬件基础部分,依次介绍了 ARM Cortex-M0+内核、 LPC82X微控器、LPC824开发平台与工程框架以及异常与中断管理等内容。LPC82X典型硬件系统第一章ARM Cortex-M0+内核1.1ARM Cortex-M0+内核特点1.2ARM Cortex-M0+内核架构1.3ARM Cortex-M0+存储器配置1.4ARM Cortex-M0+内核寄存器1.5SysTick定时器1.6Cortex-M0+异常 1.7嵌套向量中断控制器ARM是AdvancedRISC Machine(高级精简指令集机器)的缩写,现为ARM公司的注册商标。ARM Cor
2、tex-M0+内核属于ARM公司推出的Cortex-M系列内核之一,相对于高性能的Cortex-M3内核而言,它具有体积小、功耗低和控制灵活等特点,主要针对传统单片机的控制与显示等嵌入式系统应用。本章将介绍 Cortex-M0+内核的特点、架构、存储器配置和内核寄存器等内容。 Cortex-M0+内核使用ARMv6-M体系结构,使用ARMv6-M汇编语言指令集,它具有以下特点:(1)Cortex-M0+内核包含极低数量的门电路,是目前全球功耗最低的内核,特别适用于对功耗要求苛刻的嵌入式系统应用场合。(2)支持32位长的Thumb-2扩展指令集和16位长的Thumb指令集,代码的执行效率远远高于
3、8位长的单片机汇编指令。(3)支持单周期的I/O(输入/输出)口访问,对外设的控制速度快。(4)具有低功耗工作模式,在内核空闲时可以使其进入低功耗模式,从而极大地节约电能;当内核要工作时,通过紧耦合的快速中断唤醒单元使其进入正常工作模式。(5)内核中的各个组件采用模块化结构,通过精简的高性能总线(AHB-Lite)连接在一起,内核中的功耗管理单元可以动态配置各个组件的工作状态,可根据需要使某些空闲的组件处于掉电模式,以尽可能地减少功耗。(6)可执行代码保存在Flash存储区中,而Cortex-M0+内核支持从Flash中以极低的功耗快速读取指令,并以极低的功耗(工作在一个相对较低的CPU时钟下
4、)在内核中高速执行代码。1.1ARM Cortex-M0+内核特点 (7)Cortex-M0+内核支持硬件乘法器。硬件乘法器最早出现在DSP(数字信号处理器)芯片中,与加法器协同工作,并称为乘加器,是指在一个CPU时钟周期内,用硬件电路直接实现AB+C的三操作数运算。这里Cortex-M0+支持的硬件乘法器可以在一个CPU时钟周期内实现AB的二操作数运算。(8)Cortex-M0+内核的每条汇编指令的执行周期是确定的,中断处理的时间是确定的、高效的,且具有快速中断处理能力,特别适用于对实时性要求苛刻的智能控制场合。(9)支持二线的串行调试接口(SWD),只需要使用芯片的两根管脚就可以实现对Co
5、rtex-M0+内核芯片的在线仿真与调试,通过SWD可以向芯片的Flash存储器固化程序代码,且具有指令跟踪执行功能。而绝大多数的传统单片机是不能在线仿真调试的,因此,基于单片机的工程测试复杂且周期漫长。(10)Cortex-M0+内核不是物理形态的微控制器芯片,而是属于知识产权(IP),所以常被称为IP核。目前全球大约有150家半导体公司购买了ARM公司的IP核,生产集成了IP核的微控制器芯片(称为流片,流片测试成功后进入芯片量产阶段)。所有集成了Cortex-M0+内核的微控制器芯片,均可使用相同的集成开发环境(如Keil公司的MDK和IAR公司的EWARM等)和相同的仿真器(如ULink
6、2、JLinkV8等)进行软件开发,事实上,几乎全部的ARM芯片都使用相同的开发环境和仿真器。但是,对于传统的单片机而言,不同半导体厂商生产的单片机所用的开发环境和编程下载器往往不相同。1.1ARM Cortex-M0+内核特点 相对于8位字长的传统8051单片机而言,Cortex-M0+内核是32位字长的微控制器内核,其内部总线宽度为32位,指令和数据传输速度及功能大大提升。Cortex-M0+内核架构如图1-1所示。图1-1Cortex-M0+内核架构1.2ARM Cortex-M0+内核结构 由图1-1可知,Cortex-M0+内核由Cortex-M0+处理器和三个可选的组件,即唤醒中断
7、控制器(WIC)、宏跟踪单元(MTB)和调试访问口组成,Cortex-M0+处理器包括Cortex-M0+处理器核心、嵌套向量中断控制器(NVIC)和两个可选的组件,即存储保护单元(MPU)和调试器组成,其中,调试器又包括断点与观测点单元和调试器接口。Cortex-M0+内核与外部通过总线阵列和中断进行通信,其中,中断为单向输入口,总线阵列相连接的精简高性能总线(AHB)接口以及可选的单周期输入/输出(I/O)口和串行调试或JTAG口为双向口。32位的Cortex-M0+处理器核心是计算和控制中心,采用了两级流水的冯诺依曼结构,执行ARMv6-M指令集(即16位长的Thumb-2指令集,含32
8、位长的扩展指令),集成了一个单周期的乘法器(用于高性能芯片中)或一个32位的乘法器(用于低功耗芯片中)。Cortex-M0+内核具有很强的中断处理能力,一个优先级可配置的嵌套向量中断控制器(NVIC)直接与Cortex-M0+处理器核心相连接,通过这种紧耦合的嵌套向量中断控制器,可以实现不可屏蔽中断、中断尾链、快速中断响应、睡眠态唤醒中断和四级中断优先级。这里的“中断尾链”是指当有多个中断被同时触发时,优先级高的中断响应完成后,不需要进行运行环境的恢复,而是直接运行优先级次高的中断,全部中断响应完后,再恢复运行环境。如果没有中断尾链功能,则处理器在响应一个中断前,先进行入栈操作,保存当前中断触
9、发时的运行环境,然后,处理器暂停当前程序的执行去响应中断,响应完中断后,进行出栈操作,恢复响应中断前的环境(即使程序计数器指针(PC)指向被中断的程序位置处)继续执行原来的程序。1.2ARM Cortex-M0+内核结构 接着,重复这些操作响应下一个中断。因此,没有中断尾链功能时,两个连续响应的中断中需要插入一次出栈和一次入栈操作(即恢复前一个运行环境和保存后一个运行环境),而具有中断尾链功能时,这两次堆栈操作均被省略掉了。Cortex-M0+内核具有很强的调试能力,通过调试访问口,外部的串行调试或JTAG调试口与Cortex-M0+处理器的调试器相连接,调试器直接与Cortex-M0+处理器
10、核心连接,还通过它与宏跟踪单元相连接。因此,通过串行调试或JTAG调试口可以访问Cortex-M0+内核的全部资源,包括调试或跟踪程序代码的执行,还可以检查代码的执行结果。存储保护单元(MPU)可以对存储器的某些空间设定访问权限,使得只有特定的程序代码才能访问这些空间,普通的程序代码则无权访问,这样可以有效地保护关键的程序代码存储区或数据区不受意外访问(例如病毒)的侵害。图1-1中,相对于Cortex-M0+处理器核心而言,其余的组件均称为Cortex-M0+内核的外设,所有这些组件均为知识产权(IP)核。半导体厂商在这个IP核的基础上添加中断发生器、存储器、与AHB相连接的多功能芯片外设和输
11、入/输出(I/O)口等,即可以得到特定功能的微控制器芯片。1.2ARM Cortex-M0+内核结构 Cortex-M0+存储空间的最大访问能力为232字节,即4GB。对于Cortex-M0+而言,8位(8bit)为一个字节,16位称为半字,32位称为字。以字为单位,Cortex-M0+的存储空间的最大访问能力为230字,即从0至230-1字。一般地,访问地址习惯采用字节地址,此时,Cortex-M0+的存储空间配置如图1-2所示。图1-2Cortex-M0+存储空间配置1.3ARM Cortex-M0+存储器配置 由图1-2可知,4GB的Cortex-M0+映射存储空间被分成8个相同大小的空
12、间,每个空间为0.5GB。这8个空间中,位于地址范围0 x000000000 x1FFFFFFF的Code空间对应着集成在芯片上的ROM或Flash存储器,主要用于保存可执行的程序代码,也可用于保存数据,其中,中断向量表位于以0 x0起始的地址空间中,一般占有几十至几百个字节。位于地址范围0 x200000000 x3FFFFFFF的SRAM区域,对应着集成在芯片中的RAM存储器,主要用于保存数据,保存的数据在芯片掉电后丢失。位于地址范围0 x400000000 x5FFFFFFF的片上外设区域,存储着片上外设的访问寄存器,通过读或写这些寄存器,可实现对片上外设的访问和控制。位于地址范围0 x
13、600000000 x7FFFFFFF的RAM区域属于快速RAM区,是具有“写回”特性的缓存区,而位于地址范围0 x800000000 x9FFFFFFF的RAM区域属于慢速RAM区,是具有“写通”特性的缓存区。这两个RAM区都有对应的缓存(Cache)。所谓的“写回”,是指当Cortex-M0+内核向RAM区写入数据时,不是直接将数据写入RAM,而是写入到更快速的缓存中,当缓存满了或者总线空闲时,缓存自动将数据写入到RAM区中。所谓的“写通”,是指当Cortex-M0+内核向RAM区写入数据时,通过缓存直接将数据写入到RAM区中。因此,具有“写回”特性的RAM中的数据有可能与其缓存中的数据不
14、同,当数据较少时,数据将保存在缓存中,而不用写入到RAM中;而具有“写通”特性的RAM中的数据与缓存中相应的数据是相同的。其实,Cortex-M0+的Code区和SRAM区也有缓存,前者是“写通”特性的缓存机制,后者是“写回”特性的缓存机制。1.3ARM Cortex-M0+存储器配置 Cortex-M0+支持两种存储模式,即小端模式和字节保序的大端模式。不妨设Addr为一个字地址。所谓的字地址,是指地址的最低两位为0,即地址能被4整除,例如0 x00000000、0 x00000004、0 x00000008等都是字地址,同样,把地址的最低一位为0的地址称为半字地址,如0 x00000002
15、、0 x00000004等,显然,字地址都是半字地址。设DataA为一个字,包括4个字节,从高字节到低字节依次记为DataA31:24、DataA23:16、DataA15:8和DataA7:0。设DataB为一个半字,包括2个字节,依次记为DataB15:8和DataB7:0,则在两种存储模式下,将DataA或DataB保存在Addr地址的情况如图1-3所示。图1-3小端模式与字节保序的大端模式示例1.3ARM Cortex-M0+存储器配置 由图1-3可知,小端模式下,数据字的高字节存储在字地址的高端,数据字的低字节存储在字地址的低端;而大端模式下刚好相反,数据字的高字节存储在字地址的低端
16、,数据字的低字节存储在字地址的高端。所谓的字节保序,是指在大端模式下,每个字节内的位的顺序保持不变。1.3ARM Cortex-M0+存储器配置 1.4.1内核寄存器Cortex-M0+微控制器共有16个内核寄存器,分别记为R0R15,其中R0R12为32位的通用目的内核寄存器,供程序员保存计算和控制数据;R13又称作堆栈指针(SP)寄存器,指向堆栈的栈顶;R14又称为连接寄存器(LR),用于保存从调用的子程序返回时的程序地址;R15又称为程序计数器(PC),微控制器复位时,PC指向中断向量表中的复位向量,一般是地址0 x0,程序正常运行过程中,PC始终指向下一条待运行指令的地址,对于顺序执行
17、的程序段而言,PC始终指向当前指令地址+4。Cortex-M0+内核寄存器如图1-4所示。图1-4Cortex-M0+内核寄存器1.4ARM Cortex-M0+内核寄存器 在图1-4中,R13即SP寄存器对应着两个物理寄存器,分别称为主堆栈指针MSP和进程堆栈指针PSP,SP使用哪个指针由Cortex-M0+内核工作模式决定。Cortex-M0+微控制器有两种工作模式,即线程模式或称为进程模式(Threadmode)和手柄模式(Handlermode)。上电复位时,微控制器工作在手柄模式下。当工作在手柄模式下时,只能使用主堆栈指针MSP;当工作在进程模式下时,两个堆栈指针均可使用,具体使用哪
18、个指针,由CONTROL寄存器的第1位决定(见1.4.2节)。手柄模式是一种特权模式,此模式下程序员可以访问微控制器的全部资源,而线程模式是一种保护模式,此模式下微控制器的某些资源是访问受限的。1.4ARM Cortex-M0+内核寄存器 1.4.2系统控制寄存器本书将程序状态寄存器xPSR、中断屏蔽寄存器PRIMASK和控制寄存器CONTROL作为系统控制寄存器,有些专家把这些寄存器也视作内核寄存器,因为这些寄存器也只能由汇编语言访问。此外,系统控制寄存器还包括表1-1所示的寄存器。表1-1系统控制寄存器注:表1-1中,RW表示可读可写;RO表示只读;WO表示只写(表中未出现)。表1-1中的
19、系统控制寄存器可以用C语言指针类型的变量访问。1.4ARM Cortex-M0+内核寄存器 下面依次介绍这些系统控制寄存器的含义,其中,ACTLR寄存器可视为用户定义功能的32位通用寄存器,DFSR寄存器为调试单元服务,这两个寄存器不做介绍。1)程序状态寄存器xPSR程序状态寄存器xPSR包括3个子寄存器,即应用程序状态寄存器APSR、中断程序状态寄存器IPSR和执行程序状态寄存器EPSR,如图1-5所示。图1-5程序状态寄存器xPSR1.4ARM Cortex-M0+内核寄存器 由图1-5可知,APSR寄存器只有第31:28位域有效,分别记为N、Z、C和V;IPSR寄存器只有第5:0位域有效
20、;EPSR寄存器只有第24位有效,用T表示。这里,APSR寄存器的N、Z、C和V为条件码标志符,N为负条件码标志符,当计算结果(以二进制补码表示)为负时,N置1,否则清0;Z为零条件码标志符,当计算结果为0时,Z置1,否则清0;C为进位条件码标志符,当计算结果有进位时,C置1,否则清0;V为溢出条件码标志符,当计算结果溢出时,V置1,否则V清0。EPSR寄存器的T为0表示ARM处理器工作在ARM指令集下,T为1表示ARM处理器工作在Thumb指令集下,由于Cortex-M0+仅支持Thumb-2指令集,因此,T必须始终为1,芯片上电复位时,T将自动置1。需要注意的是,读T的值,始终读出0,可以
21、认为T是只写的位。当Cortex-M0+工作在手柄模式下时,IPSR的第5:0位域用于记录当前执行的异常号;如果Cortex-M0+工作在线程模式下,则该位域为0。2)中断屏蔽寄存器PRIMASK中断屏蔽寄存器PRIMASK只有第0位有效,记为PM,如果该位被置为1,则将屏蔽掉所有优先级号大于等于0的异常和中断;如果该位为0,表示优先级号大于等于0的异常和中断正常工作。实际上,PM位被置成1,是将当前执行的进程的优先级设为0,而优先级号越小,优先级别越高,因此,使得优先级号大于或等于0的异常和中断无法被响应了。1.4ARM Cortex-M0+内核寄存器 3)控制寄存器CONTROL控制寄存器
22、CONTROL只有第1:0位有效,第0位记为nPRIV,第1-位记为SPSEL。当Cortex-M0+微控制器工作在进程模式下时,SP可以使用主堆栈指针MSP或进程堆栈指针PSP,此时使用哪一个栈指针由SPSEL位决定。当SPSEL为0时,使用MSP作为SP;当SPSEL为1-时,使用PSP。在手柄模式下,SP只能使用MSP,此时SPSEL位无效。如果芯片实现了非特权/特权访问扩展功能,则nPRIV位清0时,进程模式将享有特权访问能力;如果nPRIV位置为1,进程模式没有特权访问能力。如果芯片没有集成非特权/特权访问扩展功能,则nPRIV位无效,此时读nPRIV位读出0,写该位被忽略。4)处理
23、器身份号寄存器CPUID32位的处理器身份号寄存器CPUID提供芯片的标识信息,如表1-2所示。表1-2处理器身份号寄存器CPUID对于集成Cortex-M0+微控制器内核的LPC824芯片而言,读出CPUID的值为0 x410CC601。1.4ARM Cortex-M0+内核寄存器 5)中断控制状态寄存器ICSR中断控制状态寄存器ICSR用于控制中断或获取中断的状态,如表1-3所示。表1-3中断控制状态寄存器ICSR注:表1-3中的NMI、PendSV和SysTick异常以及中断号和异常号的概念请参考1.6节。ICSR寄存器的重要意义在于可以通过它用软件方式触发NMI、PendSV和SysT
24、ick异常,或清除这些异常的请求状态,尤其是PendSV异常,常被用于嵌入式实时操作系统中作为任务切换的触发机制。1.4ARM Cortex-M0+内核寄存器 6)向量表偏移寄存器VTOR向量表偏移寄存器VTOR只有第31:7位有效,用符号TBLOFF表示,记录了中断向量表的起始地址,上电复位后,TBLOFF为0,表示中断向量表位于地址0 x00000000处。由于中断向量表的首地址只能位于末尾7位全为0的地址处,所以,VTOR寄存器的第6:0位始终为0。如果设置TBLOFF为0 x02,则中断向量表的首地址为0 x00000100。7)程序中断和复位控制寄存器AIRCR 程序中断和复位控制寄
25、存器AIRCR用于设置或读取中断控制数据,其各位的含义如表1-4所示。表1-4程序中断和复位控制寄存器AIRCR1.4ARM Cortex-M0+内核寄存器 8)系统控制寄存器SCR系统控制寄存器SCR用于设置或返回系统控制数据,其各位的含义如表1-5所示。表1-5系统控制寄存器SCR9)配置与控制寄存器CCR只读的配置与控制寄存器CCR用于返回配置和控制数据,只有第3位和第9位有效,分别记为UNALIGN_TRP和STKALIGN。UNALIGN_TRP始终为1,表示地址没有对齐的半字或字访问将产生HardFault异常(见1.6节)。这里的“对齐”是指字数据的首地址的末2位必须为0,半字数
26、据的首地址的末位必须为0。STKALIGN也始终为1,表示进入异常服务程序后,堆栈指针SP调整到8字节对齐的地址,并将异常返回地址保存在SP指向的空间。这里的“8字节对齐的地址”是指该地址的末3位为0。1.4ARM Cortex-M0+内核寄存器 10)系统异常优先级寄存器SHPR2和SHPR3系统异常优先级寄存器SHPR2只有第31:30位域有效,记为PRI_11,用于设定SVCall异常的优先级号;系统异常优先级寄存器SHPR3中,第23:22位域和第31:30位域有效,分别记为PRI_14和PRI_15,PRI_14用于设置PendSV异常的优先级号,PRI_15用于设置SysTick异
27、常的优先级号。SVCall、PendSV和SysTick异常的优先级号配置符号PRI_11、PRI_14和PRI_15均位于其所在字节的最高2位,如图1-6所示,因此,优先级号的值可以配置为0、64、128或192。图1-6系统异常优先级寄存器SHPR2和SHPR311)系统异常控制与状态寄存器SHCSR系统异常控制与状态寄存器SHCSR只有第15位有效,记作SVCallpended,读出1表示SVCall异常(见1.6节)处于请求态,读出0表示SVCall异常没有处于请求态。注意,如果SVCall异常处于活动态(即正在执行其中断服务程序),则SVCallpended读出0。1.4ARM Co
28、rtex-M0+内核寄存器 SysTick定时器又称为系统节拍定时器,是一个24位的减计数器,常用来产生100Hz的SysTick异常信号作为嵌入式实时操作系统的时钟节拍。SysTick定时器有4个相关的寄存器,即SYST_CSR、SYST_RVR、SYST_CVR和SYST_CALIB,如表1-6所示。表1-6SysTick定时器相关的寄存器SysTick定时器的工作原理框图如图1-7所示。图1-7SysTick定时器工作原理框图1.5SysTick定时器 根据图1-7可知,SysTick定时器可以选择系统时钟或外部输入时钟信号作为时钟源,由控制和状态寄存器SYST_CSR决定;启动SysT
29、ick定时器时,需要向当前计数值寄存器进行一次写入操作(可写入任意值),清零SYST_CVR寄存器,同时将SYST_RVR的值装入到SYST_CVR中,SysTick定时器开始工作。每当SYST_CVR减计数到0时,在下一个时钟到来时自动将SYST_RVR的值装入到SYST_CVR中,同时产生SysTick定时器中断。如果重装值计数器的值设为0,则下一个时钟到来时关闭SysTick定时器。10ms定时校正寄存器SYST_CALIB用于系统时钟不准确时校正SysTick定时器,一般由半导体厂商校正。下面将详细介绍表1-6中各个寄存器的情况。1)SysTick控制与状态寄存器SYST_CSRSys
30、Tick控制与状态寄存器SYST_CSR如表1-7所示。2)SysTick重装值寄存器SYST_RVRSysTick重装值寄存器SYST_RVR如表1-8所示。使用SysTick定时器前必须给该寄存器赋值,每当SysTick定时器减计数到0后,在下一个时钟到来时,SYST_RVR寄存器的值被装入到SYST_CVR寄存器中。表1-7、1-8请看下页1.5SysTick定时器 表1-7SysTick控制与状态寄存器SYST_CSR表1-8SysTick重装值寄存器SYST_RVR1.5SysTick定时器 3)SysTick当前计数值寄存器SYST_CVRSysTick当前计数值寄存器SYST_C
31、VR如表1-9所示,该寄存器的值即为SysTick定时器的当前计数值,在使用SysTick定时器时,需要向SYST_CVR寄存器进行一次写入操作,可写入任何值,该写操作将清零SYST_CVR寄存器,同时清零SYST_CSR寄存器的COUNTFLAG标志位。表1-9SysTick当前计数值寄存器SYST_CVR4)定时校正寄存器SYST_CALIB定时校正寄存器SYST_CALIB如表1-10所示,当系统时钟不准确时,该寄存器用于校正SysTick定时器定时频率,一般由半导体厂商进行定时校正,因此该寄存器是只读属性。表1-10定时校正寄存器SYST_CALIB1.5SysTick定时器 Cort
32、ex-M0+微控制器支持5种类型的异常,即复位异常Reset、不可屏蔽中断NMI、硬件访问出错异常HardFault、特权调用异常SVCall和中断。其中,中断包括2个系统级别的中断,即PendSV异常和SysTick中断,还包括32个外部中断。对于ARM而言,ARM内核产生的中断称为异常(Exception),外设产生的中断称为中断(Interrupt)。对于学过单片机的同学来说,可以把异常和中断视为相同的概念,并不会造成学习的障碍。Cortex-M0+微控制器的异常如表1-11所示。表1-11Cortex-M0+微控制器的异常1.6Cortex-M0+异常 Cortex-M0+中,由于异常
33、和中断的排列有序,所以把异常和中断占居的空间称为异常或中断向量表,如图1-8所示。图1-8Cortex-M0+异常与中断向量表1.6Cortex-M0+异常 当Cortex-M0+微控制器上电复位后,异常与中断向量表位于起始地址0 x0处的空间内,如图1-8所示。由图1-8可知,堆栈栈顶占据了地址0 x00处的字空间,这里的堆栈栈顶是指主堆栈指针MSP的值,而复位异常Reset位于地址0 x04处的字空间,因此,Cortex-M0+微控制器上电复位后,PC指针指向0 x04地址处开始执行,一般地,该字空间中保存了一条跳转指令。表1-11和图1-8列出了Cortex-M0+微控制器的全部异常与中
34、断,其中,复位异常Reset的优先级号为-3,即优先级最高,因为异常或中断的优先级号越小,其优先级越高。不可屏蔽中断NMI和硬件系统访问出错异常HardFault的优先级号分别为-2和-1。其余的异常和中断的优先级均可配置,Cortex-M0+微控制器支持4级优先级配置,这些异常和中断的优先级号必须大于等于0,其中,SVCall、PendSV和SysTick三个异常的优先级由系统异常优先级寄存器SHPR2和SHPR3进行配置,详情见1.4.2小节。中断号为031的中断的优先级配置方法见1.7节。由表1-11可知,每个异常和中断都对应着一个异常号,例如,Reset异常的异常号为1,外部中断n的异
35、常号为16+n。可以由异常号推断该异常的地址,异常号乘以4的值刚好为该异常在异常与中断向量表中的偏移地址。异常与中断向量表的作用在于,当某个异常或中断被触发后,PC指针将跳转到该异常或中断在向量表中的地址处,一般地,该地址处存放着一条跳转指针,进一步跳转到该异常或中断的中断服务程序入口处执行,实现对该异常与中断的响应处理。1.6Cortex-M0+异常 表1-11中异常号为16+n的外部中断n(n=0,1,2,31)由嵌套向量中断控制器NVIC管理。每个外部中断n都对应着一个中断号n,记为IRQn。嵌套向量中断控制器NVIC通过12个寄存器管理IRQ31IRQ0。这些寄存器如表1-12所示,它
36、们的复位值均为0 x0。表1-12NVIC相关的寄存器1.7嵌套向量中断控制器 下面依次介绍各个NVIC相关的寄存器的含义。1)中断开放寄存器NVIC_ISER中断开放寄存器NVIC_ISER是一个32位的寄存器,第n位的值对应着IRQn的状态,n=031,即向NVIC_ISER寄存器的第n位写入1,打开相对应的IRQn中断;向第n位写入0无效。例如,第0位的值设为1,则打开IRQ0中断;第5位的值设为1,则打开IRQ5中断。读出NVIC_ISER寄存器的第n位的值为1,表示IRQn处于开放状态;若第n位读出值为0,表示IRQn处于关闭态。2)中断关闭寄存器NVIC_ICER中断关闭寄存器NV
37、IC_ICER的作用与NVIC_ISER的作用相反。NVIC_ICER寄存器的第n位对应着IRQn的状态,n=031,向NVIC_ICER寄存器的第n位写入1,关闭相对应的IRQn中断;向第n位写入0无效。读出NVIC_ICER寄存器的第n位的值为1,表示IRQn处于开放状态;若第n位读出值为0,表示IRQn处于关闭状态。一般情况下,可把该寄存器视为只写寄存器。3)中断请求寄存器NVIC_ISPR中断请求寄存器NVIC_ISPR是32位的寄存器,第n位的值对应着IRQn的请求状态,n=031。向NVIC_ISPR寄存器的第n位写入1,将配置IRQn中断为请求状态;写入0无效。读NVIC_ISP
38、R寄存器的第n位为1,表示IRQn正处于请求状态;读出第n位的值为0,表示IRQn没有处于请求态。1.7嵌套向量中断控制器 4)中断清除请求寄存器NVIC_ICPR中断清除请求寄存器NVIC_ICPR的作用与NVIC_ISPR寄存器的作用相反。NVIC_ICPR寄存器的第n位的值对应着IRQn的请求状态,n=031。向NVIC_ICPR寄存器的第n位写入1,将清除IRQn中断的请求状态;写入0无效。读NVIC_ICPR寄存器的第n位为1,表示IRQn正处于请求状态;读出第n位的值为0,表示IRQn没有处于请求态。一般情况下,可将该寄存器视为只读寄存器。5)中断优先级寄存器NVIC_IPRn(n
39、=07)嵌套向量中断控制器NVIC共管理了32个中断,即IRQ31IRQ0,每个中断有4级优先级,每个中断的优先级值占用一个字节,32个中断共需要32个字节,即8个字。因此,需要8个32位的寄存器NVIC_IPRn(n=07)才能管理这些中断的优先级。尽管每个中断的优先级值占用一个字节,由于优先级只有4级,所以,优先级值仅需要2位,Cortex-M0+微控制器中,使用每个字节的最高2位作为优先级配置位,如图1-9所示。图1-9中,PRI_n(n=0,1,2,31)对应着IRQn的中断优先级号,PRI_n为所在字节的最高2位,因此,IRQn的优先级号的值可以取为0、64、128或192。IRQn
40、中断对应的配置位域PRI_n位于NVIC_IPRm中的第k个字节里,这里m等于n除以4的整数部分,k等于n除以4的余数部分。图1-9中保留的位域全部为0。图1-9请看下页1.7嵌套向量中断控制器 图1-9中断优先级寄存器NVIC_IPRn(n=07)1.7嵌套向量中断控制器 第二章LPC82X微控制器2.1LPC824微控制器特点与管脚配置2.2LPC824微控制器内部结构 2.3LPC824存储器配置2.4LPC824NVIC中断 2.5I/O口配置IOCON2.6通用目的输入输出口 GPIO 2.7系统配置模块SYSCONLPC82X是集成了Cortex-M0+内核的32位微控制器系列芯片
41、,CPU时钟频率最高可达30MHz。目前LPC82X家族包括LPC822和LPC824两类芯片,不同型号的芯片只有芯片封装和片上外设略有不同。本书以LPC824M201JDH20(以下简称LPC824)作为LPC82X家族的代表芯片展开讨论。本章将介绍LPC824微控制器芯片的特点、管脚配置、内部结构、存储器配置、NVIC中断、典型应用电路和通用I/O口等内容。LPC824微控制器芯片具有以下特点:(1)内核方面:基于Cortex-M0+内核,工作时钟频率最高为30MHz,带有单周期乘法器、单周期快速I/O口、嵌套向量中断控制器NVIC、系统节拍定时器SysTick和宏跟踪缓冲器,支持JTAG
42、调试和带有4个断点和2个观测点的串口调试。(2)存储器方面:片上集成了32KB的Flash存储器,该Flash每页大小为64字节,支持按页编程和擦除,并且具有代码读保护功能。此外,片上还集成了8KB的SRAM存储器。(3)ROMAPI方面:ROM中固化了启动代码(Bootloader)以及ADC、SPI、I2C、USART、功耗配置和整数除法相关的驱动和应用程序接口函数,还提供了针对Flash存储器的在应用编程(IAP)和在系统编程(ISP)应用程序接口函数。(4)数字外设方面:具有16个快速通用目的I/O口(GPIO),每个I/O口均带有可配置的上拉/下拉电阻以及可编程的开路工作模式、输入反
43、向和毛刺数字滤波器等,并且每个I/O口具有方向控制寄存器,可单独对其进行置位、清零和翻转等操作。GPIO中断支持复杂的布尔运算(8个GPIO中断组合起来的模式匹配功能),开关矩阵单元可灵活地配置每个I/O口与芯片管脚的连接方式。集成了CRC引擎,具有带有18个通道和9个触发输入的DMA控制器,这里的CRC是指循环冗余校验码,DMA是指无需CPU支持的直接内存访问。2.1 LPC824微控制器特点与管脚配置 (5)定时器方面:集成了一个状态可配置定时器(SCT),这是一种极其灵活和复杂的定时器,可以产生任何形式的PWM波形;集成了一个四通道的多速率定时器(MRT),相当于单片机的定时器功能,但其
44、实现更加灵活;还集成了一个自唤醒定时器(WKT)和一个加窗的看门狗定时器(WWDT)。(6)模拟外设方面:带有一个12位的12输入通道的ADC,最高采样频率为1.2MHz;还具有4输入的比较器,可使用内部或外部参考电压。(7)串行外设方面:具有3个USART、2个SPI控制器和4个I2C总线接口,I2C可支持数传速率400kb/s。(8)时钟方面:内置了一个精度为1.5%的12MHzRC振荡器,上电复位时使用该振荡器信号作为系统时钟,可通过PLL倍频到30MHz;可外接125MHz的时钟源;具有片上专用的看门狗振荡器,频率为9.4kHz2.3MHz;可将各个时钟信号通过芯片管脚输出。(9)功耗
45、管理方面:使用片上RC振荡器作为系统时钟时正常工作功耗为90A/MHz,通过集成的PMU(功耗管理单元)可以配置各个组件的工作状态,支持睡眠、深度睡眠、掉电、深度掉电等四种低功耗模式,可通过USART、SPI或I2C外设将芯片唤醒,支持定时器从深掉电模式唤醒,还具有上电复位(POR)和掉电检测(BOD)功能。(10)每个芯片具有唯一的身份串号,工作电压范围为1.8V3.6V,工作温度为-40105。2.1 LPC824微控制器特点与管脚配置 下面将介绍LPC824的管脚配置情况。LPC824M201JDH20芯片具有20个管脚,采用TSSOP20封装,其中,16个用作GPIO口,其管脚分布图如
46、图2-1所示。图2-1LPC824M201JDH20芯片管脚分布2.1 LPC824微控制器特点与管脚配置 图2-1显示LPC824仅有PIO0口,估计在将来的LPC82X家族中,会出现具有PIO1和PIO2等GPIO口的芯片。由于LPC824是32位的微控制器,PIO0口应该有32个GPIO口,即从PIO0_0PIO0_31,但是,由于LPC824仅有16个管脚用作GPIO口,故仅集成了PIO0_0PIO0_5、PIO0_8PIO0_15、PIO0_17和PIO0_23。其中,PIO0_10和PIO0_11为开路结构(Open-drain),最高可以吸入20mA的电流,这两个管脚上电复位时,
47、处于关闭态(本质上是输入态),其他的管脚上电复位时,均为输入态且上拉电阻有效。图2-1中各个管脚的具体含义如表2-1所示。表2-1LPC824各个管脚的含义2.1 LPC824微控制器特点与管脚配置 2.1 LPC824微控制器特点与管脚配置 2.1 LPC824微控制器特点与管脚配置 2.1 LPC824微控制器特点与管脚配置 由表2-1可知,大部分管脚都具有多个功能,当有多个功能复用同一个管脚时,上电复位时,每个管脚号对应的第一个功能是缺省功能。除了表2-1所列出的功能外,还有表2-2所示的功能,这些功能可被开关矩阵单元配置到任一PIO0口上,称这些功能为可移动的功能。这些可移动的功能,简
48、化了LPC824的硬件电路设计,使得升级微控制器芯片时,不用重新设计硬件平台,而只需借助软件方式配置可移动的功能接口。在表2-2中,I表示输入类型,O表示输出类型,I/O表示输入/输出类型。表2-2可移动的功能列表2.1 LPC824微控制器特点与管脚配置 2.1 LPC824微控制器特点与管脚配置 2.1 LPC824微控制器特点与管脚配置 从表2-2可以看出,LPC824微控制器支持3个USART,即USART0、USART1和USART2;支持2个SPI,即SPI0和SPI1;SCT有4个外部输入和6个输出;支持3个I2C;具有2个ADC外部触发输入;具有1个模拟比较器输出功能;具有CL
49、KOUT输出功能,可输出LPC824微控制器内部的所有时钟信号;还有1个模式匹配引擎输出功能。表2-2中的全部功能均可以借助开关矩阵单元分配给任何一个GPIO口,常把这些功能称为内部信号,借助于表2-3所示的寄存器可实现内部信号与具体管脚的连接,从而才能使用这些内部信号。表2-3开关矩阵寄存器(基地址:0 x4000C000)2.1 LPC824微控制器特点与管脚配置 2.1 LPC824微控制器特点与管脚配置 表2-3中的全部寄存器均为可读可写属性。上电复位时,管脚分配寄存器PINASSIGN011均被初始化为0 xFFFF FFFF,而管脚有效寄存器PINENABLE0的初始值为0 xFF
50、F FFECF。每个32位的管脚分配寄存器分成4个字节,每个字节的值就是内部信号分配到的管脚号,对于LPC824而言,字节的有效取值为05、815、17和23,当取为其他值时无意义。如果管脚分配寄存器的不同字节设置了相同的有效值,这表示不同的内部信号被同时分配到了同一个管脚,尽可能避免这种分配方式。管脚分配寄存器PINASSIGN011与各个内部信号的关系如表2-4所示。表2-4中,后缀“_I”、“_O”和“_IO”分别表示该内部信号为输入、输出和输入输出类型,其余的部分与表2-2相同。例如,U0_TXD_O表示该内部信号名为U0_TXD,根据表2-2可知,该内部信号为“USART0发送数据通
51、道”,_O表示该内部信号为输出类型。由表2-4可知,PINASSIGN0PINASSIGN11中的每个寄存器都被分为4个8位的字节:31:24、23:16、15:8和7:0,共48个8位的字节,对应着表2-2中的48个内部信号的分配,例如,PINASSIGN0的低8位7:0对应于U0_TXD_O,PINASSIGN5的第31:24位域对应着SPI1_MOSI_IO等等。每个8位的字节取值为n时,表示该字节对应的内部信号分配到PIO0_n所在的管脚上。例如,当PINASSIGN0的第7:0位设为0 x04时,则将内部信号U0_TXD分配到PIO0_4所在的管脚上,即第6号引脚(见图2-1)。表2
52、-4请看下页2.1 LPC824微控制器特点与管脚配置 表2-4PINASSIGN0PINASSIGN11与内部信号的关系(复位值均为0 xFFFFFFFF)2.1 LPC824微控制器特点与管脚配置 表2-3中的管脚有效寄存器PINENABLE0用于配置图2-1中有多个功能复用的那些管脚的功能,只有工作在GPIO状态下的管脚才能使用管脚分配寄存器为其分配内部信号。管脚有效寄存器PINENABLE0可以配置多功能复用管脚用作GPIO口或其他复用的功能,如表2-5所示。表2-5管脚有效寄存器PINENABLE02.1 LPC824微控制器特点与管脚配置 2.1 LPC824微控制器特点与管脚配置
53、 2.1 LPC824微控制器特点与管脚配置 LPC824微控制器使用ARMCortex-M0+内核,并集成了32KBFlash、8KBSRAM、3个USART、4个I2C、2个SPI、5通道ADC和1个比较器等片上外设,具有16个GPIO口,其内部结构如图2-2所示。图2-2LPC824微控制器内部结构2.2 LPC824微控制器内部结构 图2-2清楚地展示了LPC824微控制器的内部结构。由图2-2可知,LPC824微控制器内核为ARMCortex-M0+核心,“高速通用I/O”和“外部中断或模式匹配”直接受Cortex-M0+内核控制,Cortex-M0+内核通过“精简高性能总线”与“3
54、2KBFlash”、“8KBSRAM”、“ROM”、“CRC”计算引擎、DMA控制器和“状态可配置计数器”相连接,通过“高性能总线与高级外设总线桥”借助于高级外设总线(APB)管理3个USART、2个SPI、4个I2C、1个ADC、系统配置器、比较器、看门狗定时器、I/O口配置单元、多速率定时器、功耗管理单元和自唤醒定时器等。由图2-2可知,通过开关矩阵,可将外部的16个管脚灵活地配置成与下列中选出的16个内部信号相连接:“调试/测试接口”的SWCLK、SWD信号、PIO0口的16个通用I/O口、SCT计数器的4个输入和6个输出、3个USART模块的15个信号(每个USART有5个,共3个US
55、ART)、2个SPI的12个信号(SPI0有7个,SPI1有5个)、4个I2C的8个信号、ADC的5个输入信号、时钟单元的XTALIN和XTALOUT、RESET、CLKIN以及模拟比较器的4个输入和1个输出信号。从图2-2还可看到,LPC824微控制器片内集成了时钟发生器,用于管理IRC(内部RC振荡器)、WDOsc(看门狗振荡器)、BOD(掉电检测单元)和POR(上电复位单元)等,为系统各个单元提供工作时钟信号和控制信号。2.2 LPC824微控制器内部结构 根据图2-2,可以看出LPC824微控制器内部单元结构模块化强,除了“功耗管理单元”和“自唤醒定时器”始终带电工作外,其余单元都可以
56、工作在低功耗或掉电模式下,这使得LPC824微控制器功耗极低。由于LPC824微控制器集成了开关矩阵,使得LPC824微控制器在硬件电路设计上特别灵活,在产品升级换代时,只需要通过软件编程方式修改开关矩阵,而不需要重新设计核心电路板。鉴于LPC824微控制器编程灵活方便、处理速度快和控制能力强,有些专家称LPC824是具有划时代标志特征的微控制器芯片。2.2 LPC824微控制器内部结构 LPC824微控制器集成了32KB的Flash存储器和8KB的SRAM存储器,其存储器配置建立在图1-2的基础上,针对LPC824微控制器芯片的全部片上资源进行配置,如图2-3所示。图2-3LPC824存储器
57、配置2.3 LPC824存储器配置 由图2-3可知,LPC824微控制器的最大寻址能力为4GB,这是因为LPC824微控制器的地址总线宽度为32位。32KB的Flash空间位于0 x00 x7FFF处,用于存放程序代码和常量数据,其中0 x00 xC0处为异常与中断向量表,中断向量表的结构将在第2.4节介绍。8KB的SRAM空间位于0 x1000 00000 x1000 1FFF处,用于存放用户数据。图2-3表明,APB外设即高级外设总线管理的外设寄存器,均位于地址0 x4000 00004007 FFFF处,共分为32个块,每块大小为16KB,存储着一个APB外设的寄存器。例如,地址空间0
58、x4000 00000 x4000 4000处存储着加窗的看门狗定时器相关的寄存器。由图2-3可知,LPC824微控制器存储空间中有一个12KB大小的只读空间(BootROM),在系统编程(ISP)和自启动代码就在芯片出厂时被固化在该ROM中。图2-3中的“MTB”表示宏跟踪缓冲区,用于调试和仿真LPC824微控制器;“MRT”表示多速率定时器;“CRC”表示循环冗余校验码。2.3 LPC824存储器配置 LPC824微控制器内核为ARM Cortex-M0+,LPC824的中断控制器隶属于Cortex-M0+内核,称为紧耦合的嵌套向量中断控制器NVIC,是将图18中的中断号为n(n=0,1,
59、2,31)的32-个外部中断与LPC824的片上外设中断触发器相结合。LPC824的NVIC中断如表2-6所示。表2-6LPC824 NVIC中断2.4 LPC824 NVIC中断LPC824通过NVIC中断管理寄存器管理表2-6中所示的中断的开放、关闭、请求、清除请求状态和优先级配置,这些寄存器如表2-7所示,它们与表112中地址相同的寄存器是同一个寄存器,对应的含义也完全相同。表2-7LPC824中断管理寄存器表2-7中的寄存器IABR0在表112中没有对应的寄存器。IABR0为32位只读的中断活跃寄存器0,其第n位对应着中断号为n的IRQn中断的状态,如果读出该位为1,则表示其对应的中断
60、处于活跃态;读出0,表示该位对应的中断处于非活跃态。2.4 LPC824 NVIC中断LPC824上电复位时,异常与中断向量表占据的地址空间为0 x00 xC0,如图2-4所示。由图2-4可知,异常与中断向量表的起始地址为0 x0,结合图2-3可知,该部分空间位于LPC824的32KB Flash存储器中。可以通过设置VTOR寄存器(见1.4.2节),使得中断向量表的位置重定位到SRAM中,VTOR寄存器为ARMCortex-M0+系统控制寄存器,其地址为0 xE000 ED08,复位值为0 x0000 0000,VTOR寄存器保存了中断向量表的偏移地址,其第31:7位表示为TBLOFF,第6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人力资源历年考试试题及答案解析
- 2025年体概试题及答案
- 2025年中医针刺定位操作考试题及答案
- 2025年湘钢钳工考试题及答案
- 2025年行业面试题目及答案
- 增材制造设备操作员(高级工)考试复习题库含答案
- 2025年心理咨询师之心理咨询师二级技能考试题库附答案
- 2025年供水系统考试题及答案
- 2025年中药热奄包试题及答案
- 2025年宿舍评比测试题及答案解析
- 装修带家具家电合同范本
- 2025北京海淀高二下学期期末化学试卷含答案
- 备战2026年高考数学模拟卷(新高考II卷专用)(解析版)
- 中国十二碳二元酸行业调查报告
- 知识产权评估管理办法
- 2025区域型变电站智能巡视系统技术规范
- 2025至2030中国医疗废物管理解决方案行业发展趋势分析与未来投资战略咨询研究报告
- 水泥常规检测培训
- 全过程工程咨询服务规程
- 景区厕所卫生管理制度
- DZ/T 0275.4-2015岩矿鉴定技术规范第4部分:岩石薄片鉴定
评论
0/150
提交评论