嵌入式复习知识点

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、基本概念
1、嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应
应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

2、嵌入式处理器可以分为以下几大类:嵌入式微处理器;嵌入式微控制器;嵌
入式DSP处理器;嵌入式片上系统(SOC)。

3、对基于芯片的开发来说,应用程序一般是一个无限的循环,可称为前后台系
统或超循环系统。

循环中调用相应的函数完成相应的操作,这部分可以看成后台行为,后台也可以叫做任务级。

中断服务程序处理异步事件,这部分可以看成前台行为,前台也叫中断级。

4、实时操作系统是一段在嵌入式系统启动后首先执行的背景程序,用户的应用
程序是运行于RTOS之上的各个任务,RTOS根据各个任务的要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度、异常处理等工作。

5、常见的嵌入式操作系统有:嵌入式Linux;Windows CE;VxWorks;OSE;Nucleus;
eCos;μC/OS-II;uITRON。

6、可以把嵌入式系统的开发看作对一个项目的实施。

项目的生命周期一般分为
识别需求、提出解决方案、执行项目和结束项目4个阶段。

7、ARM7TDMI处理器使用流水线来增加处理器指令流的速度。

这样可使几个操作
同时进行,并使处理和存储器系统连续操作,ARM7TDMI的流水线分3级,分别为:取指;译码;执行。

8、ARM7TDMI处理器内核使用V4T版本的ARM结构,该结构包含32位ARM指令
集和16位Thumb指令集。

9、ARM体系结构支持7种处理器模式,分别为:用户模式、快中断模式、中断
模式、管理模式、中止模式、未定义模式和系统模式。

10、在ARM7TDMI处理器内部有37个用户可见的寄存器。

在不同的工作模式
和处理器状态下,程序员可以访问的寄存器也不尽相同。

11、寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序
状态保存寄存器(SPSR)”可以被访问。

每种异常都有自己的SPSR,在进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。

12、在异常发生后,ARM7TDMI内核会作以下工作:①在适当的LR中保存下
一条指令的地址;②将CPSR复制到适当的SPSR中;③将CPSR模式位强制设置为与异常类型相对应的值;④强制PC从相关的异常向量处取指。

13、当异常结束时,异常处理程序必须:①将LR中的值减去偏移量后存入
PC,偏移量根据异常的类型而有所不同;②将SPSR的值复制回CPSR;③清零在入口置位的中断禁止标志;④恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。

14、当nRESET信号被拉低时,ARM7TDMI处理器复位;当nRESET信号再次变
为高电平时,ARM处理器执行下列操作:①强制M[4:0]变为b10011(管理模式);②置位CPSR中的I和F位;③清零CPSR中的T位;④强制PC从地址0x00开始对下一条指令进行取指;⑤返回到ARM状态并恢复执行。

15、基于ARM内核的芯片具有许多的外设,这些外设访问的标准方法是使用
存储器映射的I/O,为外设的每个寄存器都分配一个地址。

通常,从这些地址装载数据用于读入,向这些地址保存数据用于输出。

16、ARM7TDMI(-S)具有32位ARM指令集和16位Thumb指令集,ARM指令集
效率高,但是代码密度低;而Thumb指令集具有较高的代码密度,却仍然保持ARM的大多数性能上的优势,它是ARM指令集的子集。

17、ARM处理器具有9种基本寻址方式。

寄存器寻址;立即寻址;寄存器移
位寻址;寄存器间接寻址;基址寻址;多寄存器寻址;堆栈寻址;块拷贝寻址;相对寻址。

18、LPC2000系列微控制器包含四大部分:ARM7TDMI-S CPU;ARM7局部总线
及相关部件;AHB高性能总线及相关部件;VLSI外设总线及相关部件
19、LPC2000系列微控制器将ARM7TDMI-S配置为小端模式(Little-endian)。

20、AHB外设分配了2M字节的地址范围,它位于4G字节ARM寻址空间的最
顶端。

