1、PLL(锁相环)
为了降低电磁干扰和降低板间布线要求,芯片外接的晶振频率通常很低(这块板子用的12MHz),通过时钟控制逻辑的PLL提高系统使时钟。锁相环起到的是倍频的作用,锁相环的使用有锁定和连接的过程。(有的芯片锁定连接过程是自动完成的比如S3C2440,有的则需要手动编程实现锁定和连接,总之PLL属于一种片上外设,不同厂家的产品使用上略有不同)
以S3C2410为例,其内部有两个锁相环: MPLL、UPLL,分别为MCU和USB控制器产生时钟信号,其中MPLL未连接之前MCU直接使用震荡源作时钟信号,连接后则改用MPLL倍频后的震荡源作时钟信号;而UPLL因为是为USB设备提供时钟信号,所以规定必须是48MHz或96MHz。
2、分频器
S3C2410有四种时钟信号(从UPLL分出来的UCLK,从MPLL分出来的FCLK/HCLK/PCLK)。UCLK(比为48MHz)是供给USB的,FCLK是供给MCU的,HCLK供给AHB,PCLK供给APB。
FCLK 与MPLL的频率一样。我们所说的S3C2410的CPU主频为200MHz,就是指的这个时钟信号,相应的,1/FCLK即为CPU时钟周期。
HCLK 可以设置为FCLK或FCLK/2 ,即通过设置相应得寄存器CLKDIVN中的对应位HDIVN即可,其中HDIVN为0时对应FCLK,为1时对应FCLK/2
PCLK可以设置为HCLK或HCLK/2 ,即通过设置相应得寄存器CLKDIVN中的对应位PDIVN即可,其中PDIVN为0时对应HCLK,为1时对应HCLK/2
3、AHB/APB
AHB与APB的地位相当于PC中的南北桥,是两道独立的片内总线。AHB:advanced high-performance bus;APB: advanced peripherals bus。 在这里,需要了解一下AMBA system architecture了。简单的说,AMBA是一种协议,这种协议已经称为片上组织通信的事实上的标准(the de facto standard for on-chip fabric communication)。下面给出英文描述:
The AMBA protocol is an open standard, on-chip bus specification that details a stategy for the interconnection and management of functional blocks that makes up a system-on-chip(SoC).It facilitates "right-first-time" development of embedded processors with one or more CPU/signal processors and multiple peripherals. The AMBA protocol enhances a resuable design methodology by defining a common backbone for SoC modules.
需要知道的是,AMBA总线是ARM提出的一种解决方案,它并非唯一的规范,但是因为ARM的广泛使用,AMBA总线也就成为了事实上的规范了。现在AMBA总线最新为AMBA 3 specification版本,包括AMBA 3 AXI Interface、AMBA 3 AHB Interface、AMBA 3 APB Interface、AMBA 3 ATB Interface。而S3C2410还只能支持AMBA 2 specification,这个版本包含AMBA 2 AHB Interface、AMBA 2 APB Interface。也就是在S3C2410的框图中看到的两种总线接口。
这两种总线所连的外设是有区别的。AHB总线连接高速外设,低速外设则通过APB总线互连。显然,对不同总线上的外设,应该使用不同的时钟信号,AHB总线对应HCLK,APB总线对应PCLK。弄清楚每条总线对应的外设,在设置好时钟信号后,对应外设的初始化的值依此而确定。
bus上的外设有LCD controller、USB Host CONT、ExtMaster、Nand CONT和nand flash boot loader、BUS CONT、interrupt CONT、power management、memory CONT(sram/nor/sdram等)。
APB bus上的外设有UART、USB device、SDI/MMC、Watch Dog 、BUS CONT、SPI、IIC、IIS、GPIO、RTC、ADC、Timer/PWM。
4、Fin
指CPU外围接的晶振本身的频率,通常为12MHz。
注意:
1. Although the MPLL starts just after a reset, the MPLL output (Mpll) is not used as the system clock until the software writes valid settings to the MPLLCON register. Before this valid setting, the clock from external crystal or EXTCLK source will be used as the system clock directly. Even if the user does not want to change the default value of MPLLCON register, the user should write the same value into MPLLCON register”
复位后,MPLL虽然默认启动,但是如果不向MPLLCON中写入value,那么外部晶振直接作为系统时钟。 EB110-4的外部晶振有两个,一是用于系统时钟,为12MHz;一个用于RTC,为32.768KHz。若实验没有向MPLLCON写入数值,系统时钟是12MHz。(从这里也可以发现一个问题,如果焊板子时外部晶振开始没有焊上,那么系统是无法正常启动的。因为按照上述规则,复位后还没有写入 MPLLCON,这时又没有可以使用的时钟源,所以不会启动。也就是硬件完成后,这个12MHz的晶振是一定要焊上的,才能进行后续的硬件测试工作。)
上电复位后,几个ms后晶振起振。当OSC时钟信号稳定之后,nRESET电平拉高(这是硬件自动检测过程)。这个时候,PLL开始按照默认的PLL配置开始工作,但是特殊性就在于PLL在上电复位后开始是不稳定的,所以S3C2410设计为把Fin在上电复位后直接作为FCLK,这是MPLL是不起作用的。如果要想是MPLL起作用,那么方法就是写入MPLLCON寄存器值,然后等待LOCKTIME时间后,新的FCLK开始工作。
即使不想改变MPLLCON寄存器的值,也要重新赋值一下。
TIPS:
1、FCLK PCLK HCLK:
http://blog.csdn.net/vrix/archive/2009/07/28/4386400.aspx
2、北邮人论坛:
http://bbs.byr.cn/article/Embedded_System/2561
3、BootLoader中PLL的初始化代码分析:
http://blog.csdn.net/formerman/archive/2009/07/26/4380126.aspx
4、关于时钟及分频的讨论:
http://www.linuxforum.net/forum/showflat.php?Cat=&Board=driver&Number=664181&page=&view=&sb=&o=&fpart=all&vc=1
5、从PC总线到ARM的内部总线:
http://blog.csdn.net/thewayma/archive/2009/06/22/4286891.aspx