system clock 的设置 主要参与的寄存器
归属 3 SYSTEM CONTROLLER
范围 0x7E00_F000 0x7E00_FFFF
S3C6410的时钟
|---APLL---------ARMCLK --- 用于 CPU
|
外部晶振(XTIPLL)+内部的OSC(振荡器) | 0 | |----HCLK --- 用于 AXI/AHB 总线外设
|---OM[0]--- 主时钟 ---- |---MPLL----|
外部时钟(EXTCLK) | 1 | |----PCLK --- 用于 APB 总线外设
|
|---EPLL---------AUDIOCLK --- 用于 UART/IIC/IIS/AUDIO 外设
在 s3c6410 中 uart/iic/iis挂载了 apb 下
X1 : 12Mhz XTO XTI
X2 : 27Mhz 27MXTO 27MXTI
X3 : 48Mhz OTGTI OTGTO
X5 : 32.768Khz RTCXTO RTCXTI
PLL可产生高达1.6GHz的高频时钟信号。
S3C6410X的ARM1176处理器最高可运行667MHz。
工作频率可由the internal clock divider, DIV ARM,无需改变PLL频率。divider ratio 可 在1到16之间变化。
内部IP连接到适当的总线系统,以满足其I/O带宽和操作性能。
当它们连接到AXI总线或AHB总线时,工作速度最高可达133MHz。
当它们连接到APB总线时,最大工作速度可达66MHz。
此外,AHB和APB之间的总线速度对同步数据传输有很高的依赖性。
HCLKX2时钟提供给S3C6410X的两个DDR控制器DDR0和DDR1。
通过DDR控制器发送和接收数据的工作速度最高可达266MHz。
Chapter 3 System Controller
3.1 OVERVIEW P120
3.2 FEATURES P121
3.3 FUNCTIONAL DESCRIPTION P121
3.3.1 HARDWARE ARCHITECTURE P121
3.3.2 CLOCK ARCHITECTURE P122
3.3.3 CLOCK SOURCE SELECTION P123
3.3.4 PHASE LOCKED LOOP (PLL)
3.3.5 SYNCHRONOUS 667MHZ OPERATING MODE P129
3.3.6 LOW POWER MODE OPERATION P131
3.3.7 MISCELENEOUS. P138
3.4 REGISTER DESCRIPTION P138
3.4.1 MEMORY MAP
3.4.2 INDIVIDUAL REGISTER DESCRIPTIONS P141
CLK 相关U-boot 代码
./board/samsung/ok6410a/lowlevel_init.S
./drivers/serial/s3c64xx_serial.c
./lib/time.c
./arch/arm/mach-s3c64xx/timer.c
./arch/arm/mach-s3c64xx/clock.c
./board/samsung/ok6410a/ok6410a.c
./board/samsung/ok6410a/lowlevel_init.S
./drivers/serial/s3c64xx_serial.c
./lib/time.c
./arch/arm/mach-s3c64xx/timer.c
./arch/arm/mach-s3c64xx/clock.c
./drivers/clk/clk_fixed_rate.c
./drivers/clk/clk_fixed_factor.c
./drivers/clk/clk-uclass.c
./drivers/core/device.c
./common/board_f.c
./common/board_r.c
./drivers/mmc/s3c64xx_sdhci.c
./drivers/mmc/mmc.c
./drivers/mmc/sdhci.c
核心(PLL及ARMCLK/PCLK/HCLK)CLK的设置者
u-boot 阶段 board/samsung/ok6410a/lowlevel_init.S 中 的 system_clock_init
基址 : 0x7E00_F000
偏移 : 例如 0x900
system_clock_init
900
bit[6] set 1 : SYNCMUXSEL
SYS CLOCK SELECT IN CMU :DOUT APLL
bit[7] set 1 : SYNCMODE
SYNCMODEREQ to ARM
bit[11:8] : SYNCACK
wait SYNC mode acknowledge (Read Only) change to 0b1111
00 : APLL_LOCK
set 0xFFFF
Required period to generate a stable clock output : 0xFFFF
04 : MPLL_LOCK
set 0xFFFF
Required period to generate a stable clock output : 0xFFFF
08 : EPLL_LOCK
set 0xFFFF
Required period to generate a stable clock output : 0xFFFF
20
清0 bit[15:0]
ARMCLK:
(1<<4)MPLL_RATIO:1
DOUT_mpll = MOUT_mpll(或者DOUT_apll) / (MPLL_RATIO + 1)
(0)ARM_RATIO:0
ARMCLK = DOUT_apll / (ARM_RATIO + 1)
PCLK:
(1<<9)HCLKX2_RATIO:1
HCLKX2 = HCLKX2_in / (HCLKX2_RATIO + 1)
(1<<8)HCLK_RATIO:1
HCLK = HCLKX2 / (HCLK_RATIO + 1)
(3<<12)PCLK_RATIO:3
PCLK = HCLKX2 / (PCLK_RATIO + 1)
0c : APLL_CON
(1<<31)
APLL enable
(266<<16)
PLL M divide value:266
(3<<8)
PLL P divide value :3
(1)
PLL S divide value : 1
10 : MPLL_CON
(1<<31)
MPLL enable
(266<<16)
PLL M divide value:266
(3<<8)
PLL P divide value :3
(1)
PLL S divide value : 1
14 : EPLL_CON0
(1<<31)
EPLL enable
(24<<16)
PLL M divide value:24
(3<<8)
PLL P divide value :3
(0)
PLL S divide value : 1
18 :
(0)
PLL K divide value : 0
1c : CLK_SRC
bit[2:0] set 0b111
Control MUX EPLL : FOUT EPLL
Control MUX MPLL : FOUT MPLL
Control MUX APLL : FOUT APLL
delay
return
- ok6410a u-boot 中时钟现状
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4b196221076301fd83d94c05024aa109.png#pic_center)
消费者
总线(AXI/AHB/APB)上的设备 clk 的设置和开关
定时器提供的delay
软件中的节拍(tick rate)
打印信息
OK++Z-gUut
U-Boot 2021.01-15955-g9f70b17-dirty (Mar 30 2021 - 16:23:44 +0800)
--------------------------------------------------- arch/arm/mach-s3c64xx/clock.c print_cpuinfo 打印的开始
****************************************
** Updated for OK6410A Board **
** Version 1.0 (2018/10/13) **
** OEM: Golden Creation **
****************************************
CPU: S3C6410 @532MHz
Mclk = 532MHz, Eclk = 96MHz
Hclk = 133MHz, Pclk = 66MHz
Serial-source = PCLK (SYNC Mode)
--------------------------------------------------- arch/arm/mach-s3c64xx/clock.c print_cpuinfo 打印的结束
cpu core : Mclk = 532MHz
AHB : Hclk = 133MHz
APB : Pclk = 66MHz
特殊模块 : Eclk = 96MHz
反推 :
DOUT_apll = 532M
也就是外部晶振 12M 内部的OSC(振荡器) 倍频到了 532M
正推:
参照 数据手册 P142
FIN(MHz) TargetFOUT(MHz) MDIV PDIV SDIV
12 533 266 3 1
1. FIN : ok6410a X1 : 12MHz
2. 查看 u-boot 中设置的 APLL_CON 的值, 就是如上的设置
所以 DOUT_apll 输出为 532MHz/533Hz
按照公式算 也为 532Mhz
参照 P142
266 * 12Mhz / (3*2^1) = 532Mh
其他:
ECLK : 计算方法和 MCLK不同
参照 P143
应该是 (24+0/(2^16)) * 12Mhz / 3 = 96Mhz
---------------------------------------------------
Model: Samsung SMDK6410 based on S3C6410
Board: OK6410A
DRAM: 256 MiB
MMC: S3C64XX_SDHCI: 0
Loading Environment from MMC... OK
In: serial0@7F005000
Out: serial0@7F005000
Err: serial0@7F005000
Net: dm9000
Warning: dm9000 (eth0) using random MAC address - 2e:38:9e:24:b0:7c
Hit any key to stop autoboot: 0