文件名称:按键驱动范例-卷积神经网络的数学推导
文件大小:8.6MB
文件格式:PDF
更新时间:2024-06-29 07:17:45
周立功 嵌入式 Linux
程序清单 2.24 中断处理程序
static irqreturn_t xxxx_interrupt(int irq, void *dev_id)
{
...中断处理代码
return IRQ_HANDLED; /* 中断已经处理完毕 */
}
至于中断处理程序要做些什么,应当做些什么,取决于具体系统的具体应用,没有统一
的要求,但是中断处理程序应当尽量短,处理只能在中断上下文中处理的事情,能放到进程
上下文的工作都不要放到中断上下文中处理。
2.7.3 按键驱动
背景交代 1.
本节提供的按键驱动范例基于 EPC-28x 工控主板。EPC-28x 硬件上有不少用户可用
GPIO,本节选取其中一个 GPIO,用作按键,并编写驱动,用于演示中断的基本用法。
本节范例按键对应的 GPIO 为 GPIO2_6,对应 IO 在系统中的编号为 70。IO 端口平时处
于高电平,按键按下后为低电平。
Linux 系统为每个中断都分配了一个编号。i.MX28x 处理器的每个 IO 端口都可以产生
中断,IO 引脚编号 GPIOn 和中断号 IRQn 之间的换算公式为:IRQn=GPIOn+128,在代码中
可通过 gpio_to_irq 函数来完成转换。
驱动实现 2.
按键通常来说无需进行读写操作,也无需进行其它 ioctl 操作,因此,这些方法都无需
实现。范例程序仅仅实现了 open、release 和 close 三种方法,参考程序清单 2.25。
第 10~13 的 3 个宏定义分别行定义了 IO 端口、中断编号和设备名称。
第 20~26 行列举了可用的中断触发条件,在代码中根据实际需要来使用。根据硬件情况,
代码中实际使用下降沿中断 IRQ_TYPE_EDGE_FALLING。
范例代码中有一点需要说明一下,就是代码中使用了 GPIO 申请和释放函数,见第 59
行和 108 行。在 Linux 系统中,为了防止某个 IO 被在多个地方被重复使用,在使用之前需
通过 gpio_request_one()函数进行申请。在没有被释放之前,其它驱动程序是不能获得该 IO
端口的,能有效防止资源混乱。使用完毕,可通过 gpio_free()函数释放该端口。
程序清单 2.25 按键驱动范例
1 #include