嵌入式外部中断实验总结(嵌入式外部中断实验报告)
嵌入式系统中实验部分,关于外部中断实验,能实现哪些功能?
1 SUBSRCPND和SRCPND表明有哪些中断被触发了 INTSUMMSK和INTMSK寄存器用于屏蔽某些中断2 中断触发→SUBSRCPND相应位置1→INTSUBMSK未屏蔽→SRCPND相应位置1→ ↑ 中断触发→若是FIQ中断:INTMOD相应位置1(同一时间,只能有一位置1)→INTMSK未屏蔽→INTPND相应位置1(同一时间,只能有一位置1)3 读取INTPND或INTOFFSET可以确定中断源4 清除中断的顺序:SUBSRCPND(相应位写1)→SRCPND(相应位写1)→INTPND5 自己觉得重要的几步:将相应引脚的功能设置为“外部中断”,设置中断触发条件,开启外设自己的屏蔽寄存器(若有)→INTSUBMSK中相应位设为0→FIQ:INTMOD相应位设为1 →IRQ:PRIORITY设置优先级→IRQ:INTMSK相应位设为0→CPSR中的I和F位设为0,使能IRQ或FIQ6 中断控制寄存器(1)SUBSRCPND中几位若有一位置位,且未被INTSUBMSK屏蔽,则SRCPND中相应有一位置1(多对1的关系)(2)INTMOD中设为1的为快速中断,设为0的为普通中断(3)PRIORITY:中断优先级仲裁器6个输入引脚;PRIORITY中三位控制一个中断优先级仲裁器(总共7个),一位为ARB_MODE(仲裁器工作模式位),两位用于控制输入信号的优先级具体哪位对应哪位:请查看S3C2440官方手册,上面写的很详细(4)INTOFFSET:INTPND寄存器位[x]置1时,INTOFFSET寄存器的值为x,在清除SRCPND、INTPND时,INTOFFSET自动清除7 外部中断实验:(实验用板:mini2440,是S3C2440的处理器,再参照原理图即可作相应调整)完整代码:int.tar.gz(1)head.S@******************************************************************************@ File:head.S@ 功能:初始化,设置中断模式、系统模式的栈,设置好中断处理函数@****************************************************************************** .extern main @引用其它文件中的mian标号.text .global _start _start:@****************************************************************************** @ 中断向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用@****************************************************************************** b Reset @ 0x04: 未定义指令中止模式的向量地址HandleUndef: b HandleUndef @ 0x08: 管理模式的向量地址,通过SWI指令进入此模式HandleSWI: b HandleSWI @ 0x0c: 指令预取终止导致的异常的向量地址HandlePrefetchAbort: b HandlePrefetchAbort @ 0x10: 数据访问终止导致的异常的向量地址HandleDataAbort: b HandleDataAbort @ 0x14: 保留HandleNotUsed: b HandleNotUsed @ 0x18: 中断模式的向量地址 b HandleIRQ @ 0x1c: 快中断模式的向量地址HandleFIQ: b HandleFIQ Reset: ldr sp, =4096 @ 设置栈指针,以下都是C函数,调用前需要设好栈 bl disable_watch_dog @ 关闭WATCHDOG,否则CPU会不断重启 msr cpsr_c, #0xd2 @ 进入中断模式 ldr sp, =3072 @ 设置中断模式栈指针 msr cpsr_c, #0xdf @ 进入系统模式 ldr sp, =4096 @ 设置系统模式栈指针, @ 其实复位之后,CPU就处于系统模式, @ 前面的“ldr sp, =4096”完成同样的功能,此句可省略 bl init_led @ 初始化LED的GPIO管脚 bl init_irq @ 调用中断初始化函数,在init.c中 msr cpsr_c, #0x5f @ 设置I-bit=0,开IRQ中断 ldr lr, =halt_loop @ 设置返回地址 ldr pc, =main @ 调用main函数halt_loop: b halt_loop HandleIRQ: sub lr, lr, #4 @ 计算返回地址 stmdb sp!, { r0-r12,lr } @ 保存使用到的寄存器 @ 注意,此时的sp是中断模式的sp @ 初始值是上面设置的3072 ldr lr, =int_return @ 设置调用ISR即EINT_Handle函数后的返回地址 ldr pc, =EINT_Handle @ 调用中断服务函数,在interrupt.c中int_return: ldmia sp!, { r0-r12,pc }^ @ 中断返回, ^表示将spsr的值复制到cpsr (2)init.c/* * init.c: 进行一些初始化 */ #include "s3c24xx.h" /* * LED1-4对应GPB5、GPB6、GPB7、GPB8 */#define GPB5_out (1(5*2)) // LED1#define GPB6_out (1(6*2)) // LED2#define GPB7_out (1(7*2)) // LED3#define GPB8_out (1(8*2)) // LED4 /* * K1-K4对应GPG0、GPG3、GPG5、GPG6 */#define GPG0_eint (20) // K1,EINT8#define GPG3_eint (2(3*2)) // K2,EINT11#define GPG5_eint (2(5*2)) // K3,EINT13#define GPG6_eint (2(6*2)) // K4,EINT14 /* * 关闭WATCHDOG,否则CPU会不断重启 */void disable_watch_dog(void){ WTCON = 0; // 关闭WATCHDOG很简单,往这个寄存器写0即可} void init_led(void){ GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out ;} /* * 初始化GPIO引脚为外部中断 * GPIO引脚用作外部中断时,默认为低电平触发、IRQ方式(不用设置INTMOD) */ void init_irq( ){ GPGCON = GPG0_eint | GPG3_eint |GPG5_eint | GPG6_eint; //使能EINT8 EINT11 EINT13 EINT14 EINTMASK=(~(18)) (~(111)) (~(113)) (~(114)); //EINT8 EINT11 EINT13 EINT14中断优先级一样,无需设置 // EINT8、EINT11、EINT13、EINT14使能 INTMSK =(~(15));}(3)interrupt.c#include "s3c24xx.h" void EINT_Handle(){ unsigned long oft = INTOFFSET; unsigned long val; if( oft==5) { GPBDAT |= (0x0f5); // 所有LED熄灭 // 需要进一步判断是K1还是K2,或是K1、K2被同时按下 val = EINTPEND; if (val (18)) GPBDAT = ~(15); // K1被按下,LED1点亮 if (val (111)) GPBDAT = ~(16); // K2被按下,LED2点亮 if (val (113)) GPBDAT = ~(17); // K3被按下,LED3点亮 if (val (114)) GPBDAT = ~(18); // K4被按下,LED4点亮 } //清中断 if( oft == 5 ) EINTPEND = (18) | (111)| (113)| (114); // EINT8_23合用IRQ5 SRCPND = 1oft; INTPND = 1oft;}
嵌入式系统的中断处理的主要过程是什么?
嵌入式中断处理要根据不同的处理器有着不同的处理方法,不过原理都是一样的。我给你距举例下吧,现在最常用的处理器是ARM,它处理中断的流程如下:
当一个异常出现以后,ARM微处理器会执行以下几步操作: (这些是中断发生时,自动处理的)
1、将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量,这样,异常处理程序就不需要确定异常是从何种状态进入的。例如:在软件中断异常SWI,指令MOV PC,R14_svc总是返回到下一条指令,不管SWI是在ARM状态执行,还是在Thumb状态执行。
2、将CPSR复制到相应的SPSR中。
3、根据异常类型,强制设置CPSR的运行模式位。
4、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
还可以设置中断禁止位,以禁止中断发生。
如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态
从异常返回
异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:
1、将连接寄存器LR的值减去相应的偏移量后送到PC中。
2、将SPSR复制回CPSR中。
3、若在进入异常处理时设置了中断禁止位,要在此清除。
可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。
这些都是嵌入式的基础知识,你要多巩固下就好了。
关于如何学习嵌入式,我刚才看到一篇很不错的文章,是一个专科生介绍自己如何自学嵌入式,并找到嵌入式的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。
专科生学嵌入式到找到工作的前前后后
先做个自我介绍,我07年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了。09年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学了。
退学后我也迷茫,大专都没有毕业,我真的不知道我能干什么,我在纠结着我能做什么。所以辍学后我一段时间,我想去找工作,因为我比较沉默寡言,不是很会说话,我不适合去应聘做业务。我想应聘做技术的,可是处处碰壁。
一次偶然的机会,我才听到嵌入式这个行业。那天我去新华书店,在计算机分类那边想找本书学习。后来有个女孩子走过来,问我是不是读计算机的,有没有兴趣学习嵌入式,然后给我介绍了一下嵌入式现在的火热情况,告诉我学嵌入式多么的有前景,给我了一份传单,嵌入式培训的广告。听了她的介绍,我心里痒痒的,确实我很想去学会一门自己的技术,靠自己的双手吃饭。
回家后,我就上网查了下嵌入式,确实是当今比较热门的行业,也是比较好找工作的,工资也是相对比较高。我就下决心想学嵌入式了。于是我去找嵌入式培训的相关信息,说真的,我也很迷茫,我不知道培训是否真的能像他们宣传的那样好,所以我就想了解一段时间再做打算。
后来,我在百度知道看到一篇让我很鼓舞的文章《如何学习嵌入式》,是一个嵌入式高手介绍没有基础的朋友怎么自学入门学嵌入式,文章写的很好,包含了如何学习,该怎么学习。他提到一个方法就是看视频,因为看书实在太枯燥和费解的,很多我们也看不懂。这点我真的很认同,我自己看书往往看不了几页。
我在想,为什么别人都能自学成才,我也可以的!我要相信自己,所以我就想自学,如果实在学不会我再去培训。
主意一定,我就去搜索嵌入式的视频,虽然零星找到一些嵌入式的视频,但是都不系统,我是想找一个能够告诉我该怎么学的视频,一套从入门到精通的视频,一个比较完整的资料,最好能有老师教,不懂可以请教的。
后来我又找到一份很好的视频,是在嵌入式学习网推出的一份视频《从零基础开始学嵌入式》,网址: 里面的教程还不错,很完整,可以让我从基础的开始学起。视频不便宜啊,但是我也忍了,毕竟买几本书都要几百了,何况他们还有半年的技术咨询和服务,算值了。
下面介绍下我的学习流程,希望对和我一样完全没有基础的朋友有所帮助。
收到他们寄过来的光盘后,我就开始学习了,由于我没有什么基础,我就从最简单的C语言视频教程学起,话说简单,其实我还是很多不懂的,我只好请教他们,他们还是很热心的,都帮我解决了。C语言我差不多学了一个礼拜,接下来我就学了linux的基本命令,我在他们提供linux虚拟机上都有做练习,敲linux的基本命令,写简单的C语言代码,差不多也就三个礼拜。我每天都在不停的写一些简单的代码,这样一月后我基本掌握了C和linux的基本操作。
接下来我就去学习了人家的视频的培训教程,是整套的,和去参加培训没有多大的区别,这一看就是两个月,学习了ARM的基本原理,学习嵌入式系统的概念,也掌握了嵌入式的环境的一些搭建,对linux也有更深层次的理解了,明白了嵌入式应用到底是怎么做的,但是驱动我只是有一点点的了解,这个相对难一点,我想以后再慢慢啃。
这两个月,除了吃饭睡觉,我几乎都在学习。因为我知道几乎没有基础,比别人差劲,我只能坚持努力着,我不能放弃,我必要要靠自己来养活自己,必须学好这门技术,同时我不懂的就问,这里真的很感谢他们的技术客服对我的任何问题都是耐心的解答,每天都我几乎都有好几个问题问他们,然后我就把不懂的问题总结记下来,这样慢慢积累了一段时间,我发现自己真的有点入门了。
最后的一个月,我就去看关于实践部分的内容,了解嵌入式项目具体的开发流程,需要什么样的知识,我就开始准备这方面的知识,也就是学习这方面的视频,同时他们建议我去找了找一些嵌入式面试的题目,为自己以后找工作做准备。我就到网上找了很多嵌入式的题目,把他们理解的记下来,这样差不多准备了20天左右
我觉得自己差不多入门了,会做一些简单的东西了。我就想去找工作看看,于是我就到51job疯狂的投简历,因为我学历的问题,专科没有毕业,说真的,大公司没有人会要我,所以我投的都是民营的小公司,我希望自己的努力有所回报。没有想过几天过后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比较严格,需要有一年的项目经验,所以我没有被选中。
后来陆续面试了几家公司,终于功夫不负有心人。我终于面试上的,是在闵行的一家民营的企业,公司规模比较小,我的职务是嵌入式linux应用开发,做安防产品的应用的。我想我也比较幸运,经理很看重我的努力,就决定录用我,开的工资是3500一个月,虽然我知道在上海3500只能过温饱的生活,但是我想我足够了。我至少不用每天都要靠父母养,我自己也能养活自己的。我想只要我继续努力,我工资一定会翻倍的。
把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有必要自卑,我们不比别人笨,只要我们肯努力,我们一样会成功。
最后祝愿所有想学嵌入式的朋友更早的入门!
当处理器开始处理异常时,异常的挂起状态如何处理
热门频道
首页
博客
研修院
VIP
APP
问答
下载
社区
推荐频道
活动
招聘
专题
打开CSDN APP
Copyright ? 1999-2020, CSDN.NET, All Rights Reserved
arm
打开APP
ARM异常处理(2):中断的输入和挂起的6种情况分析 原创
2022-12-05 14:14:43
tilblackout
码龄6年
关注
本节将描述中断输入和挂起的分析,这也同样适用于NMI输入,NMI在大多数情况下都将立即执行,除非:已经在执行NMI中断处理程序、由调试器暂停或由于一些严重的系统错误导致芯片锁定。
1、
当一个中断输入时,它将被挂起,然后被置于等待处理器处理请求的状态,此时即使失能该中断源,挂起的中断最后仍会触发其相应的中断处理程序,而一旦中断处理程序开始执行,该挂起状态将被自动清除。
在这里插入图片描述
2、
但是,如果挂起状态在处理器开始响应挂起中断之前被清除(例如,因为PRIMASK/FAULTMASK被设置为1,中断没有被立即执行,且挂起状态需要通过软件写NVIC中断控制寄存器来清除),此时中断是可以被取消的。
在这里插入图片描述
中断的挂起状态可以通过访问NVIC寄存器来读写,所以用户可以清除一个挂起的中断标志位或者用软件设置挂起寄存器以挂起一个新的中断。
3、
当处理器开始执行一个中断时,该中断的状态变为active,且挂起的位将被自动清除。同一个中断处理函数在处理的过程中不能嵌套,只有当异常退出(exception exit)将其active状态被清除后,才可以继续响应同一中断。
在这里插入图片描述
4、
如果中断源继续发送中断请求信号,中断将会在终端服务处理函数的最后被再次挂起。
在这里插入图片描述
5、
如果一个中断在被处理之前在中断请求线上产生了多个脉冲,它将被处理一次。
在这里插入图片描述
6、
如果一个中断的请求被取消,然后在中断服务程序中再次被触发,它将再次被挂起
在这里插入图片描述
总结:
即使中断被失能,挂起的中断仍然可能产生
被失能的挂起的中断在后面将其使能时仍然可以被触发
因此,在启用中断之前,检查是否设置了挂起寄存器是很有用的。中断源可能在你启用之前就已经被激活并设置了挂起状态。如果有必要,可以在启用中断之前清除挂起状态。
点击阅读全文
打开CSDN,阅读体验更佳
【RTOS】ARM Cortex-M异常处理过程
Cortex-M3与Cortex-M4 1. 处理器输入、输出和外设访问 一般来说,外设在使用前需要初始化,一般包括以下几步: 如果需要,设置时钟控制回路使能连接到外设和对应引脚的时钟。许多现代微控制器允许对时钟信号分布的精细调节,如使能/禁止到每个外设的时钟连接以节省功耗。外设时钟一般是默认关闭的,需要在编程外设前使能时钟。有些情况下,可能还需要使能外设总线系统的时钟。 有些情况下,可能还需要配置I/O引脚的操作模式。大多数微控制器都有复用的I/O引脚,可用于多种目的。为了使用外设,配置I/O引脚以匹配
继续访问
ARM:ARM中断异常的处理流程
裸板开发中,使用的就是现在的框架: ……………………………………………………………… main (void) { // 一系列的初始化 while (1) { // 周期性的事物 } } ↓+↓ 异常处理 (异步事件的处理) ………………………
继续访问
ARM V8A体系结构-第十章 AArch64异常处理
概述 严格地说,中断是指中断软件执行的流程。然而,在ARM术语中,这通常称为异常。异常是指需要特权级(异常处理程序)执行某些操作以确保系统顺利运行的条件或系统事件。每个异常都有一个相关的异常处理程序。一旦异常得到处理,特权级软件会将core恢复到处理异常前的位置,以继续处理它正在做的事情。 存在的异常类型如下: 中断: 有两种类型的中断称为IRQ和FIQ。FIQ的优先级高于IRQ。 ...
继续访问
最新发布 ARM异常处理(1):异常类型、优先级分组和异常向量表
Cortex-M3提供了一个功能丰富的异常体系结构,它支持很多系统异常和外部中断。异常编号1-15表示系统异常,16及以上表示外部中断输入。大多数异常具有可编程优先级,少数具有固定优先级。当前正在运行的异常可以通过特殊寄存器或者中的字段来查看。当一个使能的异常产生但不能被立即执行的时候(比如有一个更高优先级的中断服务程序正在处理),它会被挂起。
继续访问
ARM中断和异常
中断的定义:在CPU在执行一个程序时,对系统发生的某个事情,作出一种反应:CPU暂停正在执行的程序,保护现场后自动转去处理相应的事件,处理完该事情,到会返回刚才的位置。 例子:如读盘,盘有问题,无法读,产生中断,解决后,程序恢复,软件错误也会中断。 特点: 1) 中断随机的,提高实时性。 2) 中断是可恢复的 3) 中断是自动进行处理的 中断源
继续访问
ARM 之六 Cortex-M 内核中断/异常系统、中断优先级/嵌套 详解
问题 最近在使用STM32F3芯片的时候,遇到这样一个问题:如果外部中断来的频率足够快,上一个中断没有处理完成,新来的中断如何处理? 在调试时,发现有中断有 挂起、激活、失能等状态,考虑这些状态都是干啥用的呢!他们是Cortex-M核所共有的,因此这里不针对与具体用的STM32 MCU,直接上升到 Cortex-M内核来了解一下! 简介 ??中断(也称为“异常”)是微控制器一个很常见的特性。中断一......
继续访问
Linux操作系统原理与应用05:中断和异常
目录 1. 中断概述 1.1 什么是中断 1.2 为什么引入中断 1.3 中断的分类 1.4 CPU什么时候响应中断 2. 中断控制器简介 2.1 中断的C/S模型结构 2.2 作为中介的中断控制器 2.3 高级可编程中断控制器(APIC) 2.4 机制与策略分离的中断机制 3. Linux内核中断子系统框架 4. 中断向量与中断描述符表 4.1 中断向量 4.1.1 中断向量的概念 4.1.2 中断向量的分配 4.2 中断描述符表(IDT) 4.2.1 实模式中断向量表
继续访问
ARM 处理器 ~ 中断与异常
教材:嵌入式系统及应用,罗蕾、李允、陈丽蓉等,电子工业出版社 中断与异常定义ARM 中的工作模式除 User 和 System 外,均为异常模式,这里的异常是广义的,包含以下三类情况外部中断(外部中断)由于 CPU 外部的原因而改变程序执行流程,属于异步事件,可以屏蔽软件中断(自陷) 通过处理器拥有的软件指令,可预期地使正在执行的程序改变执行流程,以执行特定的程序 显式的事件,无条件执行 属同步事
继续访问
嵌入式-ARM-学习总结(7):按键与中断
嵌入式-ARM-学习总结(7):按键与中断一、按键1.S5PV210的按键2.按键的2中相应方法:轮询方式和中断方式3.按键对应的GPIO模式设置4.轮询方式处理按键的程序流程5.代码编写6.按键消抖二、中断1.什么是中断2.为什么需要中断3.异常向量表4.异常和中断的区别和联系5.为什么中断处理要先在汇编中进行6.中断的基本过程7.S5PV210中断处理的主要寄存器三、中断代码(1)绑定中断异常向量表(2)初始化中断控制器的基本寄存器(3)绑定我们写的isr到VICnVECTADDR寄存器(4)使能中断(
继续访问
异常和中断
一、异常和中断简介 中断一般由硬件(如外设和外部输入引脚)产生的事件,它会引起程序流偏离正常的流程(如给外设提供服务)。当外设或硬件需要处理器的服务时,一般会出现下面的流程: ①外设确认到处理器的中断请求。 ②处理器暂停当前执行的任务 ③处理器执行外设的ISR,若有必要可以选择由软件清除中断请求。 ④处理器继续执行之前暂停的任务。 所有的cortex-m处理器都会提供一个用于中断处理的嵌套向量中断控制器(NVIC)。除了中断请求,还有其他需要服务的事件,将其称为异常。按照ARM的说法,中断也是一种异常。co
继续访问
十.ARM裸机学习之中断系统2(S5PV210按键外部中断及中断处理)
一.轮询方式处理按键 参考 E:\Linux\8.key_open 二.中断方式处理按键 2017/11/21 23:30 参考: 1.异常向量表分析: (1)、复位(
继续访问
ARM之按键K2触发中断,并在超级终端上打印‘S‘
ARM之按键K2触发中断,并在超级终端上打印'S'
继续访问
嵌入式RTOS---异常和中断处理流程
ARM中断体系 以S3C2440讲解 1 中断体系硬件原理 中断处理分为统一的中断处理和独立的中断处理; 1.1 统一的异常和中断处理 1.1.1 ARM的异常模式 所谓异常,指的是中止了程序正常的执行过程而不得不完成一些特殊的工作(异常工作)。 中断也是一种异常,中断包括由外部硬件产生的外部中断和内部硬件产生的内部中断。 异常分为同步异常(SWI 软件指令产生的异常)和异步异...
继续访问
ARM V8 程序指南—— 第十章 AArch64 异常处理(翻译)
第十章 AArch64 异常处理 严格来说,中断是说软件执行流程的东西,但是,在arm术语中,统称为异常。异常是需要特权软件(异常处理程序)执行某些操作以确保系统顺利运行的条件或系统事件。每种异常类型都有一个异常处理程序。一旦处理完异常,特权软件就会让内核准备好恢复它在处理异常之前所做的任何事情。 下面介绍了几种异常: Interrupt: 一般有两种,分为irq 和 fiq。fiq的优先级高于IRQ,这两种异常通常都与内核上的输入引脚相关。假设中断未被禁用,外部硬件断言了一个中断请求并在当前指令完成执行时
继续访问
ARM 之十二 Cortex-M 内核异常处理、异常定位方法、在线调试、Keil MDK-ARM 的使用
??在 ARM 平台上开发,开发工具的选择其实并不是很多,基本可以分为三大类:Keil MDK-ARM、IAR for ARM、GCC for ARM 系,其中用的比较多的基本就是 Keil MDK-ARM、IAR for ARM 这俩。而 GCC for ARM 系的 IDE 有很多,但是他们统一都是使用 GCC for ARM 作为编译器构建套件,IDE 都是各家自定义的。例如,ST 有、SEGGER 有 Embedded Studio。 构建(Build) ??从源文件到可执行文件,需要经过预处理、编
继续访问
【Linux】ARM篇八--中断实验
ARM篇8--中断实验一、前言二、准备工作三、CPU与硬件的交互方式四、轮询方式实现按键实验1、电路原图2、按键的实现五、RAM中断实现原理六、GPIO中断1、GPX1CON2、EXT_INT41CON寄存器3、EXT_INT41_MASK寄存器七、中断控制器1、ICDDCR寄存器2、ICDISER寄存器3、ICDIPTR寄存器八、中断的实现1、ICCIAR寄存器2、EXT_INT41_PEND寄存器3、ICCEOIR寄存器九、完整代码与烧入1、中断完整代码2、程序烧入步骤十、实验现象1、轮询按键实验现象.
继续访问
【ARM】arm异常中断处理知识点
ARM处理器7种类型异常 按优先级从高到低的排列如下: 复位异常(Reset) 数据异常(Date Abort) 快速中断异常(FIQ) 外部中断异常(IRQ) 预取异常(Prefetch Abort) 软件中断异常(SWI) 未定义指令异常(Underfined instruction) 当异常发生时 处理器会把...
继续访问
arm裸机的按键设置和中断
按键的物理特性 **(1)、平时没人按的时候,弹簧把按键按钮弹开。此时内部断开的。 (2)、有人按下的时候,手的力量克服弹簧的弹力,将按钮按下,此时内部保持接通(闭合)状态;如果手拿开,则弹簧作用下按钮又弹开,同时内部又断开。 (3)、一般的按键都有4个引脚,这4个引脚成2对:其中一对是常开触点(像上面描述的不按则断开,按下则闭合);一对是常闭触点(平时不按时是闭合的,按下后是断开的)** 按键的电学原理(结合原理图分析) **(1)硬件接法: SW5:GPH0_2 SW6:GPH0_3 SW78
继续访问
ARM接口实验—中断实验
ARM—中断实验
继续访问
【ARM】中断控制 ——第六篇
中断可以理解为当系统出现了意外情况,可以自动停止当前正在执行的程序,并转入执行新情况的程序中进行执行,处理完后会回到原被暂停的程序继续执行。
继续访问
arm
写评论
评论
收藏
点赞
踩
分享
打开CSDN APP阅读体验更佳
嵌入式之单片机(四):单片机外部中断
姓名:郝津锐??? 学号:19020100179??? 学院:电子工程学院
转自:
【嵌牛导读】本文探讨了单片机中的外部中断原理与常见方式
【嵌牛鼻子】单片机外部中断
【嵌牛提问】单片机的外部中断是什么,有什么作用
【嵌牛正文】
单片机在自主运行时一般是在执行一个死循环程序,在没有外界干预(输入信号)时它基本处于一个封闭状态,例如电子时钟会按时、分、秒的规律自主运行并通过输出设备把时间显示出来。在不需要对它进行调校时它不需要外部干预,自主封闭地运行。如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。但事情往往不会如此简单,在时钟刚刚上电或时钟需要重新校准.甚至时钟被带到不同时区的时候,就需要重新对时钟进行调校,这时就要求时钟必须具有调校功能。因此单片机系统往往又不会是一个单纯的封闭系统.它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原因。
要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置两个触发寄存器,同时在中断屏蔽寄存器的相应位写1允许中断请求。当外部中断线上发生了期待的边沿时,将产生一个中断请求,对应的挂起位也随之被置l。在挂起寄存器的对应位写1,将清除该中断请求。如果需要产生事件,必须先配置好并使能事件线。根据需要的边沿检测通过设置两个触发寄存器,同时在事件屏蔽寄存器的相应位写1允许事件请求。当事件线上发生了需要的边沿时,将产生一个事件请求脉冲,对应的挂起位不被置1。通过在软件中断/事件寄存器写1,也可以通过软件产生中断/事件请求。
STC89C5X系列单片机提供了4个外部中断:外部中断O(INTO)、外部中断1(INT1)、外部中断2(INT2)、外部中断3(INT3)。
51单片机的外部中断有两种模式:电平触发模式和跳变沿触发模式
当选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断;当选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。
这两者之间的区别在于电平触发模式时,中断标志寄存器不锁存电平中断请求信号,单片机把每个周期的S5P2采样外部中断口的电平逻辑直接赋值到中断标志寄存器,标志寄存器对于请求信号来说是透明的,这样当中断请求被阻塞而没有得到及时响应时,将被丢失。
换言之,就是要使电平触发的中断被CPU响应并执行,必须保证外部中断源口线的低电平维持到中断被执行为止。因此当CPU正在执行同级中断或更高级中断期间,产生的外部中断源(产生低电平)如果在该中断执行完毕之前撤销(变为高电平)了,那么将得不到响应,就如同没发生一样。同样,当CPU在执行不可被中断的指令(如RETI)时,产生的电平触发中断如果时间太短,也得不到执行。
而使用边沿触发方式时,中断标志寄存器锁存了中断请求。中断口线上一个从高到低的跳变将记录在标志寄存器中,直到CPU响应并转向该中断服务程序时,由硬件自动清除。
因此当CPU正在执行同级中断(甚至是外部中断本身)或高级中断时,产生的外部中断(负跳变)同样将被记录在中断标志寄存器中。在该中断退出后,将被响应执行。如果你不希望这样,必须在中断退出之前,手工清除外部中断标志。
嵌入式中的“中断”什么原理,如何使用?
1.中断基本概念
什么是中断?先打个比方。当一个经理正处理文件时,电话铃响了(中断请求),不得不在文件上做一个记号(返回地址),暂停工作,去接电话(中断),并指示“按第二方案办”(调中断服务程序),然后,再静下心来(恢复中断前状态),接着处理文件……。计算机科学家观察了类似实例,“外师物化,内得心源”,借用了这些思想、处理方式和名称,研制了一系列中断服务程序及其调度系统。
中断是cpu处理外部突发事件的一个重要技术。它能使cpu在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行cpu原来的工作。引起中断的原因或者说发出中断请求的来源叫做中断源。根据中断源的不同,可以把中断分为硬件中断和软件中断两大类,而硬件中断又可以分为外部中断和内部中断
两类。
外部中断一般是指由计算机外设发出的中断请求,如:键盘中断、打印机中断、定时器中断等。外部中断是可以屏蔽的中断,也就是说,利用中断控制器可以屏蔽这些外部设备
的中断请求。
内部中断是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算
溢出、单步中断等)所引起的中断。内部中断是不可屏蔽的中断。
软件中断其实并不是真正的中断,它们只是可被调用执行的一般程序。例如:rom
bios中的各种外部设备管理中断服务程序(键盘管理中断、显示器管理中断、打印机管理
中断等,)以及dos的系统功能调用(int
21h)等都是软件中断。
cpu为了处理并发的中断请求,规定了中断的优先权,中断优先权由高到低的顺序是:
(1)除法错、溢出中断、软件中断
(2)不可屏蔽中断
(3)可屏蔽中断
(4)单步中断。