|
---1、天嵌的核心板,自己的底板和程序
---2、使用EINT9(GPG1)为一外部中断源的输入管脚
---3、初始化配置
{
……
//GPG1选择为EINT9、端口上拉
reg_value = __raw_readl(S3C2410_GPGCON);
reg_value |=(1<<3);
reg_value &=~(1<<2);
__raw_writel(reg_value,S3C2410_GPGCON);
reg_value = __raw_readl(S3C2410_GPGUP);
reg_value |=(1<<1);
__raw_writel(reg_value, S3C2410_GPGUP);
//设置EINT9为上升沿触发
reg_value = __raw_readl(S3C2410_EXTINT1);
reg_value |=(1<<6);
reg_value &=~(1<<5);
__raw_writel(reg_value,S3C2410_EXTINT1);
// 清除外部中断EINTPEND;使能外部中断EINTPEND;清除源中断SRCPND;
//取消中断屏蔽INTMSK;清除中断控制器中断INTPND;
reg_value =__raw_readl(S3C2410_EINTPEND);
reg_value |=0x01<<9;//23--clear eintpend
__raw_writel(reg_value,S3C2410_EINTPEND);
reg_value = __raw_readl(S3C2410_EINTMASK);
reg_value &=~(0x01<<9);//23--enable extint
__raw_writel(reg_value,S3C2410_EINTMASK);
reg_value =__raw_readl(S3C2410_SRCPND);
reg_value |=(0x01<<5);
__raw_writel(reg_value,S3C2410_SRCPND);
reg_value = __raw_readl(S3C2410_INTMSK);
reg_value &=~(1<<5);
__raw_writel(reg_value,S3C2410_INTMSK);
reg_value =__raw_readl(S3C2410_INTPND);
reg_value |=(0x01<<5);
__raw_writel(reg_value,S3C2410_INTPND);
……
}
---4、中断服务程序
{
……
disable_irq(IRQ_EINT9);
……
enable_irq(IRQ_EINT9);
reg_value =__raw_readl(S3C2410_EINTPEND);
reg_value |=0x01<<9;
__raw_writel(reg_value,S3C2410_EINTPEND);
reg_value =__raw_readl(S3C2410_SRCPND);
reg_value |=(0x01<<5);
__raw_writel(reg_value,S3C2410_SRCPND);
reg_value =__raw_readl(S3C2410_INTPND);
reg_value |=(0x01<<5);
__raw_writel(reg_value,S3C2410_INTPND);
return 0;
}
---5、用示波器看到EINT9管脚有时出现上升沿,但并没有触发中断,出现的概率还不小,不只是初始配置的原因还是中断程序里清除中断的问题?
|
|