每个AHB外设都分配了16KB的地址空间。

21、LPC2000系列微控制器的外设功能(除中断控制器)都连接到VPB总线。

AHB到VPB的桥将VPB总线与AHB总线相连。

VPB外设也分配了2M字节的地址范围,从3.5GB地址点开始。

每个VPB外设都分配了16KB的地址空间。

22、LPC2000系列微控制器的向量中断控制器(VIC)可以减少中断的响应时
间,最多可以管理32各中断请求;外部存储器控制器(EMC)支持4个BANK
的外部SRAM或Flash,每个BANK最多16MB;
23、LPC2000系列微控制器片内Flash编程方法:通过内置JTAG接口;使用
UART0通信,通过在系统编程(ISP);通过在应用编程(IAP);
24、对于Philips的LPC系列ARM微控制器,存储器重新映射区域一共为64
字节,分别为异常向量区(32字节)和紧随其后的32字节。

存储器重新映射的方法允许在不同模式下处理中断,重新映射的存储器区域在地址0x00000000~0x0000003F处。

25、CPU正常工作需要有合适的时钟信号,包括ARM7内核使用的CCLK时钟,
和芯片外设使用的PCLK时钟。

26、芯片上电后,晶体振荡器开始振荡。

因为振荡从开始到稳定需要一过程,
所以外部复位信号至少要保持10ms;在晶体振荡器保持稳定振荡,或者使用有源钟振时,外部复位信号可以缩短到不小于300ns;
27、EMC模块支持4个独立配置的存储器组,每个存储器组的总线宽度可设
置为8、16或者32位,但是同一个存储器组的器件必须宽度相同。

每个存储器组最大支持16MB寻址空间。

28、LPC2000系列作为“微控制器”,其GPIO特性就显得很重要。

它具有
如下的特性:可以独立控制每个GPIO口的方向(输入/输出模式);可以独立设置每个GPIO的输出状态(高/低电平);所有GPIO口在复位后默认为输入状态。

29、SPI(Serial Peripheral Interface——串行外设接口)总线系统是一
种同步串行外设接口,一般使用4条线:串行时钟线SCK、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SSEL。

30、FLASH存储器主要分为两种,一种为NOR型FLASH,另一种为NAND型
FLASH ;NOR主要应用在代码存储介质中,NAND适合于数据存储,
31、μC/OS-II是一个完整的、可移植、可固化、可剪裁的占先式实时多任
务内核。

32、μC/OS-II可以管理64个任务,然而,μC/OS-II的作者建议用户保留
8个给μC/OS-II。

这样,留给用户的应用程序最多可有56个任务。

33、根据μC/OS-II的要求,移植μC/OS-II到一个新的体系结构上需要提供
2个或3个文件:它们是:OS_CPU.H(C语言头文件);OS_CPU_C.C(C程序源文件); OS_CPU_A.ASM(汇编程序源文件)
二、硬件设计
1、请用结构框图的形式描述出LPC2000系列ARM微处理器内部的各组成部分及它们之间的相互关系。

2、用图描述出LPC2000系列微处理器存器存储器地址空间分布图。

3、图为LPC2000系列处理器锁相环的内部结构,若系统要求:FOSC =10MHz 、CCLK = 60MHz ;FCCO 范围:156MHz ~320MHz ,请确定回路锁定后,PLL 配置寄存器(PLLCFG)的MSEL 位和PSEL 位。

答:回路锁定后,由反馈控制理论知识可推导出: FOSC = F CCO / (2P × M) FCLK = FOSC × M
128KB Flash(LPC2114/2212)
256KB Flash(LPC2124/2214) 16KB SRAM
8KB BootBlock 2MB VPB 外设 2MB AHB 外设
0x00000000
0xFFFFFFFF
保留给片内存储器使用 保留给片内存储器使用 保留给外部储器使用
0x40000000
0xE0000000 0x80000000
0xF0000000 0x00020000 地址空间
3.5G 4G 2G
1G
①计算M值:M= CCLK/FOSC =6 ;
②设置MSEL位:写入值为(M-1)=5;
③设置PSEL位:P=FCCO/(CCLK×2)=(156~320)/120=1.3~2.67
所以P取整数2,PSEL写入值为2。

