TI中文支持网
TI专业的中文技术问题搜集分享网站

为什么在 linux 驱动中会重复进入 CHIPINT1 中断处理程序?

dsp 向 linux 发 CHIPINT1 中断,linux 会连续进入 CHIPINT1 的中断处理函数3次。但只有在第一次进入时寄存器 CHIPSIG_REG 的值等于0x02,另外两次进入时该寄存器值等于0x00. 

申请中断如下,flags设为0.

request_irq(IRQ_DA8XX_CHIPINT1, omap_shmem_irq_handler, 0, DEVICE_NAME, NULL);

中断处理程序如下:

static irqreturn_t omap_shmem_irq_handler(int irq, void *dev_id)
{
u32 reg = ioread32(chipsig_register);
printk("********** shmem_irq_handler: irq=%d — %x\n", irq, reg);
if ( !(reg & DA8XX_CHIPSIG_CHIPSIG1) )
return IRQ_NONE;

// clear flag reg = ioread32(chipsig_clr_register);
reg |= DA8XX_CHIPSIG_CHIPSIG1;
iowrite32(reg, chipsig_clr_register);

printk("********** shmem_irq_handler: do something\n");

return IRQ_HANDLED;
}

steven jing:

回复 Tony Tang:

谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » 为什么在 linux 驱动中会重复进入 CHIPINT1 中断处理程序?
分享到: 更多 (0)