全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

驱动开发时钟API的使用

时间:2023-09-27 14:30

人气:

作者:admin

标签: 开发  时钟  API 

导读:时钟API的使用 对于一般的驱动开发(非clock驱动),我们只需要在dts中配置时钟,然后在驱动调用通用的时钟API接口即可。 1、设备树中配置时钟 mmc0: mmc0 @0x12345678 { compatible = "xx,xx-mmc0...

时钟API的使用

对于一般的驱动开发(非clock驱动),我们只需要在dts中配置时钟,然后在驱动调用通用的时钟API接口即可。

1、设备树中配置时钟

mmc0:mmc0@0x12345678{
  compatible = "xx,xx-mmc0";
  ......
  clocks = < &peri PERI_MCI0 >;//指定mmc0的时钟来自PERI_MCI0,PERI_MCI0的父时钟是peri
  clocks-names = "mmc0"; //时钟名,调用devm_clk_get获取时钟时,可以传入该名字
        ......
 };

以mmc的设备节点为例,上述mmc0指定了时钟来自PERI_MCI0,PERI_MCI0的父时钟是peri,并将所指定的时钟给它命名为"mmc0"。

2、驱动中使用API接口

简单的使用:

/* 1、获取时钟 */
host- >clk = devm_clk_get(&pdev- >dev, NULL); //或者devm_clk_get(&pdev- >dev, "mmc0")
 if (IS_ERR(host- >clk)) {
  dev_err(dev, "failed to find clock sourcen");
  ret = PTR_ERR(host- >clk);
  goto probe_out_free_dev;
 }

/* 2、使能时钟 */
ret = clk_prepare_enable(host- >clk);
if (ret) {
 dev_err(dev, "failed to enable clock source.n");
 goto probe_out_free_dev;
}

probe_out_free_dev:
 kfree(host);

在驱动中操作时钟,第一步需要获取struct clk指针句柄,后续都通过该指针进行操作,例如:设置频率:

ret = clk_set_rate(host- >clk, 300000);

获得频率:

ret = clk_get_rate(host- >clk);

注意:devm_clk_get()的两个参数是二选一,可以都传入,也可以只传入一个参数。

i2c、mmc等这些外设驱动,通常只需要使能门控即可,因为这些外设并不是时钟源,它们只有开关。如果直接调用clk_ser_rate函数设置频率,clk_set_rate会向上传递,即设置它的父时钟频率。例如在该例子中直接调用clk_set_rate函数,最终设置的是时钟源peri的频率。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信