2014年5月

Linux系统中s3c2440芯片的时钟

最近看到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,再计算器件自身的频率就可以了。

最新文章

最近回复

  • Blackrose: 感谢拍砖!嗯,那句话...
  • aa: “Raspberry...
  • Blackrose: 外部只是帮你把芯片启...
  • : 内部时钟比外部的频率...
  • Blackrose: 你这评论比正文更有内容么
  • 7hao: CR+LF ...
  • Blackrose: 可以是你更新软件源后...
  • sxk: 博主,我的系统是ub...
  • Blackrose: 你深得精髓么
  • qihao: 这篇文章的简单总结就...

分类

归档

其它