在u-boot的源码中,系统时钟的初始化是放在板文件的lowlevel_init.S文件中的system_clock_init函数中。我们的tiny210是拷贝的smdkc100,所以,大家可以先参看smdkc100的lowlevel_init.S文件中的system_clock_init函数。
对于芯片手册中每一个模块的学习,在了解前面的基本原理后,关键的寄存器的操作,可以先浏览一下这个模块的所有寄存器的简介,对各个寄存器的作用做到心中有数,这样,可以大体知道,需要配置哪些寄存器,不至于被下面一大堆的寄存器给弄懵了,系统时钟的寄存器简介在P367页--3.7 REGISTER DESCRIPTION 。
1.设置APLL/MPLL/EPLL/VPLL锁相环时间
翻看手册,P371页,找到PLL CONTROL REGISTERS。
• (APLL_LOCK, R/W, Address = 0xE010_0000)
• (MPLL_LOCK, R/W, Address = 0xE010_0008)
• (EPLL_LOCK, R/W, Address = 0xE010_0010)
• (VPLL_LOCK, R/W, Address = 0xE010_0020)
根据上图得到各种PLL锁定时间是
APLL的锁时间为:24*30=720 --0x2D0
MPLL的锁时间为:24*200=4800 --0x12C0
EPLL的锁时间为:24*375=9000 --0x2328
VPLL的锁时间为:24*100=2400 --0x960
上面代码中v1,v2,v3,v4其实是别名
ATPCS文档(Procedure Call Standard for the ARM v2.08),在第P15页找到,r4-r8是用来存储变量的寄存器而v1-v4也就是这四个寄存器
然后再将寄存值的分别存入APLL_LOCK/MPLL_LOCK/EPLL_LOCK/VPLL_LOCK对应的寄存器地址中。