嵌入式系统复习笔记.docx

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

嵌入式系统复习笔记.docx

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

嵌入式系统复习笔记.docx

嵌入式系统复习笔记

嵌入式系统复习笔记

-----增哥

注意点:

本复习指导基本已包括所有的程序设计以及分析题,每个考点后面均有例题,例题前的所有知识点我已经把他写的尽量通俗易懂,把程序分析的方法也写明,希望大家用几个小时时间来看看,通过考试绝对没有问题!

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

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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