历史上的今天
返回首页

历史上的今天

今天是:2025年08月13日(星期三)

正在发生

2021年08月13日 | 1.5.5_按键中断程序示例_概述与初始化

2021-08-13 来源:eefocus

中断的处理流程与异常的处理流程类似,当中断发生时,以下操作将由硬件执行:


保存被中断的下一条指令地址到LR_异常,在ARM State下保存的是PC+8,在Thumb State下保存的是PC+4;

把CPSR存入SPSR_异常;

修改CPSR的[M4:M0]进入异常模式;

跳到向量表。

在这里插入图片描述

但中断是由中断源产生的,这与其他异常稍有差别。比如,中断的触发方式有很多种,当中断发生时,我们是通过中断标志位来判断是哪种中断发生了;中断处理完成后,需要清楚对应的中断标志位来表示已经处理该中断请求。


与异常类似(中断也属于一种异常),中断的退出流程大致如下:


将LR_异常减去offset,得到的值赋给PC(offset的取值如下表)。

CPSR = SPSR_异常,将SPSR_异常的值赋回给CPSR。

如果有中断标志位的话,清除中断标志位。

在这里插入图片描述

在这里插入图片描述

如上图所示,中断的处理流程主要有三步:


中断初始化,主要是a.设置中断,让它能够发出中断信号;b.设置中断控制器,让它能够发出中断给CPU;c.设置CPU,CPSR有I位,它是总开关,我们需要把它清零以使能中断,让CPU可以处理中断。

处理中断,处理时要分辨中断源。

处理完中断,要清中断。

在这里插入图片描述

其中,中断初始化主要是:

中断源:设置按键为中断引脚(这里我们设置为双边沿触发)

配置中断控制器

设置CPSR,使能中断(将CPSR的I为清0)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

通过上图,我们知道,按键S2和S3接到分别接到GPF0和GPF2,同理,S4和S5分别是GPG3和GPG11。所以把GPF0和GPF2设置为0b10。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

首先,配置GPIO为中断引脚,然后设置中断触发方式为双边沿触发, 需要注意的一点是,eint11和19的中断信号有可能被屏蔽,即无法送达中断控制器,这里要将它们设置为enable interrupt,eint0和eint2则无法被屏蔽,这可以通过中断控制器的流程图等相关信息获取。 配置函数如下:

在这里插入图片描述

设置好中断源,接着要设置中断控制器,下图是S3C2440的中断流程示意图。

在这里插入图片描述

上图中可以看到,中断源被分为两类,一类叫做Sources,一类叫做Sub Sources,它们的区别是Sub Sources的中段信号传导SRCPND之前,还要经过SUBSRCPND和SUBMASK,而Sources则可以直达SRCPND。


下图可以看到,EINT0,EINT2,EINT11和EINT19都是Source,其中EINT11和19是通过同一条中断线,EINT8~23。

在这里插入图片描述

还有一些则是Sub Source。

在这里插入图片描述

它的信号进来,会经过SRCPND(用来显示哪个中断产生了, 需要清除对应位),MASK(用来屏蔽中断, 1-masked),Priority(多个中断发生时,通过优先级来选择优先响应哪个中断),INTPND(用来显示当前优先级最高的、正在发生的中断, 需要清除对应位。也可以INTOFFSET来找到INTPND中哪一位被设置为1,这个会由硬件清0)。


所以,SRCPND和INTPND是在中断处理的过程中判断要处理哪个中断的,这不需要设置,我们只需要设置MASK将中断服务打开就可以了。

在这里插入图片描述

推荐阅读

史海拾趣

Cicoil公司的发展小趣事

随着公司业务的不断拓展,Cicoil开始与大型计算机制造商IBM展开合作。他们为IBM的大型计算机提供定制的扁平电缆解决方案,以其出色的性能和可靠性赢得了IBM的信任。这一合作不仅提升了Cicoil在业界的地位,也为其带来了稳定的业务增长和更广阔的发展空间。

EPIC公司的发展小趣事

随着公司的发展,Epic Games开始通过收购和投资来扩展其业务范围。2007年8月20日,Epic Games收购了一家位于波兰的游戏开发商People Can Fly,并成为其第一大股东。这次收购不仅为Epic Games带来了更多的开发资源,也使其在游戏开发领域的实力得到了进一步提升。此外,Epic Games还积极投资其他有潜力的游戏开发商和团队,以推动整个游戏行业的创新和发展。

ATOP_Technologies公司的发展小趣事

随着产品线的不断丰富和技术实力的提升,ATOP Technologies开始将目光投向更广阔的市场。公司积极参与国内外各类行业展会和交流活动,加强与同行和客户的交流与合作。同时,ATOP Technologies还积极开展国际合作,与多个国家的知名企业建立了战略合作关系,共同推动工业自动化领域的发展。

