linux驱动——中断

1.Cortex-A系列的中断的简介

中断的基本概念:(interrupt)

        中断本质上是系统内部的异常机制,当中断产生之后,他会停下当前正在执行的任务,转而去做其他的事情,在停下当前正在执行的任务之前,要先入栈(保护现场,其他的事情做完之后,我们要继续执行先前的任务,就需要先恢复现场(出栈)。

linux下的中断一般是分为两类:

软中断: 信号、软件定时器

硬中断:跟硬件相关的,如:按键

A系类的芯片支持的中断的类型:

        SGI:软件生成中断;

        PPI:私有外设中断;

        SPI:共享的外设的中断,使用的比较多的中断的类型;

A系列的芯片:

        可以设置中断的优先级;

        可以使能或者失能中断;

        在linux系统中,中断其实就是一个编号,要想使用某个中断我们必须先知道这个中断的编号;

        在系统里要想查看中断的使用情况 : cat /proc/interrupts

2.linux的外部中断的介绍

        外部中断输入spi的共享中断,中断并不能直接使用硬件的中断号,要想使用中断必须借助与内核提供的函数,将引脚转换成linux认同的中断号。

3.linux中断注册相关的API

函数的原型:int gpio_to_irq(unsigned int gpio)

功能:将一个GPIO口转换成中断号

头文件:<linux/gpio.h>

参数:unsigned int gpio:你要转换成中断号的GPIO口的编号

返回值:成功返回要使用的中断号

有了中断号之后就可以对中断进行注册 等等相关的操作;

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

函数的原型:void enable_irq(unsigned int irq)

功能:使能中断

头文件:<linux/irq.h>

参数:unsigned int irq:就是前边你通过gpio_to_irq获取到的中断号

函数的返回值:无

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

函数的原型: void disable_irq(unsigned int irq)

功能:失能中断号

函数的头文件 :<linux/irq.h>

函数的参数:unsigned int irq:中断号

函数的返回值:无

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

函数的原型:

int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev);

功能:向内核注册一个中断

头文件:<linux/interrupt.h>

参数:

        unsigned int irq:中断号

        irq_handler_t handler:中断的服务函数,当产生中断的时候会调用此函数

        irqreturn_t (*irq_handler_t)(int, void *)

        unsigned long flags,:触发的方式

                IRQF_TRIGGER_FALLING:下降沿

                IRQF_TRIGGER_RISING:上升沿

                IRQF_TRIGGER_HIGH:高电平

                IRQF_TRIGGER_LOW:低电平

        const char *name:中断的名字  会出现在/proc/interrupts这个文件里

        void *dev:跟中断服务函数传的私有数据  一般不用

返回值:

        成功返回    0

        失败返回  负数

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

函数的原型:void free_irq(unsigned int irq, void *dev_id)

功能:注销一个中断

头文件:<linux/interrupt.h>

参数:

        irq:中断号

        void *dev_id:要和中断注册函数的最后一个参数dev相同

函数的返回值:无

4.下面是练习的部分代码,仅供参考

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小白菜123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值