目的

为了更好地掌握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==(<<))  //判断外部中断挂起寄存器,确定是否外部中断11

    {

        uart_printf("EINT11 interrupt occurred. \n");

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

    }

    ClearPending(BIT_EINT8_23);

 }

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

 {

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

    rGPGCON=(rGPGCON & ~(<<) | (0x2<<)); //将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 & ~(<<)) | (0x2<<);   //EINT0下降沿触发

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

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

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

 }

 int main()

 {

    int_init();  

 while();

 }

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

 //写入错误的数据

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

最新文章

  1. 读过MBA的CEO更自私?《哈佛商业评论》2016年第12期。4星
  2. 【SQLServer】DBHelper即C#数据库底层封装
  3. iOS,非视图类方法
  4. mysql根据汉字拼音排序查询
  5. xcode archive 一直是灰色的
  6. Ext.js中的tip事件实际使用
  7. asp.net mvc中包含webapi时,token失效产生302的解决方案
  8. P1032 字串变换
  9. MSP430F149学习之路——时钟1
  10. HDU2079选课时间(母函数)
  11. 每天一条linux命令——shutdown
  12. Linux中的搜索命令
  13. 发送邮件给某人:mailto标签
  14. JRE 和 JDK 的区别是什么?
  15. MQTT——控制报文格式
  16. C#脏字过滤算法
  17. 【Python】Part I 设置Python环境
  18. Linux搭建bugfree
  19. 在CentOS7中利用yum命令安装mysql
  20. [python]如何理解uiautomator里面的 child, child_by_text, sibling,及使用场景

热门文章

  1. 从零实现Lumen-JWT扩展包(序):前因
  2. libev ev_io_init学习
  3. 【DeepLearning】Exercise:Learning color features with Sparse Autoencoders
  4. linux达人养成计划学习笔记(五)—— 关机和重启命令
  5. 手动修改magento域名
  6. 【MyBatis】MyBatis之如何存储NULL
  7. Oracle 12C -- 预定义audit policies
  8. win8 应用商店程序使用SQLITE数据库
  9. 分布式配置 tachyon 并执行Hadoop样例 MapReduce
  10. Android_ViewPager_实现多个图片水平滚动