exynos4412—中断处理

一、什么是中断

一种硬件上的通知机制,用来通知CPU发生了某种需要立即处理的事件

分为:

  1. 内部中断 CPU执行程序的过程中,发生的一些硬件出错、运算出错事件(如分母为0、溢出等等),不可屏蔽
  2. 外部中断 外设发生某种情况,通过一个引脚的高、低电平变化来通知CPU (如外设产生了数据、某种处理完毕等等)

二、中断处理原理

任何一种中断产生,CPU都会暂停当前执行的程序,跳转到内存固定位置执行一段程序,该程序被称为总的中断服务程序,在该程序中区分中断源,然后进一步调用该中断源对应的处理函数。

中断源对应的处理函数被称为分中断处理程序,一般每一个分中断处理程序对应一个外设产生的中断

写驱动时,如果外设有中断,则需要编写一个函数(分中断处理程序)来处理这种中断

三、中断接口

3.1 中断申请

int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev)
/*
参数:
	irq:所申请的中断号
	handler:该中断号对应的中断处理函数
	flags:中断触发方式或处理方式 
		触发方式:IRQF_TRIGGER_NONE 		//无触发
		 	 	 IRQF_TRIGGER_RISING 	//上升沿触发
			 	 IRQF_TRIGGER_FALLING  //下降沿触发
				IRQF_TRIGGER_HIGH  	//高电平触发
				IRQF_TRIGGER_LOW 		//低电平触发
		处理方式:
			   IRQF_DISABLED		//用于快速中断,处理中屏蔽所有中断
				IRQF_SHARED		  //共享中断
		name:中断名 /proc/interrupts
		dev:传递给中断例程的参数,共享中断时用于区分那个设备,一般为对应设备的结构体地址,无共享中断时写NULL
返回值:成功:0 失败:错误码
*/

3.2 中断释放

void free_irq(unsigned int irq, void *dev_id)/*
功能:释放中断号
参数:
	irq:设备号
	dev_id:共享中断时用于区分那个设备一般强转成设备号,无共享中断时写NULL
*/

3.3 中断处理函数原型

typedef irqreturn_t (*irq_handler_t)(int, void *);
/*
参数:
	int:中断号
	void*:对应的申请中断时的dev_id
返回值:
	typedef enum irqreturn irqreturn_t;	//中断返回值类型
	enum irqreturn {
		IRQ_NONE	= (0 << 0),
		IRQ_HANDLED	= (1 << 0),
		IRQ_WAKE_THREAD	= (1 << 1),
	};
	返回IRQ_HANDLED表示处理完了,返回IRQ_NONE在共享中断表示不处理
*/

四、按键驱动

按键原理图:

在这里插入图片描述

exynos4412-fs4412.dts中增加节点

mykey2_node {
	compatible = "mykey2,key2";
	key2-gpio = <&gpx1 1 0>;
	interrupt-parent = <&gpx1>;
	interrupts = <1 3>;
};

相关推荐

  1. OpenHarmony移植小型系统exynos4412(一)

    2023-12-07 08:50:04       26 阅读
  2. OpenHarmony移植小型系统exynos4412(三)

    2023-12-07 08:50:04       26 阅读
  3. iTop-4412 裸机程序(二十)- 按键中断Demo

    2023-12-07 08:50:04       55 阅读
  4. 处理器中断处理

    2023-12-07 08:50:04       52 阅读
  5. LiteOS GPIO中断处理

    2023-12-07 08:50:04       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 08:50:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 08:50:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 08:50:04       82 阅读
  4. Python语言-面向对象

    2023-12-07 08:50:04       91 阅读

热门阅读

  1. SCI论文——respectively用法

    2023-12-07 08:50:04       61 阅读
  2. 利用 Python进行数据分析实验(一)

    2023-12-07 08:50:04       57 阅读
  3. linux dpdk 介绍

    2023-12-07 08:50:04       53 阅读
  4. C语言中数组的初始化

    2023-12-07 08:50:04       63 阅读
  5. 4.1 Docker 容器化和镜像管理

    2023-12-07 08:50:04       51 阅读
  6. *p++和(*p)++的区别

    2023-12-07 08:50:04       50 阅读
  7. 【使用uniapp完成微信小程序的图片下载到本机】

    2023-12-07 08:50:04       63 阅读