linux设备树-时钟

==Example==

    /* external oscillator */ /*晶振,时钟提供者*/
    osc: oscillator {
        compatible = "fixed-clock";
        #clock-cells = <1>;
        clock-frequency  = <32678>;
        clock-output-names = "osc";
    };


    pll: pll@4c000 {  /* 倍频, 时钟消费者与 时钟提供者 */
        compatible = "vendor,some-pll-interface"
        #clock-cells = <1>;		
        clocks = <&osc 0>;     // 代表consumer
        clock-names = "ref";   //
        reg = <0x4c000 0x1000>;
        clock-output-names = "pll", "pll-switched"; //代表provider
    };
     /* 时钟消费者 */
   uart@a000 {
        compatible = "fsl,imx-uart";
        reg = <0xa000 0x1000>;
        ...
        clocks = <&osc 0>, <&pll 1>; //clocks-xx 用于时钟连接
        clock-names = "baud", "register";

        assigned-clocks = <&clkcon 0>, <&pll 2>;//  assigned-clocks-xx 用于时钟配置
        assigned-clock-parents = <&pll 2>;     //只有一组,所以忽略clocks 中 &pll2  对应的parent
        assigned-clock-rates = <0>, <460800>; //0 代表跳过配置
    };

1、consumer dts interface

clock consumer的属性列表如下:

属性名描述
clocks必须

该属性描述clock consumer设备使用的clock source,或者clock input
该属性是一个数组,数组中每一个具体的entry对应一个clock source。

而clock source是由phandle和clock specifier来描述。

phandle指向一个clock provider的device node,

如果该provider的#clock-cells等于0,那么说明该provider就一个output,那么就不需要clock specifier来进一步描述。如果该provider的#clock-cells不等于0,那么clock specifier必须提供,以便指明本设备到底使用provider输出时钟源的哪一路。

clock-names可选同样的,该属性也似描述设备使用的clock source信息的,也是一个数组,是一个字符串数组,每一个字符串描述一个clock source,对应着clocks中phandle和clock specifier。
之所以提供clock-names这个属性其实是为了编程方便,驱动程序可以通过比较直观的clock name来找到该设备的输入时钟源信息。
clock-ranges可选该属性值为空,主要用来说明该设备的下级设备可以继承该设备的clock source。例如B设备是A设备的sub node,A设备如果有clock-ranges属性,那么B设备在寻找其clock source的时候,如果在本node定义的clock相关属性中没有能够找到,那么可以去A设备去继续寻找(也就是说,B设备会继承A设备的clock source相关的属性,也就是clocks或者clock-names这两个属性)。

2、provider dts interface

clock provider的属性列表如下:

属性描述
#clock-cells必须

我们上面说过了,一个HW block(clock consumer)的时钟源可以通过phandle和clock specifier来描述,这里#clock-cells就是说明使用多少个cell(u32)来描述clock specifier。

如果等于0,说明provider就一个clock output,不需要specifier,

如果等于1,说明provider有多个clock output(能用u32标识)。

       >=2的情况应该不存在,一个provider不可能提供超过2^32个clock output。

clock-output-names可选如果clock provider能提供多路时钟输出,那么给每一个clock output起个适合人类阅读的名字是不错的选择,这也就是clock-output-names的目的。clock consumer中提供的clock specifier是一个index,通过这个index可以在clock-output-names属性值中找到对应的时钟源的名字。
clock-indices可选

如果不提供这个属性,那么clock-output-names和index的对应关系就是0,1,2……。

如果这个对应关系不是线性的,那么可以通过clock-indices属性来定义映射到clock-output-names的index。

3、clock config interface

初始化时可以通过dts来设定clock parent以及clock rate,具体属性如下:

