主题 : 设置定时器导致时钟变慢的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 28894
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2010-09-18
最后登录: 2010-10-30
楼主  发表于: 2010-10-26 13:45

 设置定时器导致时钟变慢的问题

      要用定时器来计时。配置好定时器后,等待中断来关闭定时器,读出时间变化。模块加载后一经调用时钟就变了非常的慢,根本就不能运行程序,苦恼了很多天,都未有成效,希望有高手来指点下。
级别: 新手上路
UID: 28894
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2010-09-18
最后登录: 2010-10-30
1楼  发表于: 2010-10-26 13:49
下面是代码: 主要是时钟设置部分和接口
tatic int ULT_Set_Freq(void)    //定时器设置
{
    unsigned long tcon;
    unsigned long tcnt;
    unsigned long tcfg1;
    unsigned long tcfg0;
    tcnt=10000;


    tcon = __raw_readl(S3C2410_TCON);
    tcfg1 = __raw_readl(S3C2410_TCFG1);
    tcfg0 = __raw_readl(S3C2410_TCFG0);

    tcfg0 &= ~S3C2410_TCFG_PRESCALER1_MASK;
    tcfg0 |= 0x9500;

    tcfg1 &= ~S3C2410_TCFG1_MUX2_MASK;
    tcfg1 |= S3C2410_TCFG1_MUX2_DIV2;

    __raw_writel(tcfg1, S3C2410_TCFG1);
    __raw_writel(tcfg0, S3C2410_TCFG0);
    
    __raw_writel(tcnt, S3C2410_TCNTB(2));
    
                
    tcon &= ~0xf000;
    tcon |= 0x1000;        
    __raw_writel(tcon, S3C2410_TCON);
    
    return 0;
    
}

static int s3c24xx_buttons_open(struct inode *inode, struct file *file)  // 应用程序接口部分
{
   if (!down_trylock(&lock)){

      int err = 0;

    ULT_Set_Freq();

      err = request_irq(button_irqs.irq, buttons_interrupt, IRQ_TYPE_EDGE_FALLING,
                          button_irqs.name, (void *)&button_irqs);

        if (err) {
        
        disable_irq(button_irqs.irq);
            free_irq(button_irqs.irq, (void *)&button_irqs);
        
           return -EBUSY;
             }

    ev_press = 1;
    
    return 0;
    }
   else
          return -EBUSY;
}