×
单片机 > 单片机程序设计 > 详情

S3C2440中断控制器

发布时间:2020-08-27 发布时间:
|
      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灯闪一下

 
  1. #include"2440addr.h"  
  2. #include"option.h"  //这个文件中定义了中断服务程序的起始地址  
  3.   
  4.   
  5. #define  LED1_ON    (rGPBDAT &=~(1<<5))  
  6. #define  LED1_OFF   (rGPBDAT |=(1<<5) )  
  7. #define  LED2_ON    (rGPBDAT &=~(1<<6))  
  8. #define  LED2_OFF   (rGPBDAT |=(1<<6))  
  9. #define  LED3_ON    (rGPBDAT &=~(1<<7))  
  10. #define  LED3_OFF   (rGPBDAT |=(1<<7))  
  11. #define  LED4_ON    (rGPBDAT &=~(1<<8))  
  12. #define  LED4_OFF   (rGPBDAT |=(1<<8))  
  13.   
  14. void Delay(void)  
  15. {  
  16.     int i;  
  17.     for(i=0;i<100000;i++);  
  18. }  
  19.   
  20.   
  21. void __irq IRQ_KEY1(void)  
  22. {  
  23.       
  24.     rSRCPND |=(1<<1); //清除中断标志位  
  25.     rINTPND |=(1<<1);  
  26.       
  27.     LED1_ON;  
  28.     Delay();  
  29.     LED1_OFF;  
  30.       
  31.           
  32. }  
  33.   
  34. void __irq IRQ_KEY2(void)  
  35. {  
  36.       
  37.     rSRCPND |=(1<<4); //清除中断标志位  
  38.     rINTPND |=(1<<4);  
  39.     rEINTPEND |=(1<<4);   //清除ENIT4的中断标志位  
  40.       
  41.     LED2_ON;  
  42.     Delay();  
  43.     LED2_OFF;  
  44.       
  45.           
  46. }  
  47.   
  48. void __irq IRQ_KEY3(void)  
  49. {  
  50.       
  51.     rSRCPND |=(1<<2); //清除中断标志位  
  52.     rINTPND |=(1<<2);  
  53.   
  54.     LED3_ON;  
  55.     Delay();  
  56.     LED3_OFF;  
  57.       
  58.           
  59. }  
  60.   
  61. void __irq IRQ_KEY4(void)  
  62. {  
  63.       
  64.     rSRCPND |=1<<0; //清除中断标志位    
  65.     rINTPND |=1<<0;  
  66.       
  67.     LED4_ON;      
  68.     Delay();  
  69.     LED4_OFF;     
  70. }  
  71.       
  72.   
  73.      
  74. void Eint_Init(void)  
  75. {  
  76.     rGPFCON &=~(0x33f);  
  77.     rGPFCON |=0x22a;    //设置GPF0、1、2、4为中断输入功能  
  78.       
  79.     rEXTINT0 = 0x20222; //ENIT0、1、2、4下降沿触发中断  
  80.       
  81.     rSRCPND = 0x17;     //清除ENIT0、1、2、4的中断标志位  
  82.     rINTPND = 0x17;     //清除ENIT0、1、2、4的中断标志位  
  83.     rEINTPEND=(1<<4); //清除ENIT4的中断标志位  
  84.       
  85.     rINTMOD=0x0;        //所有中断为IRQ中断  
  86.       
  87.     rINTMSK &= ~0x17;   //ENIT0、1、2、4中断服务有效(这里就是使能外部中断)  
  88.     rEINTMASK &= ~(1<<4);//EINT4中断服务有效  
  89.       
  90.     pISR_EINT0 = (unsigned)IRQ_KEY4;    //设置各中断服务子程序地址  
  91.     pISR_EINT1 = (unsigned)IRQ_KEY1;  
  92.     pISR_EINT2 = (unsigned)IRQ_KEY3;  
  93.     pISR_EINT4_7 = (unsigned)IRQ_KEY2;  
  94. }  
  95.   
  96. void Main(void)  
  97. {  
  98.     rGPBCON &=~((3<<10)|(3<<12)|(3<<14)|(3<<16));   //对GPBCON[10:17]清零  
  99.     rGPBCON |=((1<<10)|(1<<12)|(1<<14)|(1<<16));    //设置GPB5~8为输出  
  100.     rGPBUP &=~((1<<5)|(1<<6)|(1<<7)|(1<<8));        //设置GPB5~8的上拉功能  
  101.     rGPBDAT |=(1<<5)|(1<<6)|(1<<7)|(1<<8);          //关闭LED  
  102.       
  103.     Eint_Init();  
  104.       
  105.     while(1);  
  106. }  
  107.  

关键字:S3C2440  中断控制器 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项