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:
谢谢!