当前位置:首页 > 单片机 > 单片机
[导读]S3C2440A中的中断控制器接受来自60个中断源的请求。提供这些中断源的是内部外设,如DMA控制器、UART、IIC等等。在这些中断源中,UARTn、AC97和EINTn中断对于中断控制器而言是“或”关系。任意一个中断发生都会触发总

S3C2440A中的中断控制器接受来自60个中断源的请求。提供这些中断源的是内部外设,如DMA控制器、UART、IIC等等。在这些中断源中,UARTn、AC97和EINTn中断对于中断控制器而言是“或”关系。任意一个中断发生都会触发总中断

当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求ARM920T内核的FIQ或IRQ。

仲裁步骤由硬件优先级逻辑决定并且写入结果到帮助用户通告是各种中断源中的哪个中断发生了的中断挂起寄存器中。


中断源有两种,一种是直接中断源,比如触摸屏中断,还有一种是带子中断的中断,类似于串口带有子终端入RXTX中断,通过SUBMASK也就是中断允许之后挂起到系统,系统根据用户设置确定是否响应该中断,然后依靠优先级分批响应,中断优先级依靠硬件决定

至于中断的处理过程,在解析启动代码的时候有讲到,请自行查阅

下面以按键的外部中断为例讲解中断的使用方法

1.首先,要使用外部中断需要在rGPXCON里面将引脚模式设置为中断功能,对应是0x10

2.需要在对应的寄存器中设置中断触发模式(EXINTx),例如GPF7中断,关联的中断引脚是EINT7,而EINT7是属于EXTINT0的,如下


所以对EXTINT0赋值选择相应中断触发模式

3.此时,中断还不能被触发,因为还没有设置上图的MASK,mode,接下来在INTMOD中选择中断属于那个分组,如下



一般选择为IRQ中断,关于FIQ中断相关资料后期说明

4.接下来使能相关的中断服务,寄存器为INTMSK





5.现在就可以进行中断了,但是为了保险起见,再打开中断之前最好将中断标志位都清除掉,中断标志位有两个,两个系统级一个子中断级,系统级里面分别是SRCPND和INTPND

子中断的意思就是现在开的中断代表EINT4-7那到底是哪一个还能确定,依靠INTPEND



注意,只有多个中断公用一个通道的时候才有这个,比如EINT0-3是独立中断,直接在系统中断寄存器里面清除就好了

最后,开启中断



同样,这个也是多个中断公用通道的时候使用

另外,针对外部中断可以设置滤波过程,请查阅手册

现在我们来看,差不多的对应关系是

EINTMASK , ---------------------------SUBMASK子中断开关

INTMASK-----------------------------MASK总中断开关

INTMODE-------------------------------MODE模式开关

SPRPND-----------------------------源挂起标志

INTPND----------------------------中断请求标志

EINTPEND----------------------子中断挂起

当一个通道对应多个中断的时候要依靠子中断挂起来判定到底是哪一个中断发生了

以下是按键中断代码

Exit.c

#include"exti.h"//按键中断处理函数void__irqIRQ_KEY1(void){rSRCPND"=(1<<1);//清除中断标志位rINTPND|=(1<<1);keyValue=KEY_UP;}void__irqIRQ_KEY2(void){rSRCPND|=(1<<4);//清除中断标志位rINTPND|=(1<<4);if(rEINTPEND&(1<<4))//EINT4包含4-7四个中断源{rEINTPEND|=(1<<4);//清除ENIT4的中断标志位keyValue=KEY_DOWN;}}void__irqIRQ_KEY3(void){rSRCPND|=(1<<2);//清除中断标志位rINTPND|=(1<<2);keyValue=KEY_LEFT;}void__irqIRQ_KEY4(void){rSRCPND|=1<<0;//清除中断标志位rINTPND|=1<<0;keyValue=KEY_RIGHT;}voidExtiInit(void){rGPFCON&=~((3<<0)|(3<<2)|(3<<4)|(3<<8));//0124清零rGPFCON|=((2<<0)|(2<<2)|(2<<4)|(2<<8));//选择中断复用rEXTINT0&=~((7<<0)|(7<<4)|(7<<8)|(7<<16));//清除中断模式rEXTINT0|=((2<<0)|(2<<4)|(2<<8)|(2<<16));//选择下降沿触发rSRCPND|=((1<<0)|(1<<1)|(1<<2)|(1<<4));//清除中断标志rINTPND|=((1<<0)|(1<<1)|(1<<2)|(1<<4));//清除中断挂起rINTMOD&=~((1<<0)|(1<<1)|(1<<2)|(1<<4));//设置中断为IRQ中断rINTMSK&=~((1<<0)|(1<<1)|(1<<2)|(1<<4));//去除中断屏蔽,打开中断rEINTPEND|=(1<<4);//EINT4中断服务有效//对于EINT4这种带子中断的中断的额外操作,清除子中断rEINTMASK&=~(1<<4);//EINT4中断服务有效//对于EINT4这种带子中断的中断的额外操作,打开子中断//建立中断函数连接pISR_EINT1=(unsigned)IRQ_KEY1;//建立中断服务函数链接pISR_EINT4_7=(unsigned)IRQ_KEY2;pISR_EINT2=(unsigned)IRQ_KEY3;pISR_EINT0=(unsigned)IRQ_KEY4;}