4、嵌入式最小系统由哪几部分构成?请画出最小系统结构框图。

5、LPC2000系列处理器的外部存储器控制器包含4个寄存器BCFG0、BCFG1、BCFG2和BCFG3,它们分别对应一个存储器组,请写出每个寄存器组的地址范围。

三、软件设计
1、在ARM模式下,请编写一个完整的汇编语言程序,要求:实现地址0x40003100中的内容从0开始,进行递增加1操作,当其内容大于100时,又重新为0,开始下一次循环。

COUNT EQU 0x40003100 ; 定义一个变量,地址为0x40003100
AREA Example,CODE,READONLY ; 声明代码段Example
ENTRY ; 标识程序入口
CODE32 ; 声明32位ARM指令
START LDR R1,=COUNT ; R1 <= COUNT
MOV R0,#0 ; R0 <= 0
STR R0,[R1] ; [R1] <= R0,即设置COUNT为0
LOOP LDR R1,=COUNT
LDR R0,[R1] ; R0 <= [R1]
ADD R0,R0,#1 ; R0 <= R0 + 1
CMP R0,#100 ; R0与10比较,影响条件码标志
MOVHS R0,#0 ; 若R0大于等于10,则此指令执行,R0 <= 0
STR R0,[R1] ; [R1] <= R0,即保存COUNT
B LOOP
END
2、X和n均为无符号整数,计算X的n次方的值,要求采用ARM汇编语言和子函数调用的模块化结构形式编写一个完整的汇编程序。

; 功能:计算X的n次方的值
; 说明:X和n均为无符号整数
X EQU 9 ; 定义X的值为9
n EQU 8 ; 定义n的值为8
AREA Example4,CODE,READONLY ; 声明代码段Example4
ENTRY ; 标识程序入口
CODE32 ; 声明32位ARM指令
START LDR SP,=0x40003F00 ; 设置堆栈(满递减堆栈,使用STMFD/LMDFD指令)
LDR R0,=X
LDR R1,=n
BL POW ; 调用子程序POW,返回值为R0 HALT B HALT
; 名称:POW
; 功能:整数乘方运算。

; 入口参数:R0 底数
; R1 指数
; 出口参数:R0 运算结果
; 说明:本子程序不考虑溢出问题
POW
STMFD SP!,{R1-R12,LR} ; 寄存器入栈保护
MOVS R2,R1 ; 将指数值复制到R2,并影响条件码标志
MOVEQ R0,#1 ; 若指数为0,则设置R0=1
BEQ POW_END ; 若指数为0,则返回
CMP R2,#1
BEQ POW_END ; 若指数为1,则返回。

(此时R0没有被更改)
MOV R1,R0 ; 设置DO_MUL子程序的入口参数R0和R1
SUB R2,R2,#1 ; 计数器R2 = 指数值减1
POW_L1 BL DO_MUL ; 调用DO_MUL子程序,R0 = R1 * R0 SUBS R2,R2,#1 ; 每循环一次,计数器R2减1
BNE POW_L1 ; 若计数器R2不为0,跳转到POW_L1 POW_END LDMFD SP!,{R1-R12,PC} ; 寄存器出栈,返回
; 名称:DO_MUL
; 功能:32位乘法运算。

; 入口参数:R0 乘数
; R1 被乘数
; 出口参数:R0 计算结果
; 说明:本子程序不会破坏R1
DO_MUL MUL R0,R1,R0 ; R0 = R1 * R0
MOV PC,LR ; 返回
END
3、采用如图所示的硬件电路对蜂鸣器B进行控制,采用软件延时方法,控制蜂鸣器发出周期性的蜂鸣声。

