logo资料库

ARM 嵌入式系统基础教程 复习资料.pdf

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
ARM7TDMI 异常有哪些?41-47 ==异常中断的进入与退出,异常有:进入异常、退出异常、复位异常、中断请求异常 IRO、快速中断请求异常 FIQ、未定义的指令异常、中止异常(预取指中止异常、数据中止异常)、SWI 软件中断异常、中断延迟。优先 级从高到低为 复位、数据终止、FIQ、IRQ、预取指终止、未定义指令、软件中断 SWI ARM 复位时处理器的操作有哪些?42 ==强制 M[4:0]变为 b,系统进入管理模式; 将 CPSR 中的控制位 I 和 F 置位,IRQ 与 FIQ 中断禁止; 将 CPSR 中的控制位 T 清零,处理器处于 ARM 状态; 强制 PC 从地址 0x00 开始对吓一跳指令进行取指; 返回到 ARM 状态并恢复执行。|在系统复位后,进入管理模式对系统初始化。复位后,除 PC 和 CPSR 之外的所有 请描述进入内核时异常操作步骤? 寄存器的值都是随机的。 ==在 LR 中保存下一条指令地址//在 CPSR 复制到适当的 SPSR//根据异常将 CPSR 模式强制设为某一值//强制 PC 从相 关的异常处取指//异常结束时,异常处理程序必须将 LR 中的值减去便宜响亮后移入 PC//将 SPSR 的值复制回 CPSR//轻灵在入口置位的中断禁止标志 CPSR、存储器映射是什么? == CPSR:程序状态寄存器(current program status register) cpsr 在用户级编程时用于存储条件码;CPSR 包含条 件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息。 存储器本身不具有地址信息,给存储器分配地址的过程称为存储器映射。 CPSR 的组成 ==N 负标志位运算结果的第 31 位值.记录标志设置的结果。 Z 零标志位如果标志设置操作的结果为 0则置位。 C 进位标志位记录无符号加法溢出.减法无错位.循环移位。 V 溢出标志位记录标志设置操作的有符号溢出。 I 中断禁止标志位置位时禁止 IRQ 中断.否则允许 IRQ 中断使能。 F 中断禁止标志位置位时禁止 FIQ 中断.否则允许 FIQ 中断使能。 T 控制位置位时处理器运行在 Thumb 状态下清零时处理器运行在 ARM 状态下。 M0~M4 模式控制位.定义处理器的 7 中模式 B 指令、BL 指令、BX 指令三者之间有什么联系和区别? ==B(分支指令) 指令格式 B{cond} label BL(带链接的分支指令) BL{cond} label BX(带状态切换的分支指令) BX{cond} Rm B 指令跳转到指定的地址去执行程序; BL 指令先将下一条指令的地址复制到 R14(即 LR)链接寄存器中,然后跳转到指定地址,运行程序。 BX 指令跳转到 Rm 指定的地址去执行程序。若 Rm 的 bit0 为 1,则跳转时自动将 CPSR 中的标志 T 置位,即把目标 地址的代码解释为 Thumb 代码;若 Rm 的 bit0 为 0,则跳转时自动将 CPSR 中标志 T 置位,即把目标地址的代码 解释为 ARM 代码。 实时操作系统有哪些特征?7 ==实时操作系统是时间驱动的(event driven),其特点为:异步的事件响应、切换时间和中断延迟时间确定、优 先级中断和调整、抢占式调整、内存锁定、连续文件、同步。 其三大特性为:可剪裁性、实时性、可靠性 ARM 指令集中指令可以分为哪几个大类指令? ==指令格式、条件码、ARM 存储器访问指令、ARM 数据处理指令、乘法指令、ARM 分支指指令、ARM 杂项指令、ARM 伪指令 uC/OS 系统的特点? ==提供源代码//可移植//可固化//可剪裁//可剥夺//多任务//可确定性//任务栈//系统服务//中断管理//稳定性 与可靠性 ARM7TDMI-S 是什么? ==ARM7-TDMIS 是 ARM7TDMI 的可综合版本(软河),对应用工程师来说,除非芯片生产厂商對 ARMTDMIS 进行了剪裁, 否则在逻辑上`s 和 没有太大区别。|ARM7TDMI 是基于 ARM 体系结构 V4 版本低端 ARM 核,从 ARM6 核发展而来,但
7 弥补了 6 的不足,并在短时间增加了 64 位乘法指令(带 M 后缀的)、支持片上调试(带 D 后缀的)、高密度 16 位 Thumb 指令集扩展(T)和 Embedded ICE 硬件防震功能模块(I),形成了 ARM7TDMI 嵌入式处理器? ==嵌入式处理器是嵌入式系统的核心,是控制、辅助系统运行的硬件单元。 嵌入式处理器主要有四类:嵌入式微处理器(MPU)、嵌入式微控制器(MCU)、嵌入式 DSP 处理器(EDSP)和 SoC 片上 系统。 请描述进入内核时异常操作步骤? ==在 LR 中保存下一条指令地址//在 CPSR 复制到适当的 SPSR//根据异常将 CPSR 模式强制设为某一值//强制 PC 从相 关的异常处取指//异常结束时,异常处理程序必须将 LR 中的值减去便宜响亮后移入 PC//将 SPSR 的值复制回 CPSR//轻灵在入口置位的中断禁止标志 请说明 MOV 指令与 LDR 加载指令的区别和用途 ==LDR 的操作数既可以来源于寄存器也可以来源于存储器.MOV 的操作数只能来源于寄存器。|||LDR 指令从内存中 读取数据放入寄存器.用于对内存变量和数据的访问、查表、程序的跳转、外围部件的控制操作等.MOV 指令将 8 位立即数或寄存器传送到目标寄存器.Rd 用于移位运算等操作。 存储器重映射是什么? ==为了增加系统的灵活性,系统中有部分存储单元可以重复出现在不同的地址上。 AHB(先进的高性能总线)和 VPB(VLSI 外设总线)外设区域都为 2M 字节,可各分配 128 个外设。每个外设空 间的规格都为 16K 字节,这样就简化了每个外设的地址译码。如果试图访问一个保留区域地址或未分配区域地址, ARM 处理器将产生预取指中止或数据中止异常。 请说明 MOV 指令与 LDR 加载指令的区别和用途 ==LDR 的操作数既可以来源于寄存器也可以来源于存储器.MOV 的操作数只能来源于寄存器。 LDR 指令从内存中读取数据放入寄存器.用于对内存变量和数据的访问、查表、程序的跳转、外围部件的控制操 作等.MOV 指令将 8 位立即数或寄存器传送到目标寄存器.Rd 用于移位运算等操作。 寄存器寻址方式 1.寄存器寻址; MOV R1,R2 ;将 R2 的值存入 R1 2.立即寻址;SUBS R0,R0,#1 ;R0 减 1,结果放入 R0,并且影响标志位 3.寄存器移位寻址;MOV R0,R2,LSL #3 ;R2 的值左移 3 位,结果放入 R0 4.寄存器间接寻址;LDR R1,[R2] ;将 R2 指向的存储单元的数据读出;保存在 R1 中 5.基址寻址;LDR R2,[R3,#0x0C] ;读取 R3+0x0C 地址上的存储单元 ;的内容,放入 R2 6.多寄存器寻址;LDMIA R1!,{R2-R7,R12} 7.堆栈寻址; 8.相对寻址。 PINSEL0 &= 0xFFFFFFFC;(1) 设置引脚连接模块,P0.0 为 GPIO IO0DIR |= 0x00000001;(2) 设置 P0.0 口方向,设置为输出 IO0SET = 0x00000001;(3) 设置 P0.0 口状态,输出高电平 CMP R0,R1 ADDHI R0,R0,R5 SUBLS R1,R1,R5 ARM 指令集 非法指令集 ==Immed_8r-常数表达式,须对应 8 位位图(Pattern),即常数是由一个 8 位常数循环移位偶数得到的;非法常量: 0x1FE、511、0xFFFF、0x1010、0Xf0000010 接设有一个基于 LPC2114 的系统,所使用的晶振为 11.0592MHz 适应晶振,请计算出最大的系统时钟频率(CCLK) 为多少 M?此时 PLL 的 M 和 P 值各多少?请列出计算公式;并编写设置 PLL 的程序段 ==由公式:Fcclk=M*Fosc,要使 Fcclk 最大,Fosc=11.0592MHz,必 M 为最大时满足条件,因 LPC2110 的 Fcclk 最 大值为 60MHz,而 60/11.0592~5.4 Mmax 仅能设置为 5/当前条件下的最大的系统时钟 Fcclk=5*11.0592=55.296MHz,此时 M 值为 5,写入 MSEL 的值 为 4;又因公式:Fcco=Fosc*M*@*P;而 Fcco 在 156-320MHz 内,因此:156/(11.0592*5*2)~1.4
PLLCFG=60/Fosc-1 PLLCFG=(PLLCFG&0x1F)|((320/(11.0952*5*2)-1)<<5) PLLFEED=0xaa; PLLFEED=0X55; 锁相环--------------------------- == Fosc = Fcco/(2×p×M) Fcco = Fosc×(2×p×M) Fcclk = Fcco/(2×p) Fcco = Fcclk×(2×p) 最后得出 PLL 的输出频率(当 PLL 激活并连接时)为: Fcclk = M×Fosc 或 Fcclk = Fcco /(2×P) CCO 输出频率为: Fcco = Fcclk×2×P 或 Fcco = Fosc×M×2×PPLL 设置: 系统要求 Fosc=10MHz,Fcclk=60MHz。 根据这些要求:确定 Fcclk=60MHz;选择 Fosc=10MHz;计算 M= Fcclk/Fosc=60MHz/10MHz=6。M-1=5,所以 写入 PLLCFG[4:0]=00101; 计算 P=Fcco/( Fcclk*2),其中 Fcco 为 156~320 MHz。 当 Fcco=156MHz 时,P=156MHz/(2*60MHz)=1.3 当 Fcco=320MHz 时, P=2.67 P 取整数 2,所以写入 PLLCFG[6:5]=01。 uint8 PLLSet(uint32 Fcclk, uint32 Fosc, uint32 Fcco) { uint8 i; uint32 plldat; i=(Fcco / Fcclk); switch(i) { case 2: plldat = ((Fcclk / Fosc) - 1) | (0 << 5); break; case 4: plldat = ((Fcclk / Fosc) - 1) | (1 << 5); break; case 8: plldat = ((Fcclk / Fosc) - 1) | (2 << 5); break; case 16: plldat = ((Fcclk / Fosc) - 1) | (3 << 5); break; default: return(FALSE); break; } PLLCON = 1; PLLCFG = plldat;PLLFEED = 0xaa;PLLFEED = 0x55; while((PLLSTAT & (1 << 10)) == 0); PLLCON = 3; PLLFEED = 0xaa; PLLFEED = 0x55; return(TRUE); 简述 ARM7 三级流水线,说明其对程序设计的影响 ==``三级流水线分为取指段、分析段和执行段。对程序设计的影响:提高指令执行的速度,并使处理和存储系统连 续操作。 ARM Thumb PC PC 取指 PC-4 PC-2 译码 PC-8 PC-4 执行 64 位加减法? == AREA Example,CODE,READONLY ENTRY CODD32 START ADDS R1,R1,R2 //减法 为 SUBS
ADC R3,R3,R4 //减法 为 SBC END 比较两个值的大小,并进行相应加 1 处理 ==CMP RO,R1 ADDHI RO,RO,#1 //若 RO>R1,则 RO=R0+1 ADDLS R1,R1,#1 If((a!=10)&&(b!=20)) a=a+b ==CMP R0,#10 CMPNE R1,#20 CMPNE R0,R0,R1 (1)小端格式:一个字当中最低地址的字节被看作是最低位字节,最高位地址的字节被看作是最高位字节 (2)大端格式:ARM 处理器将最高位字节保存在最低字节,最低字节保存在最高地址。 堆栈指针 R13(SP) ==堆栈操作通常会发生在子程序调用,异常发生或者程序运行过程中寄存器数量不够时。连接寄存器 R14(LR):子 程序的返回地址将自动的保存到 R14 中,分别有 R14_svc,R14_abtR14_und,R14_irq,R14_fiq。程序计数器 R15(PC): 总是指向正在取指的指令 什么是嵌入式系统? ==嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可剪裁,适应应用系统对功能、可靠性、成本、体 积及功耗严格要求的专用计算机系统,具有完成复杂功能的硬件和软件且紧密耦合在一起的计算机系统。 三个基本特点为 嵌入性、专用性、计算机 I2C 总线: ==I2C 总线是 Philips 推出的串行传输总线,它以 2 根连线实现了完善的全双工同步数据传送,可以极方便地构成 多机系统和外围器件扩展系统。 发送器:本次传送中发送数据(不包括地址和命令)到总线的器件; 接收器:本次传送中从总线接收数据(不包括地址和命令)的器件; 主 机:初始化发送、产生时钟信号和终止发送的器件,它可以是发送器或接收器。主机通常是微控制器。 从 机:被主机寻址的器件,它可以是发送器或接收器。 ARM 体系结构支持多少种处理器模式? ==用户模式、快速中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式 其状态是指 16 位 Thumb 指令集运行的 Thumb 状态和 32 位 ARM 指令集运行的 ARM 状态 ARM->Thumb Thumb->ARM CODE32 CODE16 LDR R0,Lable+1 LDR R0,Lable BX R0 BX RO CODE16 CODE32 Lable MOV R1,#12 Lable MOV R1,#10 GPIO 的操作:设置 P0.0 输出高电平 PINSEL0 &= 0xFFFFFFFC; 1) 设置引脚连接模块,P0.0 为 GPIO IO0DIR |= 0x00000001; 2) 设置 P0.0 口方向,设置为输出 IO0SET = 0x00000001; 3) 设置 P0.0 口状态,输出高电平读取 P0.0 引脚状态 处理器状态切换方法: 从 ARM 状态切换到 Thumb 状态 DODE32 LDR R0,=LABLE+1 BX R0
CODE16 Lable MOV R1,#12 从 Thumb 状态切换到 ARM 状态 CODE16 LDR R0,=LABLE BX R0 CODE32 Lable MOV R1#10 G P I O ==设置 I/O 口输出电平状态需要完成三步 PINSEL0&=0Xfffffffc; 先设置引脚连接模块,将 P0.0 设置为 GPIO 功能 IO0DIR |=0x0000001 然后将 P0.0 设置为输出 IO0SET =0x0000001; 设置 P0.0 输出高电平 使用 GIIO 控制蜂鸣器 #include “config.h” #define BEEPCON 0x0000080 /P0.7 引脚控制 B1,低电平蜂鸣 void DelayNS(uint32 dly) /长软件延时,dly 为延时参数,越大则延时越久 { Uint32 I; For(;dly>0;dly--) For(i=0;i<5000;i++); } Int main(void) /控制蜂鸣器蜂鸣 { PINSEL0=0x00000000; /引脚链接 GPIO IO0DIR=BEEPCON; /设置 I/O 为输出 While(1) {IO0SET=BEEPCON; / BEEPCON=1 DelayNS(10); / BEEPCON=0 IO0CLR=BEEPCON; DelayNS(10); } Return(0); }
分享到:
收藏