营销型网站价格实惠,商业空间设计公司,单片机开发工程师,wordpress制作索引页1.Cortex-A系列的中断的简介
中断的基本概念#xff1a;(interrupt) 中断本质上是系统内部的异常机制,当中断产生之后#xff0c;他会停下当前正在执行的任务#xff0c;转而去做其他的事情,在停下当前正在执行的任务之前,要先入栈#xff08;保护现场,其他的事情做完之后…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.下面是练习的部分代码仅供参考