linux中断处理 如何调用内核的中断操作
一般嵌入式,在内核的arch下有对硬件cpu如ARM的中断处理,针对寄存器的操作,然后封装到内核的irq上,如下:
C/C++ code
static struct irq_chip lpc32xx_irq_chip = {
.ack = lpc32xx_mask_ack_irq,
.mask = lpc32xx_mask_irq, //屏蔽中断源
.unmask = lpc32xx_unmask_irq,//打开中断源
.set_type = lpc32xx_set_irq_type,//设置中断类型
};
static void lpc32xx_mask_irq(unsigned int irq)
{
}
static void lpc32xx_unmask_irq(unsigned int irq)
{
}
static int lpc32xx_set_irq_type(unsigned int irq, unsigned int type)
{
}
我在驱动中应该如何调用内核的irq进行操作,所有的VIC寄存器操作都封装在lpc32xx_irq_chip中,其它驱动程序应该直接
调用内核提供的操作即可,
比如GPIO中断驱动中,设置中断类型可以用内核的set_irq_type(IRQ_GPIO02, IRQ_TYPE_EDGE_FALLING);
这个函数在irq.h,但是我没弄清是怎么mask的,在kernel/irq/chip.c中,关于mask的操作函数也没有EXPORT
驱动程序中应该如何调用封装在irq_chip 中的mask和umask等函数呢,应该不用再针对寄存器进行读写了吧??
------解决方案--------------------lpc32xx_mask_irq 这样的操作是针对全部中断的
这些权利保留给中断控制器
作为设备驱动,不需要有这么大的权限,所以chip.c 里就没有EXPORT那些
------解决方案--------------------设备驱动 有个 disable_irq enable_irq 就行了