linux中断底层硬件操作方法…
来源:互联网 发布:java获取12时间戳 编辑:程序博客网 时间:2024/06/04 23:18
每一条中断线都有一个底层硬件操作函数集structirq_chip 。大多数控制方法都是重复的 ,基本上只要有中断响应 、 中断屏蔽 、 中断开启 、中断触发类型设置等方法就可以满足要求了。其他各种方法基本上和这些相同。
这些操作方法的实现在文件linux/arch/arm/plat-s3c24xx/irq.c中。
例如外部中断IRQ_EINT0 ~ IRQ_EINT3都用以下操作函数集:
static structirq_chip s3c_irq_eint0t4 = {
};
static inlinevoid
s3c_irq_ack(unsigned int irqno)
{
}
staticvoid
s3c_irq_mask(unsigned int irqno)
{
}
staticvoid
s3c_irq_unmask(unsigned int irqno)
{
}
s3c_irqext_type(unsigned int irq, unsigned int type)
{
。。。。。。
}
中断申请函数
//中断申请函数request_irq()只是函数request_threaded_irq()的包装而已
request_irq(unsigned int irq, irq_handler_t handler, unsigned longflags,
{
}
int request_threaded_irq(unsigned int irq, irq_handler_thandler,
{
//中断类型标识IRQF_SHARED和IRQF_DISABLED不应当被同时设置。
#ifdef CONFIG_LOCKDEP
#endif
//分配一个中断服务例程结构体action并初始化它的各字段。
//将该例程添加到单向链表desc->action上,并启动该例程。
。。。。。。
}
static int
__setup_irq(unsigned int irq, struct irq_desc *desc, structirqaction *new)
{
。。。。。。
。。。。。。
//如果该中断线上存在中断服务例程则让old_ptr指向该例程链表的尾部,以便加入新的服务例程
//将操作函数集desc->chip的一些未设置的字段设为默认值。
#defineIRQ_TYPE_EDGE_RISING
#defineIRQ_TYPE_EDGE_FALLING
#define IRQ_TYPE_EDGE_BOTH (IRQ_TYPE_EDGE_FALLING |IRQ_TYPE_EDGE_RISING)
#defineIRQ_TYPE_LEVEL_HIGH
#defineIRQ_TYPE_LEVEL_LOW
#defineIRQ_TYPE_SENSE_MASK
IRQF_TRIGGER_MASK在文件interrupt.h中定义
#defineIRQF_TRIGGER_NONE
#define IRQF_TRIGGER_RISING
#define IRQF_TRIGGER_FALLING
#define IRQF_TRIGGER_HIGH
#define IRQF_TRIGGER_LOW
#define IRQF_TRIGGER_MASK
可以看出只要外部中断设置了触发方式函数__irq_set_trigger()就会执行。
*/
//desc->status的标志IRQ_NOAUTOEN 在中断初始化函数s3c24xx_init_irq()中调用函数set_irq_flags()设置。
。。。。。。
。。。。。。
//在proc文件系统中创建目录。
。。。。。。
}
中断卸载函数free_irq().。
如果指定的中断线不是共享的 , 那么 ,该函数删除处理程序的同时将禁用这条中断线 。 如果
中断线是共享的,则仅删除 dev_id 所对应的处理程序,而这条中断线本身只有在删除了最
后一个处理程序时才会被禁用。由此可以看出为什么惟一的 dev_ id 如此重要。对于共享的
中断线,需要一个惟一的信息来区分其上面的多个处理程序,并让 free_irq() 仅仅删除指定
的处理程序。如果 dev_id 非空,它都必须与需要删除的处理程序相匹配。非共享中断,该
域可以为空,但需要和注册时使用的指针一致。
static struct irqaction *__free_irq(unsigned int irq, void*dev_id)
{
*action_ptr = action->next;
。。。。。。
。。。。。。。
}
//在函数free_irq中将函数__free_irq返回的中断处理例程结构体释放掉。
{
- linux中断底层硬件操作方法…
- linux中断底层硬件操作方法…
- Linux硬件中断处理
- Linux硬件中断处理
- linux的底层中断处理分析
- Linux源代码阅读笔记-硬件中断
- Linux中断机制之一:硬件处理
- linux kernel 中断子系统 -- ARM GIC 硬件
- linux 的硬件中断矢量号
- Linux 内核--硬件中断初始化及中断描述符表
- Linux 内核--硬件中断初始化及中断描述符表
- 应用程序访问底层硬件
- linux下绑定硬件中断到不同的cpu
- linux kernel 中断子系统之(一)-- ARM GIC 硬件
- linux kernel 中断子系统之(一)-- ARM GIC 硬件
- linux中断由硬件到内核的路由
- linux kernel 中断子系统之(一)-- ARM GIC 硬件
- 软中断和硬件中断
- 深入分析request_irq的dev_i…
- 深入分析request_irq的dev_i…
- wait_event_interruptible()
- wait_event_interruptible()
- linux中断底层硬件操作方法…
- linux中断底层硬件操作方法…
- 系统处理 IRQ_EINT0 IRQ_EIN…
- 系统处理 IRQ_EINT0 IRQ_EIN…
- HOG算子
- misc_register和register_ch…
- misc_register和register_ch…
- misc_register和register_ch…
- misc_register和register_ch…
- platform设备添加流程(转载)