Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1254051
  • 博文数量: 479
  • 博客积分: 12240
  • 博客等级: 上将
  • 技术积分: 4999
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 17:12
文章分类

全部博文(479)

文章存档

2014年(1)

2013年(1)

2012年(1)

2011年(95)

2010年(177)

2009年(167)

2008年(16)

2007年(21)

分类: LINUX

2009-11-21 16:54:50

OMAP处理器的各个外围功能模块的时钟都可以单独设置,关闭不用模块的时钟,以达到节能的目的。

在Linux 移植中,有比较方便的API接口。
文件:arch/arm/mach-omap2/clock34xx.c

结构体struct omap_clk omap34xx_clks[]定义了各种需要是能的外设时钟。
6组GPIO的时钟都是设置了的。

static struct omap_clk omap34xx_clks[] = {
        CLK(NULL, "omap_32k_fck", &omap_32k_fck, CK_343X),
        CLK(NULL, "virt_12m_ck", &virt_12m_ck, CK_343X),
        CLK(NULL, "virt_13m_ck", &virt_13m_ck, CK_343X),
        CLK(NULL, "virt_16_8m_ck", &virt_16_8m_ck, CK_3430ES2),
        CLK(NULL, "virt_19_2m_ck", &virt_19_2m_ck, CK_343X),
        CLK(NULL, "virt_26m_ck", &virt_26m_ck, CK_343X),
        CLK(NULL, "virt_38_4m_ck", &virt_38_4m_ck, CK_343X),
        CLK(NULL, "osc_sys_ck", &osc_sys_ck, CK_343X),
        CLK(NULL, "sys_ck", &sys_ck, CK_343X),



就在这个文件的omap2_clk_init()函数中,对OMAP处理器的时钟进行了初始化设置。


int __init omap2_clk_init(void)
{
        /* struct prcm_config *prcm; */
        struct omap_clk *c;
        /* u32 clkrate; */
        u32 cpu_clkflg;

        if (cpu_is_omap34xx()) {
                cpu_mask = RATE_IN_343X;
                cpu_clkflg = CK_343X;

                /*
                 * Update this if there are further clock changes between ES2
                 * and production parts
                 */

                if (omap_rev() == OMAP3430_REV_ES1_0) {
                        /* No 3430ES1-only rates exist, so no RATE_IN_3430ES1 */
                        cpu_clkflg |= CK_3430ES1;
                } else {
                        cpu_mask |= RATE_IN_3430ES2;
                        cpu_clkflg |= CK_3430ES2;
                }
        }

        clk_init(&omap2_clk_functions);

        for (c = omap34xx_clks; c < omap34xx_clks + ARRAY_SIZE(omap34xx_clks); c++)
                clk_preinit(c->lk.clk);

        for (c = omap34xx_clks; c < omap34xx_clks + ARRAY_SIZE(omap34xx_clks); c++)
                if (c->cpu & cpu_clkflg) {
                        clkdev_add(&c->lk);
                        clk_register(c->lk.clk);
                        omap2_init_clk_clkdm(c->lk.clk);
                }



Linux 2.6.29则是在
arch/arm/mach-omap2/clock34xx.h 中设置时钟。


阅读(2370) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~