嵌入式系统复习笔记.docx
- 文档编号:6207807
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:18
- 大小:118.78KB
嵌入式系统复习笔记.docx
《嵌入式系统复习笔记.docx》由会员分享,可在线阅读,更多相关《嵌入式系统复习笔记.docx(18页珍藏版)》请在冰豆网上搜索。
嵌入式系统复习笔记
嵌入式系统复习笔记
-----增哥
注意点:
本复习指导基本已包括所有的程序设计以及分析题,每个考点后面均有例题,例题前的所有知识点我已经把他写的尽量通俗易懂,把程序分析的方法也写明,希望大家用几个小时时间来看看,通过考试绝对没有问题!
PS:
本材料后面所写的参考页码均是以新版书为标准,用旧版书的同学麻烦自己写上旧版书的页码,知识点都是一样的!
!
!
本人能力有限,如有错误,请见谅!
!
1、状态寄存器CPSR各bit的意义:
各位同学只需了解控制位bit0~bit7
Mode[4:
0]是见表1P29
Mode[4:
0]
10000
10001
10010
10011
10111
11011
11111
模式
用户
FIQ中断
IRQ中断
管理
中止
未定义
系统
T:
为状态:
0表示ARM状态,1表示Thumb状态
I、F表示IRQ中断FIQ中断的使能。
1时中断禁止,0时中断使能(允许该中断)。
2、三个特殊用途寄存器SP(R13)LR(R14)PC(R15)
R13(SP):
堆栈指针,保存当前处理器模式的堆栈栈顶。
R14(LR):
链接R,保存子程序(含发生异常)的返回地址。
R15(PC):
程序计数器,保存下一条指令的地址。
注意点:
PC指针永远指向取值(什么意思?
见第3点流水线)
3、ARM7的流水线
采用三级流水线,即取指→译码→执行
例:
假设一共有三条指令:
0x4000ADDPC,PC,#4;其中第二个PC指针的值为0x4008,将第二个PC+4=0x400C赋给第一个PC指针(回答上述PC指针永远指向取值的问题)
0x4004SUB
0x4008CMP
那么CPU实际执行为:
周期取指译码执行
T1ADD
T2SUBADD
T3CMPSUBADD
解释:
当第一CPU周期T1时先取址,取第一个指令的地址。
当第二CPU周期T2时取第二个指令的地址,然后译码,译的是第一个指令的码
当第三CPU周期T3时取第三个指令的地址,译第二个指令的码,执行第一个指令
所以:
PC值=当前程序执行位置+8字节(如果CPSR中的T位为0,则+8;如果T位为1,则+4)
4、PLL频率的计算(P133)
符号
说明
晶体振荡器的输出频率,即PLL的输入频率
PLL电流控制振荡器的输出频率
PLL最终的输出频率(即CPU内核需要的频率)
经过VPB分频器后的供给外部设备的输出频率值
M
PLLCFG寄存器中的MSEL位的倍增器值+1P134
P
PLLCFG寄存器中的PSEL位的分频器值P134
PLLCFG寄存器的意义:
一个8位的PLL配置寄存器
PLLCFG[4:
0]为MSEL[4:
0],存放的是PLL倍频器值(即M值);
例:
MSEL[4:
0]=00101则表示5,M=5+1=6
PLLCFG[6:
5]为PSEL[1:
0],存放的是PLL的分频器值(即P值;)
例:
PSEL[1:
0]=00则表示P=1
01则表示P=2
10则表示P=4
11则表示P=8
PLL频率公式:
注意点:
的范围为156~320MHZ;
例题:
晶振的频率为10MHZ,需要输出的系统时钟为60MHZ,请问如何配置?
答:
=10MHZ,所以
所以M-1=5,所以MSEL[4:
0]=0b00101;
根据
的范围可知,
所以,P只能取2,即PSEL[1:
0]=0b01;
所以根据上述得:
PLLCFG=(1<<5)|(5);这句话的意思是将2(也就是0b01)向左移5位,也就是将PESL赋值了,然后与5逻辑或,也就是将0b00101赋值给MSEL了。
则系统时钟设置为:
#defineFosc11059200;晶振10MHz;
#defineFcclk(Fosc*6);系统频率为Fosc的整数M倍
#defineFcco(Fcclk*4);cco频率为Fcclk的2
P倍
#defineFpclk(Fcclk/4)*1;VPB分频,只能为Fcclk/4的1、2、4倍
5、引脚连接模块的配置
注意点:
请各位同学注意LPC2214的引脚描述图P97
【1】引脚选择寄存器共3个,每个32位,PINSEL0、PINSEL1、PINSEL2
其中每两位控制一个引脚(如何理解?
)
解释:
PINSEL0[1:
0]表示该寄存器1位、0位控制P0.0口
其中00表示GPIO的功能;01表示TxD(UART0)的功能;10表示PWM1的功能;11保留
详细见表P173-P174
所以PINSEL0[31:
0]控制P0.0~P0.15PINSEL1[31:
0]控制P0.16~P0.31
【2】例题:
将P0.10配置成GPIO,P0.11配置成CTS(UART1),如何配置?
解题分析思路:
①首先确定是PINSEL0还是PINSEL1来控制?
这里是PINSEL0控制;
而且P0.10是PINSEL0[21:
20]控制,P0.11是PINSEL0[23:
22]控制;
②再根据P173的表可得,P0.10的GPIO功能的值为00,P0.11的CTS功能值是01;
③[23:
22][21:
20]
0100=4,0x04<<20(0X00400000)
这句话的意思是将这四位的值(也就是0x00000004)赋值进去,因为该值是从第20开始的,所以需要左移20,就变成了(0x00400000);
④最后写出引脚配置语句,采用可先读寄存器值,然后按位进行逻辑“与”、“或”操作,再回写到该寄存器。
也就是:
本题答案:
PINSEL0=(PINSEL0&0xFF0FFFFF)|(0x04<<20)
(本句的意思是,先读出PINSEL0的值,然后和0xFF0FFFFF逻辑与,因为PINSEL0中我们只需要将要设置的0100赋值进去,不能改变其他值,原值&1=原值,起到保护其他值的作用
[31:
24][23:
22][21:
20][19:
0]
二进制:
11111111000011111111111111111111
十六进制:
FF0FFFFF
然后我们将要赋值的值左移20位,与原值逻辑或即可)。
6、外部存储器的配置(EMC)
【1】系统有4个外部存储器组配置寄存器BCFG0BCFG1BCFG2BCFG3描述见P155
其中PINSEL2[5:
4]为BOOT[1:
0],也是BCFGn[29:
28],表示控制数据总线的宽度
00表示8位01表示16位10表示32位11保留
寄存器的配置选项:
①IDCY:
为防止总线竞争,存储器内部读/写访问间需间隔空闲时钟周期(1~16个cclk);
②WST1:
读访问长度(等待+操作:
3~34个cclk);
③WST2:
写访问长度(等待+操作:
1~32个cclk);
④RBLE/MW:
存储器组的总线宽度(8/16/32位);
⑤WP:
存储器组写保护(=1,写保护)。
【2】16位宽存储器组连接16位SRAM芯片;512KB、16位数据宽度(或者问MW=0b01或者问BOOT[1:
0]=0b01),请问如何接线?
P362
解题分析思路:
①首先确定是16位数据总线宽度,那么将LPC2200中的D0~D15连接到SRAM上的I/O0~I/O15上。
②512KB是容量,决定地址总线的宽度,
,所以为19根地址总线,所以从A0~A18;
③又因为是16位数据宽度,P口只有8位输出,所以A0为低位,不用接。
④所以实际接线为A1~A18接到SRAM的A0~A17.见以下接线图为答案。
7、VIC向量中断控制配置
【1】VIC控制寄存器分三个寄存器:
VICIntSelect(中断选择寄存器)、VICIntEnable(中断使能寄存器)、VICIntEnClr(中断使能清零寄存器)P193~P194
①VICIntSelect(中断选择寄存器):
为32位寄存器,当某一位为1时,表示该通道的中断设置为FIQ;为0时,分配为IRQ。
例:
VICIntSelect[14]=1则通道14的EINT0中断设置为FIQ中断。
②VICIntEnable(中断使能寄存器):
为32位寄存器,写入1时,对应通道的中断使能,写入0时,则对应通道中断无效。
例:
VICIntEnable=(1<<14);即通道14(也就是EINT0)中断使能;
③VICIntEnClr(中断使能清零寄存器):
为32位寄存器,写入1时,对应通道的中断禁止,写入0时,则无效。
例:
VICIntEnClr=(1<<14);即通道14(也就是EINT0)中断禁止;
注意:
19个中断源对应的VIC通道号(同学们只需要了解加粗体的几个中断源对应的通道号即可)
模块
标志
VIC通道号
WDT
看门狗中断(WDINT)
0
—
保留给软件中断
1
ARM内核
EmbeddedICE,DbgCommRx
2
ARM内核
EmbeddedICE,DbgCommTx
3
定时器0
匹配0-3(MR0,MR1,MR2,MR3)
捕获0-3(CR0,CR1,CR2,CR3)
4
定时器1
匹配0-3(MR0,MR1,MR2,MR3)
捕获0-3(CR0,CR1,CR2,CR3)
5
UART0
Rx线状态(RLS)
发送保持寄存器空(THRE)
Rx数据可用(RDA)
字符超时指示(CTI)
6
UART1
Rx线状态(RLS)
发送保持寄存器空(THRE)
Rx数据可用(RDA)
字符超时指示(CTI)
7
PWM0
匹配0-6(MR0,MR1,MR2,MR3,MR4,MR5,MR6)
8
I2C
I
SI(状态改变)
9
SPI0
SPI中断标志(SPIF)
模式错误(MODF)
10
SPI1
SPI中断标志(SPIF)
模式错误(MODF)
11
PLL
PLL锁定(PLOCK)
12
RTC
计数器增加(RTCCIF)
报警(RTCALF)
13
系统控制
外部中断0(EINT0)
14
系统控制
外部中断1(EINT1)
15
系统控制
外部中断2(EINT2)
16
系统控制
外部中断3(EINT3)
17
A/D
A/D转换器
18
【2】VIC参数设置寄存器P196
共有四类:
VICVectAddr向量地址寄存器(向量IRQ中断需要用到)
VICDefVectAddr默认向量地址寄存器(非向量IRQ中断需要用到)
VICVectAddr0~15向量地址寄存器0~15
VICVectCntl0~15向量控制寄存器0~15(见下表描述)
注意:
0~15的数字不是随机的,而是根据slot0~15来确定的,slot为优先级,0最大,15最小;
也就是说,当使用slot0时,用VICVectCntl0。
位
31:
6
5
4:
0
功能
保留
向量IRQ使能
分配给向量IRQ通道的中断请求或软件中断的编号
【3】中断的寄存器配置
①若配置成FIQ中断:
第一步:
先用VICIntSelect(中断选择寄存器)选择哪个通道需要设置成FIQ中断
第二步:
用VICIntEnable(中断使能寄存器)将该通道中断使能。
例:
设置EINT0中断为FIQ中断:
因为EINT0通道号为14,所以VICIntSelect=(1<<14);
VICIntEnable=(1<<14);
②若配置成向量IRQ中断:
第一步:
先用VICIntSelect(中断选择寄存器)选择哪个通道需要设置成IRQ中断
第二步:
用VICVectCntl0~15(向量控制寄存器0~15)对向量中断进行设置。
第三步:
将中断服务地址赋值给VICVectAddr0~15(向量地址寄存器0~15)。
第四步:
将用VICIntEnable(中断使能寄存器)将该通道中断使能。
例:
设置定时器0中断为向量IRQ中断,分配为slot0,中断服务地址为Timer0_ISR:
因为定时器0通道号为4号,所以
VICIntSelect=~(1<<4);
VICVectCntl0=0x24;00100100根据上表,可得VICVectCntl0[5]=1,VICVectCntl0[4:
0]=4
VICVectAddr0=(unsignedint)Timer0_ISR;
VICIntEnable=(1<<4);
③若配置成非向量IRQ中断:
第一步:
先用VICIntSelect(中断选择寄存器)选择哪个通道需要设置成IRQ中断
第二步:
将非向量中断服务地址赋给VICDefVectAddr(默认向量地址寄存器)
第三步:
用VICIntEnable(中断使能寄存器)将该通道中断使能。
例:
将EINT0设置成非向量中断,中断服务程序地址为Eint0_ISR:
VICIntSelect=~(1<<14);
VICDefVectAddr=(unsignedint)Eint0_ISR;
VICIntEnable=(1<<14);
【4】综合题型:
例:
将如下中断进行如下配置EINT0:
FIQ、EINT1:
向量IRQ、EINT2:
非向量IRQ,如何配置?
答:
VICIntSelect=0x000040000100000000000000
;EINT0(中断源14)=FIQ,其它IRQ
VICVectCntl0=0x20|1500100000=00101111
;EINT1为向量IRQ,使用slot0
;VICVectCntl0[5]=1,IRQ使能
;VICVectCntl0[4:
0]=15,中断源EINT1编号
VICVectAddr0=(uint32)Eint1_IRQ;EINT1中服地址
VICDefVectAddr=(uint32)Eint2_IRQ;EINT2为非向量IRQ
VICIntEnable=0x0001C00000011100000000000000;使能EINT0~2,161514
8、外部中断初始化配置
【1】外部中断寄存器P214~216
共有四个:
EXTINT(外部中断标志寄存器):
包含EINT0、EINT1、EINT2、EINT3四个中断标志。
EXTWAKE(外部中断唤醒寄存器):
知道就行。
EXTMODE(外部中断模式寄存器):
控制每个引脚的边沿或电平触发。
EXTPOLAR(外部中断极性寄存器):
控制每个引脚的触发电平或边沿。
注意:
EXTMODE(外部中断模式寄存器)与EXTPOLAR(外部中断极性寄存器)都是8位,其中低四位每一位分别控制EINT0、EINT1、EINT2、EINT3的其中一个。
高四位保留。
设置说明
相应位设置值
极性控制寄存器
(EXTPOLAR)
方式控制寄存器
(EXTMODE)
低电平触发
0
0
高电平触发
1
0
下降沿触发
0
1
上升沿触发
1
1
【2】EINTn的配置步骤:
第一步:
根据题目要求到P97的引脚描述表中找到对应外部中断的P口。
其中EINT0有:
P0.1、P0.16、
EINT1有:
P0.3、P0.14、
EINT2有:
P0.7、P0.15
EINT3有:
P0.9、P0.20、P0.30
第二步:
利用PINSEL0或者PINSEL1来将对应P口设置成外部中断功能。
第三步:
利用EXTMODE(外部中断模式寄存器)、EXTPOLAR(外部中断极性寄存器)根据上表来设置触发方式。
注意:
读写方式均采用先读后写的方式,保护其他值不受影响。
此方法在上述已说过。
例:
EINT0初始化下降沿中断
PINSEL1=(PINSEL1&0xFFFFFFFC)|0x0111000001=1101
;P0.16,PINSEL1[1:
0]=01
EXTMODE=EXTMODE|0x010001
;0001=EINT0边沿触发
EXTPOLAR=EXTPOLAR&0x0E1110
;1110=EINT0下降沿触发
9、GPIO的配置
【1】GPIO寄存器描述P181~182
IOnPIN:
GPIO引脚寄存器。
可读出引脚当前状态。
IOnSET:
GPIO输出置位寄存器。
写1:
对应引脚输出高电平;写0:
无效。
IOnDIR:
GPIO方向控制寄存器。
控制每个I/O口的方向。
0=输入,1=输出;
IOnCLR:
GPIO输出清零寄存器。
写1:
对应引脚输出低电平并清零IOSET;写0:
无效。
注意:
其中n表示P口,n=0时为P0口,n=1时为P1口。
【2】GPIO具体配置
步骤:
第一步:
先根据要设置的P口,使用PINSEL0或者PINSEL1来设置对应口为GPIO功能。
关于PINSEL对应的引脚功能见P173~174
第二步:
利用GPIO寄存器来设置GPIO的方向、输出高低等。
例:
①设置P0.4口为输出方式
PINSEL0=0x00000000;将P0.0~P0.15均设置为GPIO功能
IO0DIR=0x00000010;其中IO0DIR[4]=1,P0.4为输出方式
②GPIO读写操作
读取P0.7~P0.4引脚,再从P0.3~P0.0输出。
bak=IO0PIN;读值
IO0CLR=0x0000000F;1111P0.3~P0.0输出0
IO0SET=(bak&0x000000F0)>>4;表示bak中的[31:
8]与[3:
0]均清零,[7:
4]保持不变,然后右移4位,这样[7:
4]的值就移到了[3:
0]中,如此便使原先的P0.7~P0.4对应值在P0.3~P0.0输出。
③取反P0.0的输出
if((IO0SET&0x00000001)==0);先使之保留P0.0的值,其余清零,判断P0.0是否为0
IO0SET=0x00000001;;如果为0,则使P0.0置1
else
IO0CLR=0x00000001;;如果为1,则使P0.0为0
10、定时器的配置所有寄存器前缀都有Tn(n表示0或1),表示定时器0或定时器1,如T0IR,以下我已经全部省略,请同学们务必不要忘记!
!
!
O(∩_∩)O~!
!
!
定时器的相关引脚:
捕获信号引脚CAP0.3~CAP0.0详情参见P223
CAP1.3~CAP1.0
外部匹配输出引脚MAT0.3~MAT0.0
MAT1.3~MAT1.0
【1】定时器有:
基本寄存器组(IR、TCR、TC、PR、PC),匹配功能寄存器(MCR、MR0、MR1、MR2、MR3、EMR),捕获功能寄存器(CCR、CR0、CR1、CR2、CR3)P225~228
注意:
匹配:
到达匹配寄存器的定时值,产生中断或执行其他动作。
捕获:
输入信号发生跳变时捕获定时器值,并可产生中断。
(1)基本寄存器组:
IR:
中断标志寄存器,[3:
0]为控制四个匹配通道的中断标志
[7:
4]为控制四个捕获通道事件的中断标志
TCR:
定时器控制寄存器,1=计数器使能;0=计数器复位
TC:
定时器计数器:
32位寄存器,存放计数值,计数值=TC+1;
PR:
预分频寄存器:
PC:
预分频计数器:
知道即可。
(2)匹配功能寄存器组
匹配寄存器(MR0~MR3),这里的值与TC值比较,当相等时,发生中断。
MCR匹配控制寄存器:
其中[2:
0]控制MR0,[5:
3]控制MR1,[8:
6]控制MR2,[11:
9]控制MR3
以[2:
0]为例:
0位表示中断:
为1时,MR0与TC值匹配将产生中断;为0时,禁止中断;
1位表示复位:
为1时,MR0与TC值匹配时使TC复位,为0时,不复位;
2位表示停止:
为1时,MR0与TC值匹配将使TC和PC停止,TCR的bit0清零(一般不用,同学们可以直接默认为0)
其他同上;
EMR外部匹配寄存器:
P229
EMR[11:
10]控制外部匹配3(MAT0.3/MAT1.3)
EMR[9:
8]控制外部匹配2(MAT0.2/MAT1.2)
EMR[7:
6]控制外部匹配1(MAT0.1/MAT1.1)
EMR[5:
4]控制外部匹配0(MAT0.0/MAT1.0)
EMR[11:
10]、EMR[9:
8]、EMR[7:
6]或EMR[5:
4]
功能
00
没动作
01
外部匹配3、2、1或0输出为0
10
外部匹配3、2、1或0输出为1
11
外部匹配3、2、1或0输出翻转
例题:
T0MR0=100;设置定时器0匹配寄存器的值为100,即当TC到100时,发生匹配动作
T0MCR=0x03;表示00000011,设置匹配功能寄存器,当匹配时,定时器0复位,并产生中断。
T0EMR=0x30;表示00110000,设置外部匹配0,当发生匹配时,MAT0.0输出翻转。
【2】例题P235~237
(1)对定时器0进行中断初始化,定时器每隔100ms中断一次。
令Fpclk为1KHZ
公式:
T0TC=0;定时器0的计数器清零
T0PR=0;不分频
T0MCR=0x03;表示00000011,表示T0TC与T0MR0匹配后,复位T0TC,并产生中断;
T0MR0=Fpclk/10;根据上述公式,计算出MR的值
T0TCR=0x01;启动
(2)利用定时器0输出1KHZ频率的方波,占空比为50%。
公式:
PINSEL0=(PINSEL0&0xFFFFF3FF)|(0b10<<10);表示将P0.5口设置成MAT1.0功能
T0TC=0;定时器0的计数器清零
T0PR=0;选择不分频
T0MCR=0x10;因为这里不要求中断,但是要求反复匹配,所以设置T0MR1匹配后复位T0TC
T0EMR=0xC0;表示11000000
T0MR1=Fpclk/2000;根据上述公式算出MR1
T0TCR=0x01;定时器0启动
CLKEQUP3.2
DINAEQUP3.3
DINBEQUP3.4
CLEAREQUP3.5
ORG0000H
AJMPMAIN
ORG0100H
MAIN:
MOVSP,#70H
MOV50H,#07EH
MOV51H,#0BDH
MOV52H,#0DBH
MOV53H,#0E7H
MOV54H,#0E7H
MOV55H,#0DBH
MOV56H,#0BDH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 复习 笔记