ARM中断分析之二:裸机下面的中断处理

EINT4中断的裸机处理

这是基于S3C2410的EINT4中断的裸机处理,当中断发生时就把LED灯取反显示。下面是电路图。

上面是外部KEY连接到CPU的EINT4引脚上面,即:按下键就会产生一个中断。

 

按照先前介绍的,中断处理流程来介绍,包括:初始化中断、处理中断、处理完毕恢复中断。

一、引导代码

int main(void)
{
    EINT_init();   // 外部中断初始化、中断控制器初始化
    IRQEnable(); // 使能IRQ中断 (清零CPSR寄存器的I位)

    while(1);       // 等待外部中断
}

二、初始化代码函数:EINT_init。

    EINT_init包括:外部中断初始化、中断控制器初始化。设置GPF4引脚为外部中断EINT4功能,下降沿触发模式,并使能中断允许。
void EINT_init(void)
{
    rGPFCON = (rGPFCON & 0xFFFFFCFF) | (0x02<<8); // 设置GPF4引脚为外部中断EINT4功能
    rEXTINT0 = (0x2<<16); // 外部中断EINT4设置为下降沿触发

    VICVectAddr[4] = (uint32) IRQ_Eint4; // 中断向量地址设置

    rPRIORITY = 0x00000000; // 使用默认的固定的优先级
    rINTMOD = 0x00000000; // 所有中断均为IRQ中断
    rINTMSK = ~0x0000010; // 使能EINT4中断(第一级)

    rEINTMASK = ~0x0000010; // 使能第二级中断
}

三、使能IRQ中断函数:IRQEnable。

    功能是:使能IRQ中断 (清零CPSR寄存器的I位),代码如下:
; 开IRQ中断
MRS R0, SPSR
BIC R0, R0, #I_BIT
MSR SPSR_c, R0
MOVS PC, LR

四、IRQ_Exception中断异常处理程序(实现向量中断处理),用户无需改动,代码如下:
void __irq IRQ_Exception(void)     // 注意这个函数名之前的 __irq ,编译器会有特别动作。
{
    void (*__Handler)(void);
    int irq_no;
    uint32 bak;

    // 找出当前中断号
    bak = rINTPND; // 读取INTPND的值
    for(irq_no=0; irq_no<32; irq_no++)
    {
        bak = bak>>1;
        if(bak == 0) break; // 获得最高的优先级
    }

    // 取得中断服务程序地址并执行
    __Handler = (void (*)(void)) VICVectAddr[irq_no];
    __Handler();
}

五、EINT4的中断处理函数:IRQ_Eint4。

    功能:把LED1控制口输出信号取反。
void IRQ_Eint4(void)
{
    // 把LED1控制口输出信号取反
    // 省略...

    // 清除中断标志
    rEINTPEND = (1<<4); // 清除第二级的中断标识
    rSRCPND = (1<<4); // 清除第一级的中断标识
    rINTPND = rINTPND; // 清除mask过滤后的中断标识
}

从上面的代码中,大约可以得出每个阶段的流程:初始化时要一级一级的设置好mask,中断服务之后要一级一级的清理中断标识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单节点hadoop部署成功

经过前面的配置&#xff1a; linux-ot1w:/home/macula/download/hadoop-0.20.2 # bin/start-all.sh starting namenode, logging to /home/macula/download/hadoop-0.20.2/bin/../logs/hadoop-macula-namenode-linux-ot1w.out Password: localhost: starting datanode, logging…

【转】Jenkins 构建触发器操作详解

转自&#xff1a;Jenkins 构建触发器操作详解 - 习久性成 - 博客园 前言 触发远程构建 【https://www.cnblogs.com/Rocky_/p/8297260.html】 例如&#xff0c;使用脚本&#xff1a;通过一个网址的访问来触发构建&#xff0c;这样就不需要登录jenkins系统也能触发构建了。 示…

ARM中断分析之三:WinCE驱动的中断分析

现在有许多高端的ARM芯片&#xff0c;像苹果、三星、华为都采用ARM芯片做为智能手机芯片。 这篇文章介绍基于ARM的WinCE操作系统的驱动的中断分析。WinCE驱动分为两类&#xff0c;这里介绍流驱动&#xff0c;流驱动比较简单。 关于流驱动&#xff0c;下面是一张框图&#xff0c…

【转】密码破解全能工具:Hashcat密码破解攻略

转自&#xff1a;密码破解全能工具&#xff1a;Hashcat密码破解攻略 - FreeBuf网络安全行业门户 Hashcat密码破解 hashcat号称世界上最快的密码破解&#xff0c;世界上第一个和唯一的基于GPGPU规则引擎&#xff0c;免费多GPU&#xff08;高达128个GPU&#xff09;&#xff0c…

基于Visual Studio2010讲解LINQ读出数据库数据生成XML

LINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口&#xff0c;使用它&#xff0c;可以在 .NET Framework 编程语言中处理 XML。 LINQ to XML 最重要的优势是它与 Language-Integrated Query (LINQ) 的集成。 由于实现了这一集成&#xff0c;因此&#xff0c;可以对内存 XML…

ARM中断分析之四:WinCE的OAL层的中断分析

从前面的介绍&#xff0c;我们知道了裸机中断处理的流程、WINCE驱动的中断处理&#xff0c;但是&#xff0c;WINCE底层是怎么处理中断的呢&#xff1f;这里就是介绍WinCE系统的OAL层的中断处理。它和裸机的处理总体一样&#xff0c;只是实现细节方面有点区别&#xff0c;具体流…

【转】TinyXML2 入门教程

