嵌入式系统原理复习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
复习提纲
一、嵌入式系统及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
发送数据时需要把数据写入哪个存放器?USART_DR
收到的数据通过读取哪个存放器得知?USART_SR
3.重点掌握串口初始化操作,初始化操作中相关存放器的设置。
七、CM4异常处理、NVIC、E*TI
1.哪些异常的优先级不能编程配置?复位、NMI、硬fault
当CM4处理器的一个异常或中断被触发,硬件自动完成哪些工作?
所有异常都在处理模式中操作。
出现异常时,自动将处理器状态保存到堆栈中,并在中断效劳程序〔ISR〕完毕时自动从堆栈中恢复。
在状态保存的同时取出向量快速地进入中断。
异常进入
当CM4处理器的一个异常或中断被触发,硬件自动完成如工作:
〔1〕CM4中断控制器根据当前状态和中断的抢占级别来确定是响应该中断,还是先挂起,并更新相应的存放器状态。
〔2〕通过Dbus保存处理器状态,将下面的8个存放器按顺序保存入SP〔MSP 或PSP〕指向的系统堆栈。
〔3〕CM4通过Ibus从异常向量表取得对应的中断向量,并开场读取ISR指令,这一步几乎与压栈同时进展。
〔4〕CM4处理器更新到handler模式,SP切换到MSP,更新IPSR为新响应的异常编号,更新PC,更新LR存放器为E*C_RETURN。
2.NVIC的存放器ICTR(用于显示NVIC支持的中断线数目)、NVIC_ISERn〔设
置中断使能〕、NVIC_ICERn〔中断使能去除〕、NVIC_ISPRn〔中断挂起
设置存放器〕、NVIC_ICPRn〔中断挂起去除存放器〕、NVIC_IPRn〔中断
优先级存放器〕、NVIC_AIRCR的主要用于什么设置?
3.E*TI屏蔽*个中断线的中断请求需要设置哪个存放器?E*TI_IMR中断线
触发中断的方式〔上升沿、下降沿〕需要设置的存放器是?(E*TI_RTSR、E*YI_FTSR)
八、定时器部件
通用定时器可以向上〔递增〕计数、向下〔递减〕计数、向上向下双向〔中心对齐〕计数模式。
1.独立看门狗的时钟来源是?LSI
构造框图与工作原理?
在键值存放器〔IWDG_KR)中写入0*CCCC,开场启用独立看门狗。
此时计数器开场从其复位值0*FFF递减,当计数器值计数到尾值0*000时会产生一个复位信号〔IWDG_RESET)。
无论何时,只要在键值存放器IWDG_KR中写入0*AAAA〔通常说的喂狗〕, 自动重装载存放器IWDG_RLR的值就会重新加载到计数器,从而防止看门狗复位。
如果程序异常,就无法正常喂狗,从而系统复位。
超时时间如何计算?如何喂狗、取消写保护、启动看门狗?
Tout=(4*2^prer)*(rlr+1)/32; //单位为毫秒
Tout为看门狗溢出时间〔单位为ms〕
prer为看门狗时钟预分频值(IWDG_PR PR[2:0]的值:0-7)
4*2^prer最大不超过256
rlr为看门狗的重装载值〔IWDG_RLR的值〕
低速内部时钟LSI=32 KHz
M
IWDG_KR=0*AAAA;//喂狗
IWDG_KR =0*5555;
IWDG_RLR=0*5555;//取消写保护
IWDG_KR =0*CCCC;//启动看门狗
2.STM32F439的定时器有哪几种?
高级定时器、通用定时器、根本定时器
通用定时器TIM3、TIM14分别由哪些局部组成?
时钟选择与触发控制电路
时基单元
输入捕获通道
输出比拟通道
选择内部时钟源时,溢出时间如何计算?
Tout= ((ARR+1)*(PSC+1))/Fck_psc;
其中:
Fck_psc :TIM3的输入时钟频率〔单位为Mhz〕
Tout:TIM3溢出时间〔单位为us〕
ARR:自动重载值
PSC:预分频器值
3.TIM14输出PWM波形的原理
定时器TIM14工作在向上计数 PWM模式,且当T<CCR1 时,输出0,当T>=CCR1 时输出1。
则就可以得到如上的 PWM示意图:当 T 值小于 CCR1 的时候, IO 输出低电平(0),当 T 值大于等于 CCR1 的时候,IO 输出高电平(1),当 T 到达 ARR 值的时候,重新归零,然后重新向上计数,依次循环。
改变 CCR1 的值,就可以改变 PWM 输出的占空比,改变 ARR 的值,就可以改变 PWM 输出的频率。
九、CM4地址空间划分
1. CM4内核访问的地址空间有多大?划分成了哪8个局部?
4GB的地址空间被分为8个相等的局部,每个局部0.5GB,分别是Code、SRAM、Peripheral、2个RAM区、2个Device区、System。