《嵌入式系统开发技术》试卷A答案及评分细则一、选择题(请把正确的答案填写的答案表格内,每题2分,共计30分)题号12345678答案ACBDBABD题号9101112131415答案ADBABBB二、填空题(请把正确的答案填写的答案表格内,每空1分,共计10分)题号答案答案1FIQSWI2满堆栈空堆栈3MPLLUPLL4NormalPower_off5寄存器使用规则堆栈使用规则三、简答题(简明扼要回答问题,每题6分,共计30分)1、简要阐述ARM的异常处理过程?(6分)答:当任何一个异常发生并得到相应时,ARM内核自动完成一下动作:1、将下一条指令的地址存入相应的连接寄存器中,以便程序正确返回。(2分)2、将CPSR的值复制到SPSR中(1分)3、根据异常类型,强制设置CPSR的运行模式位(1分)4、设置PC使其从相应的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。(2分)2、如何搭建基于S3C2410A处理器的最小系统,需要考虑哪些因素。(6分)答:1、电源设计;(要考虑功耗,提供1.8V,3.3V和干电池供电)(2分)。2、晶振电路设计;(考虑RTC时钟的晶振,和芯片的外接晶振)(1分)3、复位电路设计;(考虑使用复位芯片,提高性能)(1分)4、jtag接口设计;(制作简易的jtag接口)(1分)5、存储系统设计;(根据需要选择存储系统)(1分)3、NorFlash和NandFlash的各自的特点是什么,主要有什么区别?(6分)答:其主要区别如下:(1).性能比较(2分)Nor的读速度比Nand稍快一些。Nand的写入速度比Nor快很多。Nand的4ms擦除速度远比Nor的5s快。大多数写入操作需要先进行擦除操作。Nand的擦除单元更小,相应的擦除电路更少。(2).容量和成本(2分)NorFlash占据了容量为1~16MB闪存市场的大部分,而NandFlash只是用在8~128MB的产品当中,这也说明Nor主要应用在代码存储介质中,Nand适合于数据存储。(3).接口差别(2分)NorFlash带有SRAM接口,有够的足地址引脚来寻址,可以很容易地存取其内部的每一个字节。Nand器件使用复杂的I/O口来串行存取数据,各个产品或厂商的方法可能各不相同。4、如何在特权模式下用ARM汇编指令使能IRQ中断(6分)MRSR0,CPSR(2分)ANDR0,R0,0X3F(2分)MSRCPSR_c,R0(2分)5、CMP指令的操作数是什么?写一个程序,判断R1的值是否大于0X30,是则将R1减去0X30(6分)CMP指令用于将第一个操作数寄存器Rn的值减去第二个操作数,根据操作的结果更新CPSR中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。(3分)MOVR0,#0X30(1分)CMPR1,R0(1分)SUMGTR1,R1,R0(1分)四、编程题(每题10分,共计20分)1、寄存器R0=10,R1=30和R2=20中有三个数,求其中的最大的一个,结果存储在R3。(10分)AREAEXAMPLE2,CODE,READONLYENTRYCODE32MOVR0,#10MOVR1,#30MOVR2,#20(1分)START(4分)CMPR0,R1BLELBL_aCMPR0,R2MOVGTR3,R0MOVLER3,R2LBL_a(4分)CMPR1,R2MOVGTR3,R1MOVLER3R2LBL_B(1分)B.END2、编程实现将从地址src开始的num个字的数据复制到地址dst去,要求每次复制八个字,如果不足八个字,每次复制一个字。AREAexample4,code,readonlynumequ25entry(1分)Startldrr0,=srcldrr2,=dstmovr2,#num(2分)Blockcopymovsr3,r2,lsr#3beqwordcopystmfdsp!,{r4-R11}(2分)Copyldmiar0!,{r4-r11}stmiar1!,{r4-r11}subsr3,r3,#1Bnecopy(2分)Wordcopyandsr2,r2,#7beqstop(2分)Copyloopldrr3,[r0],#4strr3,[r1],#4(2分)subsr2,r2,#1Bnecopyloop(2分)Stopb.areaoridate,data,readwrite(2分)Srcdcb0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4Dstspace25*4End五、实验题目#include"config.h"//定义独立按键KEY1的输入口#defineKEY_CON(1<<4)/*GPF4口*/(1分)//定义蜂鸣器控制口#defineBEEP(1<<10)/*GPH10口*/(1分)#defineBEEP_MASK(~BEEP)(1分)voidDelayNS(uint32dly)(2分){uint32i;for(;dly>0;dly--)for(i=0;i<50000;i++);}intmain(void){//初始化I/OrGPFCON=(rGPFCON&(~(0x03<<8)));//rGPFCON[9:8]=00b,设置GPF4为GPIO输入模式(1分)rGPHCON=(rGPHCON&(~(0x03<<20)))|(0x01<<20);//rGPHCON[21:20]=01b,设置GPH10为GPIO输出模式(1分)while(1){if(rGPFDAT&KEY_CON)//读取GPF口线上的电平,判断GPF4是否为高电平{rGPHDAT=rGPHDAT|BEEP;//GPF4为高电平,则设置GPH10=1(1分)}else{rGPHDAT=rGPHDAT&BEEP_MASK;//GPF4为低电平,则设置GPH10=0(1分)}DelayNS(1);(1分)}