时钟脉冲信号

按一定的电压幅度,一定的时间间隔连续发出的脉冲信号叫做时钟脉冲信号。用于给处理器和其他硬件提供时钟度量。

时钟脉冲频率

在单位时间内产生的时钟脉冲的个数叫做时间脉冲频率

时钟源分类

1.晶振:又称晶体振荡器,通过石英晶体切割、加电极、通电后会产生固定的机械震荡。优点是结构简单、噪声低,缺点是生产成本高。

2.PLL:锁相环,通过外部晶振和锁相环电路来提高晶振的频率。

时钟体系

1.晶振频率是多少?

2.有多少个PLL?

3.PLL产生出了哪些时钟?(ARM核使用的是哪个时钟)

4.产生出来的时钟用来做什么?

5.在datasheet中的CLOCK & POWER MANAGEMENT中可以相关描述

codesys读取时钟_晶振

1.晶振频率是12MHz

2.MPLL,UPLL

3.MPLL产生出来FCLK、HCLK、PCLK;UPLL产生出来UCLK

codesys读取时钟_codesys读取时钟_02


codesys读取时钟_时钟脉冲_03


1.上电之后ARM核按照晶振频率在工作

2.当PLL配置(Locktime)完成是会进入Lock Time,处理器停止工作,然后以新的频率开始工作。

3.时钟初始化软件需要完成的工作:

3.1.配置Lock Time;

3.2.设置分频系数(用于FCLK来配置HCLK和PCLK);

3.3.如果HDIVN不等于0,需要设置CPU从快速模式到异步模式。FCLK是核的频率,HCLK是总线的频率,当核的频率和总线的频率不相等的时候需要设置CPU到异步工作模式。

3.4.配置FCLK

代码编写

1.找到设置lock time的寄存器LOCKTIME(0x4C000000),一般使用默认值,所以不需要去设置

2.设置PLL需要去设置MPLLCON(0x4C000004)中的MDIV=92 PDIV=2 SDIV=1

3.设置分频系数一定要在datasheet中对应的表里面。可以参考uboot中的分频系数来设置FCLK:HCLK:PCLK=1:4:8 HDIVN=2 PDIVN=1。在CLKDIVN(0x4C000014)寄存器中是用来设置HDIVN和PDIVN的

4.设置异步工作模式需要在ARM核手册中找到CP15的R1寄存器的iA和nF位,并设置为1

时钟设置总结(可以参考芯片手册和uboot代码)
0.设置Locktime(默认也可以)

1.设置PLL系数

2.设置选择器

3.设置分频系数

4.设置异步模式

通过查询芯片手册:

Fclk:

codesys读取时钟_时钟脉冲_04


codesys读取时钟_晶振_05


Hclk和Pclk:

codesys读取时钟_时钟脉冲_06


codesys读取时钟_时钟脉冲_07

此外

codesys读取时钟_晶振_08

代码演示:

/* 设置MPLL, FCLK : HCLK : PCLK = 400m : 100m : 50m */
	/* LOCKTIME(0x4C000000) = 0xFFFFFFFF 配置锁定时间计数寄存器*/
	ldr r0, =0x4C000000
	ldr r1, =0xFFFFFFFF
	str r1, [r0]

	/* CLKDIVN(0x4C000014) = 0X5, tFCLK:tHCLK:tPCLK = 1:4:8  */
	ldr r0, =0x4C000014
	ldr r1, =0x5
	str r1, [r0]

	/* 设置CPU工作于异步模式 */
	mrc p15,0,r0,c1,c0,0
	orr r0,r0,#0xc0000000   //R1_nF:OR:R1_iA
	mcr p15,0,r0,c1,c0,0

	/* 设置MPLLCON(0x4C000004) = (92<<12)|(1<<4)|(1<<0) 
	 *  m = MDIV+8 = 92+8=100
	 *  p = PDIV+2 = 1+2 = 3
	 *  s = SDIV = 1
	 *  FCLK = 2*m*Fin/(p*2^s) = 2*100*12/(3*2^1)=400M
	 */
	ldr r0, =0x4C000004
	ldr r1, =(92<<12)|(1<<4)|(1<<0)
	str r1, [r0]

	/* 一旦设置PLL, 就会锁定lock time直到PLL输出稳定
	 * 然后CPU工作于新的频率FCLK
	 */