ARM-linux s3c2440 之时钟分析

发布者:HeavenlySunset最新更新时间:2016-06-12 来源: eefocus关键字:ARM  linux  s3c2440  时钟分析 手机看文章 扫描二维码
随时随地手机看文章
S3c2440 时钟 & 电源管理时钟由三部分组成:  Clock control ,USB control, 和 Power control 

Clock control 部分可以产生时钟FCLK,提供ARM内核,HCLK 提供 AHB 总线外设,还有 PLCK APB 总线外设。 s3c2440 有两个内置的PLLS 锁相环,一个提供给 FCLK,HCLK,和PCLK,另一个提供给USB时钟(48MHZ)。Clock control 可以不使用PLL,而降低的时钟,通过软件设置,时能各中种外设,从而可以降低功耗。

Power control部分,用于电能管理,有四种工作模式:Normal mode, Slow mode, Idle mode, Sleep mode.

linux 中 s3c2440 时钟的初始化:


 

  1. MACHINE_START(S3C2440, "SMDK2440")  
  2. /* Maintainer: Ben Dooks  */  
  3. .phys_io = S3C2410_PA_UART,  
  4. .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,  
  5. .boot_params = S3C2410_SDRAM_PA + 0x100,  
  6.   
  7.   
  8. .init_irq = s3c24xx_init_irq,  
  9. .map_io = smdk2440_map_io,  
  10. .init_machine = smdk2440_machine_init,  
  11. .timer = &s3c24xx_timer,  
  12. MACHINE_END  

 

linux 入口时,在start_kernel()中调用 setup_arch(), 会进行平台体系相关初始化:


 

  1. smdk_2440_map_io()  --> s3c24xx_init_io() -->  s3c_init_cpu() -> s3c244x_init_clocks()  


 

  1. void __init s3c244x_init_clocks(int xtal)  
  2. {  
  3. /* initialise the clocks here, to allow other things like the 
  4. * console to use them, and to add new ones after the initialisation 
  5. */  
  6. s3c24xx_register_baseclocks(xtal);       //向系统注册基本时钟: FCLK,HCLK, PCLK  
  7. s3c244x_setup_clocks();                       //设置基本时钟的参数  
  8. s3c2410_baseclk_add();                      //添加其他外设的时钟  
  9. }  

 

系统将所有外设的时钟通过一个叫做struct clk的结构体来进行描述:

 

  1. struct clk {  
  2. struct list_head      list;  
  3. struct module        *owner;  
  4. struct clk           *parent;  
  5. const char           *name;  
  6. int      id;  
  7. int      usage;  
  8. unsigned long         rate;  
  9. unsigned long         ctrlbit;  
  10.   
  11. int    (*enable)(struct clk *, int enable);  
  12. int    (*set_rate)(struct clk *c, unsigned long rate);  
  13. unsigned long    (*get_rate)(struct clk *c);  
  14. unsigned long    (*round_rate)(struct clk *c, unsigned long rate);  
  15. int    (*set_parent)(struct clk *c, struct clk *parent);  
  16. };  

 

将所有时钟分成两类,一类是开启,一类关闭; 分别至于 两个数组中

 

  1. struct clk init_clocks[];   struct clk init_clocks_disable[];  

 

最后一一注册

注册时钟是通过这个函数注册的 

 

  1. /* initialise the clock system */  
  2.   
  3. int s3c24xx_register_clock(struct clk *clk)  
  4. {  
  5.     if (clk->enable == NULL)  
  6.         clk->enable = clk_null_enable;  
  7.   
  8.     /* add to the list of available clocks */  
  9.   
  10.     /* Quick check to see if this clock has already been registered. */  
  11.     BUG_ON(clk->list.prev != clk->list.next);  
  12.   
  13.     spin_lock(&clocks_lock);  
  14.     list_add(&clk->list, &clocks);  
  15.     spin_unlock(&clocks_lock);  
  16.   
  17.     return 0;  
  18. }  

 

 

关键字:ARM  linux  s3c2440  时钟分析 引用地址:ARM-linux s3c2440 之时钟分析

上一篇:ARM-Linux s3c2440 之中断分析(一)
下一篇:s3c2440的dma操作的一般步骤

推荐阅读最新更新时间:2024-03-16 14:56

