首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Devfreq一起使用的Zynq时钟

与Devfreq一起使用的Zynq时钟
EN

Stack Overflow用户
提问于 2013-03-24 06:54:48
回答 2查看 777关注 0票数 0

我正在研究与devfreq电源管理一起使用的exynos4_bus.c驱动程序,以尝试为Zynq SoC上的外围设备开发类似的驱动程序。我关心的方法是这样的:

代码语言:javascript
复制
static int exynos4210_set_busclk(struct busfreq_data *data, struct opp *opp)
{
        ...
        __raw_writel(tmp, EXYNOS4_CLKDIV_DMC0);
        ...

}

在我看来,raw_writel正在向Exynos时钟寄存器写入它应该运行的频率。该寄存器在arch/arm/mach-exynos/include/mach/regs-clock.h中定义。我现在正在查看arch\arm\mach-zynq\include\mach\zynq_soc.h,试图为Zynq设置找到一些等效的东西,但是有相当多的时钟正在定义中,所以我不确定应该设置哪个时钟。有人能帮上忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-23 21:30:36

Zynq使用内核时钟框架。

包括声明:

代码语言:javascript
复制
#include <linux/clk.h>

按名称获取您想要的时钟的句柄:

代码语言:javascript
复制
struct clk *fclk = clk_get_sys("FPGA0", NULL);
long requested_rate = 125000000;

查找最近的支持频率:

代码语言:javascript
复制
long actual_rate = clk_round_rate(fclk, requested_rate);

然后设置时钟频率:

代码语言:javascript
复制
 int status;
    if ((status = clk_set_rate(fclk, actual_rate))) {
        printk(KERN_INFO "[%s:%d] err\n", __FUNCTION__, __LINE__);
        return status;
    }
票数 1
EN

Stack Overflow用户

发布于 2018-05-08 18:45:49

您可以通过寄存器直接更改Zynq FCLK。测试它的最简单方法是使用busybox中的devmem直接写入地址。

对于FCLK_CLK0 Zynq输出,寄存器的名称为FPGA0_CLK_CTRL。获取地址的一种可能的解决方案是打开SDK并打开ps7_init.html并搜索寄存器。

位0-7选择时钟源(0x00表示IO_PLL、0x20 ARM_PLL、0x30 DDR_PLL)

位8-15是第一个除数

位16-19是保留的

位20-25是第二个除数

例如:对于我的Zynq-7000,我想要28 my,所以我有DIV0=36,DIV1=1和想要使用的IO_PLL.You可以通过在时钟配置部分设置相应的时钟并查看高级时钟选项卡来获取Zynq块中的值。在Linux中设置它的命令应该是"devmem 0xF8000170 32 0x002401“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15593046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档