首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

S3C2440中断控制器

S3C2440中断控制器

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灯闪一下
[cpp] view plaincopy

  • #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;  


  • }
继承事业,薪火相传
返回列表