关键词不能为空

当前您在: 主页 > 英语 >

嵌入式系统复习笔记

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-01 23:41
tags:

-

2021年2月1日发(作者:合格证英文)



嵌入式系统






复习笔记








































































-----


增哥





注意点:本复习指导基本已包括所 有的程序设计以及分析题,每个考点后面均有例题,例题前的所有知识


点我已经把他写的 尽量通俗易懂,把程序分析的方法也写明,希望大家用几个小时时间来看看,通过考试


绝 对没有问题!








PS< /p>



本材料后面所写的参考页码均是以新版书为标准,


用旧版书的同学麻烦自己写


上旧版书的页码,知识点都是一样的!

< p>


!本人能力有限,如有错误,请见谅!





1


、状态寄存器


CPSR



bit

的意义:



扩展位


状态位


标志位


控制位


31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0


N Z C V Q Res J Res GE[3:0] Res E A I F T mode


各位同学只需了解控制位


bit0~bit7


Mode[4:0]


是见表


1





P29



Mode[4:0]


10000


模式



10001


10010


10011


10111


中止



11011


未定义



11111


系统




用户



FIQ


中断



IRQ


中断



管理



T:


为 状态:


0


表示


ARM

< br>状态,


1


表示


Thumb


状态



I



F


表示


IRQ


中断


FIQ


中断的使能。


1

时中断禁止,


0


时中断使能(允许该中断)





2


、三个特殊用途寄存器




SP(R13)





LR(R14)




PC(R15)





R13



SP



:堆 栈指针,保存当前处理器模式的堆栈栈顶。



R14

< p>


LR



:链接


R



保存子程序(含发生异常)的返回地址。< /p>



R15



PC



:程序计数器,保存下一条指令的地址。


注意点:


PC


指针永远指向取值 (什么意思?见第


3


点流水线)



3



ARM7


的流 水线






采用三级流水线,即




取指→译码→执行





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








0x4000






ADD




PC,PC,#4






其中第二个


PC


指针的值为


0x4008


,将第二个


PC+4=0x400C


赋给第一个


PC


