soc时钟系统4月17 一个周末玩了三四天啊 速八真不错

来源:互联网 发布:淘宝店铺视频制作 编辑:程序博客网 时间:2024/05/16 03:12

学习朱有鹏朱老师嵌入式教学视频学习笔记 shfit键又坏了
大部分cpu采用三种方式;
外部直接输入时钟信号,soc引脚用来输入外部时钟信号,可以用在低频,用的很少
外部晶振加上内部时钟发生器。可以用在低频。大部分的单片机
外部晶振加上内部时钟发生器加上内部PLL锁相环产生高频时钟加上内部分频器分频得到各种频率的时钟,210就是这样。
210采用这种方式的原因;
第一;外部高频电路很复杂,干扰大。
第二;高频晶振价格高
第三 ;因为soc不同设备之间时钟频率不同,所以需要先统一高频,然后每个外设都有自己的分频器。
s5pv210的时钟系统简介;
时钟域;
MSYS.DSYS.PSYS
这里写图片描述
首先在s5pv210开发板上有三种时钟域
main system (MSYS) 包括cortexA8内核,dram控制器,IRAM,IROM
display system (DSYS) 和视频显示,编解码有关的。硬件编解码比如软件的快得多。
peripheral system (PSYS)。和内部的各种外设有关 GPIO,USB等
时钟产生过程 晶振加时钟发生器
这里写图片描述
s5pv210外接的晶振是USBXTI,所以给晶振模块上电后,得到原始时钟,经过一系列开关筛选,并经过PLL锁相环得到高频时钟。
四种PLL使用范围,在数据手册可以查看到;
APLL;Cortex A8 and MSYS clock domain uses APLL ( ARMCLK, HCLK_MSYS, and PCLK_MSYS).
MPLL和VPLL;DSYS and PSYS clock domain (that is, HCLK_DSYS, HCLK_PSYS, PCLK_DSYS, and PCLK_PSYS) and
other peripheral clocks (that is, audio IPs, SPI, and so on)
EPLL;Video clocks uses VPLL
三种时钟域的关系 CLOCK RELATIONSHIP
这里写图片描述
MSYS;
ARMCLK;给cpu内核工作使用的时钟,也就是主频
HCLK-MSYS;给内存DMC0。DMC1使用
PCLK-MYSY 低频时钟
HCLK-IMEM 给iram,irom使用的时钟
DSYS;
HCLK-DSYS;高频时钟
PCLK-DYSY 低频时钟
PSYS;
HCLK-PSYS;高频时钟
PCLK-PYSY 低频时钟
默认设置的时钟典型值;
这里写图片描述
时钟系统体系框图;
从晶振和时钟发生器得到原始时钟,经过PLL高频再分频到各总线时钟
这里写图片描述
从中间时钟到各外设自己使用的时钟;
这里写图片描述
时钟系统的寄存器
1,xPLL-LOCK 控制PLL的锁定周期
PLL需要锁定周期,当输入频率改变或分频(乘法)值改变时。不可能一下就从低频突变到1Ghz, PLL_LOCK寄存器指定此锁定周期,该周期基于PLL的源时钟。
这里写图片描述
2,xPLL-CON用来开关pll电路,查看锁定状态,设置倍频倍数
这里写图片描述
3,控制不同MUX的选择
这里写图片描述
4,决定mux器件的开关。
这里写图片描述
4,设置DIV分频器的数值
这里写图片描述
实现时钟设置代码
.global clock_init
clock_init:
ldr r0, =ELFIN_CLOCK_POWER_BASE

// 1 设置各种时钟开关,暂时不使用PLLldr r1, =0x0// 芯片手册P378 寄存器CLK_SRC:Select clock source 0 (Main)str r1, [r0, #CLK_SRC0_OFFSET]              // 2 设置锁定时间,使用默认值即可// 设置PLL后,时钟从Fin提升到目标频率时,需要一定的时间,即锁定时间ldr r1, =0x0000FFFF                 str r1, [r0, #APLL_LOCK_OFFSET]             str r1, [r0, #MPLL_LOCK_OFFSET]                 // 3 设置分频// 清bit[0~31]ldr r1, [r0, #CLK_DIV0_OFFSET]                  ldr r2, =CLK_DIV0_MASK                  bic r1, r1, r2ldr r2, =0x14131440                     orr r1, r1, r2str r1, [r0, #CLK_DIV0_OFFSET]// 4 设置PLL// FOUT = MDIV*FIN/(PDIV*2^(SDIV-1))=0x7d*24/(0x3*2^(1-1))=1000 MHzldr r1, =APLL_VAL                       str r1, [r0, #APLL_CON0_OFFSET]// FOUT = MDIV*FIN/(PDIV*2^SDIV)=0x29b*24/(0xc*2^1)= 667 MHzldr r1, =MPLL_VAL                       str r1, [r0, #MPLL_CON_OFFSET]// 5 设置各种时钟开关,使用PLLldr r1, [r0, #CLK_SRC0_OFFSET]ldr r2, =0x10001111orr r1, r1, r2str r1, [r0, #CLK_SRC0_OFFSET]mov pc, lr
0 0
原创粉丝点击