Linux驱动编程day6-外部中断处理
来源:互联网 发布:大数据与电子商务 编辑:程序博客网 时间:2024/06/02 06:09
最基本的中断:外部高低电平中断
中断源:中断号60,PIO中断,
选择有中断输入功能的GPIO口作为中断输入
设置PIN脚功能为EINT(110)
定义PI12、PI13脚作为中断输入脚
#define D11 PI12#define D12 PI13
设置PI12、PI13脚的功能为EINT功能(对应不同的中断编号)
#define PI12_13_SELECT_MASK (0xff<<16)#define PI12_13_SELECT_EINT (0x66<<16)
不同功能,引脚内部的电路连接不同,通过改变寄存器Bit位的值,来改变引脚的功能(查看寄存器功能手册)
配置PI_CFG1寄存器:
regval = readl(PI_CFG1);regval &= ~PI12_13_SELECT_MASK;regval |= PI12_13_SELECT_EINT;writel(regval, PI_CFG1);
配置中断配置寄存器:(选择触发方式)
#define PIO_INT_CFG3 (PIO_BASE_REMAP + 0x20C)#define CFG3_EINT24_25_MASK (0xff)#define CFG3_EINT24_25_N_EDGE (0x11)//配置触发方式regval = readl(PIO_INT_CFG3);regval &= ~CFG3_EINT24_25_MASK; //先清零regval |= CFG3_EINT24_25_N_EDGE; //相应位置位writel(regval, PIO_INT_CFG3);
打开中断使能
#define PIO_INT_CTL (PIO_BASE_REMAP + 0x210)//打开24、25中断regval = readl(PIO_INT_CTL);regval |= 3<<24;writel(regval, PIO_INT_CTL);
注册中断处理程序:
重要函数:request_irq();
向内核出册中断号和中断函数的关系
#define PIO_IRQ 60 //中断源序号//注册成功,中断名字“eint_drv”会出现在/proc/interrupts中//参数0表示不共享中断源号,若设为IRQF_SHARED表示和其他设备共享这个中断,但要求其他设备也设为共享方式err = request_irq(PIO_IRQ, eint_irq, 0, "eint_drv", NULL); if(err) { printk("request_irq 60 fail\n"); }
中断处理函数:
//中断状态寄存器,哪个中断产生,哪一位被置1#define PIO_INT_STATUS (PIO_BASE_REMAP + 0x214)unsigned int eint_status = 0;irqreturn_t eint_irq(int irq, void *dev_id){ //处理动作 eint_status = readl(PIO_INT_STATUS); //读出寄存器的值 if(eint_status & (1 << 24)){ //11脚产生中断 ev_press = 1; writel(1 << 24, PIO_INT_STATUS); //写“1”清中断 } if(eint_status & (1 << 25)){ ev_press = 1; writel(1 << 25, PIO_INT_STATUS); } return IRQ_HANDLED;}
释放中断号:
free_irq(PIO_IRQ, NULL);
配置所有的寄存器通常都是用过位运算进行写入,具体设置的值需要查看技术手册
0 0
- Linux驱动编程day6-外部中断处理
- Linux设备驱动编程之中断处理
- Linux设备驱动编程之中断处理
- Linux设备驱动编程之中断处理
- Linux设备驱动编程之中断处理
- Linux设备驱动编程之中断处理
- Linux设备驱动编程之中断处理
- Linux设备驱动编程中断处理
- linux驱动之外部中断
- 驱动-linux 中断处理
- Linux 驱动中断处理
- linux驱动编程--中断
- 驱动编程之中断处理
- Linux外部中断的驱动初始化
- Linux驱动开发二:外部中断分析
- 《Linux设备驱动开发详解》-- Linux中断处理程序架构和Linux中断编程
- linux驱动中中断处理
- Linux 设备驱动--- 中断处理
- 【php】获取网页内容
- SwipeRefreshLayout的样式
- [LeetCode 278] First Bad Version(二分查找的一个常见注意点)
- 图片排版
- 更新SDK后ADT版本低不支持,sdk找不到问题解决方案
- Linux驱动编程day6-外部中断处理
- 初识Java反射
- 在word里操作表格
- 55.Compare Strings-比较字符串(容易题)
- linux PINCTRL
- Score Inflation_usaco3.1.2_dp
- 文章标题
- 在intellij上配置go开发环境
- linux下mysql开启远程访问权限及防火墙开放3306端口