嵌入式 复习.docx

上传人:b****6 文档编号:8159622 上传时间:2023-01-29 格式:DOCX 页数:17 大小:820.50KB
下载 相关 举报
嵌入式 复习.docx_第1页
第1页 / 共17页
嵌入式 复习.docx_第2页
第2页 / 共17页
嵌入式 复习.docx_第3页
第3页 / 共17页
嵌入式 复习.docx_第4页
第4页 / 共17页
嵌入式 复习.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

嵌入式 复习.docx

《嵌入式 复习.docx》由会员分享,可在线阅读,更多相关《嵌入式 复习.docx(17页珍藏版)》请在冰豆网上搜索。

嵌入式 复习.docx

嵌入式复习

ARM重点整理

第1章:

1、嵌入式系统定义:

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

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

简单讲,就是嵌入到对象体中的专用计算机系统。

从技术的角度定义:

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

从系统的角度定义:

嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密耦合在一起的计算机系统。

2、µC/OS-

定义:

一个源码公开、可移植、可裁剪、占先式的实时多任务操作系统,其绝大部分源码使用ANSIC写的。

特点:

提供源代码、可移植、可固化、可裁剪、可剥夺、多任务、可确定性、任务栈、系统服务、中断管理、稳定性与可靠性。

第2章:

1、ARM体系结构

ARM处理器为RISC芯片,其简单的结构使ARM内核非常小,这使得器件的功耗也非常低。

它具有经典RISC的特点:

(1)大的、统一的寄存器文件;

(2)装载/保存结构,数据处理操作只针对寄存器的内容,而不直接对存储器进行操作;

(3)简单的寻址模式;

(4)统一和固定长度的指令域,简化了指令的译码。

(5)每条数据处理指令都对算术逻辑单元和移位器控制,以实现ALU和移位器的最大利用;

(6)地址自动增加和减少寻址模式,优化程序循环;

(7)多寄存器装载和存储指令实现最大数据吞吐量;

(8)所有指令的条件执行实现最快速的代码执行。

2、三级流水线:

正常操作过程中,在执行一条指令的同时对下一条(第二条)指令进行译码,并将第三条指令从存储器中取出。

ARM处理器使用流水线来增加处理器指令流的速度,使得几个操作可同时进行,处理和存储器系统可连续操作,能提供0.9MIPS/MHz的指令执行速度。

3、处理器状态:

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

因此ARM7TDMI处理器有两种操作状态:

ARM状态:

32位,这种状态下执行的是字方式的ARM指令;

Thumb状态:

16位,这种状态下执行半字方式的Thumb指令。

注意:

两个状态之间的切换并不影响处理器模式或寄存器内容。

4、处理器模式:

ARM体系结构支持7种处理器模式,分别为:

用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式,如下表所示。

这样的好处是可以更好的支持操作系统并提高工作效率。

ARM7TDMI完全支持这七种模式。

处理器模式

说明

备注

用户(usr)

正常程序工作模式

不能直接切换到其它模式

特权模式

系统(sys)

用于支持操作系统的特权任务等

与用户模式类似,但具有可以直接切换到其它模式等特权

异常模式

快中断(fiq)

支持高速数据传输及通道处理

FIQ异常响应时进入此模式

中断(irq)

用于通用中断处理

IRQ异常响应时进入此模式

管理(svc)

操作系统保护代码

系统复位和软件中断响应时进入此模式

中止(abt)

用于支持虚拟内存和(或)存储器保护

在ARM7TDMI没有大用处

未定义(und)

支持硬件协处理器的软件仿真

未定义指令异常响应时进入此模式

4、内部寄存器:

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

所有的37个寄存器,分成两大类:

31个通用32位寄存器、6个状态寄存器。

在汇编语言中寄存器R0~R13为保存数据或地址值的通用寄存器。

它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。

寄存器R13常作为堆栈指针(SP)。

用于保存待使用的寄存器的内容。

R14为链接寄存器(LR),在结构上有两个特殊功能:

当使用BL指令调用子程序时,返回地址将自动存入R14中;

当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。

寄存器R15为程序计数器(PC),它指向正在取指的地址。

可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。

如果R15使用的方式超出了这些限制,那么结果将是不可预测的

5、CPSR标志位:

N运算结果的最高位反映在该标志位。

对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0;

Z指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;

C当进行加法运算(包括CMN指令),并且最高位产生进位时C=1,否则C=0。

