s3c6410外部中断号与引脚问题

在编写Linux驱动程序时,我想用某一个引脚做外部中断。但是在调用

int request_irq(unsigned int irq,

void (*handler)(int irq, void *dev_id, struct pt_regs *regs

),

unsigned long irqflags,

const char * devname,

void *dev_id);

这个函数的时候遇到了一个问题,irq是个硬件终端号,但是到底这个引脚对应的终端号是多少呢?

我在网上找资料说的都稀里糊涂的,不是我想要的答案。

于是我便在内核代码里找,下面贴出Linux内核代码的一段arch\arm\mach-s3c64xx\include\mach\Irqs.h,可以解释这个问题:

/* Since the IRQ_EINT(x) are a linear mapping on current s3c64xx series
 * we just defined them as an IRQ_EINT(x) macro from S3C_IRQ_EINT_BASE
 * which we place after the pair of VICs. */

#define S3C_IRQ_EINT_BASE	S3C_IRQ(64+5)

#define S3C_EINT(x)		((x) + S3C_IRQ_EINT_BASE)
#define IRQ_EINT(x)		S3C_EINT(x)
#define IRQ_EINT_BIT(x)		((x) - S3C_EINT(0))

/* Next the external interrupt groups. These are similar to the IRQ_EINT(x)
 * that they are sourced from the GPIO pins but with a different scheme for
 * priority and source indication.
 *
 * The IRQ_EINT(x) can be thought of as 'group 0' of the available GPIO
 * interrupts, but for historical reasons they are kept apart from these
 * next interrupts.
 *
 * Use IRQ_EINT_GROUP(group, offset) to get the number for use in the
 * machine specific support files.
 */

#define IRQ_EINT_GROUP1_NR	(15)
#define IRQ_EINT_GROUP2_NR	(8)
#define IRQ_EINT_GROUP3_NR	(5)
#define IRQ_EINT_GROUP4_NR	(14)
#define IRQ_EINT_GROUP5_NR	(7)
#define IRQ_EINT_GROUP6_NR	(10)
#define IRQ_EINT_GROUP7_NR	(16)
#define IRQ_EINT_GROUP8_NR	(15)
#define IRQ_EINT_GROUP9_NR	(9)

#define IRQ_EINT_GROUP_BASE	S3C_EINT(28)
#define IRQ_EINT_GROUP1_BASE	(IRQ_EINT_GROUP_BASE + 0x00)
#define IRQ_EINT_GROUP2_BASE	(IRQ_EINT_GROUP1_BASE + IRQ_EINT_GROUP1_NR)
#define IRQ_EINT_GROUP3_BASE	(IRQ_EINT_GROUP2_BASE + IRQ_EINT_GROUP2_NR)
#define IRQ_EINT_GROUP4_BASE	(IRQ_EINT_GROUP3_BASE + IRQ_EINT_GROUP3_NR)
#define IRQ_EINT_GROUP5_BASE	(IRQ_EINT_GROUP4_BASE + IRQ_EINT_GROUP4_NR)
#define IRQ_EINT_GROUP6_BASE	(IRQ_EINT_GROUP5_BASE + IRQ_EINT_GROUP5_NR)
#define IRQ_EINT_GROUP7_BASE	(IRQ_EINT_GROUP6_BASE + IRQ_EINT_GROUP6_NR)
#define IRQ_EINT_GROUP8_BASE	(IRQ_EINT_GROUP7_BASE + IRQ_EINT_GROUP7_NR)
#define IRQ_EINT_GROUP9_BASE	(IRQ_EINT_GROUP8_BASE + IRQ_EINT_GROUP8_NR)

#define IRQ_EINT_GROUP(group, no)	(IRQ_EINT_GROUP##group##_BASE + (no))

从以上注释以及代码可以看到,有两个宏来获得终端号,

IRQ_EINT(x)                                                第0组

IRQ_EINT_GROUP(group,no)          第1-9组

时间: 2024-07-29 08:37:46

s3c6410外部中断号与引脚问题的相关文章

28335外部中断

