zoukankan      html  css  js  c++  java
  • 【ARM】2410裸机系列-中断处理

    目的

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

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


    原理

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

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


    程序

     1 #include "2410addr.h"//这头文件找了好久啊,mdk里面没有,后来在一个实例中提取出来的
     2 
     3 #include "2410lib.h"
     4 
     5 void __irq int0_int(void)   //外部中断0处理函数
     6 
     7 {
     8 
     9    uart_printf("EINT0 interrupt occurred. 
    ");
    10 
    11    ClearPending(BIT_EINT0);    //清除中断源
    12 
    13 }
    14 
    15 void __irq int11_int(void)  //外部中断11处理函数
    16 
    17 {
    18 
    19 if(rEINTPEND==(1<<11))  //判断外部中断挂起寄存器,确定是否外部中断11
    20 
    21    {
    22 
    23        uart_printf("EINT11 interrupt occurred. 
    ");
    24 
    25        rEINTPEND=(1<<11);  //清除中断挂起寄存器
    26 
    27    }
    28 
    29    ClearPending(BIT_EINT8_23);
    30 
    31 }
    32 
    33 void int_init(void) //中断初始化
    34 
    35 {
    36 
    37    rGPFCON=(rGPFCON & ~(3<<0) | (0x2<<0)); //将CPFO配置为EINT0
    38 
    39    rGPGCON=(rGPGCON & ~(3<<6) | (0x2<<6)); //将CPF3配置为EINT11
    40 
    41    pISR_EINT0=(UINT32T)int0_int;   //注册中断处理函数
    42 
    43    pISR_EINT8_23=(UINT32T)int11_int;    
    44 
    45 //注册处理中断11处理函数,EINT8~23共用此函数,需要在处理函数中加入对源中断的判断
    46 
    47    rEINTPEND=0xffffff; //清除所有外部中断挂起状态
    48 
    49    rSRCPND=BIT_EINT0 | BIT_EINT8_23;   //清除源的挂起状态
    50 
    51    rINTPND=BIT_EINT0 | BIT_EINT8_23;   //清除挂起状态
    52 
    53    rEXTINT0=(rEXTINT0 & ~(7<<0)) | (0x2<<0);   //EINT0下降沿触发
    54 
    55    rEXTINT1=(rEXTINT1 & ~(7<<0)) | (0x2<<12);  //EINT1Ï下降沿触发
    56 
    57    rEINTMASK &= ~(1<<11);  //打开外部中断11
    58 
    59    rINTMSK &= ~(BIT_EINT0 | BIT_EINT8_23); //打开INTMSK中的中断0和中断8~23
    60 
    61 }
    62 
    63 int main()
    64 
    65 {
    66 
    67    int_init();  
    68 
    69 while(1);
    70 
    71 }
    72 
    73 //#define ClearPending(bit) {rSRCPND=bit;rINTPND=rINTPND;}
    74 
    75 //写入错误的数据
    76 
    77 //清除中断源,注意清除的顺序,要从源头开始清除
    View Code
  • 相关阅读:
    linux下文件/目录的默认权限
    linux中如何查看文件/文件夹的大小
    linux定时/计划任务
    shell脚本中EOF的妙用
    linux中的计算器
    linux操作系统的时间
    Anaconda如何设置网络代理
    前端学习问题积累
    angular-ng-zorro,自定义模态窗拖动指令
    angular学习笔记之父子传值
  • 原文地址:https://www.cnblogs.com/lcw/p/3159420.html
Copyright © 2011-2022 走看看