嵌入式系统讲义.docx
- 文档编号:28873110
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:29
- 大小:215.84KB
嵌入式系统讲义.docx
《嵌入式系统讲义.docx》由会员分享,可在线阅读,更多相关《嵌入式系统讲义.docx(29页珍藏版)》请在冰豆网上搜索。
嵌入式系统讲义
第1章嵌入式系统概述
1.嵌入式系统定义:
以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
2.嵌入式处理器分类:
嵌入式微处理器;
嵌入式微控制器;
嵌入式DSP处理器;
嵌入式片上系统(SOC)。
3.常见嵌入式操作系统
嵌入式Linux、WinCE、VxWorks、Nucleus、eCos、μC/OS-II、uITRON、QNX
4.嵌入式实时操作系统的特性:
切换时间和中断延迟时间确定
优先级中断和调度
抢占式调度
同步
第3章ARM7体系结构
1.ARM处理器为32位RISC芯片。
RISC处理器的特点:
大的、统一的寄存器文件;
装载/保存结构,数据处理操作只针对寄存器的内容,而不直接对存储器进行操作
简单的寻址模式
统一和固定长度的指令域,简化了指令的译码
2.ARM7TDMI-S含义:
T-支持高密度16位的Thumb指令集
D-支持片上调试
M-支持64位乘法
I-支持EmbededICE观察硬件
S-ARM7TDMI的可综合(synthesizable)版本(软核)
3.ARM7TDMI的流水线分3级,分别为:
取指译码执行
流水线上各指令的地址
流水线工位
描述
ARM指令集
Thumb指令集
PC
PC
取指
指令从存储器中取出
PC-4
PC-2
译码
对指令使用的寄存器进行译码
PC-8
PC-4
执行
从寄存器组中读出寄存器,执行移位和ALU操作,寄存器被写回到寄存器组中
4.计算机结构说明:
“冯·诺依曼”结构:
把代码作为一种特殊的数据来操作,指令总线和数据总线及其存储区域是统一的;
“哈佛”结构:
指令总线和数据总线及其存储区是分开、独立的。
5.ARM7TDMI两种操作状态:
ARM状态:
32位,这种状态下执行的是字方式的ARM指令;
Thumb状态:
16位,这种状态下执行半字方式的Thumb指令。
6.处理器状态切换
;从Arm状态切换到Thumb状态
LDRR0,=Lable+1BXR0
;从Thumb状态切换到ARM状态
LDRR0,=LableBXR0
7.处理器模式
用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式
处理器模式
说明
备注
用户(usr)
正常程序工作模式
不能直接切换到其它模式
系统(sys)
用于支持操作系统的特权任务等
与用户模式类似,但具有可以直接切换到其它模式等特权
快中断(fiq)
支持高速数据传输及通道处理
FIQ异常响应时进入此模式
中断(irq)
用于通用中断处理
IRQ异常响应时进入此模式
管理(svc)
操作系统保护代码
系统复位和软件中断响应时进入此模式
中止(abt)
用于支持虚拟内存和/或存储器保护
在ARM7TDMI没有大用处
未定义(und)
支持硬件协处理器的软件仿真
未定义指令异常响应时进入此模式
8.ARM状态各模式下的寄存器
A.其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。
B.寄存器R8~R12有两个分组的物理寄存器。
一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。
这样在发生FIQ中断后,可以加速FIQ的处理速度。
C.寄存器R13常作为堆栈指针(SP)。
在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。
但是在Thumb指令集中存在使用R13的指令
D.R14为链接寄存器(LR),在结构上有两个特殊功能:
●在每种模式下,模式自身的R14版本用于保存子程序返回地址;
●当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。
E.寄存器R15为程序计数器(PC),它指向正在取指的地址。
可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。
9.R15的限制
正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。
由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。
10.程序状态寄存器(CPSR)
M[4:
0]
模式
M[4:
0]
模式
10000
用户
10111
中止
10001
快中断
11011
未定义
10010
中断
11111
系统
10011
管理
11.异常入口/出口汇总
异常或入口
返回指令
之前的状态
备注
ARMR14_x
ThumbR14_x
BL
MOVPC,R14
PC+4
PC+2
此处PC为BL,SWI,为定义的指令取指或预取指中止指令的地址
SWI
MOVSPC,R14_svc
PC+4
PC+2
未定义的指令
MOVSPC,R14_und
PC+4
PC+2
预取指中止
SUBSPC,R14_abt,#4
PC+4
PC+4
快中断
SUBSPC,R14_fiq,#4
PC+4
PC+4
此处PC为由于FIQ或IRQ占先而没有被执行的指令的地址
中断
SUBSPC,R14_irq,#4
PC+4
PC+4
数据中止
SUBSPC,R14_abt,#8
PC+8
PC+8
此处PC为产生数据中止的装载或保存指令的地址。
复位
无
—
—
复位时保存在R14_svc中的值不可预知。
中断处理代码的开始部分和退出部分
SUBLR,LR,#4;计算返回地址
STMFDSP!
{R0-R3,LR};保存使用到的寄存器
...
LDMFDSP!
{R0-R3,PC}^;中断返回
12.异常向量
地址
异常类型
进入时的模式
进入时I的状态
进入时F的状态
0x00000000
复位
管理
禁止
禁止
0x00000004
未定义指令
未定义
I
F
0x00000008
软件中断
管理
禁止
F
0x0000000C
中止(预取)
中止
I
F
0x00000010
中止(数据)
中止
I
F
0x00000014
保留
保留
—
—
0x00000018
IRQ
中断
禁止
F
0x0000001C
FIQ
快中断
禁止
禁止
13.复位流程:
●强制M[4:
0]变为b10011(管理模式);
●置位CPSR中的I和F位;
●清零CPSR中的T位;
●强制PC从地址0x00开始对下一条指令进行取指;
●返回到ARM状态并恢复执行。
14.存储器格式
小端存储器系统:
在小端格式中,高位数字存放在高位字节中。
因此存储器系统字节0连接到数据线7~0。
大端存储器系统:
在大端格式中,高位数字存放在低位字节中。
因此存储器系统字节0连接到数据线31~24。
第4章ARM7TDMI(-S)指令系统
1.堆栈寻址
▪满递增:
堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。
指令如LDMFA、STMFA等;
▪空递增:
堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。
指令如LDMEA、STMEA等;
▪满递减:
堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。
指令如LDMFD、STMFD等;
▪空递减:
堆栈向下增长,堆栈指针向堆栈下的第一个空位置。
指令如LDMED、STMED等。
2.书写格式
AREAExample1,CODE,READONLY;声明代码段Example1
ENTRY;标识程序入口
CODE32;声明32位ARM指令
STARTMOVR0,#0;设置参数
MOVR1,#10
LOOPBLADD_SUB;调用子程序ADD_SUB
BLOOP;跳转到LOOP
ADD_SUB
ADDSR0,R0,R1;R0=R0+R1
MOVPC,LR;子程序返回
END
3.指令格式
opcode:
指令助记符;cond:
执行条件;
S:
是否影响CPSR寄存器的值;
Rd:
目标寄存器;Rn:
第1个操作数的寄存器;
operand2:
第2个操作数;
4.条件码
CMPR0,R1;R0与R1比较
ADDHIR0,R0,#1;若R0>R1,则R0=R0+1
ADDLSR1,R1,#1;若R0≤1,则R1=R1+1
5.指令
LDRRd,addressing
STRRd,addressing
LDM{mode}Rn{!
},reglist
STM{mode}Rn{!
},reglist
MOVRd,operand2
ADDRd,Rn,operand2
SUBRd,Rn,operand2
RSBRd,Rn,operand2
ADCRd,Rn,operand2
ANDRd,Rn,operand2
ORRRd,Rn,operand2
EORRd,Rn,operand2
BICRd,Rn,operand2
CMPRn,operand2
TSTRn,operand2
MULRd,Rm,Rs
Blabel
BLlabel
启动代码分析:
SVC_STACK_LEGTHEQU0
FIQ_STACK_LEGTHEQU0
IRQ_STACK_LEGTHEQU256
ABT_STACK_LEGTHEQU0
UND_STACK_LEGTHEQU0
NoIntEQU0x80
NoFIQEQU0x40
USR32ModeEQU0x10
SVC32ModeEQU0x13
SYS32ModeEQU0x1f
IRQ32ModeEQU0x12
FIQ32ModeEQU0x11
IMPORT__use_no_semihosting_swi
;Theimportedlabels
IMPORTFIQ_Exception
IMPORT__main
IMPORTTargetResetInit
;Theemportedlabels
EXPORTbottom_of_heap
EXPORTStackUsr
EXPORTReset
EXPORT__user_initial_stackheap
CODE32
AREAvectors,CODE,READONLY
ENTRY
Reset
LDRPC,ResetAddr
LDRPC,UndefinedAddr
LDRPC,SWI_Addr
LDRPC,PrefetchAddr
LDRPC,DataAbortAddr
DCD0xb9205f80
LDRPC,[PC,#-0xff0]
LDRPC,FIQ_Addr
ResetAddrDCDResetInit
UndefinedAddrDCDUndefined
SWI_AddrDCDSoftwareInterrupt
PrefetchAddrDCDPrefetchAbort
DataAbortAddrDCDDataAbort
NouseDCD0
IRQ_AddrDCD0
FIQ_AddrDCDFIQ_Handler
Undefined
BUndefined
SoftwareInterrupt
CMPR0,#4
LDRLOPC,[PC,R0,LSL#2]
MOVSPC,LR
SwiFunction
DCDIRQDisable;0
DCDIRQEnable;1
DCDFIQDisable;2
DCDFIQEnable;3
IRQDisable
MRSR0,SPSR
ORRR0,R0,#NoInt
MSRSPSR_c,R0
MOVSPC,LR
IRQEnable
MRSR0,SPSR
BICR0,R0,#NoInt
MSRSPSR_c,R0
MOVSPC,LR
FIQDisable
MRSR0,SPSR
ORRR0,R0,#NoFIQ
MSRSPSR_c,R0
MOVSPC,LR
FIQEnable
MRSR0,SPSR
BICR0,R0,#NoFIQ
MSRSPSR_c,R0
MOVSPC,LR
PrefetchAbort
BPrefetchAbort
DataAbort
BDataAbort
FIQ_Handler
STMFDSP!
{R0-R3,LR}
BLFIQ_Exception
LDMFDSP!
{R0-R3,LR}
SUBSPC,LR,#4
InitStack
MOVR0,LR
MSRCPSR_c,#0xd3
LDRSP,StackSvc
MSRCPSR_c,#0xd2
LDRSP,StackIrq
MSRCPSR_c,#0xd1
LDRSP,StackFiq
MSRCPSR_c,#0xd7
LDRSP,StackAbt
MSRCPSR_c,#0xdb
LDRSP,StackUnd
MSRCPSR_c,#0xdf
LDRSP,=StackUsr
MOVPC,R0
ResetInit
BLInitStack
BLTargetResetInit
B__main
__user_initial_stackheap
LDRr0,=bottom_of_heap
MOVpc,lr
StackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH-1)*4
StackIrqDCDIrqStackSpace+(IRQ_STACK_LEGTH-1)*4
StackFiqDCDFiqStackSpace+(FIQ_STACK_LEGTH-1)*4
StackAbtDCDAbtStackSpace+(ABT_STACK_LEGTH-1)*4
StackUndDCDUndtStackSpace+(UND_STACK_LEGTH-1)*4
AREAMyStacks,DATA,NOINIT,ALIGN=2
SvcStackSpaceSPACESVC_STACK_LEGTH*4
IrqStackSpaceSPACEIRQ_STACK_LEGTH*4
FiqStackSpaceSPACEFIQ_STACK_LEGTH*4
AbtStackSpaceSPACEABT_STACK_LEGTH*4
UndtStackSpaceSPACEUND_STACK_LEGTH*4
AREAHeap,DATA,NOINIT
bottom_of_heapSPACE1
AREAStacks,DATA,NOINIT
StackUsr
要点:
1.总体结构与符号定义
2.异常向量表
3.B与LDR指令的区别问题
4.为什么要使用地址转义符
5.堆栈初始化
6.中断处理程序的预处理
7.程序出口
第5章LPC2000系列ARM硬件结构
1.存储器寻址
3.PLL时钟
PLL控制寄存器(PLLCON):
PLL配置寄存器(PLLCFG)
PLL状态寄存器(PLLSETA):
PLL馈送寄存器(PLLFEED):
回路锁定后:
FOSC=FCCO/(2P×M)
FCLK=FOSC×M
必须满足的条件:
FOSC范围:
10MHz~25MHz;
FCCLK范围:
10MHz~60MHz;
FCCO范围:
156MHz~320MHz;
4.VPB分频器
VPB分频寄存器(VPBDIV):
示例:
PLLCON=1;
VPBDIV=2;
PLLCFG=((Fcclk/Fosc)-1)|(0<<5);
PLLFEED=0xaa;
PLLFEED=0x55;
while((PLLSTAT&(1<<10))==0);
PLLCON=3;
PLLFEED=0xaa;
PLLFEED=0x55;
6.存储器映射
存储器映射控制寄存器描述
存储器映射控制重新映射前后地址
转换前
内核地址总线值
MEMMAP值
转换后
存储器地址总线值
0x00000000~0x0000003F
00
0x7FFFE000~0x7FFFE03F
01
0x00000000~0x0000003F
10
0x40000000~0x4000003F
11
0x80000000~0x8000003F
0x00000040~0xFFFFFFFF
任意
对应不变
7.存储器加速模块
MAM控制寄存器(MAMCR)
MAM定时寄存器(MAMTIM)
Ø当改变MAM定时值时,必须先将MAMCR设置为0关闭MAM,然后将新值写入MAMTIM。
最后将需要的操作模式的对应值(1或2)写入MAMCR,再次打开MAM;
Ø对于低于20MHz的系统时钟,MAMTIM设定为001,将Flash访问时间设定为1CCLK;对于20MHz到40MHz之间的系统时钟,建议将Flash访问时间设定为2CCLK;高于40MHz的系统时钟,建议使用3CCLK。
MAMCR=0;
MAMTIM=2;
MAMCR=2;
8.外部存储器控制器
●EMC模块支持4个独立配置的存储器组,每个存储器组的总线宽度可设置为8、16或者32位,但是同一个存储器组的器件必须宽度相同。
●每个存储器组最大支持16MB寻址空间。
●支持字节定位读取。
●地址输出线是A[23:
0],其中地址位A[25:
24]用于4个存储器组的译码(CS[3:
0])。
Bank
地址范围
配置寄存器
0
0x80000000~0x80FFFFFF
BCFG0
1
0x81000000~0x81FFFFFF
BCFG1
2
0x82000000~0x82FFFFFF
BCFG2
3
0x83000000~0x83FFFFFF
BCFG3
接口引脚描述
引脚名
类型
引脚描述
D[31:
0]
输入/输出
外部存储器数据线
A[23:
0]
输出
外部存储器地址线
OE
输出
输出使能信号,低有效
BLS
输出
字节定位选择信号,低有效
WE
输出
写使能信号,低有效
CS[3:
0]
输出
芯片选择信号,低有效
存储器组配置寄存器0~3(BCFG0~3):
位
23:
16
15:
11
10
9:
5
4
3:
0
功能
保留
WST2
RBLE
WST1
保留
IDCY
位
31:
30
29:
28
27
26
25
24
功能
AT
MW
BM
WP
WPERR
BUSERR
✧IDCY:
在两个存储器组之间切换访问时,为了避免器件间的总线竞争,需要插入空闲的CCLK周期,该域控制着这个周期数。
计算公式为:
空闲CCLK周期数=IDCY+1;(IDCY的复位值为15)
✧WST1:
一些慢速的外部存储器可能不能适应EMC最高速度的读操作,所以需要在读周期中插入若干个空闲等待周期,以降低读操作的速度。
该域控制着读周期中插入的空闲CCLK周期数。
计算公式为:
读操作周期长度=WST1+3;(WST1的复位值为15)
✧RBLE:
如果外部存储器的总线宽度为16或32位,那么读写操作是对总线上的2个或4个字节的数据同时进行的。
某些存储器允许对总线上的某几个字节进行独立的读写操作,而不影响其它字节,这通过芯片的字节定位引脚实现。
当RBLE位为1时使能字节定位功能,BLS3:
0在读写操作时输出低电平。
当RBLE位为0时,禁止该功能。
✧WST2:
和读操作类似,一些慢速的外部存储器可能不能适应EMC最高速度的写操作,所以需要在写周期中插入若干个空闲等待周期,以降低写操作的速度。
该域控制着写周期中插入的空闲CCLK周期数。
计算公式为:
写操作周期长度=WST2+3;(WST2的复位值为15)
✧MW:
该位控制相应存储器组的数据总线宽度,定义如下:
008位0116位1032位11保留
Ø如果存储器组配置成32位宽度,地址线A0和A1无用,可作为GPIO使用(由PINSEL2设置);
Ø如果存储器组配置成16位宽度,地址线A0无用,可作为GPIO使用(由PINSEL2设置);
Ø如果存储器组配置成8位宽度,并且使能字节定位功能(RBLE=1),存储器的写信号由BLS[0]提供,否则由WE信号提供;
Ø同一寄存器组的器件宽度必须一致。
9.引脚连接模块
LPC2000系列微控制器的大部分管脚都具有多种功能,即管脚复用,但是同一引脚在同一时刻只能使用其中一个功能,通过配置相关寄存器控制多路开关来连接引脚与片内外设。
PINSEL0=(PINSEL0&0xFFF0FFFF)|(0x05<<16);
12.GPIO
相关寄存器描述——IOxPIN
该寄存器反映了当前引脚的状态。
IOxPIN中的x对应于某一个端口,如P1口对应于IO1PIN。
所以芯片存在多少个端口,就有多少个IOxPIN分别与之对应。
相关寄存器描述——IOxDIR
当引脚设置为GPIO输出模式时,可使用该寄存器控制引脚的方向。
向某位写入1使对应引脚作为输出功能,写入0时作为输入功能。
作为输入功能时,引脚处于高阻态。
相关寄存器描述——IOxSETIOxCLR
当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出高/低电平。
向某位写入1使对应引脚输出高/低电平。
写入0无效。
13.UART0
接收/发送器保持寄存器
通过读取U0RBR寄存器可以将接收FIFO中最早接收到的字节读出,当FIFO中不再包含有效数据时,该寄存器反映接收到的最后一个有效字节数据。
接收的数据不足8位时,高位用0填充。
写入U0THR寄存器的值将是发送FIFO中的最高字节。
访问该寄存器时,U0LCR的除数锁存访问位(DLAB)必须为0。
✓注意:
U0RBR只读。
访问该寄存器时,U0LCR的除数锁存访问位(DLAB)必须为0。
✓注意:
U0THR只写。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 讲义