s3c2410时钟信号:FCLK、HCLK和PCLK;clk_get_rate()

S3C6410 clk_get_rate获取系统时钟 通过clk_get_rate(), clk_get ();函数获取系统的时钟频率 先看一下函数的定义 struct clk *clk_get(struct device *dev, const char *id); struct clk { struct list_head list; struct module *owner; struct clk 阅读详情
s3c2410 有三个时钟FLCK 、HCLK 和PCLK (这3个时针都是核心时针)
s3c2410 芯片有这么一段话:
FCLK is used by ARM920T ,内核时钟,主频。
HCLK is used for AHB bus, which is used by the ARM920T, the memory controller, the interrupt controller, the LCD controller, the DMA and USB host block. 也就是为AHB总线上的外设提供时钟信号,包括USB时钟。 AHB总线用于连接高速外设。
PCLK is used for APB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMC interface,ADC, UART, GPIO, RTC and SPI. 也就是为APB总线上的外设提供时钟信号,即IO接口时钟,串口的时钟设置就是从PCLK来的。APB总线用于连接低速外设。
The S3C2410X supports selection of Dividing Ratio between FCLK, HLCK and PCLK. This ratio is determined by HDIVN and PDIVN of CLKDIVN control register.
s3c2410可通过设置CLKDIVN控制寄存器的HDIVN位(第1位)和PDIVN位(第0位)来改变FCLK, HLCK 和 PCLK的比率。
s3c2410时钟信号:FCLK、HCLK和PCLK;clk_get_rate() - 乌云然 - 香烧间有歇 花落无还时
那么如何获取FCLK, HLCK 和 PCLK的时针频率呢?
可先通过clk_get获取一个clk结构体

/* clk_get获取一个名为id的时针
 * 输入参数dev:   可以为NULL
 * 输入参数id:    时针名称,如fclk、hclk、pclk等
 * 返回值:        返回该时钟的clk结构体
 */
struct clk *clk_get(struct device *dev, const char *id)
struct clk {
    struct list_head list;
    struct module *owner;
    struct clk *parent;
    const char *name; /* 该时针名称 */
    int id;
    int usage;
    unsigned long rate; /* 时钟频率 */
    unsigned long ctrlbit;
    int (*enable)(struct clk *, int enable);
    int (*set_rate)(struct clk *c, unsigned long rate);
    unsigned long (*get_rate)(struct clk *c);
    unsigned long (*round_rate)(struct clk *c, unsigned long rate);
    int (*set_parent)(struct clk *c, struct clk *parent);
};

再将clk_get返回的clk结构体传递给clk_get_rate,获取该时钟的频率

unsigned long clk_get_rate(struct clk *clk)
一个例子:

printk(KERN_DEBUG"fclk = %d, pclk = %d, hclk = %d, uclk = %d\n",
            clk_get_rate(clk_get(NULL, "fclk")),
            clk_get_rate(clk_get(NULL, "hclk")),
            clk_get_rate(clk_get(NULL, "pclk")),
            clk_get_rate(clk_get(NULL, "uclk")));

这里出现了另一个时针uclk,专门给usb供给时针信号。uclk是外部时针源,由s3c2410芯片的gph8/uclk管脚引入,给uart提供外部时针信号,以获取更精确地时针频率。
 
关于AMBA片上总线
AMBA(Advanced Microcontroller Bus Architecture)是由ARM公司提出的片上总线规范。AMBA 2.0规范包括四个部分:AHB(AMBA高性能总线)、ASB(AMBA系统总线)、APB(AMBA外设总线)和Test Methodology。
the Advanced High-performance Bus(AHB)应用于连接高性能、高时钟频率的系统模块(如CPU、DMA和DSP等)它构成了高性能的系统骨干总线( back-bone bus )。AHB bus上的外设有LCD controller(CONT代表controller,控制器)、USB Host CONT、ExtMaster、Nand CONT和nand flash boot loader、bus CONT、interrupt CONT、power management、memory CONT(sram/nor/sdram等)。
the Advanced System Bus(ASB)是第一代AMBA系统总线,同AHB相比,它数据宽度要小一些,它支持的典型数据宽度为8位、16位、32位。
the Advanced Peripheral Bus(APB)是本地二级总线(local secondary bus ),通过桥和AHB/ASB相连。它主要是为了满足不需要高性能流水线接口或不需要高带宽接口的设备的互连。APB bus上的外设有UART、USB device、SDI/MMC、Watch Dog Timer、bus CONT、spi、iic、iis、gpio、rtc、adc、timer/pwm
Linux CLK驱动笔记 clk_register首先初始化clk_ops,clk_core_populate_parent_map初这个函数主要是根据parent_num申请了clk_parent_map,则将parent_names[i]字符串赋值给了clk_parent_map的name。clk的parent是在__clk_init_parent的时候被填充的,没有全部填充,先执行get_parent获取index,然后执行clk_core_fill_parent_index填充当前的parent。 阅读详情

相关推荐

32、通用处理器通信平台发展与5G开源社区技术解析

本文探讨了基于通用处理器(GPP)的通信平台在5G技术中的发展现状与挑战,详细介绍了多个开源平台硬件架构,并分析了软件加速方法未来发展方向。文章指出,尽管GPP具有灵活性开放性优势,但在实时信号处理功耗等方面仍存在瓶颈,需要通过核心技术研发、标准化协作应用拓展推动5G技术的实际应用。

orange的博客 118

clk_get_rate函数

在 kernel/include/linux/clk.h中定义 函数原型: unsigned long clk_get_rate(strcut clk *clk); 含义:获得时钟源(clock source)的当前时钟频率(HZ),前提是此时钟源已经enable。 而对于clk_get_rate函数而言,其实是从clk_get得到的某设备结构体中获得该设备的时钟频率。 clk_get

qq_28779021的博客 3949

python基于词嵌入模型的语义距离语义投影项目源码+说明文档.zip

【项目介绍】文本分析包,提供基于词嵌入模型的语义距离语义投影。此外,cntext还提供了传统的方法,如字数统计、可读性、文档相似度、情感分析等。主要功能:文本统计指标:词频统计、可读性分析、内置词典导入词典构建:基于共现词向量的词典扩充方法文本相似度:包括余弦相似度、Jaccard相似度、编辑距离相似度等认知分析:基于词向量的语义距离语义投影分析功能模块含 stats 文本统计指标 词频统计 可读性 内置pkl词典 情感分析 dictionary 构建词表(典) Sopmi 互信息扩充词典法 W2Vmodels 词向量扩充词典法 Glove Glove词向量模型 similarity 文本相似度 cos相似度 jaccard相似度 编辑距离相似度 mind.py 计算文本中的认知方向(态度、偏见)更多见说明文档

Linux clock子系统及驱动实例

在Linux驱动中,操作时钟只需要简单调用内核提供的通用接口即可,clock驱动通常是由芯片厂商开发的,在Linux启动时clock驱动就已经初始化完成。 本篇介绍Linux clock子系统以及clock驱动的实现。

嵌入式Linux充电站 4995

Linux时钟管理透彻分析

转自http://blog.csdn.net/qq_21792169/article/details/51085111 硬件资源越来越庞大复杂,内核的另一个挑战就是要便捷的管理这些资源。同时,面对如此之多的平台不同的CPU ,管理机制需要统一适用,这就需要对资源的管理抽象到更加通用的层次。CPU中各个模块都需要时钟驱动,内核需 要一种机制能通用所有的平台,方便的管理CPU上所有的clk

qingkongyeyue的博客 2441

s3c2410时钟信号FCLKHCLKPCLK

s3c2410 有三个时钟FLCK 、HCLK PCLK (这3个时针都是核心时针) s3c2410 芯片有这么一段话: FCLK is used by ARM920T ,内核时钟,主频。 HCLK is used for AHB bus, which is used by the ARM920T, the memory controller, the interrupt contr

望都者 1480

s3c2410时钟信号FCLK、HCL…

原文地址:s3c2410时钟信号FCLKHCLKPCLK(转)作者:joee33s3c2410 有三个时钟FLCK 、HCLK PCLK (这3个时针都是核心时针) s3c2410 芯片有这么一段话: FCLK is used by ARM920T ,内核时钟,主频。 HCLK is used for AHB bus, which is used by the ARM920T, the m

shangyaowei的专栏 613

时钟配置

s3c2410时钟信号FCLKHCLKPCLK;clk_get_rate()   s3c2410 有三个时钟FLCK 、HCLK PCLK (这3个时针都是核心时针) s3c2410 芯片有这么一段话: FCLK is used by ARM920T ,内核时钟,主频。 HCLK is used for AHB bus, which is used by the ARM920T

lpdpzc的专栏 965

clk_getclk_enableclk_get_rate函数

(1) 对应外设时钟的开启 struct clk=clk_get(NULL,"adc"); clk.enable(); 之后adc对应的时钟位就能使能。 struct clk *clk_get(struct device *dev, const char *id) {     ..........     list_for_each_entry(p, &clocks, list) {

海阔天空的专栏 1万+

Linux clk 模型

Linux clk 模型   Linux clk模型采用面向对象的思想来设计实现的。 在porting层创建一个一个的clk节点对象,然后将所有的clk节点对象连成一个list。 当驱动层需要设置时钟的时候,通过porting层与驱动层直接的api函数进行操作。首先通过clk_get函数,根据clk节点的名字,获取clk节点。然后,使用clk_set_rate()函数设置clk节点的时钟

bingqingsuimeng的专栏 1万+

内核时钟操作

内核时钟操作 Include/linuc/clk.h分析 首先打开sourceinsight内核工程,搜索clk.h ,这个文件里的函数都是与平台无关,他们的实现都是不同的平台有不同的实现方法。     /**  *clk_get - lookup and obtain a reference to a clock producer.  *@dev: device for cloc

欧阳海宾 645

struct clk *clk_get(struct device *dev, const char *id)

(1)  对应外设时钟的开启 struct clk=clk_get(NULL,"adc"); clk.enable(); 之后adc对应的时钟位就能时能。 struct clk *clk_get(struct device *dev, const char *id) {     ..........     list_for_each_entry(p, &clocks, list

lyuncxw 1608

linux内核查时钟,clk_get函数实现,Linux内核时钟框架

(1) 对应外设时钟的开启struct clk=clk_get(NULL,"adc");clk.enable();之后adc对应的时钟位就能时能。struct clk *clk_get(struct device *dev, const char *id){..........list_for_each_entry(p, &clocks, list) {if (p->id == i...

weixin_35252964的博客 365

第20章 Linux芯片级移植及底层驱动之时钟驱动

20.8 时钟驱动    在一个SoC中,晶振、PLL、驱动门等会形成一个时钟树形结构,在Linux 2.6中,也存有clk_get_rate()、clk_set_rate()、clk_get_parent()、clk_set_parent()等通用API,但是这些API由每个SoC单独实现,而且各个SoC供应商在实现方面的差异很大,于是内核增加了一个新的通用时钟框架以解决这个碎片化问题。之所以...

xiezhi123456的博客 1108

linux内核时钟管理,Linux时钟管理透彻分析

Linux时钟管理透彻分析。硬件资源越来越庞大复杂,内核的另一个挑战就是要便捷的管理这些资源。同时,面对如此之多的平台不同的CPU,管理机制需要统一适用,这就需要对资源的管理抽象到更加通用的层次。CPU中各个模块都需要时钟驱动,内核需要一种机制能通用所有的平台,方便的管理CPU上所有的clk资源。这里分析Linux对clk的管理。通常操作为以下几步:1.定义struct clk *clk;2.获...

weixin_42363510的博客 1205

clk子系统 - 代码分析

通过clk驱动框架可以看出,clk主要分corehardware两层,而core层的主要函数是clk_register,它是把clk注册到系统中,而hardware层的注册函数因种类而异,不过最终都会统一调用clk_register来注册,本文只拿gate来举例;另外本文介绍下操作clk的主要API的过程 1.clk_register clk_register首先分配一个结构体c...

多媒体开发者 3024

驱动篇:底层驱动移植(四)(摘录)

驱动篇:底层驱动移植(四)(摘录) 时钟驱动 在一个 SoC 中,晶振、 PLL 、驱动门等会形成一个时钟树形结构,在 Linux 2.6 中,也存有clk_get_rate ()clk_set_rate ()clk_get_parent ()clk_set_parent ()等通用 API ,但是这些 API 由每个 SoC 单独实现,而且各个 SoC 供应商在实现方面的差异很大,于是内核增加了一个新的通用时钟框架以解决这个碎片化问题。之所以称为通用时钟,是因为这个通用主要体现在: 1 )统一

zytgg123456的博客 765
上一篇: platform_bus,platform_driver,platform_bus
下一篇: 临界区的并发控制
xp_super
博客等级 码龄14年 10粉丝 17原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值