修改S3C2440的时钟工作频率
之前写程序都没有设置过S3C2440的时钟,一上来就是设置寄存器和点灯,这和stm32的使用很不一样。在本文中将设置S3C2440的时钟频率,并用流水灯来看效果。设置的频率如下表。
时钟 | 频率 |
---|---|
FCLK | 400MHz |
HCLK | 100MHz |
PCLK | 50MHz |
时钟概览
打开S3C2440用户手册,查看第七章CLOCK & POWER MANAGEMENT
。首先来看概览OVERVIEW
的第二段:
The Clock control logic in S3C2440A can generate the required clock signals including FCLK for CPU, HCLK for the AHB bus peripherals, and PCLK for the APB bus peripherals. The S3C2440A has two Phase Locked Loops (PLLs): one for FCLK, CLK, and PCLK, and the other dedicated for USB block (48Mhz). The clock control logic can make slow clocks without PLL and connect/disconnect the clock to each peripheral lock by software, which will reduce the power consumption.
于是可以得到时钟用途表:
时钟 | 用途 |
---|---|
FCLK | CPU |
HCLK | AHB |
PCLK | APB |
S3C2440A拥有两个锁相环(PLL),MPLL用于产生上述三个时钟,UPLL用于产生USB时钟。PLL的原理不清楚,会用就行了。
S3C2440A的时钟框图
从左上角看起。时钟源有两个选择:OSC
(晶振)和EXTCLK
(外部时钟源)。通过OM[3:2]
来选择。开始以为OM[3:2]
是寄存器OM的两个位,但是在S3C2440手册中,寄存器一般以CON结尾。再翻看一下手册,发现上面有一段话,以及一个表格。
也就是说OM[3:2
]其实是S3C2440A上的两个引脚。然后看到JZ2440原理图上对引脚的设置是这样的:
可以看到OM
3与OM2
引脚都接地,因此OM[3:2]=00B
。因此看表格的第一行,选择的是晶振模式,即使用OSC
作为时钟源,而OSC
又来自XTlpll
。然后来看看这个时钟源的频率是多少,在原理图上搜索XTIpll
。
可以看到,晶振频率为12MHz。
继续看框图。经过OM[3:2]
选择后,MPLL得到一个时钟频率,并且经过处理后输出一个时钟(FCLK),最后经过某个寄存器的配置,得到HCLK和PCLK。然后就可以为CPU、AHB和APB的工作提供时钟了。
现在可以清楚时钟的分配路线是