中断注册函数与卸载函数

ARM架构的CPU异常向量的基址可以是0x00000000,也可以是0xffff0000,Linux内核使用后者,这是一个虚拟地址,当建立了虚拟地址和物理地址的映射之后就可以把异常向量的基址定位到这里来(即把跳转指令复制到这里来),

用户注册中断处理函数:request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev_id),其中irq为中断号(在irq.h中定义),handler为处理函数,flags表示上升沿/下降沿等触发方式。它可以完成:分配一个irqaction结构并且调用setup_irq把这它链入链表;设置引脚;使能中断

卸载中断处理函数:free_irq(unsigned int irq, void *dev_id)

它需要用到两个参数:irq和dev_id,它们与通过request_irq注册中断函数时使用的参数 一样。使用中断号irq定位action链表,再使用dev_id在action链表中找到要卸载的表项。 所以,同一个中断的不同中断处理函数必须使用不同的dev_id来区分,这就要求在注册共享中断时参数dev_id必须唯一。它可以完成出链和禁止中断。

猜你喜欢

转载自www.cnblogs.com/zhangshuaifeng/p/10634147.html