c - Linux 的嵌入式系统中断/硬件处理

标签 c linux embedded arm interrupt

在我的 AT91SAM9RL-EK ARM 板上,运行 Linux 2.6.30 buildroot,我有以下内容。

cat /proc/interrupts
           CPU0
  1:       6475         AIC  at91_tick, rtc0, ttyS0
 10:         11         AIC  mmc0
 13:          4         AIC  atmel_spi.0
 18:      23533         AIC  tc_clkevt
 20:          0         AIC  atmel_tsadcc
 22:          0         AIC  atmel_usba_udc
 23:          0         AIC  atmel_lcdfb
 24:          0         AIC  AC97C
 40:          1        GPIO  atmel_usba_udc
 47:          0        GPIO  mmc0
 64:          6        GPIO  Right Click
 65:         10        GPIO  Left Click

右击和左击是我板上的按钮。现在我想修改按钮的中断处理程序(例如,它们在单击时给我一个输出)。

我在哪里可以找到按钮的中断处理程序或驱动程序(或它们的源文件)?

或者我可以编写自己的驱动程序并为按钮注册它们(当我在用户空间时)以及如何注册?

这是板子指南中关于 PIO 的一些数据

IO... Per.... Application Usage............................................ Pow. by
PB0  TXD3 USER’S PUSH BUTTON 1 PB0 as LEFT CLICK VDDIOP
PB1  RXD3 USER’S PUSH BUTTON 2 PB1 as RIGHT CLICK VDDIOP

最佳答案

我没有针对您的董事会的具体答案,但我可以根据您需要的信息为您提供一些指导。

解决您问题的最简单方法是放弃“中断处理程序”要求并简单地轮询 GPIO 线。只要您是根用户,就可以从用户空间执行此操作。许多开发环境都提供一个内核模块来为您执行此操作,将结果公开为 /dev/proc 中的条目。

如果您要处理中断,则需要编写 Linux 设备驱动程序。最好的起点是很棒的 Linux 设备驱动程序书,可在 http://lwn.net/Kernel/LDD3/ 下载。

GPIO 驱动程序非常简单,主要由调用 register_irq() 和您的用户空间接口(interface)代码组成。用户空间界面代码将比其余代码大得多,也会让你最头疼。

关于c - Linux 的嵌入式系统中断/硬件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4919477/

相关文章:

c - 如何在 NASM for Linux 中正确使用 C 函数 "Exp"?

c - C中结构内数组的初始化

c - 动态数组的收缩因子?

linux - 图像缩小脚本在 Linux 中创建更大尺寸的图像

c++ - 在嵌入式 x86 程序集中使用数组?

具有非连续布局的 C 位域元素

c++ - C 与 C++ 中的三元运算符

java - 加载测试内存问题

linux - 为什么从头开始构建 Linux (LFS) 需要多次通过?

rust - 我如何写入 Rust 中的内存映射地址?