指针(回答上述

< p>
PC


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


















0x4004






SUB


















0x4008






CMP








那么


CPU


实际执行为:


























周期







取指







译码







执行


























T1







ADD



























T2







SUB






ADD

























T3







CMP






SUB






ADD


解释:当第一


CPU


周期


T1


时先取址,


取 第一个指令的地址










当第二


CPU


周期


T2



取第二个指令的地址


,然后译码,


译的是第一个指令的码









当第三


C PU


周期


T3



取第三个指令的地址



译第二个指令的码


执行第一个指令



所以:


PC



=


当前程序执 行位置


+8


字节


(如果


CPSR


中的


T


位为


0


,则


+8


;如果


T


位为


1


,则


+4





1



4


、< /p>


PLL


频率的计算(


P133

< p>



处理器时钟



晶振或外部时钟源



Fosc


VPB


分频器



PLL



cclk




VPB


时钟




pclk







符号



说明



晶体振荡器的输出频率,即


PLL


的输 入频率



PLL


电流控制振荡器的输出频率


< /p>


PLL


最终的输出频率(即


CPU


内核需要的频率)



经过

VPB


分频器后的供给外部设备的输出频率值


< p>
PLLCFG


寄存器中的


MSEL


位的倍增器值


+1





P134



PLLCFG


寄存器中的


PSEL


位的 分频器值









P134



F


OSC



F


CCO



F


CCLK



F


PCLK



M


P


PLLCFG


寄存器的意义:一个


8


位的


P LL


配置寄存器



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

< p>
值;







例:


PSEL[1:0]=


00




则表示


P=1



















01




则表示


P=2



















10




则表示


P=4



















11




则表示


P=8



PLL


频率公式:








F


CCO


?


F


OSC


?


(


2


?


P


?


M


)


F


CCO


?


F


C


C


L


K


?


(


2


?


P


)

< br>


注意点:


F


CCO

< p>
的范围为


156~320MHZ




例题:晶振的频率为


10MHZ

,需要输出的系统时钟为


60MHZ


,请问如何配置?




答:


F


OSC


=10MHZ


,所以

< br>M


?


F


CCLK


?


6


,


所以

< br>



M-1=5


,所以


MSEL[4:0]=0b00101;


F


O SC


F


CCO



所以,


P


只能取


2

< br>,即


PSEL[1:0]=0b01;


(


F


CCLK


?


2

< p>
)







根据


F< /p>


CCO


的范围可知,


P

< br>?


所以根据上述得:



PLLCFG = (1<<5) | (5)


< p>
;


这句话的意思是将


2


( 也就是


0b01


)向左移


5

< p>
位,也就是将


PESL



值了,然后与


5


逻辑或,也就是将


0b 00101


赋值给


MSEL


了。



则系统时钟设置为:




2



#define



Fosc 11059200







晶振


10 MHz




#define



Fcclk (Fosc * 6)






系统频率为


Fosc


的整数


M




#define



Fcco (Fcclk*4)






cco


频率为


Fcclk


< br>2


?


P




#define



Fpclk (Fcclk/ 4)*1





VPB


分频,只能为


Fcclk/ 4



1



2



4





5


、引脚连接模块的配置





注意点:请各位同学注意


LPC2214


的引脚描述图















P97




1


】引脚选择寄存器共


3


个,每个


32


位,


PINSEL0


PINSEL1



PINSEL 2



其中每两位控制一个引脚(


如何 理解?







解释:


PINSEL0[1:0]< /p>


表示该寄存器


1


位、

0


位控制


P0.0








其中


00


表 示


GPIO


的功能;


01


表示


TxD



UART0< /p>


)的功能;


10


表示

PWM1


的功能;


11


保留



详细见表




P173-P174





所以


PINSEL0[31:0]< /p>


控制


P0.0~P0.15
















PINSEL1[31:0]


控制< /p>


P0.16~P0.31






2


】例题 :将


P0.10


配置成


GPIO



P0.11


配置成


CTS



UART1



,如何配置?



解题分析思路:






①首先确定是

PINSEL0


还是


PINSEL1


来控制?这里是


PINSEL0


控制;








而且


P0.10


PINSEL0[21:20]


控制,

< br>P0.11



PINSEL0[23:22]

< p>
控制;



②再根据


P17 3


的表可得,


P0.10


< p>
GPIO


功能的值为


00



P0.11



CTS


功能值是


01









[23



22] [21



20]


01







00





=4











0x04


<<


20

< br>(


0X00400000













































这句话的意思是将这四位的值(也就是


0x00000004


)赋值


进去,因为该值是从第


20


开始的,


所以需要左移

20


,就变


成了(


0x00400 000





④最后写出引脚配置语句,


采用可先读寄存器值,然后按位进行逻辑“与”



“或”操作,再回写到


该寄存器。





也就是:




本题答案:



PINSEL0=



PINSEL0 & 0xFF0FFFFF



|



0x04


<<


20





(本句的意思是,先读出


PINSEL0


的值,然后和


0xFF0FF FFF


逻辑与,因为


PINSEL0


中 我们只需


要将要设置的


0100


赋值进 去,


不能改变其他值



原值

< p>
&1=


原值


,起到保护其他值的作用



[31





:




24]






[23:22][21:20]





[19






:






0]


二进制:






1111





1111








00






00






1111 1111 1111 1111 1111






十六进制:







FF
















0

















FFFFF

然后我们将要赋值的值左移


20


位,与原值逻辑或即可)< /p>





6


、外部存储器的配置(


EMC





1


】系统有

< p>
4


个外部存储器组配置寄存器


BCFG0



BCFG1



BCFG2



BCFG3








描述见


P155


其中


PINSEL2[5:4]



BOOT[1:0],


也是


BCFGn[29:28],


表示控制数据总线的宽度



00




表示


8






01



表示


16







10< /p>


表示


32






11


保留









寄存器的配置选项:





IDCY


:为防止总线竞争,存储器内部读


/


写访问间需间隔空闲时钟周 期(


1~ 16



cclk

< p>






WST1


:读访问长度(等待


+


操作:


3 ~ 34



cclk






WST2


:写访问长度(等待


+


操作:


1 ~ 32



cclk







RBLE/MW

< br>:存储器组的总线宽度(


8/16/32


位)

< p>




3





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


是容量,决定地址总线的宽度,< /p>


512


KB


?


2


B


,所以为


19


根地址总线,所以从


A0~A18




③又因为是


16


位数据宽度,


P


口只有


8


位输出,所 以


A0


为低位,不用接。


< p>
④所以实际接线为


A1~A18


接到


SRAM



A0~A17.


见以下接线图为答案。



19



7



VIC


向量中断 控制配置




1



VIC


控制寄存器分三个寄存器:


VICIntSelect


(中断选择寄存器)



VICIntEnable


(中断使能寄存器)


、< /p>


VICIntEnClr


(中断使能清零寄存器)























P193~P194




VICIntSelect


中断选择寄存器)




32


位寄存器,


当某一位为


1

时,


表示该通道的中断设置为


FIQ




0


时,分配为

< br>IRQ




例:


VICIntSelect[14]=1



则通道


14



EINT0


中断设置为


FIQ


中断。




VICI ntEnable


(中断使能寄存器)


:为

32


位寄存器,写入


1


时,对应通 道的中断使能,写入


0


时,


则对应通道 中断无效。



例:


VICIntEnable =



1<<14



;

即通道


14


(也就是


EINT0< /p>


)中断使能;




VICIntEnClr


(中断使能清零寄存器)


:为


32


位寄存器,写入


1


时,对应通道的中断禁止,写入


0


时,则无效。



例:


VICIntEnClr



=



1< <14



;


即通道

14


(也就是


EINT0


)中断禁 止;



注意:


19

个中断源对应的


VIC


通道号(同学们只需要了解加粗体的 几个中断源对应的通道号即可)



模块



标志



VIC


通道号




4



WDT




ARM


内核



ARM


内核



定时器


0


定时器


1


UART0


看门狗中断(


WDINT




保留给软件中断



EmbeddedICE,DbgCommRx


EmbeddedICE,DbgCommTx


匹配



0-3



MR0, MR1, MR2, MR3




捕获



0-3



CR0, CR1, CR2, CR3




匹配



0-3



MR0, MR1, MR2, MR3




捕获



0-3



CR0, CR1, CR2, CR3




Rx


线状态(


RLS



< /p>


发送保持寄存器空(


THRE




Rx


数据可用(


R DA




字符超时指示(


CTI




Rx


线状态(


RLS



< /p>


发送保持寄存器空(


THRE




Rx


数据可用(


R DA




字符超时指示(


CTI




匹配



0-6



MR0, MR1, MR2, MR3, MR4, MR5, MR6




SI


(状态改变)



0


1


2


3


4


5


6


UART1


7


PWM0


I2C


I


SPI0


8


9


10


SPI


中断标志(

< p>
SPIF




模式错误(


MODF




SPI1


11


SPI

< p>
中断标志(


SPIF




模式错误(


MODF




PLL


12


PLL < /p>


锁定(


PLOCK



RTC


13


计数器增加(< /p>


RTCCIF




报警(


RTCALF




14


系统控制



外部中断



0



EINT0




15


系统控制



外部中断



1



EINT1




16


系统控制



外部中断



2



EINT2




17


系统控制



外部中断



3



EINT3




A/D


18


A/D


转换器




2



VIC


参数设置寄存器






P196



共有四类:


VICVectAddr


向量地址寄存器

< p>



(向量


IRQ


中断需要用到)












VIC DefVectAddr


默认向量地址寄存器



(非向量


IRQ


中断需要用到)












VICVectAddr0~15


向 量地址寄存器


0~15











VIC VectCntl0~15


向量控制寄存器


0~15

< p>
(见下表描述)




注意 :


0~15


的数字不是随机的,而是根据


slot0~15


来确定的,


slot


为优先级,


0


最大,


15

< p>
最小;



也就是说,当使用


slot0


时,用


VICV


ectC ntl0






功能



31:6


保留



5


向量


IRQ


使能



4:0


分配给向量


IRQ


通道的中断请求或软件中断的编号





3


】中断 的寄存器配置






①若配置成


FIQ

< br>中断:









第一步:先用


VICIntSelect


( 中断选择寄存器)选择


哪个通道


需要设置成

FIQ


中断









第二步:用


VICIntEnabl e


(中断使能寄存器)将


该通道


中断使 能。





例 :设置


EINT0


中断为


FIQ


中断:



因为


EIN T0


通道号为


14


,所以


VICIntSelect=



1<<14



;





























VICIntEnable= (1<<14);





②若配 置成向量


IRQ


中断:




5

-


-


-


-


-


-


-


-



本文更新与2021-02-01 23:41,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/595862.html

嵌入式系统复习笔记的相关文章