本文共 5999 字,大约阅读时间需要 19 分钟。
system clock 的设置 主要参与的寄存器 归属 3 SYSTEM CONTROLLER 范围 0x7E00_F000 0x7E00_FFFF
|---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 下
// ok6410a OM[0] 为 0// ok6410a 晶振 是下面的 X1// 参考 s3c6410 datasheet P110X1 : 12Mhz XTO XTIX2 : 27Mhz 27MXTO 27MXTIX3 : 48Mhz OTGTI OTGTOX5 : 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 // 两部分 System Clock Control & System Power-management Control 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
./board/samsung/ok6410a/lowlevel_init.S // 提供 clock(uart) 的set 操作./drivers/serial/s3c64xx_serial.c // 串口在 PCLK上 // 串口的时钟./lib/time.c // 提供ARM core 的 tick rate // 和 ARM core 的 时钟 相关./arch/arm/mach-s3c64xx/timer.c // 定时器在 PCLK上 // 根据 PLCK 初始化定时器 // 提供delay函数./arch/arm/mach-s3c64xx/clock.c // 提供 U_BOOT_DRIVER(ok6410_clock) // 提供 clock(ARMCLK HCLK PLCK) 和 clock(uart) 的 get 操作./board/samsung/ok6410a/ok6410a.c // 提供 spl 中 clock(uart) 的相关寄存器的 计算工作
./board/samsung/ok6410a/lowlevel_init.S // 调用 system_clock_init 提供 clock(APLL_LOCK/MPLL_LOCK/EPLL_LOCK)的 set 操作./drivers/serial/s3c64xx_serial.c // 串口在 PCLK上 // 串口的时钟./lib/time.c // 提供ARM core 的 tick rate // 和 ARM core 的 时钟 相关./arch/arm/mach-s3c64xx/timer.c // 定时器在 PCLK上 // 根据 PLCK 初始化定时器 // 提供delay函数./arch/arm/mach-s3c64xx/clock.c // 提供 U_BOOT_DRIVER(ok6410_clock) // 提供 clock(ARMCLK HCLK PLCK) 和 clock(uart) 的 get 操作./drivers/clk/clk_fixed_rate.c // 提供 U_BOOT_DRIVER(fixed_clock)./drivers/clk/clk_fixed_factor.c // 提供 U_BOOT_DRIVER(clk_fixed_factor)./drivers/clk/clk-uclass.c // 提供 UCLASS_DRIVER(clk)./drivers/core/device.c // 提供的 device_probe 调用了 clk_set_defaults 为设备提供 正确的时钟./common/board_f.c // init_sequence_f 提供了 get_clocks 和 board_postclk_init./common/board_r.c // init_sequence_f 提供了 set_cpu_clk_info./drivers/mmc/s3c64xx_sdhci.c // 提供了 U_BOOT_DRIVER(s3c64xx_sdhci_drv) // mmc 挂载 apb上,用PCLK // 提供了 clk 的 set 和 enable 和 get./drivers/mmc/mmc.c./drivers/mmc/sdhci.c
u-boot 阶段 board/samsung/ok6410a/lowlevel_init.S 中 的 system_clock_init基址 : 0x7E00_F000偏移 : 例如 0x900system_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_in 是什么 ,不知道 HCLKX2 = HCLKX2_in / (HCLKX2_RATIO + 1) (1<<8)HCLK_RATIO:1 // HCLKX2 应该就是 DOUT_mpll 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
总线(AXI/AHB/APB)上的设备 clk 的设置和开关定时器提供的delay软件中的节拍(tick rate)
OK++Z-gUutU-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 S3C6410Board: OK6410ADRAM: 256 MiBMMC: S3C64XX_SDHCI: 0Loading Environment from MMC... OKIn: serial0@7F005000Out: serial0@7F005000Err: serial0@7F005000Net: dm9000Warning: dm9000 (eth0) using random MAC address - 2e:38:9e:24:b0:7cHit any key to stop autoboot: 0
转载地址:http://qbigi.baihongyu.com/