fclk if总线_[DM3730]请教关于DM3730中GPMC总线时钟FCLK频率更改问题

博主在尝试将DM3730的GPMC总线时钟FCLK从200MHz降至50MHz,遇到困难。已参考TI论坛的建议进行修改,但发现`clk_set_rate(clkp, rate)`函数中的`rate`值只能设为200000000。问题在于修改`linux/arch/arm/mach-omap2/Clock34xx.c`文件后,FCLK频率无法改变。文章请求社区中经验丰富的开发者提供帮助,指出可能的错误或原因。" 132441077,19673933,Java优雅关闭进程:实现与示例,"['Java', '开发语言', '进程管理']
摘要由CSDN通过智能技术生成

如题,本人现在在使用GPMC与FPGA通讯,现在问题是频率有些高,想降低到50M左右,现在FCLK的频率是200M。

参考http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/t/282404.aspx做修改,发现

clk_set_rate(clkp, rate)函数中的rate值并不是刻意随便更改的,目前只能更改为200000000,源程序中的值为400000000.

想请教一下论坛的前辈,是不是我修改的地方不对,还是其他原因,为什么频率没法改呢?

我修改的文档为:

linux/arch/arm/mach-omap2/Clock34xx.c

下面为该文档中我修改的函数,红色部分为我修改的地方。

int __init omap2_clk_set_freq(void)

{

struct clk *osc_sys_ck, *dpll1_ck, *arm_fck, *core_ck;

struct clk *dpll2_ck, *iva2_ck, *dpll3_m2_ck;

unsigned long osc_sys_rate;

unsigned long dsprate, l3rate;

short err = 0 ;

int l3div;

/*

* Check if any processing is required.

*/

if ((vdd1_opp == 0) && (vdd2_opp == 0))

return 0;

if (WARN((vdd1_opp == 0), "VDD1 OPP is not set.\n"))

err = 1;

if (WARN((vdd2_opp == 0), "VDD2 OPP is not set.\n"))

err = 1;

/*

* Attempt to get the required clocks

*/

dpll1_ck = clk_get(NULL, "dpll1_ck");

if (WARN(IS_ERR(dpll1_ck), "Failed to get dpll1_ck.\n"))

err = 1;

arm_fck = clk_get(NULL, "arm_fck");

if (WARN(IS_ERR(arm_fck), "Failed to get arm_fck.\n"))

err = 1;

core_ck = clk_get(NULL, "core_ck");

if (WARN(IS_ERR(core_ck), "Failed to get core_ck.\n"))

err = 1;

osc_sys_ck = clk_get(NULL, "osc_sys_ck");

if (WARN(IS_ERR(osc_sys_ck), "Failed to get osc_sys_ck.\n"))

err = 1;

dpll2_ck = clk_get(NULL, "dpll2_ck");

if (WARN(IS_ERR("dpll2_ck"), "Failed to get dpll2_ck.\n"))

err = 1;

iva2_ck = clk_get(NULL, "iva2_ck");

if (WARN(IS_ERR("iva2_ck"), "Failed to get iva2_ck.\n"))

err = 1;

dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck");

if (WARN(IS_ERR("dpll3_m2_ck"), "Failed to get dpll3_m2_ck.\n"))

err = 1;

if (err)

return -ENOENT;

/*

* Set MPU frequency

*/

mpurate = mpu_opps [vdd1_opp].rate;

if (clk_set_rate(dpll1_ck, mpurate))

pr_err("Unable to set MPU frequency (%u)\n", mpurate);

/*

* Set DSP frequency

*/

if (omap3_has_iva()) {

omap2_clk_iva_init_to_idle();

dsprate = dsp_opps [vdd1_opp].rate;

if (clk_set_rate(dpll2_ck, dsprate))

pr_err("Unable to set DSP frequency (%lu)\n", dsprate);

}

/*

* Set L3 frequency

*/

l3div  = cm_read_mod_reg(CORE_MOD, CM_CLKSEL) &

OMAP3430_CLKSEL_L3_MASK;

l3rate = l3_opps[vdd2_opp].rate * l3div;

if (clk_set_rate(dpll3_m2_ck, l3rate))

pr_err("Unable to set L3 frequency (%lu)\n", l3rate);

/*

* Re-calculate the clocks

*/

recalculate_root_clocks();

osc_sys_rate = clk_get_rate(osc_sys_ck);

pr_info("Switched to new clocking rate (Crystal/Core/MPU): "

"%ld.%01ld/%ld/%ld MHz\n",

(osc_sys_rate / 1000000),

((osc_sys_rate / 100000) % 10),

(clk_get_rate(core_ck) / 1000000),

(clk_get_rate(arm_fck) / 1000000));

if (omap3_has_iva()) {

pr_info("IVA2 clocking rate: %ld MHz\n",

(clk_get_rate(iva2_ck) / 1000000)) ;

}

calibrate_delay();

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值