开发平台
<代码> *芯灵思SinlinxA33开发板代码>
淘宝店铺:https://sinlinx.taobao.com/
嵌入式linux开发板交流QQ: 641395230
本节实验目标实现按键触发中断终端显示按键松开或按下
实验平台芯灵思Sinlinx A33开发板
step1查看原理图,三个按键都连接到LRADC0引脚,通过判断电压大小来确定是按的哪个键。
步骤2内核关于CPU的中断号linux中断注册函数中的irq中断号并不是芯片物理上的编号,而是由芯片商在移植linux系统时定在构架相
关的头文件中定义好的,在内核源码中,名字一般是终端请求。h。
打开<代码> vim/root/work/sinlinx/a33/lichee/linux - 3.4/- arch/arm/mach sunxi/include/mach/irqs.h 代码>
这里全志A33是# include“sun8i/irqs-sun8iw5p1.h"
打开vim/root/work/sinlinx/a33/lichee/linux - 3.4/- arch/arm/mach sunxi/include/mach/sun8i/irqs sun8iw5p1.h
不知道开发板用的哪个平台,直接在config中找
由此找到芯片在内核中的中断号
步骤3简要介绍中断驱动要用到的函数
查看irq。h文件里面有关于中断的函数结构体声明<代码>/根/工作/sinlinx/a33/荔枝/linux - 3.4/include/linux/irq.h 代码>
<代码> * struct irq_data -每irq irq芯片数据传递到芯片的功能 * @irq:中断号 * @hwirq:本地硬件中断,中断域 * @node:节点索引用于平衡 * @state_use_accessors: irq芯片功能的状态信息。 *使用访问器函数来处理它 * @chip:低电平中断硬件访问 * @domain:中断翻译领域;负责映射 * hwirq号和linux irq号之间。 * @handler_data: irq_chip per-IRQ数据的方法 * @chip_data:特定于平台的每个芯片芯片的私有数据 *方法,允许共享芯片实现 * @msi_desc: MSI描述符 * @affinity: SMP IRQ亲和力 * *这里的字段需要覆盖irq_desc直到我们的 *清理直接引用和转换到的一切 * irq_data。 */struct irq_data { unsigned int硬中断请求优先级别; 无符号长hwirq; 无符号整型节点; unsigned int state_use_accessors; struct irq_chip *芯片; struct irq_domain *域; void * handler_data; void * chip_data; struct msi_desc * msi_desc; # ifdef CONFIG_SMP cpumask_var_t亲和力; # endif };代码>
struct irqaction结构体在/root/work/sinlinx/a33/lichee/linux - 3.4 -/- include/linux/interrupt.h
<代码>/* * * struct irqaction -每中断描述符 * @handler:中断处理函数 * @flags:标志(见上面IRQF_ *) * @ name:设备的名称 * @dev_id:饼干来识别设备 * @percpu_dev_id:饼干来识别设备 * @next:指针指向下一个irqaction共享中断 * @irq:中断号 * @dir:指针的/proc/irq/神经网络/名称条目 * @thread_fn:中断处理程序函数线程中断 * @thread:线程指针线程中断 * @thread_flags:旗帜@thread有关 * @thread_mask:跟踪@thread活动的位掩码 */struct irqaction { irq_handler_t处理程序;中断服务函数的处理程序 无符号长旗帜; void * dev_id; 空白__percpu * percpu_dev_id; struct irqaction *下; int硬中断请求优先级别; irq_handler_t thread_fn; struct task_struct *线程; 无符号长thread_flags; 无符号长thread_mask; const char *名称; struct proc_dir_entry * dir; }____cacheline_internodealigned_in_smp; 代码>
在中断。h中有许多和中断相干的函数
东西:
<代码> request_irq (unsigned int irq, irq_handler_t处理程序,无符号长旗帜,const char *名字,void * dev)