ARM汇编编程基础之一 —— 寄存器
ARM的汇编编程,本质上就是针对CPU寄存器的编程,所以我们首先要弄清楚ARM有哪些寄存器?这些寄存器都是如何使用的? ARM寄存器分为2类,普通寄存器和状态寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(S
[单片机]
ARM宣布速度更快、能效更高的Mali-T7x0系列GPU
    业务让ARM最出名的还是其Cortex A系列处理器内核授权业务,因为很多厂商都争相采用。但是很多人有忘了,该公司在GPU领域也不容小觑。据ARM副总裁和媒体处理首席Pete Hutton表示:在过去的几年里,采用该公司Mali GPU设计的芯片,其出货量已经增长超过10倍——并且,Mali GPU现在支撑着超过50%的Android平板、以及超过20%的Android智能手机。 由于前景大好,所以ARM也没打算止步不前。该公司已经为Mali家族推出了两款新品——Mali-T760和Mali-720——前者面向高端平板和智能手机,而后者则面向入门级Android设备。 此外,尽管T760主要面向的是平板电脑和手机,但它却拥
[手机便携]
利用proteus学习ARM(LPC2103)之一:熟悉开发环境及点亮LED
最近在自学ARM(LPC2103),想将自己学习的经历全部记录在这个博客里面,与各位新手共同进步。 开发ARM的开发环境主要有ADS1.2,IAR FOR ARM,KEIL FOR ARM,我这次选用的为IAR的开发环境,这样新手上手会比较快一点,下载地址可以谷歌mcu123,大家都懂的,若要用于商业目的还是请用正版。我下载的是最新的版本V6.1,有一个问题就是不能修改字体大小,一旦修改字体大小软件就出错关闭了,但是这个影响不大,我一般都是在UltraEdit里面编辑,只是利用下IAR的编译和调试环境。有问题可以留言,我会尽最大可能帮助你。 相信大家新建工程,添加文件,设置芯片等都不会有问题,但是最后你把HEX文件添加到prote
[单片机]
ARM架构之异常与中断
ARM920T架构中有7中运行模式: 1.用户模式(user) 2.快中断模式(fiq) 3.中断模式(irq) 4.超级用户模式(svc) 5.中止模式(abt) 6.系统模式(sys) 7.未定义模式(und) ARM在处理异常和中断的时候都会到中断向量表中寻找相对应的异常与中断处理程序地址,通过跳转指令去执行相关的异常与中断的处理程序。 在ARM检测到异常或中断时,系统会进入相对应的运行模式,如中断进入IRQ模式,具体进入什么中断可以通过读取CPSR寄存器的值来判断。在进入相关的运行模式中,各个模式都有自己专属的寄存器,不同于通用寄存器,这些是只有进入该模式才有的寄存器,所以在进入异常中断处理程序之前,要保存除了专用
[单片机]
<font color='red'>ARM</font>架构之异常与中断
基于ARM控制器LPC2214的税控收款机系统的设计
  引言   税控收款机是指具有特定税控功能的电子收款机,它是集软硬件为一体的嵌入式系统,硬件设计考虑高性价比和高可靠性,软件设计考虑系统的稳定性和可靠性。根据这一原则,本文介绍了一种基于ARM控制器LPC2214的税控收款机的设计方案。   税控收款机硬件系统的设计与实现   税控收款机的硬件组成框图如图1所示,其硬件系统由中央处理模块、显示模块、打印模块、电源模块、时钟模块、IC卡接口、外部通讯接口(包括RS232串行接口、网络接口、USB接口等)、蜂鸣器,以及输入键盘、电子锁、条码扫描仪和手写板等几部分组成。   图1 税控收款机硬件框图   中央处理模块   中央处理模块采用飞利浦公司基于32位ARM7
[单片机]
基于<font color='red'>ARM</font>控制器LPC2214的税控收款机系统的设计
ARM嵌入式系统中断向量表的动态配置
摘要:通常32位ARM嵌入式系统的中断向量表是在程序编译前设置好的,每次编写中断程序都要改C程序的汇编启动代码,相当繁琐。本文给出一种配置ARM中断向量表新方法。该方法比通常方法仅增加一条指令执行时间,简便高效,功能完备,向量表在运行时动态生成,C程序可以使用固定向量表的启动代码,并可隐藏起来。 关键词:动态配置 嵌入式系统 ARM 中断向量表 一般32位ARM嵌入式系统的中断向量表是程序编译前设置好的。在编写32位ARM嵌入式系统的中断服务程序、设置和修改ARM体系结构的中断向量表时,常感到相当麻烦,不得不修改汇编代码,对不喜欢使用汇编代码编程的程序员尤其如此。当需要在程序运行过程中动态修改中断向量的程序时会感到更为不便,
[嵌入式]
基于Linux系统的软PLC设计
引言 可编程控制器(PLC,Programmable LogicController)经过几十年的发展,现在已经成为了最重要、最可靠、应用场合最广泛的工业控制微型计算机。然而,人们在使用过程中也逐渐发现了传统PLC的缺点:兼容性差,由于生产厂家众多,各种机型互不兼容,没有统一的标准,难以构造统一的硬件结构;封闭、扩展能力差:产品能力的功能实现依赖硬件;对使用者的要求高:现行的PLC 产品,其编程方式要求使用者对PLC的硬件结构、电器原理、编程指令都要有相当的了解;可维护性差:PLC 出现故障时需要专业人员用专业工具进行检测和维修;成本较高,传统PLC 被几家厂商所垄断,性价比增长缓慢。这些问题都制约着传统PLC 的发展。近年来,
[嵌入式]
ARM 的指令结构和寄存器结构
ARM 微处理器的在较新的体系结构中支持两种指令集: ARM 指令集和 Thumb 指令集。其中,ARM 指令为 32 位的长度, Thumb 指令为 16 位长度。 Thumb 指令集为 ARM 指令集的功能子集,但与等价的 ARM 代码相比较,可节省 30 %~ 40 %以上的存储空间,同时具备 32 位代码的所有优点 ARM 处理器共有 37 个寄存器,被分为若干个组( BANK ),这些寄存器包括: - 31 个通用寄存器,包括程序计数器( PC 指针),均为 32 位的寄存器。 - 6 个状态寄存器,用以标识 CPU 的工作状态及程序的运行状态,均为 32 位,目前只使用了其中的一部分。 同时, ARM 处理器又有
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved