博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
按键中断
阅读量:6677 次
发布时间:2019-06-25

本文共 1338 字,大约阅读时间需要 4 分钟。

free_irq(IRQ_EINT17 , 3);

  free_irq(IRQ_EINT219, 4);

  参数为中断号和ID

  return 0;

}

 

内核有个函数为:

int up = s3c2410_gpio_getpin(button_irqs->pin);读取

 

 

用switch写太麻烦,可以用结构体。

struct pin_desc{}

{

  unsigned int pin;

  unsigned int key_val;

}

/*键值:按下为0x01,0x02,0x03,0x04/

/*松开时,为0x81,0x82,0x83,0x84*/

 

static unsigned char key_val;

 

static DEVLARE_WAIT_QUEUE_HEAD(button_waitq);

中断事件标志,中断服务程序将它置1,third_drv_read将它清0

static volatile int ev_press = 0;

 

struct pin_desc pins_desc[4] = {

  {S3C2410_GPF0 ,  0X01},

  {S3C2410_GPF2 ,  0X02},

  {S3C2410_GPG3 ,  0X03},

  {S3C2410_GPG11 , 0X04},

};

怎样调用这个数组?

  在open函数中将值传入id!

 

 

处理函数:根据ID来判断哪个按键造成的中断!

static irqreturn_t buttons_irq(int irq , void *dev_id)    irq貌似为中断号

{

  struct pin_desc *pindesc = (struct pin_desc *)dev_id;

  unsigned int pinval;

  pinval = s3c2410_gpio_getpin(pindesc->pi);

 

  if(pinval)

  {

    key_val = 0x80 | pindesc->key_val;

    /*松开*/

  }

  else

  {

    /*按下*/

  }

  ev_press = 1;

  wake_up_interruptible(&button_waitq);

 

  return IRQ_HANDLED;

 

 

ssize_t  third_drv_read(struct  file  *file,  char  __user  *buf,  size_t  size,  loff_t  *ppos)

{

  /*如果没有按键动作发生就休眠!!!即让出CPU,不返回值!

  若按键按下就返回值!

  */

  

  wait_event_interruptible(button_waitq,ev_press);

  当ev_press = 0 ,他就会休眠。不等于0,往下运行。

  copy_to_user(buf,key_val,1);

  ev_press = 0;

 

  return 0;

}

 

转载于:https://www.cnblogs.com/stm32f4/p/7663023.html

你可能感兴趣的文章
[Everyday Mathematics]20150207
查看>>
PowerDesigner使用教程
查看>>
ACE admin 后台管理框架
查看>>
Python模块探秘之smtplib,实现纯文本邮件的发送
查看>>
易语言入门之一 简介
查看>>
(转)神经网络和深度学习简史(第一部分):从感知机到BP算法
查看>>
scrapy 的 selector 练习
查看>>
mssql2012以后新增的offset分页,看起来爽死了!!!
查看>>
47.6. Init.d Script
查看>>
为什么要用局部敏感哈希
查看>>
自己动手写客户端UI库——创建第一个控件
查看>>
github 有名的问题【ERROR: Permission to .git denied to user】
查看>>
SAP 上传图片的事务码是 smw0
查看>>
Lua之Lua数据结构-TTLSA(6)(转) good
查看>>
Swing界面刷新问题(转)
查看>>
[老老实实学WCF] 第五篇 再探通信--ClientBase
查看>>
CDN缓存不命中排查
查看>>
处理E160004: Corrupt node-revision 'lx-249.0-248.r1186/2192'
查看>>
第三篇——第二部分——第一文 SQL Server镜像简介
查看>>
谈谈Redis的SETNX
查看>>