嵌入式系统原理复习题

  • 格式:doc
  • 大小:45.00 KB
  • 文档页数:6

-

复习提纲

一、嵌入式系统及ARM(Advanced RISC machines)处理器概述

1. 嵌入式系统的概念〔IEEE定义和国内普遍认同的定义〕

根据IEEE〔国际电气和电子工程师协会〕的定义:

嵌入式系统是"用于控制、监视或者辅助操作机器和设备的装置〞;

嵌入式系统是以应用为中心,以计算机技术为根底,软、硬件可裁剪,

适应应用系统对功能、可靠性、本钱、体积、功耗等严格要求的专用

计算机系统。

2. 嵌入式系统的组成〔硬件组成和软件组成〕

硬件+软件

硬件:由嵌入式微处理器、外围硬件设备组成

软件:包括底层系统软件和用户应用软件

二、CM4体系构造

1. CM4内核三级流水线的三个阶段,如假设*嵌入式处理器有3级流水线,每级流水线所耗时间均为为2ms,则执行25条指令需要消耗时间?

三级流水线,分别是取指、译码和执行;

为了兼容Thumb代码,读取PC会返回当前指令地址+4。偏移量总是4, 不管是执行16位指令还是32位指令, 这保证了Thumb和Thumb-2指 令之间的一致性。

ARM的完整拼写形式为Acorn RISC Machine,CM4处理器内部正在执行的指令的地址为0*08000100,此时读取PC的值,该值为 0*08000104 。

2. CM4内核读取指令及访问数据的三套总线、CM4内核的两种运行模式、两种权限级别,上电复位后是什么模式什么级别

三套总线:I-code总线 D-code总线 系统总线

CM4处理器有两种模式:线程模式、handler模式,还支持两种操作级 别:特权级、非特权级〔用户级〕。

复位后是特权级下的线程模式

3. CM4内核的存放器组中,各个存放器的作用及各个存放器的访问权限级别、CM4的复位序列

R0-R7 低组通用存放器;R8-R12高组通用存放器;R13堆栈存放器;(MSP,PSP)R14连接存放器;R15程序计数存放器;*PSR程序状态存放器;

程序状态存放器(*PSR)

程序状态存放器在其内部又被分为三个子状态存放器:

应用程序状态存放器〔 APSR〕

中断状态存放器〔 IPSR〕

执行状态存放器〔 EPSR〕

通过 MRS/MSR 指令,这 3 个 PSRs 即可以单独访问,也可以组合访问〔 2 个组合, 3 个

组合都可以〕。当使用三合一的方式访问时,应使用名字" *PSR〞或者"

PSR〞。

三、 CM4程序设计

Corte*-M4内核在执行指令时,只有一种状态,那就是Thumb状态。

1. CM4寻址方式、常用指令: MOV AND -

ORR〔有1为1,为0为0〕

BIC〔清0〕

EOR〔异或,相异出1〕 SUB ADD TST TEQ CMP

LDR〔加载〕

STR〔存储〕

LDRB〔8位无符号字加载〕

STRB〔8位无符号字存储〕

LDM〔多存放器加载〕

STM〔多存放器存储〕

B〔无条件跳转〕 BL B* BL*

MRS〔读取特殊存放器的值到通用存放器〕

MSR〔将通用存放器的值写到特殊存放器〕

伪指令:LDR

2. 指令的条件码如:NE〔不等于〕 EQ〔等于〕 LT〔小于〕 GT〔大于〕等,后缀"S〞"!〞,什么样的指令会影响APSR存放器的标志位

"S〞后缀:指令中使用"S〞后缀,指令执行后状态存放器的条件标志 位将被刷新;不使用"S〞后缀时,指令执行后状态存放器的条件标志 位不会发生变化。

如果指令地址表达式中不含"!〞后缀,则基址存放器中的地址不会发 生变化,指令中含有则变化

N E C V S

3. 伪操作:伪操作主要有符号定义伪操作、数据定义伪操作、汇编控制伪操作及其杂项伪操作等

DCB〔字节〕、DCD〔字〕、AREA〔用于定义一个代码段或数据段〕、END〔用于指示源程序完毕〕、EQU〔用于定义字符名称〕、IMPORT〔IMPORT用于通知编译器当前符号不在本文件中〕、E*PORT〔E*PORT〔或GLOBAL〕用于声明符号可以被其他文件引用。〕

4. ATPCS规则中存放器的使用、参数传递、子程序返回的规则

子程序间通过存放器R0、R1、R2、 R3来传递参数。如果参数多于4 个,则多出的局部用数据栈传递。被调用的子程序在返回前无需恢复寄 存器R0-R3的内容。

在子程序中,使用存放器R4-R11来保存局部变量.如果在子程序中使 用到了存放器R4-R11中的*些存放器,子程序进入时必须保存这些寄 存器的值,在返回前必须恢复这些存放器的值;对于子程序中没有用到 的存放器则不必进展这些操作。在Thumb程序中,通常只能使用存放 器R4-R7来保存局部变量。