当进行减法运算(包括CMP指令),并且最高位产生借位时C=0,否则C=1。

对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值,其它指令C通常不变;

V当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。

CPSR控制位:

CPSR的最低8位为控制位,当发生异常时,这些位被硬件改变。

当处理器处于一个特权模式时,可用软件操作这些位。

它们分别是:

中断禁止位;T位;模式位。

中断禁止位包括I和F位:

当I位置位时,IRQ中断被禁止;当F位置位时,FIQ中断被禁止。

T位反映了正在操作的状态:

当T位置位时,处理器正在Thumb状态下运行;当T位清零时,处理器正在ARM状态下运行。

模式位包括M4、M3、M2、M1和M0,这些位决定处理器的操作模式。

(注意:

不是所有模式位的组合都定义了有效的处理器模式,如果使用了错误的设置,将引起一个无法恢复的错误。

6、异常向量表(8个异常向量):

地址

异常类型

进入时的模式

进入时I的状态

进入时F的状态

0x00000000

复位

管理

禁止

禁止

0x00000004

未定义指令

未定义

I

F

0x00000008

软件中断

管理

禁止

F

0x0000000C

中止(预取)

中止

I

F

0x00000010

中止(数据)

中止

I

F

0x00000014

保留

保留

0x00000018

IRQ中断

禁止

禁止

F

0x0000001C

FIQ

快中断

禁止

禁止

7、异常向量的优先级:

当多个异常同时发生时,一个固定的优先级系统决定它们被处理的顺序:

8、异常的进入和退出

注意:

中断返回指令的寄存器列表(其中必须包括PC)后的“^”符号表示这是一条特殊形式的指令。

这条指令在从存储器中装载PC的同时(PC是最后恢复的),CPSR也得到恢复。

这里使用的堆栈指针SP(R13)是属于异常模式的寄存器,每个异常模式有自己的堆栈指针。

这个堆栈指针应必须在系统启动时初始化。

进入异常:

在异常发生后,ARM7TDMI内核会作以下工作:

1.在适当的LR中保存下一条指令的地址,当异常入口来自:

ARM状态,那么ARM7TDMI将当前指令地址加4或加8复制(取决于异常的类型)到LR中;

为Thumb状态,那么ARM7TDMI将当前指令地址加2,加4或加8(取决于异常的类型)复制到LR中;异常处理器程序不必确定状态。

2.将CPSR复制到适当的SPSR中;

3.将CPSR模式位强制设置为与异常类型相对应的值;

4.强制PC从相关的异常向量处取指。

退出异常:

当异常结束时,异常处理程序必须:

1.将LR中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同;

2.将SPSR的值复制回CPSR;

3.清零在入口置位的中断禁止标志。

注:

恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。

第3章:

1、ARM指令的基本格式如下:

{}{S},{,}

其中<>号内的项是必须的,{}号内的项是可选的。

各项的说明如下:

opcode:

指令助记符;cond:

执行条件;

S:

是否影响CPSR寄存器的值;

Rd:

目标寄存器;Rn:

第1个操作数的寄存器;

operand2:

第2个操作数;

灵活的使用第2个操作数“operand2”能够提高代码效率。

它有如下的形式:

#immed_8r——常数表达式;

Rm——寄存器方式;

Rm,shift——寄存器移位方式;

2、

(1)前索引

前索引也称为前变址,在数据传送之前,将先计算基地址与偏移量,其结果作为传送数据的存储地址。

例如:

LDRRd,[Rn,#0x04]!

LDRRd,[Rn,#-0x04]

备注:

其中的惊叹号‘!

’用于指示指令执行后,修改否基址寄存器。

2)后索引

后索引也称为后变址,是用基址寄存器中的地址值寻址,找出操作数进行操作,操作完成后,再把地址偏移量和基址相加/减,结果送到基址寄存器。

例:

LDRRd,[Rn],#0x04

STRRd,[Rn],#-0x08

在后索引中,都会修改基址寄存器(不需要惊叹号后缀)。

第4章:

1、两种常见的ARM编译开发环境

ADS/SDTIDE开发环境:

它由ARM公司开发,使用了CodeWarrior公司的编译器;

EmbestIDE开发环境:

集成了GNU开发工具的IDE开发环境,由GNU的汇编器as、交叉编译器gcc、和链接器ld等组成。

2、ATPCS(ARM-ThumbProduceCallStandard)是ARM程序和Thumb程序中子程序调用的基本规则。

目的是为了使单独编译的C语言程序和汇编程序之间能够相互调用。

这些基本规则包括子程序调用过程中

(1)寄存器的使用规则:

子程序间通过寄存器R0~R3来传递参数

这时,寄存器R0~R3可以记作A1~A4

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

这时,寄存器R4~R11可以记作V1~V8

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

(2)数据栈的使用规则:

根据堆栈指针指向位置的不同和增长方向的不同可以分为以下4种数据栈:

FD(FullDescending)满递减

ED(EmptyDescending)空递减

FA(FullAscending)满递增

EA(EmptyAscending)空递增

ATPCS规定数据栈为FD(满递减)类型,并且对数据栈的操作是8字节对齐的。

(3)参数的传递规则:

参数个数固定的子程序参数传递规则:

第一到四个整数参数,通过寄存器R0~R3来传递,其他参数通过数据栈传递;

参数个数可变的子程序参数传递规则:

当参数不超过4个时,可以使用寄存器R0~R3来传递参数。

当参数超过4个时,还可以使用数据栈来传递参数。

(4)存储器映射

概念:

通过地址映射的方法将各存储器分配到特定的地址范围后,这时用户所看见的存储器分布为存储器映射。

(5)MAM的工作原理

▪使能MAM模块后,ARM内核将通过MAM模块访问Flash存储器。

▪MAM模块中的数据总线宽度为128位,所以一次读取操作可以读出4条ARM指令或8条Thumb指令。

▪Flash存储器被分为两组,当CPU执行其中一组Flash内的指令时,另一组进行读取缓存操作。

▪每个Flash组包含预取指缓存和分支跟踪缓存。

▪预取指缓存区保存有将要执行的指令。

而分支跟踪缓存区保存有程序跳转后可能执行到的指令。

▪当程序向前跳转时,尝试从预取指缓存区取指。

▪当程序向后跳转时,尝试从分支跟踪缓存区取指。

▪如果程序跳转出缓存的范围,CPU将要停止,等待若干个周期,直到正确的指令从Flash中被读出。

(6)中断源

中断使能寄存器(VICIntEnable):

寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所示相同。

向某位写入1时,允许对应的中断源产生中断。

中断使能清零寄存器(VICIntEnClr):

与中断使能寄存器的功能相反,向某位写入1时,禁止对应的中断源产生中断。

中断选择寄存器(VICIntSelect):

寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所示相同。

向某位写入1时,对应中断源产生的中断为FIQ中断,否则为IRQ中断。

向量控制寄存器(VICVectCntl0~15):

VICVectCntlx[4:

0]:

分配给此优先级向量IRQ中断的中断源序号;

VICVectCntlx[5]:

该位为1,使能当前优先级的向量IRQ中断。

否则为禁止。

向量地址寄存器(VICVectAddr0~15):

该寄存器中存放对应优先级向量IRQ中断服务程序的入口地址。

向量地址寄存器(VICDefVectAddr):

VICDefVectAddr寄存器存放非向量中断服务程序的入口地址,当发生非向量中断时该寄存器中保存的地址存入VICVectAddr寄存器。

(7)IRQ中断设计实例

(8)UART0

*状态控制寄存器(U0LCR)

字长:

这些位控制数据长度。

00:

5位字符长度;01:

6位字符长度;

10:

7位字符长度;11:

8位字符长度;

停止位:

控制每帧数据包含的停止位个数。

0:

1个停止位;1:

2个停止位;

奇偶使能:

控制是否进行奇偶校验。

如果使能,发送时将添加一位校验位。

0:

禁止奇偶产生和校验;1:

使能奇偶产生和校验;

奇偶选择:

设置奇偶校验类型。

00:

奇数(数据位+校验位=奇数);

01:

偶数(数据位+校验位=偶数);

10:

校验位强制为1;11:

校验位强制为0;

间隔:

当该位为1时,输出引脚(TxD0)强制为逻辑0,可以引起通信对方(LPC2000)产生间隔中断。

在某些通信方式中,使用间隔中断作为通信的起始信号(如:

LINBus)。

0:

禁止间隔发送;1:

使能间隔发送;

除数锁存:

因为U0DLL和U0RBR/U0THR的地址重叠,通过设置该位可以指定其中某个寄存器操作。

0:

禁止访问除数锁存寄存器;1:

使能访问除数锁存寄存器;

**状态寄存器(U0LSR)

RDR:

接收数据就绪。

判断该位是否置一,决定能否从FIFO中读取数据。

0:

U0RBR为空;

1:

U0RBR中包含有效数据。

从接收FIFO中读走所有数据后,恢复为0。

OE:

溢出错误标志。

当U0RBR寄存器中已经有新的字符就绪,而接收FIFO已满时,该位置位。

0:

接收缓存区没有溢出;

1:

接收缓存区发生溢出错误。

PE:

奇偶校验错误。

在使能奇偶校验位之后,对所有接收的数据都进行奇偶校验,如果与U0LCR中的设置不符,将引起奇偶校验错误。

0:

没有发生奇偶校验错误;

1:

发生奇偶校验错误。

读操作使该位恢复为0。

FE:

帧错误标志。

当接收字符的停止位为0时,产生帧错误。

0:

没有发生帧错误;

1:

发生帧错误。

读取该位时恢复为0。

BI:

间隔中断标志。

在发送数据时,如果RXD0引脚保持低电平,将产生间隔中断。

发生间隔中断后,接收模块停止数据接收。

0:

没有发生间隔中断;

1:

发生间隔中断。

THRE:

反映U0THR是否为空,也可以认为发送FIFO是否为空。

0:

不为空;

1:

空。

对U0THR进行写操作,使该位恢复为0。

TEMT:

当发送移位寄存器和U0THR均为空时,该位置位。

0:

不为空;

1:

空。

对U0THR进行写操作,使该位恢复为0。

RXFE:

如果一个带有接收错误(如帧错误、奇偶错误或间隔中断)的字符装入U0RBR时,该位置位。

0:

U0RBR中没有接收错误,或U0FCR[0]为0;

1:

U0RBR中包含至少一个UART0Rx错误。

•使用UART0注意要点

•U0RBR与U0THR在同一地址上,但实际上是两个独立的寄存器,读操作时选择U0RBR,写操作时选择U0THR;

•U0DLL与U0RBR/U0THR、U0DLM与U0IER在同一地址上,通过除数访问位DLAB选择。

当该位为1时,选择U0DLL和U0DLM。

为0时,选择U0RBR/U0THR和U0IER;

•无论在U0FCR中是否使能FIFO,接收FIFO不能被禁止。

关闭FIFO后,接收FIFO只有一个字节缓冲;

•波特率计算公式:

U0DLM、U0DLL=FPCLK/(16×baud);

(9)UART0初始化代码

(9)I2C

I2C接口是Philips推出的一种串行总线方式,用于IC器件之间的通信。

它通过SDA(串行数据线)和SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并通过软件寻址识别每个器件,而不需要片选线。

(10)

SPI传输时序

•使用SPI接口的注意要点

•作主机时,SSEL引脚必须接上拉电阻,不能作为IO口使用;

•作主机时,在发送一字节数据的同时接收一字节数据;

•SPI时钟分频值必须大于或等于8;

•数据寄存器与内部移位寄存器之间没有缓冲区,写SPDR会使数据直接进入移位寄存器。

因此数据只能在上一次数据发送完成后写入SPDR寄存器。

(10)定时器

LPC2000系列“微控制器”具有两个功能强大的定时器,它们具有以下特性:

▪具有32位可编程预分频器;

▪多达4路捕获通道,可设置被捕获信号的特征;

▪4个32位匹配寄存器,可设置匹配发生后的动作;

▪4个对应于匹配寄存器的外部输出,可设置匹配输出的信号特征。

•使用定时器的注意要点

•定时计数器(TC)本身不能产生中断,只有与匹配寄存器发生匹配后才能引起中断事件;

•在定时器匹配发生后,可以不停止定时器工作,而动态修改匹配寄存器的值;

•定时器使用匹配功能的同时,还可以使用捕获功能,而不必分时使用;

•定时器计数时钟频率=Fpclk/(PR+1)

(11)IOS

μC/OS-II是一个完整的、可移植、可固化、可剪裁的占先式实时多任务内核。

•时钟节拍(时钟滴答)Tick,是一种定时器中断,可通过编程方式实现

•时钟节拍是一种特殊的中断,操作系统的心脏。

首先32位的整数OSTime加一。

对任务列表进行扫描,判断是否有延时任务应该处于准备就绪状态,最后进行上下文切换。

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

当前位置:首页 > 高等教育 > 经济学

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

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