嵌入式系统复习笔记

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

嵌入式系统复习笔记

-----增哥

注意点:本复习指导基本已包括所有的程序设计以及分析题,每个考点后面均有例题,例题前的所有知识点我已经把他写的尽量通俗易懂,把程序分析的方法也写明,希望大家用几个小时时间来看看,通过考试绝对没有问题!PS:本材料后面所写的参考页码均是以新版书为标准,用旧版书的同学麻烦自己写上旧版书的页码,知识点都是一样的!!!本人能力有限,如有错误,请见谅!!

1、状态寄存器CPSR各bit的意义:

各位同学只需了解控制位bit0~bit7

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的流水线

采用三级流水线,即取指→译码→执行

例:假设一共有三条指令:

0x4000 ADD PC,PC,#4 ;其中第二个PC指针的值为0x4008,将第二个

PC+4=0x400C赋给第一个PC指针(回答上述PC

指针永远指向取值的问题)

0x4004 SUB

0x4008 CMP

那么CPU实际执行为:

周期取指译码执行

T1 ADD

T2 SUB ADD

T3 CMP SUB ADD

解释:当第一CPU周期T1时先取址,取第一个指令的地址。

当第二CPU周期T2时取第二个指令的地址,然后译码,译的是第一个指令的码

当第三CPU周期T3时取第三个指令的地址,译第二个指令的码,执行第一个指令

所以:PC值=当前程序执行位置+8字节(如果CPSR中的T位为0,则+8;如果T位为1,则+4)

4、PLL频率的计算(P133)

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 频率公式:

)

2()2(P F F M P F F C C L K CCO OSC CCO ⨯⨯=⨯⨯⨯=

注意点:CCO F 的范围为156~320MHZ ;

例题:晶振的频率为10MHZ ,需要输出的系统时钟为60MHZ ,请问如何配置? 答:OSC F =10MHZ ,所以6

==

OSC

CCLK

F F M ,所以 M-1=5,所以MSEL[4:0]=0b00101; 根据CCO F 的范围可知,)

2(⨯=

CCLK CCO

F F P 所以,P 只能取2,即PSEL[1:0]=0b01;

所以根据上述得:

PLLCFG = (1<<5) | (5) ;这句话的意思是将2(也就是0b01)向左移5位,也就是将PESL 赋

值了,然后与5逻辑或,也就是将0b00101赋值给MSEL 了。

则系统时钟设置为:

#define Fosc 11059200 ; 晶振10MHz ;

#define Fcclk (Fosc * 6) ; 系统频率为Fosc 的整数M 倍

#define Fcco (Fcclk*4) ;cco频率为Fcclk的2 P倍

#define Fpclk (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.15 PINSEL1[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]

01 00 =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]

二进制:1111 1111 00 00 1111 1111 1111 1111 1111

十六进制:FF 0 FFFFF

然后我们将要赋值的值左移20位,与原值逻辑或即可)。

6、外部存储器的配置(EMC)

【1】系统有4个外部存储器组配置寄存器BCFG0 BCFG1 BCFG2 BCFG3 描述见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或者问

相关文档
最新文档