linux驱动之中断管理(for mini2440)

2020-06-29来源: eefocus关键字:linux驱动  中断管理  mini2440

2440处理器的中断组织成两层:主中断 和 次中断,一共可以处理60个中断源。


主中断 和 次中断 经过中断构架的抽象之后,编写驱动程序时,我们不用考虑这两层中断,直接使用

request_irq 注册 60个中断源的某个,就可以直接使用中断了。


    err = request_irq(button_irqs[i].irq, buttons_interrupt, NULL,

                      button_irqs[i].name, (void *)&button_irqs[i]);

    set_irq_type(button_irqs[i].irq, IRQT_BOTHEDGE);


像上面这样使用中断。

下面是主中断0~31共32个中断源(32bit)


irqs.h头文件中定义了中断号


/* linux/arch/arm/mach-s3c24a0/include/mach/irqs.h

 *

 * Copyright (c) 2003-2005 Simtec Electronics

 *   Ben Dooks

 *

 * This program is free software; you can redistribute it and/or modify

 * it under the terms of the GNU General Public License version 2 as

 * published by the Free Software Foundation.

*/



#ifndef __ASM_ARCH_24A0_IRQS_H

#define __ASM_ARCH_24A0_IRQS_H __FILE__


#define IRQ_EINT0t2 S3C2410_IRQ(0) /* 16 */

/* for generic entry-macro.S */

#define IRQ_EINT0 IRQ_EINT0t2


#define IRQ_EINT3t6 S3C2410_IRQ(1)

#define IRQ_EINT7t10 S3C2410_IRQ(2)

#define IRQ_EINT11t14 S3C2410_IRQ(3)

#define IRQ_EINT15t18 S3C2410_IRQ(4) /* 20 */

#define IRQ_TICK S3C2410_IRQ(5)

#define IRQ_DCTQ S3C2410_IRQ(6)

#define IRQ_MC S3C2410_IRQ(7)

#define IRQ_ME S3C2410_IRQ(8) /* 24 */

#define IRQ_KEYPAD S3C2410_IRQ(9)

#define IRQ_TIMER0 S3C2410_IRQ(10)

#define IRQ_TIMER1 S3C2410_IRQ(11)

#define IRQ_TIMER2 S3C2410_IRQ(12)

#define IRQ_TIMER3_4 S3C2410_IRQ(13)

#define IRQ_OS_TIMER IRQ_TIMER3_4

#define IRQ_LCD S3C2410_IRQ(14)

#define IRQ_CAM_C S3C2410_IRQ(15)

#define IRQ_WDT_BATFLT S3C2410_IRQ(16) /* 32 */

#define IRQ_UART0 S3C2410_IRQ(17)

#define IRQ_CAM_P S3C2410_IRQ(18)

#define IRQ_MODEM S3C2410_IRQ(19)

#define IRQ_DMA S3C2410_IRQ(20)

#define IRQ_SDI S3C2410_IRQ(21)

#define IRQ_SPI0 S3C2410_IRQ(22)

#define IRQ_UART1 S3C2410_IRQ(23)

#define IRQ_AC97_NFLASH S3C2410_IRQ(24) /* 40 */

#define IRQ_USBD S3C2410_IRQ(25)

#define IRQ_USBH S3C2410_IRQ(26)

#define IRQ_IIC S3C2410_IRQ(27)

#define IRQ_IRDA_MSTICK S3C2410_IRQ(28) /* 44 */

#define IRQ_VLX_SPI1 S3C2410_IRQ(29)

#define IRQ_RTC S3C2410_IRQ(30) /* 46 */

#define IRQ_ADC_PEN     S3C2410_IRQ(31)


/* interrupts generated from the external interrupts sources */

#define IRQ_EINT00 S3C2410_IRQ(32) /* 48 */

#define IRQ_EINT1 S3C2410_IRQ(33)

#define IRQ_EINT2 S3C2410_IRQ(34)

#define IRQ_EINT3 S3C2410_IRQ(35)

#define IRQ_EINT4 S3C2410_IRQ(36)

#define IRQ_EINT5 S3C2410_IRQ(37)

#define IRQ_EINT6 S3C2410_IRQ(38)

#define IRQ_EINT7 S3C2410_IRQ(39)

#define IRQ_EINT8 S3C2410_IRQ(40)

#define IRQ_EINT9 S3C2410_IRQ(41)

#define IRQ_EINT10 S3C2410_IRQ(42)

#define IRQ_EINT11 S3C2410_IRQ(43)

#define IRQ_EINT12 S3C2410_IRQ(44)

#define IRQ_EINT13 S3C2410_IRQ(45)

#define IRQ_EINT14 S3C2410_IRQ(46)

#define IRQ_EINT15 S3C2410_IRQ(47)

#define IRQ_EINT16 S3C2410_IRQ(48)

#define IRQ_EINT17 S3C2410_IRQ(49)

#define IRQ_EINT18 S3C2410_IRQ(50)


#define IRQ_EINT_BIT(x) ((x) - IRQ_EINT00)


/* SUB IRQS */

#define IRQ_S3CUART_RX0 S3C2410_IRQ(51) /* 67 */

#define IRQ_S3CUART_TX0 S3C2410_IRQ(52)

#define IRQ_S3CUART_ERR0 S3C2410_IRQ(53)


#define IRQ_S3CUART_RX1 S3C2410_IRQ(54)

#define IRQ_S3CUART_TX1 S3C2410_IRQ(55)

#define IRQ_S3CUART_ERR1 S3C2410_IRQ(56)


#define IRQ_S3CUART_RX2 (0x0)

#define IRQ_S3CUART_TX2 (0x0)

#define IRQ_S3CUART_ERR2 (0x0)



