《嵌入式系统开发技术》试卷A答案及评分细则
一、选择题(请把正确的答案填写的答案表格内,每题2分,共计30分)
二、填空题(请把正确的答案填写的答案表格内,每空1分,共计10分)
三、简答题(简明扼要回答问题,每题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、Nor Flash 和Nand Flash的各自的特点是什么,主要有什么区别?(6分)
答:其主要区别如下:
(1).性能比较(2分)
Nor的读速度比Nand稍快一些。
Nand的写入速度比Nor快很多。Nand的4ms擦除速度远比Nor的5s快。
大多数写入操作需要先进行擦除操作。
Nand的擦除单元更小,相应的擦除电路更少。
(2).容量和成本(2分)
Nor Flash占据了容量为1~16MB闪存市场的大部分,而Nand Flash只是用在8~128MB的产品当中,这也说明Nor主要应用在代码存储介质中,Nand适合于数据存储。
(3). 接口差别(2分)
Nor Flash带有SRAM接口,有够的足地址引脚来寻址,可以很容易地存取其内部的每一个字节。
Nand器件使用复杂的I/O口来串行存取数据,各个产品或厂商的方法可能各不相同。
4、如何在特权模式下用ARM汇编指令使能IRQ中断(6分)
arm嵌入式系统期末考试MRS R0,CPSR  (2分)
AND R0,R0,0X3F(2分)
MSR CPSR_c,R0  (2分)
5、CMP指令的操作数是什么?写一个程序,判断R1的值是否大于0X30,是则将R1减去0X30(6分)
CMP指令用于将第一个操作数寄存器Rn的值减去第二个操作数,根据操作的结果更新CPSR中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。(3分)
MOV R0,#0X30(1分)
CMP R1,R0(1分)
SUMGT R1,R1,R0(1分)
四、编程题(每题10分,共计20分)
1、寄存器R0=10,R1=30和R2=20中有三个数,求其中的最大的一个,结果存储在R3。(10分)
AREA    EXAMPLE2,CODE,READONLY
ENTRY
CODE  32
MOV R0,#10
MOV R1,#30
MOV R2,#20(1分)
START(4分)
CMP  R0,R1
BLE    LBL_a
CMP R0,R2
MOVGT R3,R0
MOVLE  R3,R2
LBL_a (4分)
CMP  R1,R2
MOVGT R3,R1
MOVLE R3 R2
LBL_B(1分)
B .
END
2、编程实现将从地址src开始的num个字的数据复制到地址dst去,要求每次复制八个字,如果不足八个
字,每次复制一个字。
AREA  example4,code,readonly
num    equ 25
entry(1分)
Start
ldr r0,=src
ldr r2,=dst
mov r2,#num(2分)
Blockcopy
movs r3,r2,lsr #3
beq  wordcopy
stmfd sp!,{r4-R11}(2分)
Copy
ldmia r0!,{r4-r11}
stmia r1!,{r4-r11}
subs  r3,r3,#1
Bne copy(2分)
Wordcopy
ands r2,r2,#7
beq stop(2分)
Copyloop
ldr r3,[r0],#4
str  r3,[r1],#4(2分)
subs r2,r2,#1
Bne copyloop(2分)
Stop
b.
area oridate, data,readwrite(2分)
Src  dcb 0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4
Dst  space 25*4
End
五、实验题目
#include  "config.h"
// 定义独立按键KEY1的输入口
#define    KEY_CON    (1<<4)          /* GPF4口  */    (1分)
// 定义蜂鸣器控制口
#define    BEEP (1<<10)      /* GPH10口 */ (1分)
#define    BEEP_MASK (~BEEP)      (1分)
void  DelayNS(uint32  dly) (2分)
{
uint32  i;
for(; dly>0; dly--)
for(i=0; i<50000; i++);
}
int  main(void)
{
// 初始化I/O
rGPFCON = (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分)
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。