S3C2440中断控制器
时间:11-21
来源:互联网
点击:
S3C2440A 中的中断控制器接受来自 60 个中断源的请求。提供这些中断源的是内部外设,如 DMA 控制器、
UART、IIC等等。在这些中断源中,UARTn、AC97 和EINTn中断对于中断控制器而言是“或”关系。
当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求ARM920T 内核的FIQ
或IRQ。
中断控制器所用到的专业寄存器,其详细的使用请看数据手册
SRCPND 中断标志(挂起)寄存器
写1时 对应位中断源有中断请求,写0时,对应位中断源无中断请求
INTPND 中断服务(挂起)寄存器
写1时 对应位中断源被响应,写0时,对应位中断源未被响应
。。。。。。。。。
现在主要说下外部中断(其寄存器使用说明在数据手册的输入输出端口章节)
S3C2440有24个外部中断,GPF0--GPF7对应于外部中断EINT0--EINT7,GPG0--GPG15对应于外部中断EINT8--EINT23,支持上升沿、下降沿、高电平、低电平、双边沿触发。
EXTINTn(外部中断控制寄存器)
EINTFLTn(外部中断滤波寄存器)
EINTMASK(外部中断屏蔽寄存器)
EINTPEND(外部中断挂起寄存器)
设置外部中断的一般步骤
1,选择管脚功能为外部中断功能
2,设置触发方式
3,清中断源挂起寄存器,中断服务寄存器(可选,防止原有中断干扰)
4,设置中断模式(IRQ、FRQ, 默认为IRQ)
5,设置中断优先级(可选,一般默认)
6,打开外部中断屏蔽
7,设置中断服务入口程序
外部中断按键按一下进入中断程序对应LED灯闪一下
- #include"2440addr.h"
- #include"option.h"//这个文件中定义了中断服务程序的起始地址
- #defineLED1_ON(rGPBDAT&=~(1<5))
- #defineLED1_OFF(rGPBDAT|=(1<5))
- #defineLED2_ON(rGPBDAT&=~(1<6))
- #defineLED2_OFF(rGPBDAT|=(1<6))
- #defineLED3_ON(rGPBDAT&=~(1<7))
- #defineLED3_OFF(rGPBDAT|=(1<7))
- #defineLED4_ON(rGPBDAT&=~(1<8))
- #defineLED4_OFF(rGPBDAT|=(1<8))
- voidDelay(void)
- {
- inti;
- for(i=0;i<100000;i++);
- }
- void__irqIRQ_KEY1(void)
- {
- rSRCPND|=(1<1);//清除中断标志位
- rINTPND|=(1<1);
- LED1_ON;
- Delay();
- LED1_OFF;
- }
- void__irqIRQ_KEY2(void)
- {
- rSRCPND|=(1<4);//清除中断标志位
- rINTPND|=(1<4);
- rEINTPEND|=(1<4);//清除ENIT4的中断标志位
- LED2_ON;
- Delay();
- LED2_OFF;
- }
- void__irqIRQ_KEY3(void)
- {
- rSRCPND|=(1<2);//清除中断标志位
- rINTPND|=(1<2);
- LED3_ON;
- Delay();
- LED3_OFF;
- }
- void__irqIRQ_KEY4(void)
- {
- rSRCPND|=1<0;//清除中断标志位
- rINTPND|=1<0;
- LED4_ON;
- Delay();
- LED4_OFF;
- }
- voidEint_Init(void)
- {
- rGPFCON&=~(0x33f);
- rGPFCON|=0x22a;//设置GPF0、1、2、4为中断输入功能
- rEXTINT0=0x20222;//ENIT0、1、2、4下降沿触发中断
- rSRCPND=0x17;//清除ENIT0、1、2、4的中断标志位
- rINTPND=0x17;//清除ENIT0、1、2、4的中断标志位
- rEINTPEND=(1<4);//清除ENIT4的中断标志位
- rINTMOD=0x0;//所有中断为IRQ中断
- rINTMSK&=~0x17;//ENIT0、1、2、4中断服务有效(这里就是使能外部中断)
- rEINTMASK&=~(1<4);//EINT4中断服务有效
- pISR_EINT0=(unsigned)IRQ_KEY4;//设置各中断服务子程序地址
- pISR_EINT1=(unsigned)IRQ_KEY1;
- pISR_EINT2=(unsigned)IRQ_KEY3;
- pISR_EINT4_7=(unsigned)IRQ_KEY2;
- }
- voidMain(void)
- {
- rGPBCON&=~((3<10)|(3<12)|(3<14)|(3<16));//对GPBCON[10:17]清零
- rGPBCON|=((1<10)|(1<12)|(1<14)|(1<16));//设置GPB5~8为输出
- rGPBUP&=~((1<5)|(1<6)|(1<7)|(1<8));//设置GPB5~8的上拉功能
- rGPBDAT|=(1<5)|(1<6)|(1<7)|(1<8);//关闭LED
- Eint_Init();
- while(1);
- }
S3C2440中断控制 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)