ARM嵌入式体系结构与接口技术CortexA9版习题问题详解Word文件下载.docx

上传人:b****6 文档编号:17439180 上传时间:2022-12-01 格式:DOCX 页数:26 大小:25.42KB
下载 相关 举报
ARM嵌入式体系结构与接口技术CortexA9版习题问题详解Word文件下载.docx_第1页
第1页 / 共26页
ARM嵌入式体系结构与接口技术CortexA9版习题问题详解Word文件下载.docx_第2页
第2页 / 共26页
ARM嵌入式体系结构与接口技术CortexA9版习题问题详解Word文件下载.docx_第3页
第3页 / 共26页
ARM嵌入式体系结构与接口技术CortexA9版习题问题详解Word文件下载.docx_第4页
第4页 / 共26页
ARM嵌入式体系结构与接口技术CortexA9版习题问题详解Word文件下载.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

ARM嵌入式体系结构与接口技术CortexA9版习题问题详解Word文件下载.docx

《ARM嵌入式体系结构与接口技术CortexA9版习题问题详解Word文件下载.docx》由会员分享,可在线阅读,更多相关《ARM嵌入式体系结构与接口技术CortexA9版习题问题详解Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。

ARM嵌入式体系结构与接口技术CortexA9版习题问题详解Word文件下载.docx

2.BIC指令的作用是什么?

将一个寄存器中的某一位或者某几位清零

3.执行SWI指令时会发生什么情况?

执行SWI指令时ARM处理器会自动将CPSR拷贝到SVC模式下的SPSR,然后修改CPSR寄存器的T位使处理器进入ARM状态,修改CPSR寄存器的低五位模式位使处理器进入SVC模式,修改CPSR寄存器的I位禁止IRQ中断,保存当前SWI指令下一条指令的地址到SVC模式下的LR寄存器,然后PC的值改为异常向量表中偏移地址为0x08的地址。

4.B、BL、BX指令的区别有哪些?

B与BL都可以使程序跳转到指定的地址(label)处执行程序

B跳转指令pc←label

BL带返回的连接跳转pc←label,同时将BL下一条指令地址保存到LR

BX使程序跳转到指令中<

Rm>

指定的地址执行程序,并将<

的第0位复制到CPSR中T位,BX<

BX跳转并切换状态pc←Rm&

0xfffffffe,T←Rm[0]

5.下面哪个数据可以作为数据操作指令的有效立即数?

0x1010x1f80xf000000f0x080000120x104

0x1f8、0xf000000f、0x104

6.ARM在哪些工作模式下可以修改CPSR寄存器?

特权模式下才能修改CPSR寄存器,即快速中断模式(FIQ)、外部中断模式(IRQ)、特权模式(Supervisor)、数据访问中止模式(Abort)、未定义指令中止模式(Undef)、系统模式(System)、(Cortex-A系列)监控模式(Monitor)

7.写一个程序,如果R0的值大于0x50,则将R1的值减去0x10,并把结果送给R0。

CMPR0,#0x50

SUBGTR0,R1,#0x10

8.编写一段ARM汇编程序,实现数据块复制,将R0指向的8个字的连续数据保存到R1指向的一段连续的存单元中。

LDMIAR0!

,{R2-R9}

STMIAR1!

第四章

1.在ARM汇编中如何定义一个全局的数字变量?

使用.global伪操作

语法格式:

.global全局变量名并且被初始化为0

2.ADR和LDR的用法有什么区别?

ADR伪指令的功能是把标签所在的地址加载到寄存器中

LDR伪指令用于装载一个32位的常数或地址到寄存器中

3.AAPCS中规定的ARM寄存器的使用规则是什么?

AAPCS中定义了ARM寄存器使用规则如下。

(1)在进行子函数调用时,当子函数中有参数时,子程序间通过寄存器R0、R1、

R2、R3来传递参数,如果参数多于4个,则多出的部分用堆栈传递,被调用的子程序在返回前无须恢复寄存器R0~R3的容。

(2)在子程序中,使用寄存器R4~R11来保存局部变量。

如果在子程序中使用到了R4~R11中的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值;

对于子程序中没有用到的寄存器则不必进行这些操作。

在Thumb程序中,通常只能使用寄存器R4~R7来保存局部变量。

(3)寄存器R12用作子程序间scratch寄存器(用于保存SP,在函数返回时使用

该寄存器出栈),记作ip。

在子程序间的连接代码段中常使用这种规则。

(4)寄存器R13用作数据栈指针,记作sp,sp中存放的是当前使用的栈的栈顶的

地址。

在子程序中寄存器R13不能用作其他用途。

寄存器sp在进入子程序时的值和退出子程序时的值必须相等。

(5)寄存器R14称为连接寄存器,记作lr。

它用于保存子程序的返回地址。

如果

在子程序中保存了返回地址,寄存器R14则可以用作其他用途。

(6)寄存器R15是程序计数器,记作pc。

它不能用作其他用途。

4.什么是联汇编?

在C代码中插入汇编语言的方法称为联汇编。

5.汇编代码中如何调用C代码中定义的函数?

