时钟种类
soc芯片上,时钟一般分为三种:
1, fclk : 一般是cpu工作的时钟.
2, hclk: AHB总线上适用(High), 如usb,内存,相机等.
3, pclk: APB总线使用(peripheral), 入i2s,i2c,spi 等.
如何得到不同频率的时钟.
- 1, osc:表示晶振(2440上是16M).
- 2, pll表示锁相环(Phase-Locked-Loop).用来叠加时钟.
- 3, 时钟分发:
晶振->mpll->clkcntl->fclk->cpu(arm920t):
晶振->mpll->clkcntl->fclk->hdivn->hclk-ahb->memory/interrupt/lcd…
晶振->mpll->clkcntl->fclk->pdivn->pclk-apb->i2c/i2s/spi/
晶振->upll->usb
时钟设置顺序
- 1, 上电, rRESET处于底电平,等待电源稳定.
- 2, 根据OM[3:2]的值,fclk等于晶振.
- 3, 电源稳定后, nRESEt被拉高, cpu开始工作,同时Pll锁存OM[3:2]的值.
- 4, ClockDisable时cpu停止工作,代码设置PLL,
- 5, 一段时间后PLL开始工作.
- 6, 一段时间后, ClockDisable结束, cpu开始工作在fclk=Pll输出的新时钟.
芯片为什么需要时钟
- cpu为什么要有时钟.
参考:为什么CPU需要时钟才能工作
编程
1, OM: 用来控制时钟选择
2, 计算pll,需要设置M,P,S的值来控制
3, 分频器设置
4, tfclk:thclk:tpclk 选择表
4, 需要注意点
mrc: move reg co-process 将协处理器的值写入寄存器.
- 1, 知道了以上需要操作的地方,我们可以先定义 tfclk:thclk:tpclk 之间的比值和最高频率. tf:th:tp = 8:2:1
FCLK=400M, HCLK=100M, PCLK=50M - 2, 查手册确定DIVN的值:
HCLK=FCLK/4 & PCLK=FCLK/8 & CAMDIVN[9] = 0
CLKDIVN[2:1] = ob10
CLKDIVN[0] = 1
所以16进制标识就是CLKDIVN=b101=0x5 - 3, 将fclk设置成400M需要设置pll,pll由mps三个单位计算而成.
Mpll = (2 * m * Fin) / (p * 2 S )
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
(92+8 )* 2 * 12 / (1+2)*2的s次方 = 400M
所以设置MDIV = 92, PDIV = 1, SDIV = 1