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

2020年08月11日

| 萬仟网网络运营

我要评论

嵌入式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...

1、基本概念

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

(...

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

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

什么是 dns

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

网友评论

验证码:

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

  1. WinCE中中断的处理过程(驱动开发人员角度)

    WinCE中中断的处理过程(驱动开发人员角度) 中断是硬件与软件打交道的重要方法,因此,大多数驱动程序都涉及到对中断的处理,本文就驱动程序的开发人员以及BSP的开发人员的角度,来谈谈Windows C ...

  2. 嵌入式linux 添加中断,《嵌入式linux应用程序开发完全手册》中断控制器操作(外部中断)学习笔记...

    <嵌入式linux应用程序开发完全手册>中断控制器操作(外部中断)学习笔记 一.ARM中断体系 当一个"异常"发生时,或者说当收到一个中断触发信号时,ARM9将会自动完 ...

  3. NUC972在linux下的KSZ8851-16 mll网卡驱动开发

    KSZ8851-16MLL是一款单端口以太网MAC与非PCI接口控制器,集成式MAC和PHY以太网控制器,可以替代DM9000.但是这个芯片的资料非常少,NUC972也是,百度全网也找不到有用的资料, ...

  4. [linux]platform总线机制与wtd驱动开发

    Linux之platform总线机制与wtd驱动开发 1.概述: 通常在Linux中,把SoC系统中集成的独立外设单元(如:I2C.IIS.RTC.看门狗等)都被当作平台设备来处理. 从Linux2. ...

  5. stm32官方例程在哪找_正点原子Linux第十一章模仿STM32驱动开发格式实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第十一章模仿STM32驱动开发格式实验 在上一章使用C语 ...

  6. Windows驱动开发 - 派遣函数

    一 派遣函数 驱动程序的主要功能是负责处理I/O请求. 其中大部分I/O请求是在派遣函数中处理的. 用户模式下所有对驱动程序的I/O请求,全部由操作系统转化为一个叫做IRP的数据结构,不同的IRP数据 ...

  7. PCIe驱动开发接口函数

    Realtek8168网卡时pci接口的网卡,其驱动程序就是一个PCI设备的驱动程序实例,我们一起看看其流程. 1.  首先,初始化模块调用static inline int pci_register ...

  8. 【正点原子Linux连载】第十七章GPIO中断试验-摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  9. 嵌入式Linux ———触摸屏驱动开发

    声明:本文章是看完韦东山老师的触摸屏驱动视频所写的关于触摸屏的驱动,因此如果有相关内容与其他网友相同,敬请原谅.同时我还是想说本文只是总结自己的学习所得,同时也将自己所学到的知识写下来,所以如果这篇文 ...

最新文章

  1. 必读!53个Python经典面试题详解
  2. 安装网关报mysql服务ini_linux 操作系统下ORACLE数据库使用透明网关连接MYSQL
  3. 基于tcpdump的Android智能移动终端数据包捕获完整解决方案
  4. Java并发编程的基础-其他的线程复位
  5. 7.16 10.19-10.22
  6. MySQL性能调优与架构设计-架构篇
  7. cut point and bridge总结
  8. [转载]未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。
  9. java判断手机号_Java验证手机号
  10. 如何为长期旅行做准备
  11. 铲雪车(信息学奥赛一本通-T1374)
  12. 晨枫U盘维护V2.0_512M版给U盘分区
  13. 如何缩小gif动图的体积?怎样快速压缩gif动图?
  14. HTML5篮球弹跳运动规律,打篮球怎么练弹跳力 弹跳力怎么训练
  15. 桌面图标点不开服务器运行失败,桌面图标打不开的解决技巧
  16. 印第安纳大学校庆超算,使用下一代 N 卡,速度达 6 千万亿次/秒
  17. Java中的线程-1
  18. MySQL 多对多条件查询
  19. 16.0 vue3 Teleport---自定义dialog组件
  20. C# 获取CPU 温度 的两种方式

热门文章

  1. python列表、集合、字典推导测试
  2. mybatis介绍(一)
  3. scala的下载以及环境变量配置(一)
  4. 山东大学计算机应用基础期中测试,山东大学期末考试计算机应用基础模拟题三套题.pdf...
  5. mysql并发插入死锁_MySQL: 并发replace into的死锁问题分析-阿里云开发者社区
  6. python类的属性打印_python 打印类的属性、方法
  7. win8经典开始菜单计算机,Win8.1/win8开始菜单工具大盘点
  8. android viewpager 详解,详解Android App中ViewPager使用PagerAdapter的方法
  9. OpenShift 4 - 通过Maven镜像加速Java应用构建速度
  10. Visual Studio 2019 16.6 Preview 2 发布