1)FLCK、HCLK和PCLK的关系
S3C2440有三个时钟FLCK、HCLK和PCLK
s3c2440官方手册上说P7-8写到:
FCLK is used by ARM920T,内核时钟,主频。
HCLK is used for AHB bus, which is used by the ARM920T, the memory controller, the interrupt controller, the LCD controller, the DMA and USB host block. 也就是总线时钟,包括USB时钟。
PCLK is used for APB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMC interface,ADC, UART, GPIO, RTC and SPI.即IO接口时钟,例如串口的时钟设置就是从PCLK来的。
2)这三个时钟是什么关系
这三个时钟通常设置为1:4:8,1:3:6的分频关系,也就说如果主频FLCK是400MHz,按照1:4:8的设置,那么HLCK是100MHz,PLCK是50MHz
寄存器CLKDIVN表明并设置了这三个时钟的关系
如果CLKDIVN设置为0x5,那么比例即为1:4:8,前提是CAMDIVN[9]为0.
S3C2440有两个锁相环,一个主锁相环MPLL提供给FCLK的,另外一个UPLL是提供给USB时钟(48MHz)的,与MPLL一样,UPLL的产生也是通过UPLLCON寄存器设置分频因子得到。
MPLLCON的配置是用来确定FCLK频率的,计算公式如下:
图1 计算FLCK
从“ldr r1, = ((92 << 12) + (1 << 4) + 1) ”该代码中可以看到数值存在移位操作,即92<<12、1<<4,这个可以参考图2各预分频值的配置。
图2 MDIV、PDIV、SDIV
MDIV的配置在MPLLCON的[19:12]位,因此配置MDIV的值需要左移12位。同样的道理,配置PDIV值需要左移4位,SDIV值需要左移0位(左移0位相当于不用偏移,废话,嘻嘻)。
那么根据图1计算FLCK的公式,计算过程如下:
FCLK=2*(92+8)*(12000000)/(3+2^1)=400000000=400MHz
当FCLK得到正确的配置后,这时就需要对HCLK、FCLK进行配置了,即进行预分频操作,该配置过程很见到,只需要对CLKDIVN简单配置一下就OK了。
CLKDIVN寄存器内容如图3。
;设置CLKDIVN
ldr r0,=CLKDIVN
ldr r1,=0x5
str r1,[r0]
在bootloader中CLKDIVN的配置值为0x5,即FCLK:HCLK:PCLK=1:4:8。相对应的频率将会是400MHz、100MHz、50MHz。
时钟和电源管理部分寄存器
LOCKTIME: UPLL、 MPLL 锁定时间的计数值。
MPLLCON UPLLCON: 这两个寄存器都有MDIV PDIV SDIV设置,对于输入12M的晶振,有相应的推荐值,产生200M和48M的频率。
CLKCON: 为各种外围接口提供时钟。
CLKSLOW: 是否打开2个PLL。
CLKDIVN: 设置CLK、 HCLK、 PCLK比率的寄存