|
系统模式堆栈程序状态寄存器CPSR??我没考虑到这个,我试试!
键盘程序我试过,我是把EXIT5脚引出来控制外部中断,可以看到变化。可是在一个华恒实验指导书中的一个关于中断的实验中却发现不管我是否将其置位都可以出发中断
具体程序:
void testirq_interrupt(int irq,void *d,struct pt_regs *regs)
{
/*clear interrupt register for EINT5*/
SRCPND &= (~0x00000010); //bit4
INTPND = INTPND;
EINTPEND &= (~0x00000020); //bit5我用的EXIT5现在是置零,我把它置一效果一样
printk("Entered an interrupt! Beginning interrupt service!\n");
}
SRCPND的第四位是控制外部中断EXIT4-EXIT7的,
“源请求寄存器SRCPND 由32 位组成,每一位与一个中断源相关。如果某个中断源产生中断请求并等待中断服务,某位将会被置1。相应地,寄存器也指出了哪个中断源在请求服务。注意SRCPND 中的每个位是由中断源自动置位的,与INTMASK 寄存器无关。此外,
///SRCPND 寄存器不会被优先级逻辑影响。在中断服务函数中必须清零SRCPND 的相应位,否则,中断控制器会认为同一个源的另一个中断///(我没有将它清零也只中断一次)
换句话说,如果SRCPND 的某个位仍然为1,中断控制器会认为又有一个有效的新的中断在请求服务。清零相应位的时机由用户需求决定。如果想要从同一个中断源接收另外一个有效的中断,应该在刚进入ISR 的时候清零,然后使能中断。可以通过SRCPND 写入数据来清零某位,但是注意只有SRCPND 中为1 的位会被写成写入数据中的位,而SRCPND 中为0 的位不会改变” |
|