嵌入式重点

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

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

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

资源描述

第一章IEEE对嵌入式系统的定义为:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(devicesusedtocontrol、monitor、orassisttheoperationofequipment、machineryorplants)这主要是从应用对象上加以定义,涵盖了软、硬件及辅助机械设备。国内普遍认同的嵌入式系统定义为:以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。嵌入式系统是“专用计算机应用系统”,它具有一般计算机组成的共性,也是由硬件和软件组成;嵌入式系统的硬件是以嵌入式处理器为核心,配置必要的外围接口部件。嵌入式系统的硬件是嵌入式系统软件环境运行的基础,它提供了嵌入式系统软件运行的物理平台和通信接口;嵌入式操作系统和嵌入式应用软件则是整个系统的控制核心,控制整个系统运行、提供人机交互的信息等。F嵌入式处理器可以分为三类:²嵌入式微处理器(Microprocessor)F嵌入式微处理器的基础是通用计算机中的CPU,是嵌入式系统的核心。在应用中,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点.²嵌入式微控制器MCU(MicrocontrollerUnit)²嵌入式DSP(DigitalSignalProcessor)第二章Cortex-M3和Cortex-M4属于真正的ARMv7-M架构,采用哈佛总线结构,具有高效的数字信号处理能力和低功耗、低成本和易于使用的优点。处理器内核:pARMv7-M构架:Thumb-2指令集(ISA)子集,包含所有基本的16位和32位Thumb-2指令#只有分组的SP堆栈指针#硬件除法指令,SDIV和UDIV#处理模式(Handlermode)和线程模式(Threadmode)#Thumb状态和调试状态Cortex-M3处理器内核是单片机的中央处理单元(CPU)。完整的基于Cortex-M3的MCU还需要很多其它组件。Cortex-M3处理器内核采用ARMv7-M架构,建立在一个高性能哈佛结构的三级流水线基础上,实现了Thumb-2指令集,既获得了传统32位代码的性能,又具有16位的高代码密度。其主要特性如下:p采用Thumb-2指令集架构(ISA)的子集p采用哈佛处理器架构p采用三级流水线+分支预测Cortex-M3处理器紧密结合一个可配置的嵌套向量中断控制器(NestedVectoredInterruptController,NVIC),具有低延迟的中断和异常处理性能。NVIC支持11个系统异常和240个优先级可动态配置的中断,每个中断的优先级有256个选择。除非特别说明,否则所有的NVIC寄存器都可采用字节、半字和字方式进行访问。不管处理器存储字节的顺序如何,所有NVIC寄存器和系统调试寄存器都是采用小端(LE)字节排列顺序,即低位字节存储在低地址。###采用哈佛总线体系结构的芯片内部程序空间和数据空间是分开的,这就允许同时取指和取操作数,由于取指令和存取数据分别经由不同的存储空间和不同的总线,使得各条指令可以重叠执行,实现流水线操作。三级流水线:正常操作过程中,在执行一条指令的同时对下一条(第二条)指令进行译码,并将第三条指令从存储器中取出。Cortex-M3内核采用三级流水线结构,每条指令的执行分取指、译码和执行三个阶段,可实现多条指令的并行执行,在不提高系统时钟频率的条件下减少每条指令的执行时间。nCortex-M3处理器支持两种工作模式:线程模式(Threadmode)和处理模式(Handlermode)。n在复位时处理器进入线程模式,异常返回时也会进入该模式。特权和用户(非特权代码能够在线程模式下运行。p出现异常时处理器进入处理模式,在处理模式中,所有代码都是特权访问的。nCortex-M3处理器有两种工作状态:pThumb状态:这是16位和32位半字对齐的Thumb和Thumb-2指令的正常执行状态。p调试状态:处理器停机调试时进入该状态。nCortex-M3处理器支持两种特权分级——特权级和用户级,代码可以是特权执行或非特权执行。非特权执行时对有些资源的访问受到限制或不允许访问。特权执行可以访问所有资源。n处理模式始终是特权访问,线程模式可以是特权或非特权访问。n线程模式在复位之后为特权访问,但可通过MSR指令清零CONTROL[0],将它配置为用户(非特权)访问。用户访问禁止:p部分指令的使用,例如设置FAULTMASK和PRIMASK的CPS指令。p对系统控制空间(SCS)的大部分寄存器的访问。n当线程模式从特权访问变为用户访问后,本身不能回到特权访问。只有处理操作能够改变线程模式的访问特权。处理模式始终是特权访问的。Cortex-M3下的操作模式和特权级别如图2-5所示。n在Cortex-M3运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特权级下执行。复位后,处理器默认进入线程模式,特权级访问。n在特权级下,程序可以访问所有范围的存储器(如果有MPU,还要在MPU规定的禁地之外),并且可以执行所有指令。n从用户级到特权级的唯一途径就是异常:如果在程序执行过程中触发了一个异常,处理器总是先切换入特权级,并且在异常服务例程执行完毕退出时,返回先前的状态,或者手工指定返回的状态。n操作系统的内核通常都在特权级下执行,所有没有被MPU禁掉的存储器都可以访问。在操作系统开启了一个用户程序后,通常都会让它在用户级下执行,从而使系统不会因某个程序的崩溃或恶意破坏而受损。nCortex-M3处理器内核拥有两个堆栈指针,然而它们属于分组寄存器,任一时刻只能使用其中的一个。当引用SP时,引用到的是当前正在使用的那一个,另一个必须用特殊的指令来访问(MRS,MSR指令)。n这两个堆栈指针分别是:p主堆栈指针(MSP):或写作SP_main。复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)p进程堆栈指针(PSP):或写作SP_process。由用户的应用程序代码使用(不处于异常服用例程中时)。n1、通用寄存器p通用寄存器r0-r12没有在结构上定义特殊的用法p寄存器r13、r14、r15具有以下特殊功能:n堆栈指针寄存器r13用作堆栈指针(SP)。由于SP忽略了写入位[1:0]的值,因此它自动与字,即4字节边界对齐。n处理模式始终使用SP_main,而线程模式可配置为SP_main或SP_process。n链接寄存器寄存器r14是子程序的链接寄存器(LR)。p在执行分支(branch)和链接(BL)指令或带有交换的分支和链接指令(BLX)时,LR用于接收来自PC的返回地址。pLR也用于异常返回。p其它任何时候都可以将r14看作一个通用寄存器。n程序计数器寄存器r15为程序计数器(PC),指向当前的程序地址。该寄存器的位0始终为0,因此,指令始终与字或半字边界对齐。如果修改它的值,就能改变程序的执行流。n2、程序状态寄存器(xPSR)p系统级的处理器状态可分为3类,因此有3个程序状态寄存器。对程序状态寄存器的访问使用MRS和MSR指令,在访问时可以把它们作为单独的寄存器,3个中的任两个组合,或3个组合。这3个寄存器为:n应用PSR(APSR)n中断PSR(IPSR)n执行PSR(EPSR)n3、中断屏蔽寄存器组p中断屏蔽寄存器组包括PRIMASK,FAULTMASK和BASEPRI三个寄存器,用于控制异常的使能和禁止。n4、控制寄存器(CONTROL)p控制寄存器有两个用途,其一用于定义特权级别,其二用于选择当前使用哪个堆栈指针。由两个比特来行使这两个职能。nCortex-M3的存储器系统与传统ARM架构的相比,有非常大的变化:pCortex-M3的存储器映射是预定义的,并且规定总线使用的存储区域。pCortex-M3的存储器系统支持位带(Bit-band)操作,实现了在特殊的存储器区域对单一比特的原子操作。pCortex-M3的存储器系统支持非对齐访问和互斥访问。pCortex-M3的存储器系统支持小端配置和大端配置。n在SRAM区的下部,有一个1MB的区间,被称为“位带区”。该位带区还有一个对应的32MB的“位带别名(alias)区”,容纳了8M个“位变量”(对比8051的只有128个位变量)。位带区对应的是最低的1MB地址范围,而位带别名区里面的每个字对应位带区的一个比特。位带操作只适用于数据访问,不适用于取指。通过位带的功能,可以把多个布尔型数据打包在单一的字中,却依然可以从位带别名区中,像访问普通内存一样地使用它们。n处理器存储器映射包括两个位带区域。它们分别为SRAM和外设存储区域中的最低的1MB。这些位带区域将存储器别名区的一个字映射为位带区的一个位。nCortex-M3存储器映射有2个32MB别名区,它们被映射为两个1MB的位带区。n对32MBSRAM别名区的访问映射为对1MBSRAM位带区的访问。n对32MB外设别名区的访问映射为对1MB外设位带区的访问。Cortex-M3处理器能够以小端格式或大端格式访问存储器中的数据字,而访问代码时始终使用小端格式。小端格式是ARM处理器默认的存储器格式。n2.9.1异常模型pCortex-M3在内核水平上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断。其中,编号为1-15的对应系统异常,大于等于16的则全是外部中断。除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。pCortex-M3处理器和嵌套向量中断控制器(NVIC)对所有异常按优先级进行排序并处理。所有异常都在处理模式中操作。出现异常时,自动将处理器状态保存到堆栈中,并在中断服务程序(ISR)结束时自动从堆栈中恢复。在状态保存的同时取出向量快速地进入中断。n优先级的数值越小,则优先级越高。Cortex-M3支持中断嵌套,使得高优先级异常会抢占低优先级异常。有3个系统异常:复位,NMI以及硬Fault,它们有固定的优先级,并且它们的优先级号是负数,从而高于所有其它异常,所有其它异常的优先级则都是可编程的,但不能被编程为负数。固态函数库固态函数库遵从以下命名规则:PPP表示任一外设缩写,例如:ADC。系统、源程序文件和头文件命名都以“stm32f10x_”作为开头,例如:stm32f10x_conf.h。常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。所有常量都由英文字母大写书写。寄存器作为常量处理。他们的命名都由英文字母大写书写。外设函数的命名以该外设的缩写加下划线为开头。每个单词的第一个字母都由英文字母大写书写,例如:SPI_SendData。在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。名为PPP_Init的函数,其功能是根据PPP_InitTypeDef中指定的参数,初始化外设PPP,例如TIM_Init.名为PPP_DeInit的函数,其功能为复位外设PPP的所有寄存器至缺省值,例如TIM_DeInit.名为PPP_StructInit的函数,其功能为通过设置PPP_InitTypeDef结构中的各种参数来定义外设的功能,例如:USART_StructInit名为PPP_Cmd的函数,其功能为使能或者失能外设PPP,例如:SPI_Cmd.名为PPP_ITConfig的函数,其功能为使能或者失能来自外设PPP某中断源,例如:RCC_ITConfig.名为PPP_DMAConfig的函数,其功能为使能或者失能外设PPP的DMA接口,例如:TIM1_DMAConfig.用以配置外设功能的函数,总是以字符串“Config”结尾,例如GPIO_PinRemapConfig.名为PPP_GetFlagStatus的函数,其功能为检查外设PPP某标志位被设置与否,例如:I2C_GetFlagStatus.名为PPP_ClearFlag的函数,其功能为清除外设PPP标志位,例如:I2C_ClearFlag.名为PPP_Ge

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

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

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

×
保存成功