1、时钟介绍
时钟是同步工作系统的同步节拍,时钟的快慢就是我们常说的工作频率,以赫兹(HZ)为单位。时钟系统指导器件的运行,我们分析器件的工作特性时,常常会看器件的时序图,时序图中的时钟周期就是时钟系统来决定的。
2、时钟来源
2.1、 三种时钟配置
1、外部直接输入时钟信号,SoC有个引脚用来输入外部时钟信号,用的很少。
2、外部晶振+内部时钟发生器产生时钟,大部分低频单片机都是这么工作的。
3、外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器分频得到各种频率的时钟。
2.2、S5PV210的时钟来源
S5PV210的时钟来源属于第三种,也可以说复杂的Soc都是第三种,因为复杂Soc的内部器件是很多的,具体原因如下:
1、使用外部晶振的原因:Soc自身是不带晶振的,所以肯定需要外部提供。
2、使用低频晶振的原因:外部的晶振提供的都是低频的信号,像S5PV210芯片就是接的24MHZ的晶振。不接高频晶振是因为高频晶振价格高,而且高频信号的传导辐射比较难控制。就算接高频晶振也不能解决问题,Soc的主频高达1GHZ,就算是高频晶振也达不到这个频率。
3、采用内部时钟发生器:晶振产生的信号不一定满足Soc的需求,所以需要时钟发生器来进行处理才能给后级使用;
4、采用内部PLL:PLL是锁相环,作用就是倍频器,将低频信号变成高频信号。因为外接晶振是低频的,但是Soc需要高频信号,所以要倍频;
5、采用分频器:经过倍频器后时钟信号变成高频信号,但是Soc外接多个外设,每个外设需要的时钟频率是不同的,有的外设需要低频信号,比如串口。所以要用分频器将高频信号,分频成低频信号。
3、时钟和系统性能的关系
参考博客《时钟系统和系统功耗的关系》。
4、时钟和外设编程的关联
外设工作都需要一定频率的时钟信号,但是绝大部分外设自身是没有信号产生的电路的,需要主控芯片提供时钟信号。因此我们程序员可以为每个外设指定时钟来源、时钟分频系统、从而设置这个外设的工作时钟。
5、S5PV210的时钟系统简介
5.1、时钟域
S5PV210芯片的时钟体系比较复杂,主要原因是有太多的外设,并且不同的外设工作要求的时钟频率越相差很大,从几十Hz1GHZ。所以将时钟分成不同的时钟域,每个时钟域的时钟频率都不同,分别对应不同时钟频率需求的外设器件。S5PV210芯片分为三个时钟域:MSYS、DSYS、PSYS。各个时钟域之间是彼此独立的,然后通过BRG(异步总线桥:asynchronous bus bridges)连接起来。
5.1.2、MSYS域
1、MSYS域包含CPU(Cortex-A8内核)、DRAM控制器(DMC0和DMC1)、IRAM&IROM等,都是一些高速的设备。
2、包含的时钟信号:
ARMCLK: 给cpu内核工作的时钟,也就是所谓的主频。
HCLK_MSYS: MSYS域的高频时钟,给DMC0和DMC1使用
PCLK_MSYS: MSYS域的低频时钟
HCLK_IMEM:给iROM和iRAM(合称iMEM)使用
5.1.3、DSYS域
1、都是和视频显示、编解码等有关的模块;
2、包含的时钟信号:
HCLK_DSYS:DSYS域的高频时钟
PCLK_DSYS:DSYS域的低频时钟
5.1.4、PSYS域
1、和内部的各种外设时钟有关,譬如串口、SD接口、I2C、AC97、USB等。
2、包含的时钟信号:
HCLK_PSYS:PSYS域的高频时钟
PCLK_PSYS:PSYS域的低频时钟
SCLK_ONENAND:ONENAND芯片用的
5.2、推荐时钟系统设置值
Values for the high-performance operation:
• freq(ARMCLK) = 1000 MHz
• freq(HCLK_MSYS) = 200 MHz
• freq(HCLK_IMEM) = 100 MHz
• freq(PCLK_MSYS) = 100 MHz
• freq(HCLK_DSYS) = 166 MHz
• freq(PCLK_DSYS) = 83 MHz
• freq(HCLK_PSYS) = 133 MHz
• freq(PCLK_PSYS) = 66 MHz
• freq(SCLK_ONENAND) = 133 MHz, 166 MHz
5.3、时钟体系框图详解
5.3.1、时钟体系框图
5.3.2、PLL器件
1、PLL是锁相环,功能上是倍频器,把低频的时钟信号变成高频时钟信号;
2、PLL有锁存周期,因为PLL是物理器件,不是理想器件,把低频信号输入PLL到PLL输出高频信号,这中间是需要时间的。
5.3.3、MUX器件
1、MUX是多路选择器件,有多个输入和一个输出,在逻辑上相当于或门,实现多选一的功能;
2、控制MUX器件的寄存器有一个状态位,当MUX器件切换输入源时,是需要一定时间的,当切换成功时硬件会将状态位置位,我们需要去读取状态位来判断是否切换完成。
DIV器件
1、DIV是分频器,将高频信号分频成低频信号,Fout=Fin / 分频系数;
2、DIV也有状态位,当修改分频系数时,需要读取状态位来判断修改是否已经生效。
6、时钟设置的关键性寄存器
6.1、xPLL_LOCK寄存器
该寄存器的功能是设定PLL的锁存周期,每个PLL都有一个对应的xPLL_LOCK寄存器。
6.2、xPLL_CON/xPLL_CON0/xPLL_CON1寄存器
1、这些都是PLL的控制寄存器,每个PLL的控制寄存器个数有差异,具体查阅收据手册。其中比较重要的配置:PLL的使能、倍频系数的设置、锁存状态。
2、PLL的倍频参数是PDIV、MDIV、SDIV,最终输出信号FOUT = MDIV X FIN / (PDIV X 2^SDIV-1)。
3、在设置每个PLL的倍频参数时也不是随意设置的,数据手册对不同的频率都有建议值,其实就是让你照着抄,别自己瞎搞。芯片是物理器件,有自己的物理特性,倍频参数并不是只满足上面的计算公式就行。
6.3、CLK_SRCn寄存器
CLK_SRCn寄存器是时钟源控制寄存器,控制时钟信号的来源。对应到时钟框图里,就是控制MUX器件的。
6.4、CLK_SRC_MASKn寄存器
CLK_SRC_MASKn寄存器是MUX的使能控制寄存器,可以禁止/使能MUX器件。
6.5、CLK_DIVn寄存器
CLK_DIVn寄存器是控制DIV分频器的,控制各个DIV分频器的分频系数。
6.6、CLK_GATE_x寄存器
>各个时钟信号的使能控制信号,当需要某个器件停止工作时,可以操作此寄存器将器件使用的时钟信号给禁止掉。
6.7、CLK_DIV_STATn寄存器
表示每个DIV分频器的状态,用来查询当前DIV是否可以输出稳定的时钟信号。
6.8、CLK_MUX_STATx寄存器
表示每个MUX器件的状态,用来查询当前MUX器件的的输入源是哪一个,或者查询当前MUX的参数修改后是否已经稳定。
版权声明:本文为CSDN博主「正在起飞的蜗牛」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42031299/article/details/118230864
暂无评论