mini2440上为了降低电磁干扰配备了12MHz的晶振,如果直接给当做cpu的时钟,那这个s3c2440a就屈才了。幸好cpu内部自带了MPLL将晶振时钟倍频使得cpu工作在FCLk及AHB总线上的外设工作在HCLK和APB总线上的外设工作在PCLK。当然还配有一个UPLL来产生恒定的48MHZ以支持usb2.0.
①.时钟源选择
在系统复位时检测引脚OM3:OM2,若是0:0,则主时钟源选择外部晶振,usb时钟源选择外部晶振
②.MPLLCON  main pll control  主时钟寄存器控制
用于设定FCLK和Fin的倍数。

Mpll(FCLK) = ( 2 × m × Fin ) / ( p × 2^s )
其中m=MDIV+8, p=PDIV+2, s=SDIV,Fin晶振频率

比如
Fin=12MHz
MDIV=0x7F=127,m=135
PDIV=2,p=4
SDIV=1,s=1
则FCLK=405MHz

注意:系统复位时,必须写一次MPLLCON   UPLLCON ,这样系统才能正常工作。即使不改变其值,即使复位后MPLL UPLL都是使能的,也要写一次,另外还有如下   

③.CLKDIVN clock divider control 时钟分频控制寄存器 
用于设置 FCLK  HCLK PCLK三者的比例

而CAMDIVN如下

比如
CAMDIVN[8]=0
CAMDIVN[9]=0
HDIVN=2,则HCLK=FCLK / 4
PDIVN=1,,则PCLK=HCLK / 2

有以下示例,摘自嵌入式linux开发完全手册
 

/*********************************************************************************************************************************/
2011-12-18
2440的片内外设时钟使能控制


linux下将各个片内外设时钟统一管理,组成时钟队列。
arch/arm/plat-s3c24xx/s3c2410-clock.c

/* standard clock definitions */static struct clk init_clocks_disable[] = {{.name        = "nand",.id     = -1,.parent       = &clk_h,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_NAND,}, {.name        = "sdi",.id      = -1,.parent       = &clk_p,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_SDI,}, {.name     = "adc",.id      = -1,.parent       = &clk_p,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_ADC,}, {.name     = "i2c",.id      = -1,.parent       = &clk_p,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_IIC,}, {.name     = "iis",.id      = -1,.parent       = &clk_p,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_IIS,}, {.name     = "spi",.id      = -1,.parent       = &clk_p,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_SPI,}
};static struct clk init_clocks[] = {{.name        = "lcd",.id      = -1,.parent       = &clk_h,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_LCDC,}, {.name        = "gpio",.id     = -1,.parent       = &clk_p,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_GPIO,}, {.name        = "usb-host",.id     = -1,.parent       = &clk_h,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_USBH,}, {.name        = "usb-device",.id       = -1,.parent       = &clk_h,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_USBD,}, {.name        = "timers",.id       = -1,.parent       = &clk_p,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_PWMT,}, {.name        = "uart",.id     = 0,.parent        = &clk_p,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_UART0,}, {.name       = "uart",.id     = 1,.parent        = &clk_p,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_UART1,}, {.name       = "uart",.id     = 2,.parent        = &clk_p,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_UART2,}, {.name       = "rtc",.id      = -1,.parent       = &clk_p,.enable       = s3c2410_clkcon_enable,.ctrlbit   = S3C2410_CLKCON_RTC,}, {.name     = "watchdog",.id     = -1,.parent       = &clk_p,.ctrlbit  = 0,}, {.name      = "usb-bus-host",.id     = -1,.parent       = &clk_usb_bus,}, {.name       = "usb-bus-gadget",.id       = -1,.parent       = &clk_usb_bus,},
};
//在需要操作各个外设的时钟时,就调用用内核提供的各个函数即可。如摘自mini2440_adc.c
static struct clk    *adc_clock;
adc_clock = clk_get(NULL, "adc");//获取时钟
if (!adc_clock) {
printk(KERN_ERR "failed to get adc clock source\n");
return -ENOENT;
}
clk_enable(adc_clock);//使能时钟//在不需要时,禁止掉
if (adc_clock) {
clk_disable(adc_clock);//禁止时钟
clk_put(adc_clock);
adc_clock = NULL;//源码下是一个空操作,可能是预留
}

此文的adc不错哦,记一下网址
http://www.cnblogs.com/hanyan225/archive/2011/03/29/1998667.html

转载于:https://www.cnblogs.com/-song/archive/2011/10/21/3331946.html

