中断方式获取按键状态

2023年 2月 9日 75点热度 0人点赞

file

鄙人不才, 画了上面的那个图来帮助理解:

  1. 应用程序通过打开设备文件, 进入到内核空间, 这个过程中驱动会去请求中断:request_irq(IRQ_EINT0, buttons_irq, IRQT_BOTHEDGE, "S2", &pins_desc[0]);
  2. 驱动程序以可被打断的方式等待事件: wait_event_interruptible(button_waitq, ev_press);
  3. 用户按下案件, 外部中断发送到 CPU
  4. CPU 根据设置的外部中断以及中断向量, 找到中断处理函数, 并跳进去执行
  5. 中断处理程序会根据中断的设备号读取按键的值: s3c2410_gpio_getpin(pindesc->pin), 并写入一块共享内存
  6. 中断处理程序唤醒驱动程序:wake_up_interruptible(&button_waitq);
  7. 驱动程序被唤醒
  8. 驱动程序去共享内存读中断处理函数读到的值
  9. 驱动将读到的值返回给应用程序:copy_to_user(buf, &key_val,1);

rainbow

这个人很懒,什么都没留下

文章评论