下面是代码: 主要是时钟设置部分和接口
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;
}