/*****************************************************************************Copyright: 2014,TkaiFile name: main.cDescription:28335外部中断测试Author: Version: v1.0Date: 2014.05.27History: 无*****************************************************************

ARM中外部中断

在整个ARM体系结构中,为了处理外部中断,依次学习了MMU,模式跳转,异常,GIC,看门狗程序,这些都是为了处理外部中断 具体如下: 处理外部中断有五个步骤: 30      //step 1: cpu cpsr 31       __asm__ __volatile__( 32           "mrs r0, cpsr\n" 33           "bic r0, r0, #0x80\n"//设置CPSR的I位,将IRQ位打开 34          

向linux内核中添加外部中断驱动模块

本文主要介绍外部中断驱动模块的编写,包括:1.linux模块的框架及混杂设备的注册.卸载.操作函数集.2.中断的申请及释放.3.等待队列的使用.4.工作队列的使用.5.定时器的使用.6.向linux内核中添加外部中断驱动模块.7.完整驱动程序代码.linux的内核版本为linux2.6.32.2. 一.linux模块的框架以及混杂设备相关知识 1.内核模块的框架如下图所示,其中module_init()(图中有误,不是modules_init)只有在使用insmod命令手动加载模块时才会被调用,

STM32学习笔记(九) 外部中断,待机模式和事件唤醒

学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为例详细讲解这些内容,希望对每一个阅读者有帮助. 1.外部中断 如果已经学习了SysTick系统时钟滴答实验,掌握了Cortex-M3中断的相关知识,那么外部中断也是比较好理解的,和SysTick中断一样,外部中断也是当有信号触发时,如果中断屏蔽寄存器允许触发,就会产生中断,这时CPU查找中断向量表,

外部中断和计时器要点

一.51单片机的引脚与功能 P3.2: 外部中断0的输入引脚 P3.3:外部中断1的输入引脚 P3.4:定时器0的输入引脚 P3.5:定时器1的输入引脚 二.单片机的中断源 外部中断0: 外部中断1: 定时/计数器0 中断: 定时/计数器0 中断: 串行口发送或接收中断. 三.引起单片机外部中断的信号低电平信号和从高电平到低电平的下降沿信号. 四.与外部中断相关的寄存器有3个:中断允许寄存器IE,定时器控制寄存器TCOM,中断优先级寄存器IP. 中断允许寄存器IE EX0:外部中断0中断允许未位

STM8L外部中断 为何 死循环 寄存器操作

STM8L 系列单片机是 ST公司推出的低功耗单片机,与STM8S系列相比功耗降低了很多,但内部结构也删减了很多,使用时一定要仔细阅读手册.  这是第一次使用STM8,实现功能不是很复杂就没想研究库函数,准备直接控制寄存器操作,没想到本人 因为中断问题纠结了大半天. 在外部中断中这一点很不同, STM8S自动清除外部中断,而STM8L是需要软件清除, 清除标志位的寄存器根据设置而不同,下面有说明. 下面以STM8L外部中断 PB1为例 说明外部中断 寄存器操作 设置外部中断有下面几步: 第一步.

STM32F103外部中断编程

STM32F103外部中断编程   中断,顾名思义就是停下手头的活,去干另外一件急活,干完急活然后回来继续干手头的活. 单片机和人一样,有时候也有更急的程序需要执行,执行完之后再回来执行之前正在执行的程序.今天就来试试如何让单片机中断当前任务,执行其他任务. 先看看我的实验板上做外部中断要用的资源:         如上图,板子的下面有三个独立按键,右下边有三个贴片的LED,其中这两部分的电路图如下图所示: 1.独立按键电路: 由上图可知,三个独立按键分别接在STM32的PB7.PB8.PB9引

智能车学习(十六)——K60单片机EXIT外部中断

一.头文件: #ifndef _EXTI_H_ #define _EXTI_H_ typedef enum exti_cfg { zero_down = 0x08u, //低电平触发,内部下拉 rising_down = 0x09u, //上升沿触发,内部下拉 falling_down = 0x0Au, //下降沿触发,内部下拉 either_down = 0x0Bu, //跳变沿触发,内部下拉 one_down = 0x0Cu, //高电平触发,内部下拉 //用最高位标志上拉和下拉 zero_

Exynos4412的外部中断是如何安排的?

作者 彭东林 [email protected] 平台 Linux4.9 tiny4412 概述 结合tiny4412开发板分析一下Exynos4412的外部中断是如何组织的. 正文 在Exynos4412的用户手册第9章Interrupt Controller列出了支持的外部中断: 图1 第1列是按Shared Peripheral Interrupt 排序的 第2列是按Software Generated Interrupt + Peripheral Interrupt(PPI+SPI)排序