嵌入式微处理器是嵌入式系统的核心器件,深入理解嵌入式微处理器的工作原理,组成结构、体系结构以及软件编程等方面,无论对嵌入式设计师考试的准备还是对嵌入式项目的开发都有一定的帮助。在目前白花盛放的嵌入式微处理器市场,各种各样大大小小的嵌入式微处理器就像菜市场里面的青菜一样。要对各种嵌入式微处理器都有深入的理解几乎是不可能的。但是万变不离其中,在总多的嵌入式微处理器中都有着共同的概念、原理与规律。我们要做的是分析嵌入式微处理器的基本结构、基本工作原理、体系结构、市场发展趋势、各种微处理器的特点与应用场合等等。我个人觉得,面对全国的考试,其考点应该是大家都应该去掌握的一些共有的基本知识,或者是大家都熟悉,流行程度甚广的一些微处理器的使用,而不是一些个性化的知识点或者偏门器件的使用。
该部分参考《教程》86~94 页,以 8051 为重点,彻底搞清楚 8 位单片机的工作原理,外设控制、存储分布、寻址方式以及典型应用。2007 年 11 月下午的第一道题目就考查了 8051 的定时器使用、外部时钟连接、实际应用的流程设计以及典型的寻址方式。这些考点几乎可以在《教程》上找到,例如外部时钟连接那个问题的答案就是《教程》89 页上面的原图。
该部分参考《教程》94~97 页。典型的微处理器可以参考 MSP430,找一本这方面的书看看关于 MSP430 的结构原理以及典型应用。
该部分参考《教程》97~112 页。32 位处理器采用 32 位的地址和数据总线,其地址空间达到了 232=4GB。目前主流的 32 位嵌入式处理器系统主要有 ARM 系列、MIPS 系列、PoewrPC 系列等。ARM 微处理器体系结构目前被公认为是嵌入式应用领域领先的 32 位嵌入式 RISC 处理器结构。按照目前的发展形式,ARM 几乎成了嵌入式应用的代名词。按照我个人的意见,作为嵌入式系统设计师考试,逐渐增加考查 ARM 体系结构与编程方面的题目是大势所趋。2006年没有一道关于 ARM 的题目,2007 年出了少量题目,可能在 2008 年会继续增加。在下午题方面,2006 年考查了X86 方面的应用、2007 年考查了 8051 方面的应用,这个可能是一个过度过程,以目前 ARM 在嵌入式领域的广泛应用和普及程度,下午题目考查 ARM 应用方面或者 32 位其他的微处理器方面的应用题目可能在不就将来的考试中就会出现。
A、ROM(只读存储器):一般用于存放固定的程序或数据表格等,数据在掉电后仍然会保留下来。
B、RAM(随机存储器):用于暂存程序和数据、中间计算结果,或用作堆栈用等,数据在掉电后就会丢失。
A、TTL 电平:正逻辑,5V 为逻辑正,0V 为逻辑负,例如单片机的输出。
B、RS232 电平:负逻辑,-12V 为逻辑正,+12V 为逻辑负,例如 PC 的输出。
注:因此在单片机和 PC 进行通讯的时候需要一个 MAX232 芯片进行电平转换。
A、堆栈特性:后进先出(LIFO)
B、堆栈指针:用于指示栈顶的位置(地址),当发生压栈或者出栈操作时,导致栈顶位置变化时,堆栈指针会随之变化。
C、堆栈操作:压栈操作(PUSH)和出栈操作(POP)。
D、堆栈类型:“向上生长”型堆栈,每次压栈时堆栈指针加 1;“向下生长”型堆栈,每次压栈堆栈时指针减 1。
E、堆栈应用:调用子程序、响应中断时,堆栈用于保护现场;还可以用作临时数据缓冲区来使用。
F、使用注意:堆栈溢出问题,压栈和出栈的匹配问题。
A、计时、定时或延时控制;
B、脉冲技术;
C、测量脉冲宽度或频率(捕获功能)
A、中断嵌套:当一个低级中断尚未执行完毕,又发生了一个高级优先级的中断,系统转而执行高级中断服务程序,
待处理完高级中断后再回过头来执行低级中断服务程序。
B、中断响应时间是指从发出中断请求到进入中断处理所用的时间;中断处理时间是指中断处理开始到中断处理结
束的时间。
C、中断响应过程:
a、保护现场:将当前地址、累加器 ACC、状态寄存器保存到堆栈中。
b、切换 PC 指针:根据不同的中断源所产生的中断,切换到相应的入口地址。
c、执行中断服务处理程序。
d、恢复现场:将保存在堆栈中的主程序地址、累加器 ACC、状态寄存器恢复。
e、中断返回:从中断处返回到主程序,继续执行。
D、中断入口地址:单片机为每个中断源分配了不同的中断入口地址,也称为中断向量。
A、复位发生时的动作:
a、PC 指针从起始位置开始执行(大多数单片机都时从 0x0000 处开始执行)。
b、I/O 端口设置成缺省状态(高阻态、或者输出低电平)。
c、部分专用控制寄存器 SFR 恢复到缺省状态。
d、普通 RAM 不变(如果时上电复位,则是随即数)。
B、两种不同的复位启动方式:
a、冷启动:也叫上电复位,指在断电状态下给系统加电,让系统开始正常运行。
b、热启动:在不断电的状态下,给单片机复位引进一个复位信号,让系统重新开始。
C、两种类型的复位电路:高电平复位和低电平复位。
D 注意事项:
a、 注意复位信号的电平状态及持续时间必须满足系统要求。
b、 注意避免复位信号抖动。
A、振荡周期:振荡源的振荡节拍。
B、机器周期:单片机完成一个基本操作需要的振荡周期(节拍)。
C、指令周期:执行一条指令需要几个机器周期。不同的指令需要的机器周期数不同。
A、T 模块:表示 16 位 Thumb,可以在兼顾性能的同时减少代码尺寸。
B、D 模块:表示 Debug,内核中放置了用于调试的结构,通常为一个边界扫描链 JTAG。
C、M 模块:表示 8 位乘法器。
D、I 模块:表示 EmbeddedICE Logic,用于实时断点观测及变量观测的逻辑电路部分。
A、用户模式(User):正常程序执行模式,用于应用程序。
D、快速中断模式(FIQ):快速中断处理,用于高速数据传输和通道处理。
C、外部中断模式(IRQ):用于通用的中断处理。
D、管理模式(SVE):供操作系统使用的一种保护模式。
E、数据访问中止模式(Abort):用于虚拟存储及存储保护。
F、未定义指令中止模式(Undefined):当未定义指令执行时进入该模式。
G、系统模式(System):用于运行特权级的操作系统任务。
除了用户模式之外的其他 6 种处理器模式称为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式切换,其中,除了系统模式外,其他的 5 种特权模式又称为异常模式。
处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下,这时,应用程序不能访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式切换。
当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理中进行处理器模式的切换。这种体系结构可以使操作系统控制整个系统的资源。
当应用程序发生异常中断时,处理器进入相应的异常模式。在每一种异常模式种都有一组寄存器,供相应的异常处理程序使用,这样就可以保证进入异常模式时,用户模式下的寄存器不被破坏。
系统模式并不是通过异常过程进入的,它和用户模式具有完全一样的寄存器,但是系统模式属于特权模式,可以访问所有的系统资源,也可以直接进行处理器模式切换,它主要供操作系统任务使用。
a、未备份寄存器 R0~R7:在所有的处理器模式下,未备份寄存器都是指向同一个物理寄存器。
b、备份寄存器 R8~R14: 对于 R8~R12 来说,每个寄存器对于 2 个不同的物理寄存器,它们每次所访问的物理寄存器都与当前的处理器运行模式有关。 对于 R13、R14 来说,每个寄存器对于 6 个不同的物理寄存器,其中一个是用户模式和系统模式共用。 R13 在 ARM 指令种常用作堆栈指针。由于处理器的每种运行模式都有自己独立的物理寄存器 R13,所有在用户应用程序的初始化部分,一般要初始化每种模式下的 R13,使其指向该运行模式的栈空间。 R14 又称为连接寄存器(LR),在 ARM 体系种具有下面两种特殊作用:在通过 BL 或 BLX 指令调用子程序时,存放当前子程序的返回地址;在异常中断发生时,存放异常模式将要返回的地址。
c、程序计数器 R15(PC):由于 ARM 采用了流水线机制,在三级流水线中,当正确读取了 PC 的值时,该值为当前指令地址值加 8 个字节。也就是说,PC 指向当前指令的下两条指令的地址。在 ARM 指令状态下,PC 的 0 和 1 位是 0,在 Thumb 指令状态下,PC 的 0 位是 0。
B、程序状态寄存器
a、ARM 体系结构包含 1 个当前程序状态寄存器(CPSR)和 5 个备份的程序状态寄存(SPSR),使用 MSR 和 MRS 指令来设置和读取这些寄存器。
b、当前程序状态寄存器 CPSR:保存当前处理器状态的信息,可以在任何处理器模式下被访问。
c、备份程序状态寄存器 SPSR:每一种异常处理器模式下都有一个专用的物理状态寄存器。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容,在异常中断程序退出时,可以用 SPSR 中保存的值来恢复 CPSR。
d、由于用户模式和系统模式不属于异常模式,它们没有 SPSR,当在这两种模式下访问 SPSR 时,结果是未知的。
A、 立即寻址:操作数本身就在指令中给出,只要取出指令也就取到了操作数。
ADD R0, R0, #1
B、 寄存器寻址:利用寄存器中的数值作为操作数。
ADD R0, R1, R2
C、 寄存器间接寻址:以寄存器中的值作为操作数地址,而操作数本身存放在存储器中。
ADD R0, R1, [R2]
LDR R0, [R1]
STR R0, [R1]
D、基址变址寻址:将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。
LDR R0, [R1, #4]
LDR R0, [R1, #4]!
LDR R0, [R1], #4
LDR R0, [R1, R2]!
E、 多寄存器寻址:一条指令可以完成多个寄存器值的传送。
LDMIA R0, {R1, R2, R3}
F、 相对寻址:以程序计数器 PC 的当前值作为基地址,指令中的地址标号作为偏移量,两者相加之后得到操作数的有效地址。
BL NEXT ;跳转到子程序 NEXT 处执行
…...
NEXT : MOV PC, LR ;从子程序返回
G、堆栈寻址:支持 4 种类型的堆栈工作方式:
a、 满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生长。
b、 满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生长。
c、 空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生长。
d、 空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生长。
A、大端模式:数据的高字节存储在低地址中,低字节存储在高地址中。
B、小端模式:数据的低字节存储在低地址中,高字节存储在高地址中。
不同的中断处于不同的处理模式,具有不同的优先级,而且每个中断都有固定的中断地址入口。当一个中断发生是,相应的 R14(LR)存储中断返回地址,SPSR 存储当前程序状态寄存器 CPSR 的值。
B、由于 ARM 内核支持流水线工作
LR 寄存器存储的地址可能是发生中断后面指令的地址,所以不同的中断处理完成后,必须将 LR 寄存器值经过处理后再写入 P15(PC)寄存器。
C、ARM 异常的具体含义:
a、复位:当处理器的复位电平有效时,产生复位异常,程序跳转到异常复位异常处理程序处执行。
b、未定义的指令:当 ARM 处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可以使用该异常机制进行软件仿真。
c、软件中断:该异常由执行 SWI 指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现操作系统调用功能。
d、指令预取中止:如果处理器预取指令的地址不存在或该地址不允许当前指令访问,存储器向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。
e、数据访问中止:如果处理器数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问中止异常。
f、外部中断请求:当 ARM 外部中断请求管脚有效,而且 CPSR 中的 I 位为 0 时,产生 IRQ 异常。系统的外设可以通过该异常请求中断服务。
g、快速中断请求:当 ARM 快速中断请求管脚有效,而且 CPSR 的 F 位为 0 时,产生 FIQ 异常。
D、ARM 处理器对异常中断的响应过程
a、将下一条指令的地址存入相应的连接寄存器 LR 中。
b、将 CPSR 复制到相应的 SPSR 中。
c、根据异常的类型,强制设置 CPSR 的运行模式位。
d、强制 PC 从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
E、ARM 处理器从异常中断处理程序中返回
a、恢复中断的程序的处理器状态,将 SPSR 复制到 CPSR 中。
b、若在进入异常处理时设置了中断禁止位,要在此清除。
c、将连接寄存器 LR 的值减去相应的偏移量后送到 PC。
F、复位异常中断处理程序不需要返回。
在复位异常中断程序开始整个用户程序的执行。