#include "config.h"
#define BEEPCON 0x00000080 // P0.7引脚控制B1,低电平蜂鸣
void DelayNS(uint32 dly)
{
uint32 i;
for(; dly>0; dly--)
{
for(i=0; i<5000; i++);
}
}
int main(void)
{
PINSEL0 = 0x00000000; // 设置管脚连接GPIO IO0DIR = BEEPCON; // 设置I/O为输出
while(1)
{
IO0SET = BEEPCON; // BEEPCON = 1
DelayNS(10);
IO0CLR = BEEPCON; // BEEPCON = 0
DelayNS(10);
}
return(0);
}
4、电路如下图所示,用处理器的GPIO直接驱动LED;当IO口输出高电平时LED熄灭,输出低电平时LED点亮。

请编写相应的程序,控制4个LED产生流水灯效果,即LED1,LED2,LED3,LED4依次点亮。

P0.0
P0.1
P0.2
P0.3
#include "config.h"
#define LEDCON 0x0000000f
const uint32 DISP_TAB[8] = { 0xfffffff1, 0xfffffff2, 0xfffffff4, 0xfffffff8 };
void DelayNS(uint32 dly)
{ uint32 i;
for(; dly>0; dly--)
{
for(i=0; i<5000; i++);
}
int main(void)
{ uint8 i;
PINSEL0 &= 0xffffff00; //配置P0.0,P0.1,P0.2,P0.3为GPIO
IO0DIR |= LEDCON; // 配置LED控制I/O方向
while(1)
{
i = 0 ;
for(i=0; i<4; i++)
{
IO0CLR = DISP_TAB[i]; // 输出LED显示数据
DelayNS(10); // 延时
IO0SET = 0xffffffff;
}
}
return(0);
}
5、某系统的键盘硬件电路如图所示,采用的处理器为LPC2000 系列处理器,请
编写该系统的键盘服务程序。

void KeyInit(void)
{
PINSEL1 &= ~(0xff<<6); //设置P0.19,P0.20,P0.21,P0.22为GPIO模式
FIO0DIR &= ~(0x0f<<19); //设置P0.19,P0.20,P0.21,P0.22为GPIO输入模式
PINMODE1 &= ~(0xff<<6); //设置P0.19,P0.20,P0.21,P0.22为片内上拉电阻}
uint32 ReadKeyValue(void)
{
return( ~(FIO0PIN>>19) & 0x0000000f );
}
void CsyKeyServer( uint32 KeyValue ) //按键处理程序实体代码
{
uint32 InputKey;
InputKey = KeyValue ;
switch(InputKey)
{
case ESCKEY:
break;
case UPKEY: // 状态1,该键不响应
break;
case DOWNKEY: // 状态1,该键不响应
break;
case ENTERKEY: // 状态1,该键不响应
break;
default:
break;
}
}
void TaskKey(void *pdata)
{
uint32 KeyValue=0x0 ;
pdata = pdata;
while (1)
{
OSTimeDly(1);
KeyValue = ReadKeyValue();
if( (KeyValue == 0)||(KeyValue>16) ) continue; //无键按下,退出本次循环,重新开始下一次循环
////// 有键按下,点亮LCD背光;等待一段时间就熄灭
LCDCTRL_Set(); // P1.19控制LCD的背光显示
sDispPicProp.LcdBlackOutTimeCounter = 0 ; // 复位清0 //LCD背光等待时间,该计数器达到一定值之后,LCD背光自动灭
///////按键具体处理代码 begin
CsyKeyServer( KeyValue );
while(1)
{
OSTimeDly(1); //延时20ms去抖
KeyValue = ReadKeyValue();
if( (KeyValue == 0)||(KeyValue>16) ) break; //按键已经释放,退出循环,等待下一次按键
}
OSTimeDly(OS_TICKS_PER_SEC/50);
}
}。

相关文档
最新文档