mini2440的时钟相关推荐

  1. mini2440 u-boot linux 内核启动,u-boot.2012.10——mini2440(二、启动流程分析)

    参考资料:https://blog.csdn.net/suiyuan19840208/article/details/7239949 https://blog.csdn.net/pugu12/arti ...

  2. mini2440使用jlink烧写superboot到norflash

    Jlink版本号:J-flash ARM V4.12 J-Flash ARM的配置. 一般说来file-->open project里面会找到一些*.jflash的配置文件,载入他们即可了,可是 ...

  3. 基于mini2440的ov9650摄像头裸机测试

    mini2440提供了一个摄像头接口,可以输出RGB24,RGB16的原始图像还可以输出编码的如YUV格式的图像,并提供了偏移翻转,放大缩小的功能.与开发板配套的摄像头模块为CAM130,采用ov96 ...

  4. linux-2.6.32.2内核在mini2440上的移植,Linux2.6.32.2移植到Mini2440

    1.移植内核的准备工作 (1)使用的环境 操作系统:Fedora 10 交叉编译工具使用:arm-linux-gcc-4.3.2 (2)获取内核 有很多方式可以获取 Linux 内核源代码,如果你的 ...

  5. mini2440驱动分析之触摸屏

    mini2440驱动分析之触摸屏 mini2440触摸屏驱动对应的文件为mini2440_ts.c,他是作为输入设备注册到内核的,功能实现是通过输入子系统来完成的,现在分析触摸屏的实现.以后再分析输入 ...

  6. mini2440驱动分析之ADC

    mini2440驱动分析之ADC 1 . ADC_DEV 结构 [plain] view plaincopy typedef struct { wait_queue_head_t wait; int  ...

  7. Linux NAND FLASH驱动程序分析(mini2440)

    Linux NAND FLASH驱动程序分析(mini2440) 一.Linux-MTD Subsystem介绍 FLASH在嵌入式系统中是必不可少的,它是bootloader.linux内核和文件系 ...

  8. mini2440硬件篇之IIC

     1. 硬件原理 I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线. I2C总线只有两根双向信号线.一根是数据线SDA,另一根 ...

  9. DM9000驱动移植在mini2440(linux2.6.29)和FS4412(linux3.14.78)上的实现(deep dive)

    关于dm9000的驱动移植分为两篇,第一篇在mini2440上实现,基于linux2.6.29,也成功在在6410上移植了一遍,和2440非常类似,第二篇在fs4412(Cortex A9)上实现,基 ...

最新文章

  1. [IOI2008] Fish 鱼
  2. 腾讯音视频实验室:基于音视频细分场景的技术创新探索
  3. KMP算法----java实现
  4. 计算t-test 的C程序
  5. stl min函数_std :: min()函数以及C ++ STL中的示例
  6. 把偷快递的贼炸到怀疑人生!不愧是NASA工程师,奇思妙想
  7. 带你Dart带你Diao之类
  8. 前端人不可错过的低代码神器,告别切图,一键成稿啦!
  9. HDU 4565(矩阵快速幂)
  10. 计算机网络双绞线的功能,双绞线由几根组成?双绞线每根线的作用
  11. 互联网下半场的基本玩法
  12. 手动搭建 ReactJS 项目
  13. 【官方教程】使用Quick-Cocos2d-x搭建一个横版过关游戏(三)
  14. 【矩阵论】矩阵的相似标准型(3)
  15. Java新手入门200例124之用JDBC连接Mysql数据库
  16. 车载OS的战场:万亿美金入口之争
  17. 图片头顶距离顶部百分比怎么修改_ps如何修改图片文字 ps怎么修改文字
  18. 微价值:专访个人开发者800万用户之《系统清道夫》
  19. mkdir: Permission denied: user=root, access=WRITE, inode=/lcy/test5.txt:hdfs:hdfs:drwxr-xr-x
  20. DisplayPort接口

热门文章

  1. Objective-C 工厂方法
  2. Android仿微信聊天语言点击喇叭动画效果
  3. Android Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE解决办法
  4. 从open系统调用的源码看文件的打开过程
  5. 微信浏览器打开网页被拦截了?Mindjump快速解决微信屏蔽网址用户打不开的难题...
  6. Hadoop初级之Hadoop基本概念与应用前景
  7. path.join 与 path.resolve 的区别
  8. 记2018年9月PAT甲级考试(北京工业大学考场)
  9. xenserver 脚本学习之/opt/xensource/bin/xapi-wait-init-complete
  10. Linux有问必答:如何检查Linux的内存使用状况