EMI Filter Company公司的发展小趣事

AVX公司作为电子元件行业的佼佼者,一直在寻求技术的突破和创新。在EMI滤波器领域,AVX不走寻常路,他们专注于研发高性能的陶瓷EMI滤波器。这种滤波器利用陶瓷材料的特性,能够在高温、高频等恶劣环境下保持稳定的性能。AVX的陶瓷EMI滤波器在市场上独树一帜,深受汽车、航空航天等行业的青睐。

AUREL公司的发展小趣事

在国内市场站稳脚跟后,AUREL公司开始积极拓展国际市场。公司积极参加国际电子展会和技术交流活动,与海外企业建立了广泛的合作关系。同时,公司还针对不同国家和地区的市场需求,推出了定制化的产品和服务。这些举措使得AUREL公司的品牌影响力逐渐扩大,国际市场份额不断攀升。

FTDI [Future Technology Devices International Ltd.]公司的发展小趣事

在快速发展的电子行业中,FTDI始终保持着高度的警惕性和创新精神。面对假冒芯片的威胁,公司采取了强有力的打击措施以维护用户权益和市场口碑。同时,为了更好地满足市场需求,FTDI不断加强技术团队建设,引进经验丰富的工程师和有潜力的大学毕业生,不断提升自身的研发实力和技术水平。此外,公司还密切关注市场动态和技术趋势,以便及时调整战略方向并推出具有竞争力的新产品。通过这些努力,FTDI在电子行业中持续保持着领先地位。

问答坊 | AI 解惑

关于VXWORKS任务

建立一个可以下载的工程,然后添加如下代码,就是自带的例子,关于例子程序有几点疑问, 有高手帮忙讲解下,谢谢了 1.程序入口在哪里?从progStart开始执行,在其中的return(OK)返回了,接下来执行什么?其他几个任务的代码怎么执行? 还是在&nb ...…

查看全部问答>

socket数据接收处理问题C#

问题描述: 在“private void btnDiagnosticClicked(object sender, EventArgs e)”方法中 执行“RecData = MainMenu.socketHH.GetRecData();”“RecData”一直接收为空。 而在“private void ReceiveCallback(IAsyncResult ar)”方法中 “recB ...…

查看全部问答>

arm linux驱动编写中,中断服务程序中可以进行ioremap吗?

发现只要在中断服务程序中执行到ioremap函数就会报错 nable to handle kernel NULL pointer dereference at virtual address 00000000 pgd = c355c000 [00000000] *pgd=338e5031, *pte=00000000, *ppte=00000000 Internal error: Oops: 817 [#1 ...…

查看全部问答>

TLC116

  该TLC116系列可控硅采。采用优质玻璃钝化PNPN技术。 TLC116的绝对额定值为:(1)符号是IT(RMS),这个参数是有效值(360°导通状态电流传导角等于40℃)组合成的Tl型、价值3,单位是A;(2)符号是IT(RMS),这个参数是有效值(360°导通状态电流传 ...…

查看全部问答>

HDL 实践

经过我仔细测试,发现如下问题;   ALTERA 的Quartus 9.0 以及以下版本不支持SYSTEM C; 但Quartus 9.1 支持SYSTEM C 语法。学习HDL的几点重要提示: 1.了解HDL的可综合性问题:HDL有两种用途:系统仿真和硬件实现。 如果程序只用于仿真,那么 ...…

查看全部问答>

STR710中断切换求助

做UC/os移植,做时钟节拍,在中断中,只有执行OSIntExit功能,系统就无论如何也进不了TIME1的时间中断了,但软中断可以执行。弄到头痛了都不知什么原因,郁闷中…… void T1TIMI_IRQHandler(void) {     TIM_FlagClear ( TIM1 , ...…

查看全部问答>

关于应用MSP430F449设计一个电流表的量程问题

我们在利用F449进行设计一个电流表,在对固定电阻取电压时考虑以下几个问题: 1.F449的供电电压是9v(我是说那个变压器),那么对于单片机进行AD转换时的驱动电压是多少?也就是我所能得到的电压的范围是多少?? 2.F449在进行AD转换过程中,所 ...…

查看全部问答>

求助

#ifndef    MSP430XF449_H #include <msp430x44x.h> #endif 请问这几句话是什么意思,常见的不是 #ifndef   **** #define  **** #endif 吗?…

查看全部问答>

51单片机

我用lcd1602和ds1302写一个时钟程序,想用红外遥控调时,想让它闪烁,不过检测到红外信号后不闪烁。有哪位高手遇到同样的问题,分享一下解决方案,不胜感激!…

查看全部问答>

IAR-CCS和mspgcc对中断处理

本文简明扼要的描述了这三种编译器对中断的处理方法,及进行移植时所要进行的代码更改方法。 凡是下载者,请留言,谢谢…

查看全部问答>