set_irq_type() -- 设置中断触发类型/方式

linux-2.6.21.7/kernel/irq/chip.c
------------------------------------------------
/**
*    set_irq_type - set the irq type for an irq
*    @irq:    irq number
*    @type:    interrupt type - see include/linux/interrupt.h
*/
int  set_irq_type(unsigned int irq, unsigned int type)




linux-2.6.21.7/include/linux/interrupt.h
------------------------------------------------
#define IRQF_TRIGGER_NONE       0x00000000
#define  IRQF_TRIGGER_RISING     0x00000001  /* 上升沿触发中断 */
#define IRQF_TRIGGER_FALLING    0x00000002
#define IRQF_TRIGGER_HIGH       0x00000004
#define IRQF_TRIGGER_LOW        0x00000008
#define IRQF_TRIGGER_MASK       (IRQF_TRIGGER_HIGH | IRQF_TRIGGER_LOW | \
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING)
#define IRQF_TRIGGER_PROBE      0x00000010

这是一个用于请求GPIO中断的函数`gpio_irq_request`。让我们逐行解释这个函数的作用: 1. `configASSERT(gpio < GPIO_NUM)`用于确保GPIO的编号不超出范围。 2. `portENTER_CRITICAL()`用于进入临界区,以确保在设置中断时不会被其他任务或中断打断。 3. `gpio_request(gpio)`用于请求并配置指定的GPIO资源。 4. `gpio_irq_descs[gpio].handler = irq_handler`将传入的中断处理函数`irq_handler`赋值给特定GPIO的中断描述符结构体字段。 5. `gpio_irq_descs[gpio].handler_param = param`将传入的参数`param`赋值给特定GPIO的中断描述符结构体字段,以便在中断处理函数中使用。 6. `gpio_irq_descs[gpio].irq_type = irq_type`将传入的中断类型`irq_type`赋值给特定GPIO的中断描述符结构体字段,以确定何时触发中断。 7. `gpio_irq_set_irq_type(gpio, irq_type)`用于设置特定GPIO的中断类型。 8. `request_irq(GPIOA_IRQn + ((gpio >> 5) & 0x3), 0, gpio_irq_handler, NULL)`用于请求处理特定GPIO中断IRQ线,其中`gpio_irq_handler`是一个中断处理函数。 9. `gpio_irq_enable(gpio)`用于使能特定GPIO的中断功能。 10. `portEXIT_CRITICAL()`用于退出临界区。 11. 返回0,表示成功请求GPIO中断。 这个函数主要是为了方便地请求和配置GPIO中断,并将中断处理函数和参数与特定的GPIO关联起来。通过调用这个函数,可以在特定GPIO上设置中断类型,并使能中断功能,以便在触发中断时执行相应的处理函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值