转自&#xff1a;TinyXML2 入门教程_恋喵大鲤鱼的博客-CSDN博客_tinyxml2中文指南 代码编译运行环境&#xff1a;Linux 64bits Debug g -m64&#xff08;-m 表示生成 64bits 的程序&#xff09; 文章目录 1.TinyXML2 概述2. TinyXML1 与 TinyXML2 对比3. TinyXML2 用法用例…

解决“A problem has been encountered while loading the setup components. Canceling setup.”的问题...

近来因为需要开发C的程序&#xff0c;所以要在Visual Studio 2008中添加C的开发组件&#xff0c;但是在添加组件的时候&#xff0c;弹出“A problem has been encountered while loading the setup components. Canceling setup.”的提示。无奈之下&#xff0c;只好卸载&#x…

【转】linux 查看动态库和可执行程序依赖库

转自&#xff1a;linux 查看动态库和可执行程序依赖库_帅的没朋友~的博客-CSDN博客_linux 查看动态库 目录 一:objdump二:readelf三:ldd四:进程是否依赖指定一:objdump # 查看依赖的库 objdump -x xxx.so | grep NEEDED# 查看可执行程序依赖的库 objdump -x ./testTime | gr…

WinCE下的GPIO中断的处理

在我所负责的音频驱动部分代码中,采用了PXA270的GPIO34来检测Headphone的插入与拔出.原驱动部分有个BUG,即当耳机插入以后,耳机和喇叭同时在响,很明显没有对耳机插入事件做出响应.所以我开始采用了检测GPIO信号拉高或者拉低和检测耳机的插入事件,但是这样做有个问题,就是会有延…

xvhfeng的工作回忆总结(第二年)阅读手记

xvhfeng 工作回忆总结&#xff08;第二年&#xff09; 上接工作第一年回忆总结,时间来到了工作第二年&#xff0c;我在PM的帮助下拿到了令自己满意的工资&#xff0c;又开始加入公司正常的工作。 上文说到有一个外省市&#xff08;以下称为A市&#xff09;的项目在做&#xff…

【转】详解JS的四种异步解决方案:回调函数、Promise、Generator、async/await

转自&#xff1a;详解JS的四种异步解决方案&#xff1a;回调函数、Promise、Generator、async/await 同步&异步的概念 在讲这四种异步方案之前&#xff0c;我们先来明确一下同步和异步的概念&#xff1a; 所谓同步(synchronization)&#xff0c;简单来说&#xff0c;就是…

S3C2440中断解析和基于WINCE操作系统的中断分析(整理于网络,用于按键中断使用)

在调试CAN总线的时候&#xff0c;遇到了操作系统的中断&#xff0c;为了彻底的弄清楚中断是怎么回事&#xff1f;我先从底层的中断开始研究&#xff0c;在这里我们只讨论外部中断&#xff0c;下面就结合S3C2440TEST测试程序来分析一下中断是怎么执行的&#xff1a;我们研究的是…

修改 MrBayes 3.2 源码解决不能恢复断点的问题

当数据量较大时&#xff0c;用MrBayes进行计算通常是旷日持久的事情&#xff0c;几天甚至几个月。中间如果断电死机什么的发生就很令人发狂了。于是 MrBayes 3.2 svn 版增加了一个断点保存的功能&#xff0c;死机后可以从保存的断点处继续计算。只要在mcmc命令中加入checkfreqn…

【转】ubuntu下为APT设置代理

转自&#xff1a;https://blog.csdn.net/lwbeyond/article/details/8431927 Ubuntu下为APT设置代理一.最简单的方法 图形界面方法&#xff1a;新立得软件包管理器-->设置-->首选项-->网络。 进行设置代理就可以了。二.编辑命令 方法1&#xff1a;验证通过 如果您 希望…

wince6.0 s5pv210 中断

1. 在smdkv210\src\oal\oallib\ksarm.h头文件里可以看到wince的中断定义。 设备中断的起始编号即wince预定义的设备中断ID的基值 SYSINTR_DEVICES EQU 8 一共支持64个设备中断 SYSINTR_MAX_DEVICES EQU 64 可用的设备…

Regular Expression

Reference: 正则表达式三十分钟入门&#xff1a; http://deerchao.net/tutorials/regex/regex.htm 在线测试工具&#xff1a; regexlib&#xff08;http://regexlib.com/default.aspx&#xff09; 吐血推荐&#xff0c;比较狠的一个工具&#xff1a; Expresso &…

【转】vsftp配置实例-虚拟用户锁定目录

转自&#xff1a; vsftp配置实例-虚拟用户锁定目录_jasonyang69的博客-CSDN博客_vsftpd锁定用户目录 快速解决 vsftpd nologin 虚拟用户 拒绝访问 无法登录_小飞飞飞鱼的博客-CSDN博客_vsftpd 拒绝访问 一、实验步骤 0、启用 nologin shell #vim /etc/shells /bin/sh /bi…

顺丰快递,果然不一般!

2010-06-03 18:27:03快件到达北京集散点 2010-06-03 19:15:41快件离开北京集散点 发往北京集散中心 2010-06-03 21:05:34快件到达北京集散中心 2010-06-03 21:06:12快件离开北京集散中心 发往深圳集散中心 2010-06-04 02:56:29快件到达深圳集散中心 2010-06-04 02:57:04快件离开…

windowsCE异常和中断服务程序初探(-)

1。中断/异常相量的装入和执行方式。 中断和异常都是异步发生的事件&#xff0c;当该事件发生&#xff0c;系统将停止目前正在执行的代码转而执行事件响应的服务程序。而事件服务程序的入口点就是中断/异常向量所在的位置。arm的中断向量可以是0x0开始的低地址向…