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

学习朱有鹏朱老师嵌入式教学视频学习笔记 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 设置各种时钟开关,暂时不使用PLL
ldr 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, r2
ldr r2, =0x14131440                     
orr r1, r1, r2
str r1, [r0, #CLK_DIV0_OFFSET]

// 4 设置PLL
// FOUT = MDIV*FIN/(PDIV*2^(SDIV-1))=0x7d*24/(0x3*2^(1-1))=1000 MHz
ldr r1, =APLL_VAL                       
str r1, [r0, #APLL_CON0_OFFSET]
// FOUT = MDIV*FIN/(PDIV*2^SDIV)=0x29b*24/(0xc*2^1)= 667 MHz
ldr r1, =MPLL_VAL                       
str r1, [r0, #MPLL_CON_OFFSET]

// 5 设置各种时钟开关,使用PLL
ldr r1, [r0, #CLK_SRC0_OFFSET]
ldr r2, =0x10001111
orr r1, r1, r2
str r1, [r0, #CLK_SRC0_OFFSET]

mov pc, lr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值