属性名描述
assigned-clocks可选这个属性列出了需要进行设定的clock,其值是一个phandle+clock specifier数组
assigned-clock-parent可选准备要设定的parent列表。“儿子”在哪里呢?assigned-clocks中定义的,注意,是一一对应的。例如:
assigned-clocks:A, B,C;
assigned-clock-parent:A_parent,B_parent,C_parent;
assigned-clock-rate可选要设定的频率列表,同样的,和assigned-clocks也是一一对应的。

参考连接:

        wowotech Common Clock Framework系统结构

       linux 文档: Documentation/devicetree/bindings/clock/clock-bindings.txt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/578390.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

stm32 hid自定义接收发送程序开发过程记录

cubleMX配置如下 修改端点描述符一次传输的数据大小 根据cubelMX标准在这里修改 编译错误 直接修改&#xff08;因为没有使用nodef &#xff09;编译通过 修改报告描述符&#xff08;默认的描述符无法传输数据&#xff09; 参考&#xff1a;USB协议详解第10讲&#xff08;USB描…

C++从入门到精通——string类

string类 前言一、为什么学习string类C语言中的字符串示例 二、标准库中的string类string类string类的常用接口说明string类对象的常见构造string类对象的容量操作string的接口测试及使用string类对象的访问及遍历操作下标和方括号遍历范围for遍历迭代器遍历相同的代码&#xf…

元宇宙APP搭建重点,会用到哪些三方服务?

元宇宙APP的搭建是一个综合性的项目&#xff0c;涉及到众多关键要素和第三方服务。以下是一些元宇宙APP搭建的重点&#xff0c;以及可能用到的第三方服务&#xff1a; 一、搭建重点 技术框架的选择与搭建&#xff1a;元宇宙APP需要稳定、高效的技术框架来支撑其运行。这包括前…

上位机图像处理和嵌入式模块部署(树莓派4b与视觉slam十四讲)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 实际使用中&#xff0c;树莓派4b是非常好的一个基础平台。本身板子价格也不是很贵&#xff0c;建议大家多多使用。之前关于vslam&#xff0c;也就是…

Leetcode刷题-(36~40)-Java

算法是码农的基本功&#xff0c;也是各个大厂必考察的重点&#xff0c;让我们一起坚持刷算法题吧。 遇事不决&#xff0c;可问春风&#xff0c;春风不语&#xff0c;即是本心。 我们在我们能力范围内&#xff0c;做好我们该做的事&#xff0c;然后相信一切都事最好的安排就可…

深入理解Python协程:从基础到实战

title: 深入理解Python协程&#xff1a;从基础到实战 date: 2024/4/27 16:48:43 updated: 2024/4/27 16:48:43 categories: 后端开发 tags: 协程异步IO并发编程Pythonaiohttpasyncio网络爬虫 第1章&#xff1a;协程基础 1.1 协程概念介绍 协程&#xff08;Coroutines&…

【科学研究】读博:一场精神赌博❓

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

C++必修:类与对象(一)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. 面向过程与面向对象 1.1. 面向过程 我们之前学习的C语言就是一种面向过程的语…

java中http调用组件深入详解

目录 一、前言 二、http调用概述 2.1 什么是http调用 2.1.1 http调用步骤 2.2 HTTP调用特点 2.3 HTTP调用应用场景 三、微服务场景下http调用概述 3.1 微服务开发中http调用场景 3.2 微服务组件中http的应用 四、常用的http调用组件 4.1 java中常用的http组件介绍 4…

用 Python 创建 Voronoi 图

概述 最常见的空间问题之一是找到距离我们当前位置最近的兴趣点 (POI)。假设有人很快就会耗尽汽油&#xff0c;他/她需要在为时已晚之前找到最近的加油站&#xff0c;解决这个问题的最佳解决方案是什么&#xff1f;当然&#xff0c;驾驶员可以检查地图来找到最近的加油站&…

力扣每日一题-总行驶距离-2024.4.25

