嵌入式系统原理复习题
- 格式: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