#define IRQ_IRDA S3C2410_IRQ(57)

#define IRQ_MSTICK S3C2410_IRQ(58)

#define IRQ_RESERVED0 S3C2410_IRQ(59)

#define IRQ_RESERVED1 S3C2410_IRQ(60)

#define IRQ_RESERVED2 S3C2410_IRQ(61)

#define IRQ_TIMER3 S3C2410_IRQ(62)

#define IRQ_TIMER4 S3C2410_IRQ(63)

#define IRQ_WDT S3C2410_IRQ(64)

#define IRQ_BATFLT S3C2410_IRQ(65)

#define IRQ_POST S3C2410_IRQ(66)

#define IRQ_DISP_FIFO S3C2410_IRQ(67)

#define IRQ_PENUP S3C2410_IRQ(68)

#define IRQ_PENDN S3C2410_IRQ(69)

#define IRQ_ADC S3C2410_IRQ(70)

#define IRQ_DISP_FRAME S3C2410_IRQ(71)

#define IRQ_NFLASH S3C2410_IRQ(72)

#define IRQ_AC97 S3C2410_IRQ(73)

#define IRQ_SPI1 S3C2410_IRQ(74)

#define IRQ_VLX S3C2410_IRQ(75)

#define IRQ_DMA0 S3C2410_IRQ(76)

#define IRQ_DMA1 S3C2410_IRQ(77)

#define IRQ_DMA2 S3C2410_IRQ(78)

#define IRQ_DMA3 S3C2410_IRQ(79)


#define IRQ_TC (0x0)


#define NR_IRQS (IRQ_DMA3+1)


#endif /* __ASM_ARCH_24A0_IRQS_H */

关键字:linux驱动  中断管理  mini2440 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic501492.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:mini2440按键驱动程序分析
下一篇:Win7 64 ADS1.2 编译弹出Error

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

DMA基本概念及linux2440下DMA驱动程序编写与测试
器件在外设总线,目的器件在系统总线(4)源器件和目的器件都在外设总线1、驱动程序编写在本驱动程序中,我们打算在内存中开辟两个空间,分别作为源和目的。我们用两个方法将源中的数据写到目的中,一种方法是让cpu去做,另外一种发放是让DMA去做!好的,闲话少说,直接分析代码:#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/irq.h>#include
发表于 2020-06-09
DMA基本概念及<font color='red'>linux</font>2440下DMA<font color='red'>驱动</font>程序编写与测试
【重温经典】mini2440驱动程序之LED驱动(基于Linux-2.6.32.2)
一、LED资源介绍1、LED对应的GPIO(已上拉)LED1       nLED1    GPB5LED2       nLED2    GPB6LED3       nLED3    GPB7LED4       nLED4    GPB82、硬件电路二、驱动代码(mini2440_leds.c)以混杂设备注册,主要实现了ioctl接口,应用程序操作时,只需要打开这个设备文件,然后发一个
发表于 2020-05-22
【重温经典】mini2440<font color='red'>驱动</font>程序之LED<font color='red'>驱动</font>(基于<font color='red'>Linux</font>-2.6.32.2)
linux-2.6.32在mini2440开发板上移植(17)之按键驱动程序移植
编者:按键驱动程序涉及到linux中断程序的编写。1、按键原理图。2、驱动程序的编写移植。在/linux-2.6.32.2/drivers/char/目录下创建一个新的驱动程序文件mini2440_buttons.c,内容及详细注释如下:#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/poll.h>#include <linux/irq
发表于 2020-05-17
<font color='red'>linux</font>-2.6.32在mini2440开发板上移植(17)之按键<font color='red'>驱动</font>程序移植
Linux下基于fl2440开发板platform按键驱动详解(一)
===============================================操作系统:center os 64位平台:fl2440内核版本:Linux 3.0.54交叉编译器版本:2012.08===============================================#include "s3c_driver.h"#define DRV_AUTHOR                "497049229@qq.com"#define DRV_DESC   
发表于 2020-05-16
Linux内核模块驱动之---led驱动
开发板:tiny6410内核:linux2.6.38要写led驱动首先要复习的是混杂设备驱动的设计流程、 内核file_ops结构体、硬件通信IO端口和IO内存、 ioctl系统调用的实现步骤和方法按照顺序来对已经学习的内容复习 并把led模块驱动写出来第一步:复习ioctl系统调用函数一、什么是ioctl系统调用函数,驱动中的iodtl函数是什么样子的?为什么需要ioctl函数?》虽然file_ops结构体提供了相当多的文件操作函数,但是要想对硬件操作,这个file_ops结构体无法完成了,所以操作系统又提供了另一个对硬件操作的函数,就是ioctl,ioctl分为在应用层 和 在驱动层。ioctl应用层的函数传递命令,从用户态
发表于 2020-03-10
正点原子STM32F4中断优先级管理(10)
今天讲解,STM32F4开发指南   STM32F4中文参考手册,f4只使用了其中的一部分中断可以找到F4的中文参考手册第10节有一个表格STM32F405XX和STM32F407XX和STM32F415XX/17XX的向量表 有0-81个可屏蔽中断如何管理这几十个中断?就是利用NVIC ,首先看一下中断优先级分组,分组就是利用SCB->AIRCR中断配置,设置他的8-10位来设置中断优先级分组。设置了分组之后,就确定了  抢占优先级和相应优先级,每一个中断都有一个IP寄存器,这个IP寄存器的低位是4-7,当我们利用AIRCR设置好分组后他的IP寄存器也就配置好了。这里有个问题 这么分组
发表于 2019-09-09
正点原子STM32F4<font color='red'>中断</font>优先级<font color='red'>管理</font>(10)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved