全志A33荔枝开发板Linux中断编程原理说明

  

全志A33荔枝开发板Linux中断编程原理说明

  

开发平台

  
 <代码> *芯灵思SinlinxA33开发板 
  

淘宝店铺:https://sinlinx.taobao.com/

  

全志A33荔枝开发板Linux中断编程原理说明

  

嵌入式linux开发板交流QQ: 641395230

  

本节实验目标实现按键触发中断终端显示按键松开或按下
实验平台芯灵思Sinlinx A33开发板

  

全志A33荔枝开发板Linux中断编程原理说明

  

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荔枝开发板Linux中断编程原理说明

  

这里全志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

  

全志A33荔枝开发板Linux中断编程原理说明

  

不知道开发板用的哪个平台,直接在config中找

  

全志A33荔枝开发板Linux中断编程原理说明

  

由此找到芯片在内核中的中断号
步骤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)

全志A33荔枝开发板Linux中断编程原理说明