力扣题目&#xff1a;总行驶距离 题目链接: 2739.总行驶距离 题目描述 代码思路 直接用数学模拟计算即可 代码纯享版 class Solution {public int distanceTraveled(int mainTank, int additionalTank) {int sum 0;while(additionalTank > 0){if(mainTank > 5){mai…

CATO原理中的数学与魔术(六)——Baby Hummer的拓展一

在上一篇中&#xff0c;我们从CATO原理的数学讲解进入了魔术部分&#xff0c;介绍了其经典作品《Baby Hummer》&#xff0c;相关内容请戳&#xff1a; CATO原理中的数学与魔术&#xff08;五&#xff09;——Baby Hummer CATO原理中的数学与魔术&#xff08;四&#xff09;——…

leetcode 221 最大正方形面积

示例 3&#xff1a; 输入&#xff1a;matrix [["0"]] 输出&#xff1a;0 # 最大正方形面积 def max_square(matrix):m len(matrix)n len(matrix[0])if m 0 or n 0::return Nonemax_side 1dp [[0] * (n 1) for _ in range(m 1)]for i in range(1, m 1):fo…

2024全新瀚海跑道:矢量图片迅速养号游戏玩法,每天一小时,日转现200

最初我注意到这种玩法&#xff0c;是因为最近在浏览各大平台的视频时&#xff0c;我发现了一种特殊类型的账号&#xff0c;其养号成功率高达90%。这些账号发布的视频内容和数据非常夸张&#xff0c;而且制作起来非常简单&#xff0c;任何人都可以轻松上手。这些账号主要发布矢量…

Spring Web MVC入门(2)——请求

目录 一、传递单个参数 基础类型和包装类型的区别 1、基础类型 &#xff08;1&#xff09;不传参 &#xff08;2&#xff09;传字符串 2、包装类型 &#xff08;1&#xff09;不传参 &#xff08;2&#xff09;传字符串 3、小结 二、传递多个参数 三、传递对象 四、…

Leetcode_相交链表

✨✨所属专栏&#xff1a;LeetCode刷题专栏✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 题目&#xff1a; 题解&#xff1a; 看到这个题目首先我们要排除链表逆置的想法&#xff0c;如图、因为c1节点只有一个next指针&#xff0c;逆置后不可能同时指向a2和b3节点。 其次有的的同学…

阿里前端常考vue面试题汇总_阿里高级vue面试题

改变 ![](https://img-blog.csdnimg.cn/img_convert/b736620bcd29f08f3685022ab5583d8b.webp?x-oss-processimage/format,png)你会发现&#xff0c; **只有改变的栏目才闪烁&#xff0c;也就是进行重绘** &#xff0c;数据没有改变的栏目还是保持原样&#xff0c;这样就大大节…

WebSocket 深入浅出

WebSocket 深入浅出 1. WebSocket 是什么2. WebSocket 建立连接通信的过程3. WebSocket 和http的联系与区别4. WebSocket 的使用场景及限制 1. WebSocket 是什么 定义&#xff1a;WebSocket 是一种网络通信协议&#xff0c;它允许在单个TCP连接上进行全双工通信。是HTML5规范提…

网络安全实训Day15

写在前面 电子垃圾&#xff0c;堂堂恢复连载。本来不想分天数梳理了&#xff0c;但是最后要写实训报告&#xff0c;报告里还要有实训日记记录每日学的东西&#xff0c;干脆发这里留个档&#xff0c;到时候写报告提供一个思路。 网络空间安全实训-渗透测试 渗透测试概述 定义 一…

关于conda占C盘内存的问题

文章目录 前言一、C盘中.conda文件中的envs二、C盘中.conda文件中的pkgs 前言 最近发现C盘空间越来越少&#xff0c;于是就去清理了一下conda在C盘的存储&#xff0c;不看不知道&#xff0c;一看吓一跳&#xff0c;足足十几G&#xff01;于是去网上搜索了相关的包能不能删除&a…
最新文章