前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

嵌入式软硬件知识总结2(嵌入式主流软硬件平台)

本人学习总结,有些乱,勿怪

1、PLL的鉴频鉴相器——PFD(Phase Frequency Detector

  • 1.PFD电路结构

1.1传统PFD

1.2非时钟PFD(nc-PFD)

1.2 预充电PFD(pt-PFD)

1.3边沿触发型PFD

1.1传统PFD

有RS触发器构成。

优点:鉴相范围[? 2 π -2\pi?2π,2π \piπ],范围宽

缺点:存在死区(可以通过增加复位延时消除死区),电路结构复杂,需要的晶体管数量多。由于多输入逻辑们延时较大,电路工作频率不高。而且高频动态功耗大。

1.2非时钟PFD(nc-PFD

参考文献:A Simple Precharged CMOS Phase Frequency Detector ——1998 JSSC,最早提出的NC-PFD.

特点:电路结构简单,仅需要18个mos管。无死区,电平敏感。

缺点:检相范围[-π \piπ,π \piπ],输出受到占空比的影响。

以下图为例分别分析优缺点

假设参考时钟(Fref)和反馈时钟(slave)同频率,Fref相位超前。

当Fref=1时:两个nc-stage最下面的MOS管都导通,等到Slave信号为1,DOWN变为1.,UP变为1

之后,Fref先变0,此时DOWN跟随Fref拉低。B点点位高阻保持,等到Slave变为0,UP信号在拉低。

因此:UP信号与Slave信号脉宽相同,Down信号宽度等于Fref下降沿减去Slave信号上升沿。

在考虑如下问题:

1由以上分析可知,NC-PFD是电平敏感,因此若输入信号的占空比变化,其输出UP和DOWN的脉冲宽度页随之变化。

2.假设Fref和Slave信号同频反相。则Fref和Slave电平始终相反,一个为0,另一个为1。此时UP和down一直为0,无法鉴相。

当Slave信号落后相位大于180时,同理分析,DOWN的脉冲宽度大于UP的脉冲宽度,鉴相错误。

(Slave信号落后时,UP信号应大于DOWN信号。)

故NC-PFD鉴相范围[-π \piπ,π \piπ]

3.假设Fref和Slave信号,同频同相。仿照之前的分析过程,UP和DOWN信号同时拉高,拉低。且脉冲宽度应该等于输入信号的脉宽。脉宽足够用来开启电荷泵开关,不存在死区。

1.2 预充电PFD(pt-PFD)

特点:电路结构简单,边沿敏感,低电平先预充电,高电平传递信号。

缺点:有死区,鉴相范围[-π \piπ,π \piπ]

用以下波形解释上述特点:

当Vref=0时:预充电节点1拉高,等待Vref拉高。

当Vref=1时:DN输出1。

同理

当Vdiv=0时:预充电节点1拉高,等待Vref拉高。

当Vdiv=1时:UP输出1。

当Vref和Vdiv同时为1的时候,上下两部分同时复位,UP=DOWN=0;复位通过Vref和Vdiv向后传递,存在一定的传播延时。

总结以下几个问题:

1.由于复位信号的传播延时存在,当Vref和Vdiv之间的相位差足够小的时候,DN和UP脉冲宽度也会很小,可能仅为复位信号的传播延时。无法打开电荷泵开关,产生死区。

2.由前面分析可知,只有当Vref和Vdiv同时为1的时候,才会产生复位信号,因此当输入信号同频反相,时没有哪一时刻,两者同为1。鉴相器无法工作

当Vdiv落后于Vref的大于180度时,与nc-PFD类似,会出现相反的鉴相结果,鉴相错误。

故:鉴相范围[-π \piπ,π \piπ]

1.3边沿触发型PFD

沿触发式PFD的电路结构。主体电路由两个带有复位端的D 触

发器和一个或非门组成。优点是线性度好,鉴相范围宽,理想鉴相范围达到(-2π,2π)。性能良好的

D 触发器的设计将是整个边沿式PFD 设计的关键。

由于存在复位时间,也会有死区存在。可以通过加大复位延迟消除死区,是短脉冲宽度足够打开电荷泵开关。

2、ARM 汇编指令 DCD

DCD:数据定义( Data Definition )伪指令
一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。

语法格式:

标号 DCD(或 DCDU) 表达式

DCD(或 DCDU)伪指令用于分配一片连续的字存储单元并用指定的表达式初始化。其中表达式可以为程序标号或数字表达式。 DCD 也可用 “ &” 代替。用 DCD 分配的字存储单元是字对齐的,而用 DCDU 分配的字存储单元并不严格字对齐。

3、中断向量表

中断向量表是一个表,这个表里面存放的是中断向量。中断服务程序的入口地址或存放中断服务程序的首地址成为中断向量,因此中断向量表是一系列中断服务程序入口地址组成的表。这些中断服务程序(函数)在中断向量表中的位置是由半导体厂商定好的,当某个中断被触发以后就会自动跳转到中断向量表中对应的中断服务程序(函数)入口地址处。中断向量表在整个程序的最前面,

我们说 ARM 处理器都是从地址 0X00000000 开始运行的,但是我们学习 STM32 的时候代码是下载到 0X8000000 开始的存储区域中。因此中断向量表是存放到 0X8000000 地址处的,而不是 0X00000000,这样不是就出错了吗?为了解决这个问题,Cortex-M 架构引入了一个新的概念——中断向量表偏移,通过中断向量表偏移就可以将中断向量表存放到任意地址处,中断向量表偏移配置在函数 SystemInit 中完成,通过向 SCB_VTOR 寄存器写入新的中断向量表首地址即可,

第 8 行和第 10 行就是设置中断向量表偏移,第 8 行是将中断向量表设置到 RAM 中,第10 行是将中断向量表设置到 ROM 中,基本都是将中断向量表设置到 ROM 中,也就是地址0X8000000 处。第 10 行用到了 FALSH_BASE 和 VECT_TAB_OFFSET,这两个都是宏,定义如下所示:

因此第 10 行的代码就是:SCB->VTOR=0X080000000,中断向量表偏移设置完成。通过上面的讲解我们了解了两个跟 STM32 中断有关的概念:中断向量表和中断向量表偏移,那么这个跟 I.MX6U 有什么关系呢?因为 I.MX6U 所使用的 Cortex-A7 内核也有中断向量表和中断向量表偏移,而且其含义和 STM32 是一模一样的!只是用到的寄存器不同而已,概念完全相同!

4、NVIC(内嵌向量中断控制器)

中断系统得有个管理机构,对于 STM32 这种 Cortex-M 内核的单片机来说这个管理机构叫做 NVIC,全称叫做 Nested Vectored Interrupt Controller。关于 NVIC 本教程不作详细的讲解,既然 Cortex-M 内核有个中断系统的管理机构—NVIC,那么 I.MX6U 所使用的 Cortex-A7 内核是不是也有个中断系统管理机构?答案是肯定的,不过 Cortex-A 内核的中断管理机构不叫做NVIC,而是叫做 GIC,全称是 general interrupt controller,后面我们会详细的讲解 Cortex-A 内核的 GIC。

Cortex-A7 也有中断向量表,中断向量表也是在代码的最前面。CortexA7 内核有 8 个异常中断,这 8 个异常中断的中断向量表如表。

简单介绍一下这 7 个中断:

①、复位中断(Rest),CPU 复位以后就会进入复位中断,我们可以在复位中断服务函数里面做一些初始化工作,比如初始化 SP 指针、DDR 等等。

②、未定义指令中断(Undefined Instruction),如果指令不能识别的话就会产生此中断。

③、软中断(Software Interrupt,SWI),由 SWI 指令引起的中断,Linux 的系统调用会用 SWI指令来引起软中断,通过软中断来陷入到内核空间。

④、指令预取中止中断(Prefetch Abort),预取指令的出错的时候会产生此中断。

⑤、数据访问中止中断(Data Abort),访问数据出错的时候会产生此中断。

⑥、IRQ 中断(IRQ Interrupt),外部中断,前面已经说了,芯片内部的外设中断都会引起此中断的发生。

⑦、FIQ 中断(FIQ Interrupt),快速中断,如果需要快速处理中断的话就可以使用此中断。

5、GIC 控制器

STM32(Cortex-M)的中断控制器叫做 NVIC,I.MX6U(Cortex-A)的中断控制器叫做 GIC,

GIC 是 ARM 公司给 Cortex-A/R 内核提供的一个中断控制器,类似 Cortex-M 内核中的NVIC。目前 GIC 有 4 个版本:V1~V4,V1 是最老的版本,已经被废弃了。V2~V4 目前正在大量的使用。GIC V2 是给 ARMv7-A 架构使用的,比如 Cortex-A7、Cortex-A9、Cortex-A15 等,V3 和 V4 是给 ARMv8-A/R 架构使用的,也就是 64 位芯片使用的。I.MX6U 是 Cortex-A 内核的,因此我们主要讲解 GIC V2。GIC V2 最多支持 8 个核。ARM 会根据 GIC 版本的不同研发出不同的 IP 核,那些半导体厂商直接购买对应的 IP 核即可,比如 ARM 针对 GIC V2 就开发出了 GIC400 这个中断控制器 IP 核。当 GIC 接收到外部中断信号以后就会报给 ARM 内核,但是ARM 内核只提供了四个信号给 GIC 来汇报中断情况:VFIQ、VIRQ、FIQ 和 IRQ

GIC接收众多的外部中断,然后对其进行处理,最终就只通过四个信号报给 ARM 内核,这四个信号的含义如下:

VFIQ:虚拟快速 FIQ。

VIRQ:虚拟外部 IRQ。

FIQ:快速中断 IRQ。

IRQ:外部中断 IRQ。

VFIQ 和 VIRQ 是针对虚拟化的。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言