嵌入式linux应用层中断函数,嵌入式LINUX驱动开发(中断处理函数)

嵌入式LINUX驱动开发(中断处理函数)

2020年08月11日

| 萬仟网网络运营

 | a48e1d17a2b0511faa7da7240b1971f6.png我要评论

嵌入式LINUX驱动学习之7中断相关(一)中断处理函数一、函数、头文件及说明二、编译举例:一、函数、头文件及说明//头文件位置:include/linux/interrupt.hextern int __must_checkrequest_threaded_irq(unsigned int irq, irq_handler_t handler,\ irq_handler_t thread_fn,\ unsigned

嵌入式LINUX驱动学习之7中断相关(一)中断处理函数

一、函数、头文件及说明

//头文件位置:include/linux/interrupt.h extern int __must_check request_threaded_irq(unsigned int irq, irq_handler_t handler,\

irq_handler_t thread_fn,\ unsigned long flags, const char *name, void *dev); static inline int __must_check \ request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev) { return request_threaded_irq(irq, handler, NULL, flags, name, dev); } /*

参数:

irq : 中断号,获取外部中断号使用的函数 :

static inline int gpio_to_irq(unsigned gpio);//头文件位置:include/linux/gpio.h

irq_handler_t : 中断处理函数 :

typedef irqreturn_t (*irq_handler_t)(int, void *);

使用方法:

static irqretrun_t irq_func(int args,void * argv);//args:全局的整数,argv:全局指针

flags:

#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 |RQF_TRIGGER_FALLING)

#define IRQF_TRIGGER_PROBE 0x00000010

dev :向中断处理函数传递的参数

*/

二、编译举例:

#include #include #include #include #include /*定义按键信息*/ struct btn_srouce{ char *name; int gpio ; }; struct btn_srouce btn_info[] = { { .name = "BTN1", .gpio = PAD_GPIO_A +28 }, { .name = "BTN2", .gpio = PAD_GPIO_B +30 }, { .name = "BTN3", .gpio = PAD_GPIO_B +31 }, { .name = "BTN4", .gpio = PAD_GPIO_B +9 } }; /*定义LED灯信息*/ struct led_source { char *name; int gpio ; }; struct led_source led_info[] = { { .name = "LED1", .gpio = PAD_GPIO_B +26 }, { .name = "LED2", .gpio = PAD_GPIO_C +12 }, { .name = "LED3", .gpio = PAD_GPIO_C +11 }, { .name = "LED4", .gpio = PAD_GPIO_C +7 } }; static int irq;//定义中断号变更 /*定义中断处理函数*/ static irqreturn_t irq_func(int args,void * argv){ struct led_source *led_num = (struct led_source *) argv;//保存传递来的的形参地址 gpio_set_value(led_num->gpio,(1 - gpio_get_value(led_num->gpio)));//获取当前灯的状态信息,当为0时,设置为1,当为1时设置为0;即开/关状态切换 printk("%s ,当前%s状态为%s\n",__func__,led_num->name,\ gpio_get_value(led_num->gpio) ? "关" :"开"); return IRQ_HANDLED; //返回值说明,见附A.1 } static int btn_led_init(void){ int i = 0; for(; i

btn_info[i].name,&led_info[i]); } return 0; } static void btn_led_exit(void){ int i = 0; for(; i

附 A.1

//源码位置:include/linux/irqreturn.h /**

* enum irqreturn

* @IRQ_NONE interrupt was not from this device

* @IRQ_HANDLED interrupt was handled by this device

* @IRQ_WAKE_THREAD handler requests to wake the handler thread

*/ enum irqreturn { IRQ_NONE = (0 << 0), IRQ_HANDLED = (1 << 0), IRQ_WAKE_THREAD = (1 << 1), }; typedef enum irqreturn irqreturn_t;

本文地址:https://blog.csdn.net/weixin_47273317/article/details/107908456

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。

如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

相关文章:

for 实现:

复制代码 代码如下:

#!/bin/bash

set i=0

set j=0

for((i=0;i<...>

u-boot 与 启动模式u-boot(版本 U-Boot 1.1.6,u-boot.bin,4062204 b...

q:1 shell脚本是什么、它是必需的吗?

答:一个shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我...

如果对linux shell 数组不是很熟悉的话,请看上一篇文章:linux shell 数组建立及使用技巧  ,这篇文章...

简介netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (interface statistics),mas...

第一种:1、添加关键头文件:#include #include #incl...

一般我们在linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如:

tmux: error while loadi...

gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg

1、基本概念

io多路复用是指内核一旦发现进程指定的一个或者多个io条件准备读取,它就通知该进程。io多路复用适用如下场合:

(...

gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg

vmware虚拟机下centos7 桥接方式网络配置完整步骤,供大家参考,具体内容如下

一、打开虚拟机的设置页面,设置虚拟机桥接模...

什么是 dns

dns 全称是 domain name system,大意是域名解析系统,它的职责是把域名翻译成一个一个可以识...

网友评论

387afa1e91d68b43eca6c11dc07bf577.gif

验证码:

646994.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值