(1)调用的C带有参数,需要使用R0~R3寄存器进行参数的传递,如果参数多于四个

多出来的部分使用堆栈传递。

(2)调用C程序时,使用BL跳转指令,格式为:

BL函数名

(3)如果C程序带有返回值,使用寄存器R0传递。

第五章

1.什么是GPIO?

GPIO的英文全称为General-PurposeIOports,也就是通用IO接口。

2.Exynos4412有几组GPIO端口?

Exynos4412有37组GPIO端口

3.编程实现利用Exynos4412的GPIO控制LED3闪烁。

.text定义一个代码段

.global_start定义一个全局的标号_start

_start:

汇编的入口,相当于c的main函数

ldrr0,=0x11000c20配置引脚的功能,将GPX1CON寄存器的[3:

0]这个位于设置为0x1

ldrr4,[r0]

bicr4,#0xf

orrr4,#0x1

strr4,[r0]

loop:

blled_on点亮LED3

bldelay延时

blled_off熄灭LED3

bloop相当于C程序中的while

(1),防止程序跑飞

led_on:

ldrr1,=0x11000c24配置GPX1_0引脚输出高电平

ldrr5,[r1]

orrr5,#0x1

strr5,[r1]

movpc,lr

led_off:

ldrr1,=0x11000c24配置GPX1_0引脚输出低电平

bicr5,#0x1

delay:

延时函数

movr7,#0x10000000

ms:

subr7,#1

cmpr7,#0

moveqpc,lr

bms

.end代表汇编的结束

第六章

1.异常向量表位于存储器的什么位置?

存储器映射地址0x00000000是为向量表(一组32位字)保留的。

也可通过设置CP15的C12寄存器将异常向量表的首地址设置在任意地址

2.IRQ或FIQ异常的返回指令是什么?

答;

SUBSPC,LR,#4

3.什么类型的异常优先级最高?

RESET异常

4.什么指令可以放在中断向量表

跳转指令(BLable)

LDR指令(LDRPC,Lable地址)

5.ARM中断控制器有什么作用?

ARM核只有两个外部中断输入信号nFIQ和nIRQ。

但对于一个系统来说,中断源可能多达几十个。

为此,在系统集成时,一般都会有一个中断控制器来处理异常信号。

这时候用户程序可能存在多个IRQ/FIQ的中断处理函数。

为了使从向量表开始的跳转始终能找到正确的处理函数入口,需要设置处理机制和方法。

不同的中断控制器处理方法不同。

6.编程实现按键K3的中断检测,当按键按下时打印相应信息。

#include"

exynos_4412.h"

uart.h"

/*中断处理函数*/

voiddo_irq()

{

intirq_num;

/*读中断号*/

irq_num=CPU0.ICCIAR&

0x3ff;

/*判断是哪个中断发生了*/

switch(irq_num)

{

//case57:

case58:

//key3按下了

/*清中断挂起位*/

EXT_INT41_PEND=0x4;

printf("

TheKEY3ispressed!

!

\n"

);

break;

//case59:

//case60:

default:

}

/*把当前发生的中断的中断号写回到EOIR寄存器,表示对当前中断已经处理完成,可以响应下一个中断*/

CPU0.ICCEOIR=CPU0.ICCEOIR&

(~(0x3ff<

<

0))|irq_num;

}

voidinterrupt_init()

/*1.配置GPX1_2引脚作为中断功能*/

GPX1.CON=GPX1.CON&

(~(0xf<

8))|(0xf<

8);

/*2.设置中断的触发方式--下降沿触发*/

EXT_INT41_CON=EXT_INT41_CON&

