单片机
返回首页

【ARM】2410裸机系列-中断处理

2020-01-23 来源:eefocus

目的

   为了更好地掌握S3C2410中断的原理及中断程序的编写。

   内容利用S3C2410的外部中断0和外部中断1实现两个按键功能

 


原理

   本次选择的是外部中断EXTINT0和EXTINT11。中断的产生分别来自按钮SB1202和SB1203,当按钮按下时,EXTINT0(对应管脚GPF0)或EXTINT11(对应管脚GPG3)和地连接,输入低电平,从而向CPU发出中断请求。


   当CPU受理后,进入相应的中断服务程序,通过超级终端的主窗口显示当前进入的中断号。

 


程序

#include '2410addr.h'//这头文件找了好久啊,mdk里面没有,后来在一个实例中提取出来的


#include '2410lib.h'


void __irq int0_int(void)   //外部中断0处理函数


{


   uart_printf('EINT0 interrupt occurred. n');


   ClearPending(BIT_EINT0);    //清除中断源


}


void __irq int11_int(void)  //外部中断11处理函数


{


if(rEINTPEND==(1<<11))  //判断外部中断挂起寄存器,确定是否外部中断11


   {


       uart_printf('EINT11 interrupt occurred. n');


       rEINTPEND=(1<<11);  //清除中断挂起寄存器


   }


   ClearPending(BIT_EINT8_23);


}


void int_init(void) //中断初始化


{


   rGPFCON=(rGPFCON & ~(3<<0) | (0x2<<0)); //将CPFO配置为EINT0


   rGPGCON=(rGPGCON & ~(3<<6) | (0x2<<6)); //将CPF3配置为EINT11


   pISR_EINT0=(UINT32T)int0_int;   //注册中断处理函数


   pISR_EINT8_23=(UINT32T)int11_int;    


//注册处理中断11处理函数,EINT8~23共用此函数,需要在处理函数中加入对源中断的判断


   rEINTPEND=0xffffff; //清除所有外部中断挂起状态


   rSRCPND=BIT_EINT0 | BIT_EINT8_23;   //清除源的挂起状态


   rINTPND=BIT_EINT0 | BIT_EINT8_23;   //清除挂起状态


   rEXTINT0=(rEXTINT0 & ~(7<<0)) | (0x2<<0);   //EINT0下降沿触发


   rEXTINT1=(rEXTINT1 & ~(7<<0)) | (0x2<<12);  //EINT1Ï下降沿触发


   rEINTMASK &= ~(1<<11);  //打开外部中断11


   rINTMSK &= ~(BIT_EINT0 | BIT_EINT8_23); //打开INTMSK中的中断0和中断8~23


}


int main()


{


   int_init();  


while(1);


}


//#define ClearPending(bit) {rSRCPND=bit;rINTPND=rINTPND;}


//写入错误的数据


//清除中断源,注意清除的顺序,要从源头开始清除


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 用数字电路CD4069制作的万能遥控轻触开关

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 用NE555制作定时器

  • 带有短路保护系统的5V直流稳压电源电路图

    相关电子头条文章