存放器R13用作数据栈指针,记作sp。在子程序中存放器R13不能用 作其他用途。存放器sp在进入子程序时的值和退出子程序时的值必须相 等。

连接存放器R14〔lr〕。它用于保存子程序的返回地址。如果在子程序中 保存了返回地址,存放器R14则可以用作其他用途。

存放器R15是程序计数器,记作pc。它不能用作其他用途。

ATPCS规定堆栈为FD类型,即满递减堆栈。并且堆栈的操作是8字节 对齐。 -

t

子程序结果返回规则

1.结果为一个32位的整数时,可以通过存放器R0返回。

2.结果为一个64位整数时,可以通过R0和R1返回,依此类推。

3.结果为一个浮点数时,可以通过浮点运算部件的存放器f0,d0或者s0来返回。

4.结果为一个复合的浮点数时,可以通过存放器f0-fN或者d0-dN来返回。

5.对于位数更多的结果,需要通过调用内存来传递.

5. C程序如何调用汇编程序,汇编程序如何调用C程序

在汇编程序中使用E*PORT 伪指令声明本子程序,使其它程序可以调 用此子程序。在C 语言程序中使用e*tern 关键字声明外部函数(声明要 调用的汇编子程序),即可调用此汇编子程序。

在汇编程序中使用IMPORT 伪指令声明将要调用的C 程序函数.

在调用C

程序时,要正确设置入口参数,然后使用BL 调用.

四、STM32F439 GPIO

1. 重点掌握GPIO相关存放器的定义方法及各个存放器的主要功能

2. 能够编程操控*一组GPIO

#define GPIOF_MODER (*(volatile unsigned int *)0*40021400)

#define GPIOF_OTYPER (*(volatile unsigned int *)0*40021404)

#define GPIOF_OSPEEDR (*(volatile unsigned int *)0*40021408)

#define GPIOF_PUPDR (*(volatile unsigned int *)0*4002140C)

#define GPIOF_ODR (*(volatile unsigned int *)0*40021414)

#define RCC_AHB1ENR (*(volatile unsigned int *)0*40023830)

void Delay(unsigned int nCount)

{

for(; nCount != 0; nCount--);

}

void Port_init(void)

{

RCC_AHB1ENR |= 0*20;

GPIOF_MODER &= (~(0*ff<<14));

GPIOF_MODER |= (0*55<<14);

GPIOF_OTYPER &= (~(0*f<<7));

GPIOF_OSPEEDR &= (~(0*ff<<14));

GPIOF_OSPEEDR |= (0*aa<<14);

GPIOF_PUPDR &= (~(0*ff<<14));

}

int led(void)

{

Port_init();

while (1)

{

GPIOF_ODR |= (0*f<<7); /*ϨÃðLEDµÆ*/ -

Delay(0*FFFFF);

GPIOF_ODR &= (~(0*8<<7)); /*µãÁÁLEDµÆ*/

Delay(0*FFFFF);

GPIOF_ODR |= (0*f<<7); /*ϨÃðLEDµÆ*/

Delay(0*FFFFF);

GPIOF_ODR &= (~(0*4<<7)); /*µãÁÁLEDµÆ*/

Delay(0*FFFFF);

GPIOF_ODR |= (0*f<<7); /*ϨÃðLEDµÆ*/

Delay(0*FFFFF);

GPIOF_ODR &= (~(0*2<<7)); /*µãÁÁLEDµÆ*/

Delay(0*FFFFF);

GPIOF_ODR |= (0*f<<7); /*ϨÃðLEDµÆ*/

Delay(0*FFFFF);

GPIOF_ODR &= (~(0*1<<7)); /*µãÁÁLEDµÆ*/

Delay(0*FFFFF);

//

}

}

五、STM32F439 时钟树

1.追根溯源,STM32F439的时钟源有哪4个?

HSI 、HSE 、LSI 、LSE

STM32F439时钟树中,系统时钟SYSCLK的来源有三个,分别是:HSI、 HSE和PLLCLK。

系统时钟SYSCLK的来源有哪些?HSI 、HSE

通过设置哪个存放器能对系统时钟SYSCLK的来源进展选择?RCC_CFGR

主锁相环PLL时钟是否就绪通过哪个存放器判断?RCC_CR

要把GPIOF的时钟使能,需要设置哪个存放器?RCC_AHB1ENR

各个不同总线上时钟的分频参数通过哪个存放器设置"RCC_PLLCFGR

六、STM32F439的串口

1. 异步串行通信时的数据格式

起始位

数据位〔8位或9位〕

奇偶校验位〔第9位〕

停顿位〔1,1.5,2位〕

波特率设置

2. STM32F439的USART1是否能够发送数据或是否收到数据可通过哪个存放器判断?USART_SR