调试环境,友善之臂tiny210开发板。以下是自己调试成功的定时器0中断初始化设置程序。
static int timerini(void)
{
unsigned long vic0reg;
unsigned long tcon;
unsigned long tcfg0;
unsigned long cstat;
unsigned long tcntb;
int ret;
ret = request_irq(IRQ_TIMER0, irq_handler,
IRQF_TRIGGER_FALLING,"key INT_TIMER0", NULL);
if(ret)
{
printk("request timer0 irq failed!\n");
return -1;
}
printk("hello irq\n");
local_irq_disable();
cstat = __raw_readl(S3C64XX_TINT_CSTAT);
cstat |= 1<<5; //清除定时器状态位
cstat |= 1<<0; //开timer0中断,允许timer0中断发生
__raw_writel(cstat,S3C64XX_TINT_CSTAT);
vic0reg = __raw_readl(S5P_VIC0REG(VIC_INT_ENABLE));
vic0reg |= 1<<21; //开timer0的使能
__raw_writel(vic0reg,S5P_VIC0REG(VIC_INT_ENABLE));
tcfg0 = __raw_readl(S3C2410_TCFG0);
tcfg0 &= 0x07;
tcfg0 |= 0x07; // 设置分频因子(8分频), 定时器时钟频率为1.03Mhz
__raw_writel(tcfg0,S3C2410_TCFG0);
tcon = __raw_readl(S3C2410_TCON);
tcon |= S3C2410_TCON_T0MANUALUPD; //设置初值后要更新TCNTB
tcon |= S3C2410_TCON_T0RELOAD; //自动重装开启
__raw_writel(tcon,S3C2410_TCON);
tcntb = 1000000;
__raw_writel(tcntb,S3C2410_TCNTB(0)); //设置初值,用于TCTB0
tcon |= S3C2410_TCON_T0START; //timer0 start;
tcon &= ~(S3C2410_TCON_T0MANUALUPD); //不再Update TCNTB0,TCMPB0
__raw_writel(tcon,S3C2410_TCON);
local_irq_enable();
return 0;
}
根据已经成功的 定时器0初始化设置方法 对定时器4进行相同的初始化设置,为什么定时器4产生不了中断?疑惑啊!