Exit.h

#ifndef__EXTI_H_#define__EXTI_H_#include"2440addr.h"#include"def.h"#include"key.h"voidExtiInit(void);//使用GPIOF0124#endif


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

  本文根据网络视频采集的需要,将网络传输与视频采集相结合,设计了以S3C2440为核心的USB摄像头视频采集和嵌入式Linux系统下的视频服务器,从而实现了远程网络视频信息采集。   

关键字: s3c2440 视频采集 usb摄像头

         之前在提起自动化或是智能化时,人们会不自觉的想到工业生产,这是因为自动化这个字眼进入中国,确实是以工业

关键字: 嵌入式 Linux s3c2440 视频采集

  引言   随着科技的不断发展,以数据业务为主的固定宽带无线接入技术发展已经很成熟,而移动宽带无线通信技术还并没有得到广泛的应用。由于移动宽带无线接入系统需要解决带宽、移动性和覆盖范围

关键字: IPv6 s3c2440 x86 架构

  1 引言   人们生活水平的提高以及科技的进步,特别是计算机技术、网络技术和通信技术的发展,智能家居将慢慢成为未来家居生活的发展方向。1984年在美国诞生了世界上第一座智能家居建筑,

关键字: boa nrf24l01 s3c2440 智能家居

我们知道2440开发流程为:移植uboot--》移植内核---》挂接根文件系统。我们移植完内核需要挂接根文件系统,那么首先我们必须拥有根文件系统。如何来制作我们的根文件系统呢?第一步:在linux下建

关键字: s3c2440 根文件系统

1.TQ2440u-boot-1.1.6修改文件所在的路径是u-boot-1.1.6includeconfigsEmbedSky.h将#defineLCD_TFTxxx(LCD类型)W353.5寸TFT4802724.3...

关键字: s3c2440 lcd参数

2440的晶振频率为12MHZ,有两个PLL:MPLL和UPLL,其中MPLL产生FCLK、HCLK、PCLK;UPLL产生UCLK。FCLK为ARM核提供时钟,HCLK为AHB总线时钟,PCLK为APB总线时钟,UCL...

关键字: s3c2440 时钟初始化

开发板:TQ2440内核:Linux 2.6.32PC OS:Ubuntu 11.041.配置内核打开I2C功能:打开杂项设备,该选项打开后,EEPROM也就打开了。2. 修改代码修改文件: linux/arch/arm...

关键字: at24c02 eeprom s3c2440 移植 linux驱动

在分析ARM-Linux s3c2440中UART的时有必要先了解 s3c2440A中串口的硬件知识。硬件篇:S3c2440A串口提供三个独立的异步串行通信I/O端口(asynchronousserial I/O por...

关键字: ARM Linux s3c2440 uart

s3c2440 cpu的默认工作主频有两种12MHz和16.9344MHz,也就是我们的晶振的频率,但一般12MHz的晶振用的比较多,Fin就是指我们接的晶振频率。大家都知道s3c2440上电正常工作后频率是远远大于12...

关键字: s3c2440 时钟
关闭