Part7时钟初始化

时钟脉冲信号提供度量

这是两种产生信号的方式,晶振全称是晶体震荡器,是石英晶体精密切割磨削后焊接上电极引线
2、1 2440时钟体系
1、 时钟频率——12MHZ,在图中找不到
2、 有几个PLL——两个,UPLL和MPLL
3、 产生了几个时钟
4、 产生的时钟是用来做什么的
1、2440

(第7章)

2\6410——12MHZ


3\210——24MHZ


3、思维导图设计
上面最重要的是总时钟频率和核使用的时钟信号。
思维导图主要通过给CPU使用的时钟信号从低到高过程中需要软件设置的寄存器或者其他东西。

2440:
lock time 不需要改动,所以只需要做下面三步。
设置分频系数就是设置HVDIN,拿出来设置成相应倍数。
把设置cpu到异步工作模式放到第三步,

设置fclk就是设置pll分频器


比如这里想要405,需要设置相应的PLL为(127<<12)|(2<<4)|(1<<0)
mov最常用,但只能用于操作数比较短的情况
ldr和str一起用,用于操作数长的情况
mcr,mrc对于内存存储
6410
不改变 lock time,搜索lock time,可以看到APLL_LOCK\MPLL_LOCK\EPLL_LOCK都有了默认值,这三个锁定时间不设置
但是需要改变控制寄存器的值

在第三章可以找到时钟的硬件示意图,经过简化在白板上画了出来
首先需要设置分频系数


在表3-2中可以找到标准值与参考的相应寄存器值。

也可以通过搜索例如DIVARM找到时间频率的公式
在用软件打开的u_boot代码中找到lowlevel_init.s,可以找到分频系数设置,我们参考他设置 (我们这儿APLL和MPLL都是运行在533MHZ)
PCLK=3,HCLK=1,HCLKX2=1
这里要设置fclk初始值。
这里是APLL\MPLL输出频率计算的公式。比如Fin为12MHZ,构造Fout
6410不需要设置异步模式



disable_mmu:
mcr p15,0,r0,c7,c7,0
mrc p15,0,r0,c1,c0,0
bic r0, r0, #0x00000007
mcr p15,0,r0,c1,c0,0
mov pc, lr
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define CLK_DIV0 0x7e00f020 //时钟寄存器地址
#define OTHERS 0x7e00f900
#define MPLL_CON 0x7e00f010
#define APLL_CON 0x7e00f00c
#define CLK_SRC 0x7e00f01c
#define DIV_VAL ((0x0<<0)|(0x1<<9)|(0x1<<8)|(0x3<<12)) //放到时钟分频器的数据,根据CLK_DIV0与各分频因子确定
#define PLL_VAL ((1<<31)|(266<<16)|(3<<8)|(1<<0))
init_clock:
ldr r0, =CLK_DIV0 //设置分频系数
ldr r1, =DIV_VAL
str r1, [r0]
ldr r0, =OTHERS //设置CPU到异步工作模式,OTHERS寄存器第七位就是控制异步的
ldr r1, [r0]
bic r1,r1,#0xc0 //将第七位第六位置零,第六位控制HCKLX2由是否由MPLL分频得到
str r1, [r0] //写回OTHERS寄存器
ldr r0, =APLL_CON //设置fclk,APLL\MPLL频率这两个设置好下面就自动按比例缩小
ldr r1, =PLL_VAL
str r1, [r0]
ldr r0, =MPLL_CON
ldr r1, =PLL_VAL
str r1, [r0]
ldr r0, =CLK_SRC //设置CLK_SRC选择器,具体见原理图。将APLL\MPLL作为源。OTHERS寄存器前面已经设置了
mov r1, #0x3
str r1, [r0]
mov pc, lr
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define GPKCON 0x7f008800
#define GPKDAT 0x7f008808
light_led:
ldr r0, =GPKCON
ldr r1, =0x11110000
str r1, [r0]
ldr r0, =GPKDAT
ldr r1, =0xa0
str r1, [r0]
mov pc, lr

浙公网安备 33010602011771号