Cortex-M0

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1单片机教程(Cortex-M0处理器)第1章Cortex-M0的处理器和内核外设1.1系统接口1.2集成的可配置调试1.3Cortex-M0处理器的特性小结1.4Cortex-M0内核外设第2章Cortex-M0处理器2.1编程模型2.2存储模型2.3异常模型2.4故障处理2.5功耗管理第3章外设3.1关于ARMCortex-M03.2嵌套向量中断控制器3.3系统控制块3.4系统定时器,SysTick2第1章Cortex-M0的处理器和内核外设Cortex-M0处理器是一个入门级(entry-level)的32位ARMCortex处理器,设计用在更宽范围的嵌入式应用中。该处理器包含以下特性,给开发者提供了极大的便利:●结构简单,容易学习和编程;●功耗极低,运算效率高;●出色的代码密度;●确定、高性能的中断处理;●向上与Cortex-M处理器系列兼容图1.1Cortex-M0的具体实现Cortex-M0处理器基于一个高集成度、低功耗的32位处理器内核,采用一个3级流水线冯·诺伊曼结构(VonNeumannarchitecture)。通过简单、功能强大的指令集以及全面优化的设计(提供包括一个单周期乘法器在内的高端处理硬件),Cortex-M0处理器可实现极高的能效。Cortex-M0处理器采用ARMv6-M结构,基于16位的Thumb指令集,并包含Thumb-2技术。提供了一个现代32位结构所希望的出色性能,代码密度比其他8位和16位微控制器都要高。Cortex-M0处理器紧密集成了一个可配置的嵌套向量中断处理器(NVIC),提供业界领先的中断性能。NVIC具有以下功能:●包含一个不可屏蔽的中断(NMI)。NMI在LPC111x上不能实现;●提供零抖动中断选项;●提供4个中断优先级。处理器内核和NVIC的紧密结合使得中断服务程序(ISR)可以快速执行,极大地缩短了中断延迟。这是通过寄存器的硬件堆栈以及加载-乘和存储-乘操作的停止和重启来获得的。中断处理程序不需要任何汇编封装代码,不用消耗任何ISR代码。末尾连锁的优化还极大地降低了一个ISR切换到另一个ISR时的开销。为了优化低功耗设计,NVIC还与睡眠模式相结合,提供一个深度睡眠功能,使整个器件迅速掉电。31.1系统接口Cortex-M0处理器提供一个简单的系统级接口,使用AMBA技术来提供高速、低延迟的存储器访问。1.2集成的可配置调试Cortex-M0处理器执行一个完整的硬件调试方案,带有大量的硬件断点和观察点选项。通过一个非常适合微控制器和其他小型封装器件的2脚串行线调试(SWD)端口,提供了高系统透明度的处理器、存储器和外设执行。1.3Cortex-M0处理器的特性小结●高代码集成度,具有32位的性能;●工具和二进制代码与Cortex-M处理器系列向上兼容;●集成了极低功耗的睡眠模式;●高效的代码执行允许处理器时钟更低,或者延长睡眠模式的时间;●单周期的32位硬件乘法器;●零抖动的中断处理;●宽范围的调试功能。1.4Cortex-M0内核外设Cortex-M0内核外设有:NVIC——NVIC是一个嵌入式中断控制器,支持低延迟的中断处理。系统控制块——系统控制块(SCB)是到处理器的编程模型接口。它提供系统执行信息和系统控制,包括配置、控制和系统异常的报告。系统定时器——系统定时器,SysTick,是一个24位的递减定时器。可以将其用作一个实时操作系统(RTOS)的节拍定时器,或者用作一个简单的计数器。第2章Cortex-M0处理器2.1编程模型本节描述了Cortex-M0的编程模型。除了个别内核寄存器的描述之外,本节还包含操作模式和堆栈的相关信息。1处理器工作模式处理器工作模式有:Thread模式——用来执行应用程序。在处理器复位时,进入Thread模式。Handler模式——用于异常处理,处理器执行完所有异常程序后,返回到Thread模式。2堆栈处理器使用一个满递减堆栈。这就意味着堆栈指针指向堆栈存储器中的最后一个堆栈项。当处理器将一个新的项压入堆栈时,堆栈指针递减,然后将该项写入新的存储器单元。处理器执行两个堆栈,主堆栈和进程堆栈,两个堆栈有自己独立的堆栈指针副本,见“堆栈指针”小节。在线程模式下,CONTROL寄存器控制着处理器使用主堆栈还是进程堆栈,见“CONTROL寄存器”小节。在处理器模式下,处理器总是使用主堆栈。处理器操作的选择如下:表2.1处理器模式和堆栈使用的选择4处理器工作模式用于执行所用堆栈Thread模式应用程序主堆栈或进程堆栈Handler模式异常处理主堆栈3内核寄存器处理器内核寄存器如下:图2.1处理器内核寄存器组处理器内核寄存器有:表2.2内核寄存器组小结名称类型复位值描述R0-R12RW未知见通用寄存器组介绍MSPRW参考相关介绍见堆栈介绍PSPRW未知见堆栈指针介绍LRRW未知见链接寄存器介绍PCRW参考相关介绍见程序计数器介绍PSRRW未知见程序状态寄存器介绍APSRRW未知见应用程序状态寄存器介绍IPSRRO0x00000000见中断程序状态寄存器介绍EPSRRO未知见异常程序状态寄存器介绍PRIMASKRW0x00000000见优先级屏蔽寄存器介绍CONTROLRW0x00000000见控制寄存器介绍(1)通用寄存器R0-R12是供数据操作使用的32位通用寄存器。(2)堆栈指针堆栈指针(SP)是寄存器R13。在线程模式中,CONTROL寄存器的bit[1]5指示了堆栈指针的使用情况:0=主堆栈指针(MSP)。这是复位值。1=进程堆栈指针(PSP)。复位时,处理器将地址0x00000000的值加载到MSP中。(3)链接寄存器链接寄存器(LR)是寄存器R14。它保存子程序、函数调用和异常的返回信息。复位时,LR的值不可知。(4)程序计数器程序计数器(PC)是寄存器R15。它包含当前的程序地址。复位时,处理器将复位向量(地址:0x00000004)的值加载到PC。值的bit[0]复位时被加载到EPSR的T位,必须1。(5)程序状态寄存器程序状态寄存器(PSR)由下列3种寄存器组合而成:●应用程序状态寄存器(APSR)●中断程序状态寄存器(IPSR)●执行程序状态寄存器(EPSR)在32位的PSR中,这3个寄存器的位域分配互斥。PSR的位域分配如下:图2.2APSR、IPSR、EPSR寄存器的位分配这3个寄存器可以单独访问,也可以2个一组或3个一组进行访问,访问时,将寄存器名称作为MSR或MRS指令的一个变量。例如:1使用寄存器名称PSR,用MRS指令来读所有寄存器2使用寄存器名称APSR,用MSR指令来写APSRPSR的组合和属性如下所示:表2.3PSR寄存器组合寄存器类型组合PSRR/WAPSR、EPSR和IPSRIEPSRROEPSR和IPSRIAPSRR/WAPSR和IPSREAPSRR/WAPSR和EPSR应用程序状态寄存器:APSR包含执行完前面的指令后条件标志的当前状态。有关寄存器的属性请见表2.2。寄存器的位分配如下所示:6表2.4APSR的位分配位名称功能[31]N负值标志[30]Z零值标志[29]C进位或借位标志[28]V溢出标志[27:0]-保留中断程序状态寄存器:ISP包含当前中断服务程序(ISR)的异常编号。有关寄存器的属性请见表2.2。寄存器的位分配如下表2.5IPSR的位分配位名称功能[31:6]-保留[5:0]异常编号这是当前异常的编号:0=线程模式1=保留2=NMI3=HardFault4-10=保留11=SVCall12,13=保留14=PendSV15=SysTick16=IRQ0...47=IRQ3148-63=保留。.执行程序状态寄存器:EPSR包含Thumb状态位。有关EPSR属性请见表2.2。EPSR的位分配如下:表2.6EPSR的位分配位名称功能[31:25]-保留[24]TThumb状态位[23:0]-保留如果应用软件使用MRS指令直接读取EPSR将始终返回零。利用MSR指令来写EPSR的操作会被忽略。故障处理程序可以检查入栈的PSR的EPSR值来确定故障的原因。下面的操作可以清除T~0位:[1]指令BLX,BX和POP{PC}[2]异常返回时恢复被压入栈中的xPSR值[3]进入异常时向量值的bit[0]7在T位为0时尝试执行指令会导致HardFault或锁定故障。可中断-可重启的指令:可中断-可重启的指令有LDM和STM。如果在执行这两条中的其中一条指令的过程中出现中断,处理器就终止指令的执行。在处理完中断后,处理器再从头开始重新执行指令。(6)异常屏蔽寄存器异常屏蔽寄存器禁止处理器处理异常。当异常可能影响到实时任务或要求连续执行的代码序列时,异常就被禁能。可以使用MSR和MRS指令、或CPS指令改变PRIMASK的值来禁能或重新使能异常。优先级屏蔽寄存器:PRIMASK寄存器阻止优先级可配置的所有异常被激活。有关寄存器的属性请见表2.2。寄存器的位分配如下:表2.7PRIMASK寄存器的位分配位名称功能[31:1]-保留[0]PRIMASK0=无影响。1=阻止优先级可配置的所有异常被激活。(7)CONTROL寄存器CONTROL寄存器控制着处理器处于线程模式时所使用的堆栈。寄存器的属性请见表2.2。CONTROL寄存器的位分配如下:表2.8CONTROL寄存器的位分配位名称功能[31:2]-保留[1]有效堆栈指针定义当前的堆栈:0=MSP是当前的堆栈指针1=PSP是当前的堆栈指针在处理器模式中,这个位读出为零,写操作被忽略。[0]-保留处理器模式始终使用MSP,因此,在处理器模式下,处理器忽略对CONTROL寄存器的有效堆栈指针位执行的明确的写操作。异常进入和返回机制会将CONTROL寄存器更新。在一个OS环境中,推荐运行在线程模式中的线程使用进程堆栈,内核和异常处理器使用主堆栈。默认情况下,线程模式使用MSP。要将线程模式中使用的堆栈指针切换成PSP,只需要使用MSR指令将有效堆栈位设置为1,见本章“MRS”小节。备注:当更改堆栈指针时,软件必须在MSR指令后立刻使用一个ISB指令。这样来保证ISB之后的指令执行时使用新的堆栈指针。4异常中断Cortex-M0处理器支持中断和系统异常。处理器和嵌套向量中断控制器(NVIC)划分所有异常的优先级,并对所有异常进行处理。一个中断或异常会改变软件控制的正常流程。处理器使用处理器模式来处理除复位之外的所有异常。NVIC寄存器控制中断处理。5数据类型处理器:8[1]支持下列数据类型:—32位字—16位半字—8位字节[2]管理所有数据存储器访问都采用小端模式。指令存储器和专用外设总线(PPB)访问始终是小端模式。6Cortex微控制器软件接口标准ARM为编程Cortex-M0微控制器提供了Cortex微控制器软件接口标准(CMSIS)。CMSIS是器件驱动库的一个组成部分。CMSIS为Cortex-M0微控制器系统定义了:[1]一种通用的方法来:—访问外设寄存器—定义异常向量[2]内核外设寄存器的名称和内核异常向量的名称[3]一个RTOS内核的器件独立的接口CMSIS包含Cortex-M0处理器中内核外设的地址定义和数据结构。还包含有组成TCP/IP堆栈和Flash文件系统的中间件元件的可选接口。通过使能模板代码的重复使用以及将不同中间件厂商提供的符合CMSIS的软件组件组合起来,CMSIS大大简化了整个软件开发过程。软件厂商可以扩展CMSIS,使其包含各个厂商的外设定义以及这些外设的访问函数。本文档包含了CMSIS定义的寄存器名称,并对处理器内核和内核外设相关的CMSIS函数进行了简单描述。备注:本文档使用CMSIS定义的寄存器缩略名称。在某些情况下,这些名称与其它文档中可能用到的结构缩略名称不同。下面各节给出了有关CMSIS的更多信息:[1]本章“电源管理编程提示”小节;[2]本章“内部函数”小节;[3]本章“使用CMSIS访问和Cortex-M0NVIC寄存器”小节;[4]本章“NVIC编程提示”小节。2.2存储模型本节描

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功