记录s3c2440的时钟编程

记录韦东山老师讲课的内容,欢迎各位指正

打开s3c2440芯片手册,看到block diagram(框图),在35页。可以判断有3部分,最上部分是cpu(ARM920T)核心,中间是AHB总线部分,H代表high,是高速总线部分,接在需要高速需要运行的设备,包括sram等内存芯片上;最下部分是APB总线部分,P是priphral.即外设,包括usb、i2c等。这就需要3种时钟,分别供cpu、AHB、APB这几个部分使用。

看34页,可以看到operating frequence,即频率,可得到3个时钟频率:,Fclk供cpu使用,Hclk供AHB总线使用,Pclk供APB总线使用,这样与各总线相连的设备才能有对应的频率;怎样得到这些频率呢?查原理图可知是晶振,但晶振只有12M,使用该频率显然是太慢了,所以需要PLL将晶振频率处理,得到较高频率

OSC即晶振,查原理图可知OM3、OM2都接地,所以值都为0,这样查芯片手册237页可知接入晶振,而不是EXTCLK(外部时钟);传进来的时钟进入UPLL(供usb使用),进入MPLL(M即main)然后通过CLKCONT,分为3个时钟:fclk、

hclk、pclk,hclk是通过HDIVN分频得到的,供AHB总线使用;pclk是通过PDIVN分频得到,供APB总线使用.

要想写出程序得到频率,就得在MPLL、HDIVN、PDIVN上下手,从芯片手册241页Power-On Reset Sequence图上学习,首先是nReset信号,它是低电平有效(因为前面有n),在原理图和芯片手册都可搜索到这个名字。

过程是

(1).nReset在等待电源稳定后输出高电平

(2)此时FCLK是晶振频率为12MHz

 (3) 在OM[3:2]latch后,PLL进入locktime,

(4) 之后FCLK有了PLL输出的新频率

由前面可知,UPLLCON是处理usb的pll的,MPLLCON是处理cpu AHB APB设备的pll的;

编程控制时钟,主要是对于CLKCON CLKDIVN寄存器进行控制

下面记录编程目标及过程:

目标:让FCLK运行于400MHz,HCLK运行于100MHz,PCLK运行于50MHz

过程:设置CLKDIVN,让HCLK=FCLK/4 此时要查看CAMDIVN[9]的默认值是否是0,经过搜索查到确实是0

让PCLK = HCLK/2

设置MPLL,查256页的表得,要让输出频率为400MHz,MDIV要设置为92,PDIV要设置为1,SDIV要设置为1

为什么要这样设置?因为查255页的公式可知:m=MDIV+8=100  p=PDIV+2=3  s=SDIV=1;此时Mpll = (2 * m * Fin) / (p * 2的s次方)=2*100*12/3/(2^1)=400,刚好可以

另外,需要注意前面244页的note,即如果HDIVN不为0,需要设置cpu为异步模式,需要加上下面的代码,否则cpu将使用HCLK,即100MHz;这段代码要注意这一行为orr r0,r0,0xC0000000;mrc 中的c是cooperate process(协处理器),r是register,该指令的意思是将协处理器的值读到寄存器中,mcr则刚好相反;原来除cpu之外,还有很多的协处理器

当编程设定PLL后,PLL会立刻进入锁定时间,锁定过后FCLK就达到新的频率,所以异步模式的代码要加在设定PLL的代码之前,否则cpu的频率(Fclk)将是HCLK

先记录到这里,继续我的嵌入式linux征程,加油!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值