电科计科专业嵌入式试题A卷附答案Word格式.docx
《电科计科专业嵌入式试题A卷附答案Word格式.docx》由会员分享,可在线阅读,更多相关《电科计科专业嵌入式试题A卷附答案Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
2.在ARM的所有的运行模式下,下列的哪一组寄存器都对应同一组物理寄存器()。
(A)R8~R12(B)R0~R7
(C)R13~R14(D)R8~R14
3.ARM处理器处于()运行时,执行的程序无法访问一些被保护的系统资源,也不能改变处理器的运行模式。
(A)管理模式。
(B)中断模式。
(C)系统模式。
(D)用户模式。
4.ARM处理器支持4种类型的堆栈工作方式,其中满递增堆栈是()。
(A)堆栈指针指向最后压入的数据,且由低地址向高地址生长;
(B)堆栈指针指向下一个空位置,且由低地址向高地址生长;
(C)堆栈指针指向最后压入的数据,且由高地址向低地址生长;
(D)堆栈指针指向下一个空位置,且由高地址向低地址生长;
5.当一个异常出现后,ARM微处理器不会执行以下操作()
(A)将下一条指令的地址保存到响应的LR;
(B)将CPSR复制到SPSR中;
(C)根据异常类型,强制设置CPSR的运行模式;
(D)保存寄存器R0~R7到对应的堆栈;
6.S3C2440的内存一般由SDRAM存储器构成,这部分地址空间应配置在()。
(A)Bank0~Bank5(B)Bank0
(C)Bank6/Bank7(D)任何一段空闲地址区域
7.ARM微处理器的内存管理单元MMU主要完成的功能是()。
(A)主存储器和CPU之间的高速缓存;
(B)NandFlash的管理单元;
(C)从虚拟地址到物理地址的转换;
(D)存储器块Bank的管理单元;
8.当ARM微处理器使用32bit的数据总线时,存储器的地址与ARM微处理器的地址的连接方式应该是()
(A)存储器的A0与ARM的A0连在一起,其他引脚依此连接;
(B)存储器的A0与ARM的A1连在一起,其他引脚依此连接;
(C)存储器的A0与ARM的A2连在一起,其他引脚依此连接;
(D)存储器的A0与ARM的A3连在一起,其他引脚依此连接;
9.从ARM状态进入到Thumb状态可通过()代码实现。
(A)ADRR0,Into_Thumb+1(B)ADRR0,Into_Thumb
BXR0BLR0
(C)ADRR0,Into_Thumb+1(D)ADRR0,Into_Thumb
BLR0BXR0
10.LDMIAR1!
,{R0,R2,R3}指令执行后,R1的值变为()。
(A)R1—>
R1;
(B)R1+4—>
(C)R1+8—>
(D)R1+12—>
二、简答题(本大题共12分,每小题6分)
1.简要说明BootLoader的两种操作模式:
"
启动加载"
模式和"
下载"
模式的基本功能。
2.简要说明在ARM处理器中,一旦有中断发生,ARM的中断系统将如何处理。
三、分析题(本大题共12分,每小题6分)仔细阅读下列程序代码,写出它们所完成和实现的功能。
(1)voidSendByte(intdata)
{
if(data==‘\n’){
while(!
(rUTRSTAT0&0x4));
Delay(10);
rUTXH0=‘\r’;
}else{
Delay(10);
rUTXH0=data;
}
}
(2)mystrcopy
LDRBr2,[r1],#1
STRBr2,[r0],#1
CMPr2,#0
BNEmystrcopy
MOVpc,lr
四、编程题(本大题共12分)试编写一段C语言与汇编语言的混合编程代码,要求在C语言程序中调用汇编语言程序strcpy,完成将字符串src=“hello,world”复制到dest数组中。
五、编程题(本大题共14分)编写一段C语言程序,用S3C2440的A/D转换器的通道0对一输入的模拟信号进行采样,要求连续采集16个点,然后取平均值作为采样值,试编写A/D转换器初始化函数和获取A/D的转换值的函数。
假定A/D转换器相关的寄存器已经定义。
六、编程题(本大题共14分)编写程序,控制发光二极管LED1、LED2、LED3、LED4,使它们按顺序:
LED1亮→LED2亮→LED3亮→LED4亮→LED1灭→LED2灭→LED3灭→LED4灭。
LED_1~LED_4分别与GFP7~GPF4相连,通过GFP7~GPF4引脚的高低电平来控制发光二极管的亮与灭。
当这几个引脚输出高电平的时候发光二极管熄灭,反之,发光二极管点亮。
七、设计题(本大题共16分,每小题8分)将0~255这256个数按顺序写入到EEPROM(AT24C02)的内部存储单元中,然后再依次将它们读出,并通过实验板的串口UART0输出到在PC机上运行的Windows自带超级终端上。
要求用C语言编写:
(1)初始化及测试主程序;
(2)中断服务程序及IIC写入程序。
A卷参考答案及评分标准
一、
(1)C
(2)B(3)D(4)A(5)D
(6)C(7)C(8)C(9)A(10)D
二、
1、启动加载(Bootloading)模式:
这种模式也称为"
自主"
(Autonomous)模式。
也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
这种模式是BootLoader的正常工作模式,因此在嵌入式产品发布的时侯,BootLoader显然必须工作在这种模式下。
3分
下载(Downloading)模式:
在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:
下载内核映像和根文件系统映像等。
从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的FLASH类固态存储设备中。
BootLoader的这种模式通常在第一次安装内核与根文件系统时被使用;
此外,以后的系统更新也会使用BootLoader的这种工作模式。
工作于这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口。
3分
2、在ARM系统中,一旦有中断发生,正在执行的程序都会停下来,通常都会执行如下的中断步骤:
(1)保存现场。
保存当前的PC值到R14,保存当前的程序运行状态到SPSR。
(2)模式切换。
根据发生的中断类型,进入IRQ模式或FIQ模式。
(3)获取中断服务子程序地址。
PC指针跳到异常向量表所保存的IRQ或FIQ地址处,IRQ或FIQ的异常向量地址处一般保存的是中断服务子程序的地址,PC指针跳入到中断服务子程序,进行中断处理。
(4)多个中断请求处理。
在ARM系统中,可以存在多个中断请求源,比如串口中断、AD中断、外部中断、定时器中断及DMA中断等,所以可能出现多个中断源同时请求中断的情况。
为了更好地区分各个中断源,通常为这些中断定义不同的优先级别,并为每一个中断设置一个中断标志位。
当发生中断时,通过判断中断优先级以及访问中断标志位的状态来识别哪一个中断发生了,进而调用相应的函数进行中断处理。
(5)中断返回,恢复现场。
当完成中断服务子程序后,将SPSR中保存的程序运行状态恢复到CPSR中,R14中保存的被中断程序的地址恢复到PC中,继续执行被中断的程序。
3分
三、
1、通过串口发送数据。
如果是回车符,则发送换行控制符,否者发送数据。
6分
2、将r1指向的字符串复制到r0指向的存储空间。
四、
AREAStringCopy,CODE,READONLY
EXPORTstrcopy
mystrcopy
STRBr2,[r0],#1
BNEmystrcopy6分
END
externvoidstrcopy(char*d,constchar*s);
intmain(void)
constchar*src=“hello,world”;
chardest[10];
strcopy(dest,src);
6分
五、
voidAD_Init(unsignedcharch){
rADCDLY=100;
//ADC启动或间隔延时
rADCTSC=0;
//选择ADC模式
rADCCON=(1<
<
14)|(49<
6)|(ch<
3)|0<
2)|(0<
1)|(0);
//设置ADC控制寄存器
}
intGet_AD(unsignedcharch){
inti;
intval=0;
if(ch>
7)return0;
//通道不能大于7
for(i=0;
i<
16;
i++){//为转换准确,转换16次
rADCCON|=0x1;
//启动A/D转换
rADCCON=rADCCON&0xffc7|(ch<
3);
while(rADCCON&0x1);
//避免第一个标志出错
(rADCCON&0x8000));
//避免第二个标志出错
val+=(rADCDAT0&0x03ff);
Delay(10);
}
return(val>
>
4);
//为转换准确,除以16取均值
六、voidled_on(void)7分
{inti,nOut;
nOut=0xF0;
rGPFDAT=nOut&
0x70;
i<
100000;
i++);
0x30;
0x10;
0x00;
voidled_off(void)7分
nOut=0;
rGPFDAT=0;
rGPFDAT=nOut|0x80;
rGPFDAT|=nOut|0x40;
rGPFDAT|=nOut|0x20;
rGPFDAT|=nOut|0x10;
七、
(1)初始化及测试主程序
voidiic_test(void)
{
UINT8TszData[256];
UINT8TszBuf[256];
unsignedinti,j;
uart_printf("
\nIICProtocolTestExample,usingAT24C04...\n"
);
Writechar0-fintoAT24C04\n"
f_nGetACK=0;
//Enableinterrupt4分
rINTMOD=0x0;
rINTMSK&
=~BIT_IIC;
pISR_IIC=(unsigned)iic_int_24c04;
//Initializeiic
rIICADD=0x10;
//S3C2440Xslaveaddress
rIICCON=0xaf;
//EnableACK,interrupt,SET
IICCLK=MCLK/16
rIICSTAT=0x10;
//EnableTX/RX
//Write0-16to24C04
256;
i++)
{
iic_write_24c040(0xa0,i,i);
delay(10);
//Read16bytefrom24C044分
iic_read_24c040(0xa0,i,&
(szData[i]));
//Printfreaddata
Read256bytesfromAT24C04\n"
%2x"
szData[i]);
rINTMSK|=BIT_IIC;
\nend.\n"
(2)中断服务程序
voidiic_int_24c04(void)
ClearPending(BIT_IIC);
2分
f_nGetACK=1;
(3)IIC写程序
voidiic_write_24c040(UINT32TunSlaveAddr,UINT32TunAddr,UINT8TucData)
//Sendcontrolbyte
rIICDS=unSlaveAddr;
//0xa0
rIICSTAT=0xf0;
//MasterTx,Start
while(f_nGetACK==0);
//WaitACK
//Sendaddress4分
rIICDS=unAddr;
//ResumesIICoperation.
//Senddata
rIICDS=ucData;
//Endsend2分
rIICSTAT=0xd0;
//StopMasterTxcondition
delay(5);
//Waituntilstopcondtionisin
effect.