嵌⼊式练习题3,4
1、简答题
(1)LDR R1,[R0,#0x08]属于哪种寻址⽅式?
答:变址寻址;R1=[R0+0x08]
(2)ARM指令的条件码有多少个?默认条件码是什么?
答:条件码16个,默认AL
(3)ARM指令中第⼆个操作数有哪⼏种形式?举例5个8位图⽴即数。
答:⽴即数,寄存器,寄存器及移位常数
(4)LDR/STR指令的偏移形式有哪4种?LDRB和LDRSB有何区别?
答:零偏移,前索引偏移,程序相对偏移,后索引偏移;
LDRB就是读出指定地址的数据并存⼊指定寄存器,LDRSB读出指定地址的数据,并⾼24位⽤符号位扩展,再存⼊指定寄存器。
(5)请指出MOV指令与LDR加载指令的区别及⽤途。
答:LDR的操作数既可以来源于寄存器也可以来源于存储器,MOV的操作数能来源于寄存器;LDR指令从内存中读取数据放⼊寄存器,⽤于对内存变量和数据的访问、查表、程序的跳转、外围部件的控制操作等;MOV指令将8位⽴即数或寄存器传送到⽬标寄存器(Rd),可⽤于移位运算等操作。
(6)CMP指令的操作是什么?写⼀个程序,判断R1的值是否⼤于0x30,是则将R1减去
答:CMP是⽐较指令,CMP{条件码} op1,op2
CMP R1,0x30
SUBHI R1,R1,0x30
(7)调⽤⼦程序是⽤B还是⽤BL指令?请写出返回⼦程序的指令?
答:调⽤⼦程序⽤BL,B是最简单的分⽀指令。MOV PC,R14
(8)请指出LDR伪指令的⽤法。指令格式与LDR加载指令的区别是什么?
答:LDR 伪指令⽤于加载 32 位的⽴即数或⼀个地址值到指定寄存器;
LDR加载指令为地址表达式。
LDR{条件码} 寄存器组,=[常量或常量表达式]
(9)ARM状态与Thumb状态的切换指令是什么?请举例说明。
答: BX指令
(10)Thumb状态与ARM状态的寄存器有区别吗?Thumb指令对哪些寄存器的访问受到
答:Thumb状态下不能更新CPSR 中的ALU 状态标志;Thumb指令对R8~R15寄存器访问受限(11)Thumb指令集的堆栈⼊栈、出栈指令是哪两条?
答:PUSH POP
(12)Thumb指令集的BL指令转换范围为何能达到±4MB?其指令编码是怎样的?
答:Thumb采⽤两条16 位指令组合成22 位半字偏移(符号扩展为32 位),使指令转移范围为±4MB。
(13)ARM9可使⽤的外部晶振频率范围是多少(使⽤/不使⽤PLL功能时)?
答:晶振频率范围:1~30 MHz,若使⽤PLL 或ISP 功能为:10~25MHz。
(14)描述⼀下ARM9的P0.14、P1.20、P1.26、BOOT1和BOOT0引脚在芯⽚复位时分别有什么作⽤?
答:P0.14 的低电平强制⽚内引导装载程序复位后控制器件的操作,即进⼊ISP 状态。
行车记录仪什么牌子质量好P1.20 的低电平使 P1.25~P1.16 复位后⽤作跟踪端⼝。
P1.26 的低电平使 P1.31~P1.26 复位后⽤作⼀个调试端⼝。
当RESET 为低时,BOOT0 与BOOT1 ⼀同控制引导和内部操作。引脚的内部上拉确保了引
脚未连接时呈现⾼电平。
外部复位输⼊:当该引脚为低电平时,器件复位,I/O⼝和外围功能进⼊默认状态,处理器从地址0 开始执⾏程序。复位信号是具有迟滞作⽤的TTL电平。
(15)ARM9微控制器对向量表有何要求(向量表中的保留字)?
答:向量表所有数据32 位累加和为零(0x00000000~0x0000001C 的8 个字的机器码累加),才能脱机运⾏⽤户程序。
(16)如何启动ARM9微控制器的ISP功能?相关电路应该如何设计?
(17)ARM9微控制器⽚内Flash是多位宽度的接⼝?它是通过哪个功能模块来提⾼Flash的访问速度?
过三闾庙答:128位,通过存储器加速模块(MAM)来提⾼Flash的访问速度
(18)若ARM的BANK0存储块使⽤32位总线,访问BANK0时,地址线A1、A0是否有效?EMC模块中的BLSO~BLS4具有什么功能?
答:数据总线D31~D0有效,地址线A1,A0⽆效,( 如果存储器组配置成 16 位宽,则不需要 A0;配置成8位宽的存储器组需要使⽤ A0 );字节定位选择信号实现对16位或32位外部存储器组的字节操作。
(19)ARM9微控制器具有引脚功能复⽤特性,那么如何设置某个引脚为指定功能?
答:通过引脚功能选择(PINSEL)寄存器的设定来设置某个引脚为指定功能
(20) 设置引脚为GPIO功能时,如何控制某个引脚单独输⼊/输出?当前要知道某个引脚当前的输出状态时,是读取IOPIN寄存器还是读取IOSET寄存器?
答:GPIO⽅向寄存器,IOPIN。
(21)P0.2和P0.3⼝是I2C接⼝,当设置它们为GPIO时,是否需要外接上拉电阻才能输出⾼电平?
答:具有I2C总线功能的引脚为开漏输出,设置为GPIO时需要接上拉电阻才能输出⾼电平或以引脚状态输⼊
(22)使⽤SPI主模式时,SSEL引脚是否可以作为GPIO?若不能,SSEL引脚应如何处理?答:不能⽤作GPIO,SSEL应设这⾼电平,处于末激活状态。
(23)ARM9具有⼏个UART是符合什么标准?哪⼀个UART可⽤作ISP通信?哪⼀个UART具有MODEM接⼝?
答:UART是异步接收发送装置,并⾏输⼊串⾏输出, UART0,UART1;UART0⽤于ISP通信,UART1具有MODEM接⼝
(24)ARM9具有⼏个32位定时器?PWM定时器是否可以作通⽤定时器使⽤?
答:两个32位定时器,PWM(脉冲宽度调制)定时器不能⽤作通⽤定时器使⽤
(25)ARM9微控制器具有哪两种低耗模式?如何降低系统的功耗?
答: 2 个低功耗模式:空闲和掉电;⼀般有不依赖ARM核⼯作的定时器,可以设定该定时器每隔⼏毫秒触发ARM芯⽚⼀次进⼊正常运转状态,平时则进⼊掉电状态,以节省能源。
2 分析题
下⾯给出A 和B 的值,您可先⼿动计算A+B,并预测N、Z、V 和 C 标志位的值。然后修改程序清单中R0、R1 的值,将这两个值装载到这两个寄存器中(使⽤LDR 伪指令,
如LDR R0,=0x FFFF0000),使其执⾏两个寄存器的加法操作。调试程序,每执⾏⼀次加法操作就将标志位的状态记录下来,并将所得结果与您预先计算得出的结果相⽐较。如果两个操作数看作是有符号数,如何解释所得标志位的状态?同样,如果这两个操作数看作是⽆符数,所得标志位⼜当如何理解?
0xFFFF000F 0x7FFFFFFF 67654321 (A)
+ 0x0000FFF1 + 0x02345678 + 23110000 (B)
结果( ) ( ) ( )
程序清单:寄存器相加
;⽂件名:TESTI.S
;功能:实现两个寄存器相加
;说明:使⽤ARMulate软件仿真调试
AREA Examplel,CODE,READONLY ;声明代码段Examplel
ENTRY ;标识程序⼊⼝
CODE32 ;声明32位ARM指令
START MOV R0,#0 ;设置参数
MOV R1,#10
LOOP BL ADD_SUB ;调⽤⼦程序ADD_SUB
B LOOP ;跳转到LOOP
ADD_SUB
ADDS R0,R0,R1 ;R0=R0+R1
MOV PC,LR ;⼦程序返回
END ;⽂件结束
3 分析设计题
把下⾯的 C 代码转换成汇编代码。数组 a 和b 分别存放在以 0x4000 和 0x5000 为起始地址的存储区内,类型为long(即32位)。把编写的汇编语⾔进⾏编译连接,并进⾏调试。for (i=0; i<8; i++)
{ a[i] = b[7-i];
}
4、计算PLL设置值:
假设有⼀个基于ARM9的系统,所使⽤的晶振为11.0592MHZ⽯英晶振。请计算出最⼤的系统时钟(ccls)频率为多少MHZ?此时PLL的M值和P值各为多少?请列出计算公式,并编写设置PLL 的程序段。
元宵馅怎么做
5、程序设计
(1)寄存器相加
(2)读取SMI⽴即数
T_bit EQU 0X20
SWI_Handler
STMFD SP!,{R0_R3,R12,LR} ;现场保护
MRS R0,SPSR ;读取SPSR
STMED SP!,{R0} ;保存SPSR
TST R0,#T_bit ;测试T标志位
LDRNEH R0,[LR,#_2] ;若是Thumb指令,读取指令码(16位)
BICNE R0,R0,,#0xFF00 ;取得Thumb指令的8位⽴即数
LDREQ R0,[LR,#_4] ;若是ARM指令,读取指令码(32位)
BICEQ R0,R0,#0Xff000000 ;取得ARM指令的24位⽴即数
……
LDMFD SP!,{ R0_R3,R12,PC};SWI异常中断返回
(3)使⽤IRQ中断 ENABLE_IRQ
黑枸杞的食用方法MRS R0,CPSR
BIC R0,R0,#0x80
MSR CPSR_C,R0
MOV PC,LR
(4)禁能IRQ中断 DISABLE_IRQ
MRS R0 CPSR
ORR R0,R0,#0x80
MSR CPSR_C,R0
MOV PC,LR
(5)堆栈指令初始化
INTSTACK
古代的四大发明WOV R0,LR ;保存返回地址
;设置管理模式堆栈
MSR CPSR_C,#0xD3
LDR SP,stacksvc
;设置中断模式堆栈
MSR CPSR_C,#0xD2
LDR SP,Stacklrq
(6)⼩范围地址的加载
……
ADR R0,DISP_TAB ;加载转换表地址
LDRB R1,[R0,R2] ;使⽤R2作为参数,进⾏查表
……
DISP_TAB
DCB 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 (8)加载32位⽴即数……
LDR R0,=IOPIN ;加载GPIO的寄存器IOPIN的地址
LDR R1,[R0] ;读取IOPIN寄存器的值
……
LDR R0,=IOSET
LDR R1,=0x00500500
STR R1,[R0] ;IOSET=0x00500500
……
(10) ARM到Thumb的状态切换
;⽂件名:TEST8.S
;功能:使⽤BX指令切换处理器状态
;说明:使⽤ARMulate软件仿真调试
AREA Example8,CODE,READONLY
ENTRY
CODE32
历史七年级上册思维导图
ARM_CODE ADR R0,THUMB_CODE+1
BX R0 ;跳转并切换处理器状态
CODE16
THUMB_CODE
MOV R0,#10 ;R0=10
MOV R1,#20 ;R1=20
ADD R0,R1 ;R0=R0+R1
B
春天的美食
⼀、简答题
1. 嵌⼊式系统的组成,能画出嵌⼊式系统的组成框架。
答:嵌⼊式系统由软件系统和硬件系统两部分组成。
2. 单⽚机是不是嵌⼊式系统?它与ARM嵌⼊式系统有何异同?
答:单⽚机是嵌⼊式系统。
单⽚机⼀般是4位,8位或16位的数据总线,⼀般内置存储器,不运⾏操作系统,侧重于低成本,主要应⽤与⼯业控制等领域;⽽ARM嵌⼊式系统是32位的数据总线,运算速度快,外接⼤容量存储器,能运⾏操作系统以适合多种应⽤。
3. 嵌⼊式系统与通⽤计算机之间的区别。
答:通⽤计算机系统采⽤标准化、模块化的设计,其技术要求是⾼速、海量的信息处理,技术发展⽅向是处理速度、总线宽度、存储容量的⽆限提升。⽽嵌⼊式系统怎采⽤针对性较强的专业化设计,技术要求是满⾜具体应⽤,技术发展⽅向是在保证应⽤系统的技术要求和可靠性的前提下,尽可能减⼩成本、体积和功耗。
4. 嵌⼊式处理器的分类
王金存答:嵌⼊式微处理器MPU,嵌⼊式微控制器MCU,嵌⼊式DSP处理器
嵌⼊式⽚上系统SOC,嵌⼊式可编程⽚上系统SOPC
5. 嵌⼊式操作系统的作⽤是什么?请举出3种常见的操作系统。
答:⽤于管理存储器分配、中断处理、任务间通信和定时器响应,以及提供多任务处理等功能。嵌⼊式操作系统,⼤⼤地提⾼了嵌⼊式系统硬件⼯作效率,并为应⽤软件开发提供了极⼤的便利。3种常见的操作系统:WinCE,VxworksuClinux
6. 嵌⼊式系统开发流程