免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1386 | 回复: 0
打印 上一主题 下一主题

DM6446时钟 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-06 18:56 |只看该作者 |倒序浏览

Davinci的时钟管理是在arch/arm/mach-davici/clock.c中实现.

最开始会调用davinci_clk_init()

void davinci_clk_init(void)

{

        struct clk *clkp;

        int count = 0;

        commonrate = ((PLL1_PLLM + 1) * 27000000) / 6;

        armrate = ((PLL1_PLLM + 1) * 27000000) / 2;

        for (clkp = davinci_clks; count < DAVINCI_MAX_CLK; count++, clkp++) {

                clk_register(clkp);

                /* Turn on clocks that have been enabled in the

                 * table above */

                if (clkp->usecount) {

                        clk_enable(clkp);

                }

        }

}

PLL1_PLLM是通过读PLL寄存器的值得出的值,系统晶振27M。根据PLL1_PLLM算是ARM CORE的频率armrate以及外围器件的频率commonrate

然后通过一个FOR循环注册davinci_clks中的struct clk 

Clk_register()是将这些struct clk加入clocks链表。

如果struct clkusecount1,还要通过clk_enable()使该模块处于enable状态。

davinci_clks定义如下:

static struct clk davinci_clks[DAVINCI_MAX_CLK] = {

        {

                .name = "ARMCLK",

                .rate = &armrate,

                .lpsc = -1,

                .flags = ALWAYS_ENABLED,

        },

        {

                .name = "UART",

                .rate = &fixedrate,

                .lpsc = DAVINCI_LPSC_UART0,

                .usecount = 1,

        },

        {

                .name = "EMACCLK",

                .rate = &commonrate,

                .lpsc = DAVINCI_LPSC_EMAC_WRAPPER,

        },

        {

                .name = "I2CCLK",

                .rate = &fixedrate,

                .lpsc = DAVINCI_LPSC_I2C,

        },

        {

                .name = "UART1",

                .rate = &fixedrate,

                .lpsc = DAVINCI_LPSC_UART1,

                .usecount = 1,

        },

可见系统在启动时,会将UART1设置为ENABLE状态(通过PSC)。对于ARMCLK,它有个标示:flag=WLWAYS_ON,这表示在整个系统的运行过程中,对它的ENABLEDISABLE都是无用的。

通过这样的时钟控制,就可以只在模块工作的时候对模块供给时钟,节约能耗。在驱动中,一般在初始化时通过:

Clk_get

Clk_use

Clk_enable来使模块处于ENABLE状态。

在卸载时通过

Clk_unuse

Clk_disable来使模块处于DISABLE状态.

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP