《嵌入式系统习题部份汇总解读11734.pdf》由会员分享,可在线阅读,更多相关《嵌入式系统习题部份汇总解读11734.pdf(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式系统复习题集 一、基础知识 1、什么是代码的临界区?答:代码的监界区是指处理时不可分割的代码,运行这些代码不允许被打断。一旦这部分代码开始执行,则不允许任何中断打入。中断不调用任何临界区的代码或不访问任何临界区使用的共享资源时,这个中断是可能可以执行。为确保临界区代码的执行,在进入临界区之前要关中断,而临界区代码执行完成以后要立即开中断。2、什么是嵌入式系统?答:嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积及功耗严格要求的专用计算机系统,具有完成复杂功能的硬件和软件且紧密耦合在一起的计算机系统。3、什么是嵌入式操作系统?为何要使用嵌
2、入式操作系统?答:运用在嵌入式系统上的实时操作系统,具有事件驱动和任务(进程)调度功能,且在有限时隙内能完成事件的响应和任务(进程)的切换,能可靠、实时、灵活地管理嵌入式系统上的各种资源和任务。使用嵌入式操作系统,能方便实时应用软件的开发和有机地整合,能有效地管理和协调各项工作,因此是开发和运行非常重要的环境。4、ARM 状态与 Thumb 状态的互换以什么条件来判断?似举出状态从 ARM 到 Thumb 或从Thumb 到 ARM 切换的例子。答:其互换条件是执行 BX 指令时,判断的最低一位 b0是否为 0 或为1 来确定的,当 b0为 0 时,则执行的程序是 ARM 状态的 32 位指令
3、程序,当 b0为 1 时,则执行的程序是 Thumb 状态的 16 位指令程序。如下例:;从 ARM 状态转变为 Thumb 状态 LDR R0,Lable+1 BX R0;从 Thumb 状态转变为 ARM 状态 LDR R0,Lable BX R0 5、ARM 体系结构支持多少种处理器模式,分别是什么?答:ARM 体系结构支持 7 种处理器模式,分别是用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。6、子程序利用 R14(LR),获得返回到主程序的下条指令,通常有直接输入法和堆栈方法,试填写下面两种方法的代码:MOV PC,LR 或 STMFD SP!,,LR L
4、DMFD SP!,PC 如果是异常处理后的返回,如 IRQ 中断返回又如何改写代码?7、在修复产生数据中止的原因后,不管处于哪种处理器操作状态,处理程序都必须执行返回指令:SUBS PC R14_abt,#8 ;而预取中止时为:SUBS PC R14_abt,#4 试解释减 8 原因?而在预取中止中为什么减 4?答:由于 ARM 为三级流水,执行段相对取指令段差为 8,产生数据中止是在执行段结束点进入,此时 PC 值为数据中止指令地址+12,即保存当前 PC 到 R14_abt 为数据中止指令地址+12,因此在修复产生数据中止的原因后,返回地址应为数据中止指令地址下一条指令,处理程序都必须执行
5、返回指令:SUBS PC R14_abt,#8,才能实现其目的。而在预取中止中时,出现中止异常是在执行段点,此时保存到 R14_abt 值为预取中止指令地址+8,因此要恢复到中止指令地址必为当前保存的 R14_abt 值减 4,即执行 SUBS PC R14_abt,#4 操作,就可恢复到预取中止指令的下一条指令继续执行。8、什么是小端存储?什么是大端存储?答:小端存储就是其存储格式为保存的字最低地址的字节看作是最低位字节,最高地址字节被看作是最高位字节。因此,存储器系统字节 0 连接到数据线 7-0。大端存储就是其存储格式为将最高位字节保存在最低地址字节,最低位字节保存在最高地址字节。因此存
6、储器系统字节 0 连接到数据线 31-24。9、ARM7TDMI 中 T、D、M、I 的含义是什么?答:T 表示具有高密度 16 位的 Thumb 指令机扩展功能;D 表示具有支持片上调试功能;M表示具有 64 位乘法指令;I 表示增加了 EmbededICE 观察点硬件。10、ARM7TDMI 采用几级流水线?使用何种存储器编址方式?答:ARM7TDMI 采用三级流水段,分别为取指段、译码段和执行段。使用字节编址方式。11、ARM 处理器模式和 ARM 处理器状态有何区别?答:ARM 处理器模式是指用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。每种模式都表明一种程
7、序使用内部寄存器和一些片内外的硬件设备权利。而 ARM 处理器状态是指 Thumb 状态和 ARM 状态,即程序指令的执行译码按 16 位 Thumb指令集还是按 32 位 ARM 指令集译码执行。12、分别列举 ARM 的处理器模式和状态。答:ARM 处理器模式分别是用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。ARM 处理器状态是指 16 位 Thumb 指令集运行的 Thumb 状态和 32 位ARM 指令集运行的 ARM 状态。13、PC 和 LR 分别使用哪个寄存器?答:PC 使用 R15;LR 使用 R14。14、R13 寄存器的通用功能是什么?答:R1
8、3 寄存器在 ARM 状态时,可用作通用寄存器功能,但通常为堆栈指针 SP,但在 Thumb状态时,其压栈 PUSH 和弹栈 POP 指令都要用到 R13(SP)。15、CPSR 寄存器中哪些位用来定义处理器状态?答:在 CPSR 寄存器中 b5 位 T 定义处理器状态,T=0 为 ARM 状态,T=1 为 Thumb 状态。16、ARM 和 Thumb 指令的边界对齐有何不同?答:ARM 指令长度为 32 位,其边界对齐存取地址位都是按 b1:0=00 方式进行,而 Thumb指令长度为 16 位,其边界对齐存取地址位都是按 b0=0 方式进行。17、描述一下如何禁止 IRQ 和 FIQ 的
9、中断?答:对 CPSR 中的 b7(I 位)和 b6(F 位)标志位置位时,可分别来禁止 IRQ 和 FIQ 中断。18、定义 R0=0 x12345678,假设使用存储指令将 R0 的值存放在 0 x4000 单元中。如果存储器格式为大端格式,请写出在执行加载指令将存储器 0 x4000 单元的内容取出存放到 R2寄存器操作后得 R2 的值;如果存储器格式改为小端格式,所得的 R2 值又为多少?低地址 0 x4000 单元的字节内容分别是多少?答:按大端格式和小端格式存储,从存储器中读出的值是不变的,R2=0 x12345678。按大端格式从 0 x4000 单元读出的值为 0 x12,按小
10、端格式从 0 x4000 单元读出的值为 0 x78。19、请描述进入内核时异常操作步骤?答:1)在 LR 中保存下一条指令的地址;2)将 CPSR 复制到适当的 SPSR;3)根据异常将 CPSR 模式强制设为某一值;4)强制 PC 从相关的异常处取指。5)异常结束时,异常处理程序必须将 LR 中的值减去偏移量后移入 PC。6)将 SPSR 的值复制回 CPSR。7)清零在入口置位的中断禁止标志。20、请描述一下 ARM7TDMI 产生异常的条件分别是什么?各种异常会使处理器进入哪种模式?进入异常时内核有何操作?各种异常的返回指令又是什么?答:ARM7TDMI 产生异常:异常条件 模式 返回
11、指令 快速中断请求 快中断模式 SUBS PC,R14_fiq,#4 中断请求 中断模式 SUBS PC,R14_irq,#4 预取中止请求 中止模式 SUBS PC,R14_abt,#4 数据中止请求 中止模式 SUBS PC,R14_abt,#8 未定义指令中断请求 未定义指令模式 MOVS PC,R14_und 软件中断请求 管理模式 MOVS PC,R14_svc 进入内核时异常操作是:1)将 LR 中保存下一条指令的地址;2)将 CPSR 复制到适当的 SPSR;3)根据异常将 CPSR 模式强制设为某一值;4)强制 PC 从相关的异常处取指。5)异常结束时,异常处理程序必须将 LR
12、 中的值减去偏移量后移入 PC。6)将 SPSR 的值复制回 CPSR。7)清零在入口置位的中断禁止标志。21、简单描述一下 ARM7 的三级流水线,并说明其对程序设计的影响。答:ARM7 的三级流水分为取指段、分析段和执行段。对程序设计的影响:提高指令执行的速度,并使处理和存储系统连续操作。ARM Thumb PC PC 取指 PC-4 PC-2 译码 PC-8 PC-4 执行 由此看出,它对子程序调用返回、异常恢复返回,LR 值需减一个常数值作为返回地址。22、ARM7TDMI(-S)有几种寻址方式?LDR R1,R0,#0 x08属于哪种寻址方式?答:有 8 种,分别是:寄存器寻址、立即
13、寻址、寄存器移位寻址、寄存器间接寻址、基址寻址、(多寄存器寻址、块拷贝寻址)、堆栈寻址、相对寻址。其中:LDR R1,R0,#0 x08属于基址寻址。23、ARM 指令的条件码有多少个?默认条件码是什么?答:ARM 指令的条件码有 16 个,默认条件码是:AL 编码为 1110 即无条件执行。24、ARM 指令中第二个操作数有哪几种形式?列举 5 个 8 位图立即数。答:ARM 指令中第 2 个操作数有 3 种形式:1)#immed_8r 常数表达式;2)Rm 寄存器方式;3)Rm,shift 寄存器移位方式。例如:0 x3FC、0、0 xF0000000、200、0 xF0000001。25
14、、将 ARM 指令中,使用第 2 个操作数时,第 2 操作数的形式可为常数表达式#immed_8r,这种常数的合理表达方式是什么?答:这种常数须对应 8 位位图数据的循环移位偶数位得到的任何 32 位数据。26、将 ARM 指令中,使用第 2 个操作数时,第 2 操作数的形式可为常数表达式#immed_8r,请说明下面常数哪些合理,哪些非法?0 x3FC,0 x1F,0 x1FE,0,0 xF0000000,511,0 xFFFF,0 x1010,0 xF0000010,200,0 xF0000001,0 x12800000,0 x4000003B,0 x0016C000 答:合法常量:0 x
15、3FC/0/0 xF0000000/200/0 xF0000001/0 x1F,0 x12800000,0 x4000003B,0 x0016C000;非法常量:0 x1FE/511/0 xFFFF/0 x1010/0 xF0000010。27、将比较两个值大小,并进行相应加 1 处理,C 代码为:if(ab)a+;else b+;写出对应的 ARM 指令程序(其中设 R0 为 a,R1 为 b)?答:CMP R0,R1 ADDHI R0,R0,#1 ;若 R0R1,则 R0=R0+1 ADDLS R1,R1,#1 ;若 R0R1,则 R1=R1+1 28、将 C 代码:if(a!=10)&(
16、b!=20)a=a+b 转化为 ARM 指令程序?答:CMP R0,#10 ;比较 R0 是否为 10 CMPNE R1,#20 ;若 R0 不为 10,则比较 R1 是否为 20 CMPNE R0,R0,R1 ;若 R0 不为 10 且 R1 不为 20,指令执行,R0=R0+R1 29、LDR/STR 指令的偏移形式有哪 4 种?LDRB 和 LDRSB 有何区别?答:LDR/STR 指令的偏移形式有:1)零偏移;2)前索引偏移;3)程序相对偏移;4)后索引偏移。LDRB 仅为无符号字节数据装载,其装载后的高 24 位为 0,而 LDRSB 为有符号字节数据装载,高 24 位为符号位的扩展
17、。30、请指出 MOV 指令与 LDR 加载指令的区别及用途。答:MOV 指令是数据处理过程中的操作,可以传递立即数和寄存器到另一个寄存器的操作,而 LDR 加载指令用于将存储器单元数据装载到寄存器的操作。31、CMP 指令的操作是什么?写一个程序,判断 R1 的值是否大于 0 x30,是则将 R1 减去 0 x30。答:CMP 指令操作是比较操作;判断 R1 的值是否大于 0 x30,是则将 R1 减去 0 x30 程序如下:CMP R1,#0 x30 SUBGT R1,R1,#0 x30 Or CMP R1,#0 x30 SUBHI R1,R1,#0 x30 32、调用子程序是用 B 还是
18、用 BL 指令?请写出返回子程序的指令?答:调用子程序是用 BL 指令。返回子程序的指令:BL lable MOV PC,LR 33、LDR 伪指令用途?其指令格式与 LDR 装载指令的差别?答:LDR 伪指令用于加载 32 位的立即数或一个地址值到指定寄存器,映射真正指令类型由编译程序决定;LDR 伪指令指令格式为 LDR Rn,=expr,LDR 加载指令为 LDR Rn,地址值。34、ARM 状态与 Thumb 状态的切换指令是什么?请举例说明。答:ARM 状态与 Thumb 状态的切换指令是 BX Rm。例如:ARM_CODE ADR R0,THUMB_CODE+1 BX R0 COD
19、E 16 THUMB_CODE MOV R0,#10 MOV R1,#20 ADD R0,R1 B THUM_CODE END 35、Thumb 状态与 ARM 状态的寄存器有区别吗?Thumb 指令对哪些寄存器访问受到一定限制?答:Thumb 状态与 ARM 状态的寄存器本身并无区别,都是 32 位寄存器。但 Thumb 指令仅对 R8-R15 受到一定限。36、Thumb 指令集的堆栈入栈、出栈指令是哪两条?答:压栈指令:PUSH reglist,LR;弹栈指令:POP reglist,PC 37、Thumb 指令集的 BL 指令转移范围为何能达到4MB?其指令编码是怎样的?答:Thumb
20、 指令集的 BL 采用 2 条这样的指令组合成 22 位半字偏移(符号扩展为 32 位),使指令转移范围为4MB。其指令编码为:1111+H+offset11 共 16 位。其中 H 为 1 位,offset11 为了 11 位。38、在中断向量中转移指令为什么没有用 B 指令?而是用什么指令实现跳转的?答:在中断向量中转移指令没有用 B 指令是由于 B 指令转移范围仅在32MB 内,因此满足不了中断向量的全地址范围内的转移。实际中断向量中转移指令是用 LDR PC,addr,和文字池(DCD 伪指令)来实现的,它可以实现 4GB 范围内跳转。39、LPC2114 可使用的外部晶振频率范围是多
21、少(使用/不使用 PLL 功能时)?答:使用 PLL 功能时,外部晶振频率范围为 10-25MHZ;不使用 PLL 功能时为 1-30MHZ。在复位时。40、描述一下 LPC2210 的 P0.14、P1.20、P1.26、BOOT1 和 BOOT0 引脚在芯片复位时分别有什么作用?并简单说明 LPC2000 系列 ARM7 微控制器的复位处理流程。答:LPC2210 的 P0.14 决定外部复位后是否进入 ISP 状态,如为低电平则进入 ISP 状态。P1.20 决定复位后是否使用 P1.16-P1.25 作为跟踪端口进行跟踪同步。P1.26 决定复位后是否使用 P1.31-P1.26 作为
22、调试端口。BOOT1 和 BOOT0 引脚在芯片复位时决定复位后存储器的来源以及存储器的宽度。LPC2000 系列 ARM7 微控制器的复位处理流程:流程略(见书 P119、120)。41、LPC2000 系列 ARM7 微控制器对向量表有何要求(向量表中的保留字)?答:LPC2000 系列 ARM7 微控制器要求:在向量表中所有 32 个 32 位指令二进制编码的向量按有符合数据累加之和为 0,这时向量表才有效,且芯片复位后,能脱机独立运行。因此向量表中的保留字是配置数据累加和为 0 而留着的。42、如何启动 LPC2000 系列 ARM7 微控制器的 ISP 功能?相关电路应该如何设计?答
23、:微控制器在复位后可能有多种初始状态,决定于引脚状态和只读存储器的数据。当有外部复位信号Reset,P0.14 低电平时,进入 ISP 状态,当 P0.14 为高电平时,同时 BOOT0 和BOOT1 为高电平时,进入 ISP 状态。相关电路应该为:P2.26 P0.14 RST P2.27 P2.26 P0.14 RST+3.3V+3.3V P2.27 43、LPC2000 系列 ARM7 微控制器片内 Flash 是多少位宽度的接口?它是通过哪个功能模块来提高 Flash 的访问速度?答:LPC2000 系列 ARM7 微控制器片内 Flash 是 128 位宽度的接口,是通过数据缓冲模块
24、、预取缓冲模块、分支跟踪缓存模块、两 Flash 存储模块来提高 Flash 的访问速度。44、LPC2210 的 BANK0 存储块使用 32 位总线,访问 BANK0 时,地址线 A1、A0 是否有效?EMC 模块中的 BLS0BLS3 具有什么功能?答:如果存储器组配置成 32 位宽度,地址线 A0 和 A1 无用,这是由于地址位的增减与存储器数据增减同步,此时 A0 和 A1 可作为 GPIO 使用(由 PINSEL2 设置)。EMC 模块中的BLS0BLS3 具有字节定位的选择信号功能,当 BLS0 为低时,存取定位到低 8 位字节上,当 BLS1 为低时,存取定位次到低 8 位字节
25、上,当 BLS2 为低时,存取定位到次高字节,当BLS3 为低时,存取定位到高位字节上。45、如果存储器组配置寄存器中 RBLE 位置 1,表示按字节区分存储器组,现有程序:LDR R0,=0X80000001 MOV R1,0X55 STR R1,R0 请问执行 STR 指令后,存储器地址线上的地址应为 0X80000000,数据线的前 16 位数据中,低 8 位为 无效 ,高 8 位为 0X55 。EMC 模块中的引脚线 BLS0 和 BLS1 电平分别为 高电平 和 低电平 。(填高低电平)46、在 startup.s 启动代码中,设置异常向量表时,IRQ 入口处为什么放置 LDR PC
26、,PC,#-0 x0ff0指令而非 LDR PC,IRQ_Addr。答:这是由于 LDR PC,IRQ_Addr 指令不能提供灵活的转移地址,在处理时就要耗费大量的时间解决 IRQ 转移分类问题。而 LDR PC,PC,#-0ff0指令转移地址来源于完部的VICVectAddr 寄存器保存的地址值。不同的中断异常,其 VICVectAddr 的值不同,可通过初始配置,节省了软件的转移选择开销。47、在 startup.s 启动代码中,设置异常向量表时,IRQ 入口处放置 LDR PC,PC,#-0 x0ff0指令中 PC-0 x0FF0 地址单元是指向 VICVectAddr 寄存器的地址。4
27、8、BOOT0 和 BOOT1 与 BCFG029:28的关系和区别是什么?答:Bank0 用于引导程序运行,BCFG029:28的复位值与 BOOT0 和 BOOT1 设定有关。BOOT0 和 BOOT1 与 BCFG029:28的关系:Bank 复位时 BOOT1:0的状态 BCFG29:28 存储器宽度 0 LL 00 8 位 0 LH 01 16 位 0 HL 10 32 位 0 HH 10 32 位 1 xx 10 32 位 2 xx 01 16 位 3 xx 00 8 位 而对 Bank1、Bank2 和 Bank3 而言,BCFG29:28决定存储器宽度,与 BOOT1:0设定无
28、关。对 Bank0 而言,BCFG29:28的复位值由 BOOT1:0设定决定,且存储器宽度也由BOOT1:0决定。49、请问引脚连接模块选择寄存器有哪些?请举一个例子说明选择寄存器的功能?答:引脚连接模块选择寄存器有 PINSEL0、PINSEL1 和 PINSEL2。如设定:PINSEL0&=0 x00000001;则选择 P0.0 脚,功能为 TxD(UART0)。50、启动代码中总线引脚设置为:ResetInit LDR R0,=PINSEL2 IF :DEF:EN_CRP LDR R1,=0 x0f814910 ELSE LDR R1,=0 x0f814914 ENDIF STR R
29、1,R0 分析每条代码的含义,并说明 PINSEL2 配置 0 x0f814910 和配置 0 x0f814914 的区别?答:程序清单中,当预定义有 EN_CRP 宏时,将会编译程序清单 LDR R1,=0 x0f814910 语句,并将 PINSEL2 寄存器设置为 0 x0f814910,否则编译 LDR R1,=0 x0f814914 语句,并将PINSEL2 寄存器设置为 0 x0f814914。区别:前一种执行禁止使用 JTAG 口调试,起到加密作用。后一种使用 JTAG 口调试。51、LPC2000 系列 ARM7 微控制器具有引脚功能复用特性,那么如何设置某个引脚为指定功能?答
30、:例如通过设置 PINSEL01:0=00 时,引脚为 GPIO 功能;设置为 01 时,引脚为 UART0的 TxD 功能。设置为 10 时,引脚为 PWM1 功能脚。52、设置引脚为 GPIO 功能时,如何控制某个引脚单独输入/输出?当需要知道某个引脚当前的输出状态时,是读取 IOPIN 寄存器还是读取 IOSET 寄存器?答:设置引脚为 GPIO 功能时,控制某个引脚单独输入/输出是用 IODIR 方向控制寄存器控制,寄存器中每位对应控制着 I/O 位,如 IODIR0对应 PX.0 脚,IODIR31对应 PX.31脚,写入 1时对应引脚作为输出功能,写入 0 时作为输入功能。当需要知
31、道某个引脚当前的输出状态时,是读取 IOPIN 寄存器。53、P0.2 和 P0.3 口是 I2C 接口,当设置它们为 GPIO 时,是否需要外接上拉电阻才能输出高电平?答:需要外接上拉电阻 1-10K,这是因此 I2C 接口两根线都开漏输出。54、使用 SPI 主模式时,SSEL 引脚是否可以作为 GPIO?若不能,SSEL 引脚应如何处理?答:使用 SPI 主模式时,SSEL 引脚不可以作为 GPIO,对 SSEL 引脚的处理,使用 SPI 主模式时,必须选择相应的引脚用作 SSEL 功能并使其保持高电平。55、LPC2114 的两个 UART 是符合什么标准?哪一个 UART 可用 IS
32、P 通信?哪一个UART 具有 MODEM 接口?答:必须符合 16C550 工业标准;UART0 可用 ISP 通信,UART1 具有 MODEM 接口功能。56、LPC2114 具有几个 32 位定时器?PWM 定时器是否可以作通用定时器使用?答:LPC2114 具有 2 个 32 位定时器,定时器 0 和定时器 1,PWM 定时器是专用定时器,不可作通用定时器使用。57、LPC2000 系列 ARM7 微控制器具有哪两种低耗模式?如何降低系统的功耗?答:LPC2000 系列 ARM7 微控制器具空闲模式和掉电模式的低耗模式。在空闲模式下,处理器、存储器系统和相关控制器以及内部总线不再消耗
33、功率,但外设继续保持并可产生中断使处理器恢复运行。在掉电模式下,振荡器关闭,芯片没有任何内部时钟,处理器状态和寄存器、外设寄存器以及内部 SRAM 值在掉电模式下被保持。芯片的逻辑电平保持静态。复位或特定的不需要时钟仍能工作的中断可终止掉模式,并使芯片恢复正常运行。58、有符号和无符号加法 下面给出 A 和 B 的值,可先手动计算 A+B,并预测 N、Z、V 和 C 标志位的值。其中(A,B)值分别为(0 xFFFF000F,0 x0000FFF1)或(0 x7FFFFFFF,0 x02345678)或(67654321、23110000),将三组用分别用 LDR 伪指令向寄存器(R0,R1)
34、附值。其程序如下:START LDR R0,=A LDR R1,=B LOOP BL ADD_SUB B LOOP ADD_SUB ADDS R0,R0,R1 MOV PC,LR END 试判断如果 A 和 B 为有符号数时,计算结果和标志位的状态?如果为无符号数时,计算结果和标志的状态?答:0 xFFFF000F 0 x7FFFFFFF 67654321 A+0 x0000FFF1 0 x02345678 23110000 B 结果:0 x100000000 0 x82345677 90764321 N=0;Z=1;V=0;C=1 N=1;Z=0;V=1;C=0 N=;Z=0;V=;C=0
35、59、把下面的 C 代码转换成汇编代码。数组 a 和 b 分别存放在以 0 x4000 和 0 x5000 为起始地址的存储区内,类型为 long(即 32 位)。For(I=0;I8;I+)AI=b7-I;答:LDR R0,=0 x3FFC LDR R1,=0 x5028 MOV R2,0 x0008 LOOP LDR R3,R1,#-4 STR R3,R0,#4 SUBS R2,R2,#1 BPL LOOP 60、计算一个数 n 的阶乘,即 n!=n*(n-1)*(n-2)(1)。FACTORIAL MOV R6,#10 MOV R4,R6 LOOP SUBS R6,R6,#1 MULNE
36、 R4,R4,R6 BNE LOOP 61、假设有一个基于 LPC2114 的系统,所使用的晶振为 11.0592MHz 石英晶振。请计算出最大的系统时钟(cclk)频率为多少 MHz?此时 PLL 的 M 值和 P 值各为多少?请列出计算公式,并编写设置 PLL 的程序段。解:由公式:Fcclk=M*Fosc,要使 Fcclk 最大,Fosc 为 11.0592MHz,必 M 为最大时满足条件,因 LPC2114 的 Fcclk 最大值为 60MHZ,而 60/11.0592 5.4 Mmax 仅能设置为 5 当前条件下的最大的系统时种 Fcclk=5*11.0592=55.296MHZ,此
37、时 M 值为 5,写入 MSEL 的值为 4;又由公式:Fcco=Fosc*M*2*P;而 Fcco 在 156-320MHZ 内,因此:156/(11.0592*5*2)1.4 P320/(11.0592*5*2)2.89 故:P 取 2。PSEL=1 设置 PLL 的程序段:PLLCON=1 PLLCFG=60/Fosc-1 PLLCFG=(PLLCFG&0 x1F)|(320/(11.0592*5*2)-1)5)PLLFEED=0 xaa;PLLFEED=0 x55;62、存储器重映射:(1)LPC2210 具有(D )种存储映射模式。A 3 ;B 5 ;C 1 ;D 4 ;63、当程序
38、已固化到片内 Flash,向量表保存在 0 x00000000 起始处,则 MAP1:0的值应该为(B )。A 00 ;B 01 ;C 10;D 11 ;64、LPC2000 系列 ARM7 微控制器存储器重映射的目标起始地址为(0 x00000000),共有(16 )个字。A 0 x00000000,8 B 0 x40000000,8 C 0 x00000000,16 D 0 x7FFFE000,8 65、外部中断唤醒掉电设计:以下代码是初始化部中断 0,用它来唤醒掉电的 LPC2114,请填空。PINSEL0=0 x00000000;PINSEL1=(PINSEL1&0 xFFFFFFFC
39、)|0 x00000001;/设置 I/O 口连接,P0.16 设置为 EINT0 EXTMODE =EXTMODE&0 xFE ;/设置 EINT0 为电平触发模式 EXTPOLAR =EXTPOLAR&0 xFE ;/设置 EINT0 为低电平触发 EXTWAKE =EXTWAKE|0 x01;/允许外部中断 0 唤醒掉电的 CPU EXTINT =0 x0F;/清除外部中断标志。66、使用定时器时脉宽测量:脉冲从 P0.0 口输入,程序等待 P0.0 口变为低电平后启动定时器测量,当 P0.0 口变为高电平时,停止定时器,然后从 T0TC 寄存器读取定时计数值。编写程序代码?答:TOPR
40、=0;while(IO0PIN&0 x01)!=0);TOTCR=0 x01;While(IO0PIN&0 x01)=0);TOTCR=0 x00;Time=TOTC;67、U0RBR寄存器和U0THR寄存器的地址是完全一样的,是不是说明接收寄存器和发送寄存器是同一物理寄存器?它们是怎样区分的?答:虽然 U0RBR 寄存器和 U0THR 寄存器的地址是完全一样,但接收寄存器和发送寄存器不是同一物理寄器。它们是通过读写信号线来区分的,当为 WE 操作时,选择 U0THR 寄存器;当为 RD 操作时,选择 U0RBR 寄存器。68、改错:ARM 状态与 Thumb 状态的切换是要影响处理器的模式或
41、寄存器的内容的。(X )69、特权模式是哪些模式?为什么叫特权模式?答:特权模式除了用户模式外,其它模式均为特权模式,即:系统模式、快中断模式、中断模式、管理模式、中止模式、未定义模式。之所以称为特权模式是因为 ARM 内部寄存器和一些片内外设在硬件设计上只允许这些模式访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。70、异常模式是哪些模式?答:异常模式由快中断模式、中断模式、管理模式、中止模式、未定义模式。71、判错:进入异常模式可以通过程序切换进入,也可以由特定的异常进入。(V)72、在 ARM7TDMI 处理器内部有 37 个用户可见的寄存器,这些寄存器分
42、成两大类:一类为通用 32 位寄存器,有 31 个,另一类为状态寄存器,有 6 个。73、未分组的寄存器有 R0-R7 共 8 个。在任何模式下,这些寄存器都对应于相同的 32位物理寄存器。74、寄存器 R8R12 有两个分组的物理寄存器。一个用于除 FIQ 模式之外的所有寄存器模式,另一个用于 FIQ 模式。这样在发生 FIQ 中断后,可以加速 FIQ 的处理速度。75、当使用 STR 或 STM 指令保存 R15 时,保存值与 R15 值是不一致的,为什么?答:这是由于 R15 是当前指令的地址,而 ARM 为多级流指令操作,当在执行段执行保存 PC时,此时的 PC 值已不是当前指令的 P
43、C 值,而是当前地址的加一个偏移常量,如 8 或 12。76、判错:ARM 执行 STR 或 STM 指令保存 R15 时,其保存的值与当前指令地址 PC 一致的。(X)77、请判断下面程序段的作用是 获取常量值,即跳转时地址=PC+常量+偏移地址中的常量,通常为 8。SUB R1,PC,#4 STR PC,R0 LDR R0,R0 SUB R0,R0,R1 78、如果异常处理程序已经把返回的地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用户寄存器并实现返回。SUB LR,LR,#4 STMFD SP!,R0-R3,LR LDMFD SP!,R0-R3,PC 请解释“!”和“”的含义?
44、答:“!”表示最后的地址值要写回 SP。“”表示这是一条特殊形式的指令。这条指令在从存储器中装载的同时(PC 是最后恢复的),SPSR 也恢复到 CPSR。79、ARM7TDMI 处理器采用是“哈佛结构”而非冯.诺依曼(Von Neumann)结构。()80、ARM7TDMI 处理器指令和数据共用一条 32 位数据总线。只有装载、保存和交换指令可访问存储器中的数据。()81、ARM 指令集哪几大类指令?答:ARM 指令集大类指令,它们是:分支指令;数据处理指令;加载和存储指令;协处理器指令;杂项指令。82、从寻址方式的地址计算方法分,加载存储指令有种格式。零偏移、前索引偏移、程序相对偏移、后索
45、引偏移,请标出下面指令属于哪一种:LDR R0,R1,#0 x04 ;LDR R0,R1,#0 x04 ;LDR R0,label ;LDR R0,R1 ;83、在多寄存器加载指令 LDMIA R0!,R1-R4,LR中,请解释“!”和“”的作用?答:“!”表示在操作结束后,将最后的地址写回 R0 中;“”表示两方面,一方面进行数据传送且寄存器列表不包含 PC 时,加载存储的寄存器是用户模式下的,而不是当前模式的寄存器。另一方面,若在 LDM 指令且寄存器列表中包含有 PC 时使用,那么除了正常的多寄存器传送外,还将 SPSR 也拷贝到 CPSR 中,这可用于异常处理返回。该后缀不允许在用户模
46、式或系统模式下使用。84、ARM 状态下的压栈和出栈操作可以用数据块传送指令完成,为什么还要用堆栈指令进行堆栈操作?答:如 STMDA R0!,R5-R6 LDMIB R0!,R5-R6的数据块传送指令进行堆栈操作,也可用 STMED R0!,R5-R6 LDMED R0!,R5-R6的堆栈指令进行堆栈操作。两段代码的执行结果是一样的,但是使用堆栈指令的压栈和出栈操作编程很简单,前后模式一致即可,而使用数据块指令进行压栈和出栈操作则需要考虑空与满、加与减对应的问题。85、LPC2000 系列微控制器包含四大部分:ARM7TDMI-S CPU、ARM7 局部总线及相关部件、AHB 高性能总线及相
47、关部件、VLSI 外设总线及相关部件。86、AHB 外设分配了 M 字节的地十范围,它位于 4G 字节 ARM 寻址空间的最顶端。AHB 可接外设 个,每个分配 的地址空间。87、VPB 外设分配了 2 M 字节的地址范围,从 3.5GB 地址点开始,VPB 可分配 128 个外设,每个 VPB 外设都分配了 16KB 的地址空间。88、向量中断控制器(VIC)最多可以管理 32 个中断请求,LPC2000 实际管理了19 个中断请求。89、外部存储器控制器(EMC)支持 4 个 BANK 的外部 SRAM 或 Flash,每个 BANK 最多16 容量。90、对 SRAM 的写入一次操作后,
48、如果发生芯片复位,实际的 SRAM 内容将不会反映最近一次的写操作。()91、在 LPC2000 系列芯片中,对 SRAM 执行一次写入操作,此时芯片复位,为什么实际的 SRAM 内容将不会反映最近一次的写操作?答:由于 SRAM 控制器包含一个回写缓冲区,它总是保存着软件发送到 SRAM 的最后一个字数据。该数据只有在软件请求下一次写操作时才写入 SRAM。如果发生芯片复位,实际的SRAM 内容将不反映最近一次的写操作。92、为什么整个 BootBlock 块被映射到片内存储器空间的顶端?答:这是为了兼容将来的器件,以便将来的芯片内置不同的 RAM 和 FALSH 都不会影响BootBloc
49、k 的位置。93、实现掉电唤醒不需要在向量中断控制器 VIC 中使能相应的中断。()94、异常向量表可能来源于内部 Flash、内部 SRAM、内部 BootBlock、外部存储器。(V)95、对LPC2210来说,当MEMMAP寄存器的MAP1:0=11时,当引脚BOOT1和BOOT0全为高电平,复位后从外部 Flash 执行程序。()96、对LPC2210来说,当MEMMAP寄存器的MAP1:0=11时,当引脚BOOT1和BOOT0不全为高电平但芯片加密,复位后从外部 Flash 执行程序。()97、与外部存储器的连接时,如果存储器组配置成 32 位宽度,地址线 A0 和 A1 为什么无用
50、,且可作为 GPIO 使用?答:与外部存储器的连接时,如果存储器组配置成 32 位宽度,则寻址是按字(4 字节)操作,但存储器地址是按字节编址,因此只有当 A0 和 A1 不参与寻址时才是按字操作,因此 A0 和A1 这两根线可用作 GPIO 而不影响寻址。98、与外部存储器的连接时,如果存储器组配置成 16 位宽度,地址线 A0 为什么无用?99、同一寄存器组的器件宽度可以不一致。()100、与外部存储器连接的是 32 位宽度,请画出片位存储器芯构成 32 位存储器的连接示意图?101、中断控制器将 32 个中断输入进行分配,可转向的中断类型是 FRQ 、向量 IRQ 和 非向量 IRQ 。