(~(0x7<

8))|(0x2<

/*3.打开GPIO控制器上的使能开关,让中断能到达GIC*/

EXT_INT41_MASK=EXT_INT41_MASK&

(~(0x1<

2));

/*GIC*/

/*4.打开58号中断在GIC中对应的开关*/

ICDISER.ICDISER1=ICDISER.ICDISER1|(0x1<

26);

/*5.把58号中断分发给CPU0来处理*/

ICDIPTR.ICDIPTR14=ICDIPTR.ICDIPTR14&

(~(0xff<

16))|(0x1<

16);

/*6.打开分发使能的总开关,让58号中断能到达CPU接口*/

ICDDCR=ICDDCR|(0x1<

0);

/*7.打开CPU接口到达所连接的处理器的总开关*/

CPU0.ICCICR=CPU0.ICCICR|(0x1<

/*8.设置优先级的门限,为了让所有中断都通过,把优先级设最低(值最大)*/

CPU0.ICCPMR=CPU0.ICCPMR&

0))|(0xff<

intmain()

//初始化按键中断

interrupt_init();

//初始化串口

uart_init();

while

(1);

return0;

第七章

1.串行通信与并行通信的概念是什么?

串行通信是指计算机与I/O设备之间数据传输的各位是按顺序依次一位接一位进行传送。

并行通信是指计算机与I/O设备之间通过多条传输线交换数据,数据的各位同时进行传送。

2.同步通信与异步通信的概念及区别是什么?

概念:

异步通信,是指数据传送以字符为单位,字符与字符间的传送是完全异步的,位与位之间的传送基本上是同步的。

同步通信,是指数据传送是以数据块(一组字符)为单位,字符与字符之间、字符部的位与位之间都同步。

区别:

异步通信:

(1)以字符为单位传送信息。

(2)相邻两字符间的间隔是任意长。

(3)因为一个字符中的波特位长度有限,所以需要的接收时钟和发送

时钟只要相近就可以。

(4)异步方式特点就是:

字符间异步,字符部各位同步。

同步通信:

(1)以数据块为单位传送信息。

(2)在一个数据块(信息帧),字符与字符间无间隔。

(3)因为一次传输的数据块中包含的数据较多,所以接收时钟与发送

时钟严格同步,通常要有同步时钟。

3.RS-232C串口通信接口规是什么?

略,参照本书7.1.7节

4.在Exynos4412串口控制器中,哪个寄存器用来设置串口波特率?

UBRDIVn和UFRACVALn

第八章

1.PWM输出波形的特点是什么?

若令频率不变,直接改变脉冲的宽度,亦即控制开关元件的导通时间;

比如现在是高电平导通,那么高电平时间越长,低电平时间越短,导通时间就长;

否则就越短。

2.编程实现输出占空比为2︰1、波形周期为9ms的PWM波形。

/*1.配置GPD0_0引脚作为PWM的输出功能*/

GPD0.CON=GPD0.CON&

0))|(0x2<

/*2.设置一级分频系数和二级分频系数,周期为1us*/

PWM.TCFG0=PWM.TCFG0&

0))|(99<

PWM.TCFG1=PWM.TCFG1&

0));

/*3.设置PWM输出脉冲的周期和占空比*/

PWM.TCNTB0=9000;

PWM.TCMPB0=3000;

/*4.打开手动更新,更新TCNTB的值到递减计数器*/

PWM.TCON=PWM.TCON|(1<

1);

/*5.关闭手动更新,打开自动重装载功能*/

3);

/*6.将手动装载关闭*/

PWM.TCON=PWM.TCON&

(~(1<

1));

/*7.开启PWM*/

PWM.TCON|=(0x1<

0);

第九章

1.在控制系统中为何要加入看门狗功能?

检测程序的正常运行,当程序跑死后,看门狗产生一个强制系统复位。

这样可以使程序重新运行,减小程序跑死的危害。

2.编程实现看门狗定时器作为普通16为定时器功能,定时1s循环打印信息。

(0x3ff<

case75:

//1S定时时间到

/*清中断*/

WDT.WTCLRINT=1;

ICDICPR.ICDICPR2=ICDICPR.ICDICPR2|(0x1<

11);

TheWDT_Timer1S!

/*1.打开75号中断在GIC中对应的开关*/

ICDISER.ICDISER2=ICDISER.ICDISER2|(0x1<

/*2.把75号中断分发给CPU0来处理*/

ICDIPTR.ICDIPTR18=ICDIPTR.ICDIPTR18&

24))|(0x1<

24);

/*3.打开分发使能的总开关,让75号中断能到达CPU接口*/

/*4.打开CPU接口到达所连接的处理器的总开关*/

/*5.设置优先级的门限,为了让所有中断都通过,把优先级设最低(值最大)*/

voidwdt_init(void)

/*1.设置一级预分频值=100000000/(249+1)=400000HZ*/

WDT.WTCON=WDT.WTCON|(249<

/*2.设置二级预分频值=400000/128=3125HZ*/

WDT.WTCON=WDT.WTCON|(0x3<

/*3.禁止看门狗定时器复位功能*/

WDT.WTCON=WDT.WTCON&

(~0x1);

/*4.使能看门狗定时器能够中断信号*/

WDT.WTCON=WDT.WTCON|(0x1<

2);

/*5.给递减计数器赋初值喂狗*/

WDT.WTDAT=3125;

WDT.WTCNT=3125;

/*6.打开看门狗定时器*/

WDT.WTCON=WDT.WTCON|(1<

5);

voidmain(void)

wdt_init();

while

(1)

3.编程实现1s不对看门狗实现喂狗操作,看门狗会自动复位。

unsignedinti=0;

/*3.使能看门狗定时器能够产生复位信号*/

WDT.WTCON=WDT.WTCON|1;

/*4.给递减计数器赋初值喂狗*/

/*5.打开看门狗定时器*/

/*1s不对看门狗实现喂狗操作,看门狗会自动复位*/

第十章

1.编程实现RTC的定时中断功能。

case77:

RTCINTP=RTCINTP|0x1;

13);

TheRTC-TICINT!

/*1.打开77号中断在GIC中对应的开关*/

/*2.把77号中断分发给CPU0来处理*/

ICDIPTR.ICDIPTR19=ICDIPTR.ICDIPTR19&

8))|(0x1<

RTCCON|=0x1<

8;

TICCNT=32768;

while

(1)

2.编程实现RTC定时器系统定时器功能。

case76:

//定时时间到

RTCINTP=RTCINTP|0x2;

12);

TheRTC-timerINT!

/*把当前发生的中断的中断号写回到EOIR寄存器,表示对当前中断已经处理完成,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1