S3C2440中断控制器
来源:互联网 发布:exmail.qq.com 域名 编辑:程序博客网 时间:2024/05/16 17:19
S3C2440A 中的中断控制器接受来自 60 个中断源的请求。提供这些中断源的是内部外设,如 DMA 控制器、
UART、IIC等等。在这些中断源中,UARTn、AC97 和EINTn中断对于中断控制器而言是“或”关系。
当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求ARM920T 内核的FIQ
或IRQ。
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"//这个文件中定义了中断服务程序的起始地址#define LED1_ON(rGPBDAT &=~(1<<5))#define LED1_OFF(rGPBDAT |=(1<<5) )#define LED2_ON(rGPBDAT &=~(1<<6))#define LED2_OFF(rGPBDAT |=(1<<6))#define LED3_ON(rGPBDAT &=~(1<<7))#define LED3_OFF(rGPBDAT |=(1<<7))#define LED4_ON(rGPBDAT &=~(1<<8))#define LED4_OFF(rGPBDAT |=(1<<8))void Delay(void){int i;for(i=0;i<100000;i++);}void __irq IRQ_KEY1(void){rSRCPND |=(1<<1); //清除中断标志位rINTPND |=(1<<1);LED1_ON;Delay();LED1_OFF; }void __irq IRQ_KEY2(void){rSRCPND |=(1<<4); //清除中断标志位rINTPND |=(1<<4);rEINTPEND |=(1<<4);//清除ENIT4的中断标志位LED2_ON;Delay();LED2_OFF; }void __irq IRQ_KEY3(void){rSRCPND |=(1<<2); //清除中断标志位rINTPND |=(1<<2);LED3_ON;Delay();LED3_OFF; }void __irq IRQ_KEY4(void){rSRCPND |=1<<0; //清除中断标志位 rINTPND |=1<<0; LED4_ON;Delay();LED4_OFF; } void Eint_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;}void Main(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);//关闭LEDEint_Init();while(1);}
- S3C2440的中断控制器
- S3C2440的中断控制器
- S3C2440中断控制器
- S3C2440中断控制器
- 中断控制器学习 <s3c2440>
- s3c2440中断控制器(九)
- s3c2440的中断控制器以及中断编程
- S3C2440中断控制器一贴OK!!!
- s3c2440 学习笔记 Nand flash和中断控制器
- S3C2440中断
- S3C2440中断
- S3C2440-中断
- ##S3C2440中断##
- s3c2440 中断
- 中断控制器
- S3C2440 LCD 控制器
- S3C2440--存储控制器
- S3C2440 LCD控制器描述
- A Vision for Keystone
- C++ Primer 中文版 学习笔记(十一)
- 在Eclipse中使用JUnit4进行单元测试(高级篇)
- 普通域用户如何远程登录server 2008域服务器
- (原创)malloc与free的小细节
- S3C2440中断控制器
- 第四届蓝桥杯C++本科B组决赛解题报告
- VC6.0中Tab控件的使用例程
- python中使用with打开文件
- 我也用github(2)——关联本地工程到github
- 母函数(Generating function)详解
- 关于linux下s、t、i、a权限
- bma150
- poj 3070 Fibonacci 矩阵快速幂