Blackrose's Blog Blackrose's Blog

Linux系统中s3c2440芯片的时钟

in technologyread (205) 文章转载请注明来源!

最近看到ADC的驱动,发现里面有clk_*相关的函数调用,大体分析了下Linux下时钟的注册,仅供对s3c2440芯片参考。SOC上的控制器大多是要求提供相应的clock工作频率,这些器件或芯片在工作前都要配置自身的工作频率,而这些频率是由CPU提供的,CPU上电后是通过晶振来起振工作,然后通过PLL提供频率,然后按一定比例分频,以供周围部件工作。

Linux中对s3c2440是没有配置clock的相关代码,这个操作是由uboot的第一阶段完成,linux只是读取相应寄存器的值,计算频率后赋值给相应的struct clk。s3c2440中使用的clk有clkxtal, clkmpll, clkupll, clkf, clkh, clkp,xtal就是代表起振的12M晶振,mpll是供CPU使用的PLL,upll是供USB使用的。这些clk结构体,都会添加到clocks的链表中,其它的外围器件也有对应的clk结构体,并对parent成员赋值,也添加到了clocks链表中。对于ADC驱动中只是调用clk_get就能得到相应clk结构体,然后得到rate,再计算器件自身的频率就可以了。

文章二维码

扫描二维码,在手机上阅读!

发表新评论
已有 2 条评论
  1. qihao
    qihao
    回复

    Gmail完全登陆不上去了的说

    1. Blackrose
      Blackrose本文作者
      回复

      @qihao 说明人品没攒够

博客已萌萌哒运行
© 2018 由 Typecho 强力驱动.Theme by Yodu
前篇 后篇
雷姆
拉姆