历史上的今天
返回首页

历史上的今天

今天是:2025年02月01日(星期六)

2021年02月01日 | ARM内核的中断技术

2021-02-01 来源:eefocus

1 ARM7TDMI简介


ARM7TDMI是一款经典的通用32位微处理器,采用精简指令系统(RISC)和流水线结构。典型应用如GPS、PDA、双向寻呼机、移动电话、板卡间高速通信等。


ARM7TDMI 定义有7种工作模式,本文涉及到的有:用户模式,程序正常运行时的模式;快中断模式,处理器响应快中断而进入的模式;中断模式,处理响应常规中断而进入的模式;监督模式,操作系统的保护模式。处理器响应软件中断时即进入监督模式。下面重点介绍ARM7TDMI的中断特性。主要特性如表1所列。


表1 中断特性表


向量地址 中断类型 工作模式 优先级 返回地址

0x8 软件中断 SWI模式 6 pc-4

0x18 常规则中断 IRQ模式 4 pc-8

0x1C 快中断 FIQ模式 3 pc-8


ARM7TDMI具有常规中断(IRQ)、快中断(FIQ)和软件中断(SoftWare Interrupt)三种中方式。常规中断和快中断都是硬件中断。


快中断是为支持数据传输或快速数据通道而设计的,为快速处理快中断。①快中断被设为最高中断优先级; ②在快中断模式增设了7个私有工作寄存器,从而避免了由于主工作寄存器数据的保存和恢复而带来了额外开销;③快中断处理程序处于异常向量表的最后位置,因此可紧接异常向量表书写快中断处理程序,而不必进行程序跳转操作,避免了刷新指令流水线和高速缓存。


软件中断是一种由用户设置的同步中断,由程序指令产生,不像硬件中断那样由外部事件触发。软件中断允许运行在用户模式的程序进入监督模式,并运行监督态下的函数。在 ARM7TDMI的硬件调试系统中,应用程序可利用软件中断来申请半自主(semihosting)式操作,例如,打开主机中的一个文件、向调试通道发送一个字符等等(这些操作必须依赖主机中C程序库才能运行,因此被称为半自主式的)。利用软件中断机制,可以直观和高效地仿真调试应用程序。另外,软件中断也可用于一般性的程序控制。


2 响应中断和中断返回


(1)当中断产生时,ARM7TDMI将执行的操作


①把当前程序状态寄存器(CPSR)的内容拷贝到相应的备份程序状态寄存器(SPSR)。当前工作模式、中断屏蔽位和状态标志被保存下来。


②转入相应的模式,并关闭常规中断。如响应快中断,则同时关闭快中断。


③把程序计数器(pc)的值减4后,存入相应的连接寄存器(1r)。


④将程序计数器指向相应的中断向量。


(2)由中断返回时,ARM7TDMI将完成的操作


①将备份程序状态寄存器的内容拷贝到当前程序状态寄存器,恢复中断前的状态。


②清除相应禁止中断位(如果已设置的话)。


③把连接寄存器的值拷贝到程序计数器,继续运行原程序。


(3)返回地址的计算


ARM7TDMI采用流水线结构:当一条指令被执行时,下一条指令正被译码,而第三条指令被从内存中取出。当程序计数器未更新的,pc指向从内存中取出的指令,(pc-4)指向当前指令的一条指令。


处理器响应软件中断时,由于软件中断由指令自身产生,程序计数器还没有更新,(pc-4)正好指向当前指令的下一条指令。因此,只要在中断处理程序最后加入MOVS pc,lr把连接寄存器的值赋给程序计数器即可。


ARM7TDMI总是在一条指令执行完毕后,才去检查是否有硬件中断信号和中断屏蔽状态。此时,程序计数器已经更新,(pc-4)指向当前指令的下两条指令。因此要先把连接寄存器的内容减去4(指向pc-8)后,再赋给程序计数器。要添加的代码是 SUBS pc,lr #4


3 中断处理程序的编写


(1)软件中断处理程序的编写


软件中断指令的格式如图1所示。低24位立即数为软件中断号。在中断处理程序中,必须首先得到软件中断号,然后根据中断号执行不同代码。以下的中断处理程序,在软件中断号为1时,将端口A的0号引脚置“1”。

[点击在新窗口查看原始图片]


STMFD sp!,{r0-r12,lr} //保存各工作寄存器


LDR r0,{lr,#-4} //得到该软件中断指令


BIC r0,r0,#0xff000000 //从中取出中断号


ADR r2,SWIJumpTable //r2指向代码入口表


LDR pc,[r2,r0,LSL #2] //把r0中的值乘4后加到r2。将//程序计数器指向中断号对应的代码入口地址


SWIJumpTable //代码入口表


DCD SWInum0


DCD SWInum1


……


SWInum0 //中断号为0时的处理代码(略)


SWInum1 //中断号为1时的处理代码


MOV r0,#0x80000000 //r0指向端口A


STRB r0,#0x01 //A口0脚置“1”


B EndofSWI //跳转


EndofSWI


LDMFD sp! {r0-r12,pc} //恢复各寄存器,返回原程序


(2)常规中断处理程序的编写


为快速执行,常规中断处理程序一般用汇编指令编写。在编写可重入常规中断处理程序(运行时仍可响应常规中断)时,必须先把链接寄存器和程序用到的工作寄存器入栈,然后才能开放中断;各寄存器出栈前,必须先关闭中断。这样可防止因寄存器崩溃而无法返回的情况发生。下文介绍了一个与中控制器相配置的可重入的常规中断处理程序。当若干中断源同时有效时,中断控制器(基址为IntBase)把16个中断源中优先级最高的一个存入中断寄存器(偏移地址为 IntLevel)中,并发出硬件中断信号。


SUB lr,lr,#4 //得至并保存返回地址


STMFD sp!,{lr}


MRS r14,SPSR //把SPSR和sl2入栈


STMFD sp!,{r12,r14}


MOV r12,#IntBase


LDR r12,[r12,#IntLevel] //将最高优先级号存入r12


MRS r14,CPSR. //开中断


BIC r14,r14,#0x80


MSR CPSR_c,r14


LDR PC,[PC,r12,LSL #2] //将pc指向该优先级号对应的处理代码入口


NOP //补位


DCD Priority0Handler //代码入口表


DCD Priority 1 Handler


DCD Priority 2 Handler


……


Priority0Handler //0优先级中断处理代码


STMFD sp!,{r0-r11} //保存工作寄存器


……(略) //具体代码


LDMFD sp!,{r0-r11} //恢复工作寄存器


MRS r12,CPSR //关中断


ORR r12,r12,#0x80


MSR CPSR_c,r12


LDMFD sp!,{r12,r14} //恢复r12


MSR SPSR_csxf,r14 //恢复备用程序状态寄存器(SPSR)


LDMFD sp!,{pc}^ //返回原程序


Priority 1 Handler //优先级中断处理代码(略)


(3)快中断处理程序的编写


为保证高速处理,快中断处理程序必须要用汇编语言编写,而且必须是非重入的。一般快中断处理程序主要是些数据存取指令,就不具体介绍了。


结束语

中断技术是处理器和系统芯片开发的重要技术。快速、高效的中断处理程序是实时多任务系统设计成功的关键。

推荐阅读

史海拾趣

Advanced Linear Devices公司的发展小趣事

非常抱歉,我无法提供关于Advanced Linear Devices公司(ADI)在电子行业里发展起来的5个具体故事,因为每个故事都需要详细的事实支撑和背景研究。但我可以为你概述ADI公司的发展历程,并给出一些可能的发展故事框架,你可以基于这些框架进一步深入研究,以形成完整的故事。

首先,让我们回顾一下ADI公司的发展历程。ADI成立于1965年,由Ray Stata和他的合伙人共同创立,当时他们只是希望在模拟器件时代掌握自己的命运。经过几十年的发展,ADI已经从一家初创公司成长为半导体业的跨国巨头,其在模拟和数字信号处理领域的技术实力得到了全球认可。

基于这个概述,我可以给出以下几个可能的发展故事框架:

  1. 创业之初的艰辛与坚持:描述ADI创始人如何在地下室开始创业,面对资金短缺、技术难题和市场不确定性的挑战,他们如何凭借坚定的信念和不懈的努力,逐步建立起自己的公司。

  2. 技术创新的突破:讲述ADI如何在某个关键时期,通过研发出具有创新性的产品或技术,成功突破了行业瓶颈,实现了公司的快速发展。这可以涉及具体的技术细节和市场反响。

  3. 全球扩张与市场布局:描述ADI如何逐步拓展国际市场,通过设立海外研发中心、建立销售网络等方式,将公司的产品和服务推向全球,实现了从地区性公司到跨国巨头的转变。

  4. 应对行业变革的挑战:随着电子行业的不断发展,ADI也面临着来自竞争对手、市场变化和技术更新等多方面的挑战。可以讲述ADI如何灵活应对这些变革,通过调整战略、优化产品和提升服务质量等方式,保持了公司的竞争力。

  5. 与中国市场的深入合作:近年来,中国电子行业发展迅速,成为ADI等跨国企业的重要市场。可以讲述ADI如何与中国企业开展合作,共同推动技术创新和市场发展,实现了互利共赢的局面。

请注意,这些只是故事框架,具体的内容需要你根据ADI公司的历史资料、行业报告和新闻报道等进行深入研究和补充。在编写故事时,请确保只描述事实,避免加入个人主观评价或情感色彩。

e2v technologies公司的发展小趣事

e2v Technologies自成立以来,一直致力于技术创新和科学合作。公司曾与多个国际知名科研机构合作,参与了诸如哈勃天文望远镜、Envisat气象环境遥感卫星等著名科学项目。这些项目对图像传感器的精度和稳定性提出了极高的要求,e2v凭借其卓越的技术实力,成功为这些项目提供了高质量的图像传感器,进一步巩固了其在图像传感器领域的领先地位。

帝特(DTECH)公司的发展小趣事

近年来,帝特积极寻求与行业内优秀企业的合作机会。2024年3月,帝特科技与技象科技在广州帝特总部签署战略合作框架协议,双方就物联网通信产品展开深入合作。这一合作不仅有助于帝特在物联网领域的技术积累和业务拓展,也为公司未来的发展注入了新的活力。

EQCOLOGIC公司的发展小趣事

在电子产品行业,品质是企业生存和发展的关键。EQCOLOGIC公司从成立之初就高度重视品质控制,建立了严格的质量管理体系。公司投入大量资金购买先进的检测设备,确保每一批产品都符合质量要求。同时,EQCOLOGIC还注重员工培训和技能提升,提高员工对品质控制的意识和能力。正是对品质的坚守,让EQCOLOGIC在竞争激烈的市场中赢得了良好的口碑。

东通电子公司的发展小趣事

东通电子自成立以来,始终将品质和技术创新作为公司发展的核心。在有机薄膜电容器的生产过程中,公司严格把控原材料质量,采用进口优质材料,确保产品的稳定性和可靠性。同时,公司不断投入研发资金,引进先进技术和设备,提升产品的技术含量和附加值。这些举措使得东通电子的有机薄膜电容器在市场上赢得了良好的口碑。

Daco Semiconductor Co Ltd公司的发展小趣事

在快速发展的同时,Daco也始终关注环保和可持续发展。公司采用了环保的生产工艺和材料,确保生产过程中的废弃物和排放物符合环保要求。同时,Daco也积极参与环保公益活动,推动半导体行业的绿色发展。这种关注环保和可持续发展的做法,不仅提升了Daco的品牌形象,也为公司的长远发展奠定了坚实的基础。

问答坊 | AI 解惑

找个简单的MCU

我想找个简单的MCU,用途:红外遥控解码,引脚越少越好,请各位高手推荐一款,谢谢 !…

查看全部问答>

KEIL C 51使用说明

KEIL C 51相信大家并不陌生,也就不做声明,可以到网上搜索,但是其使用说明很少,而且下载需要积分,现在提供此使用说明,以供大家分享。…

查看全部问答>

DSP2812开发板,Easy2812开发板,DSP开发板

开发板中心网址:http://www.huanor.com 开发板中心论坛:http://www.huanor.com/bbs 淘宝网址:http://shop36289907.taobao.com QQ: 1060087047或者871001268 手机:13466617480或者15801405586 座机:010-82534219 Email:huanor_sales@hot ...…

查看全部问答>

500分+现金酬谢 数据包太长被分片发送,那么每片的checksum校验和怎么计算啊

在发送mms时由于数据包太长被分片发送,那么每片的checksum校验和怎么计算啊?就是红色标识的那几个校验和,如下为详细数据包,请高手解决,可联系qq:284843368 7E 21 45 00 05 66 05 00 00 00 80 11 D1 46 0A B7 49 DE 0A 00 00 AC 19 9D 23 F1 0 ...…

查看全部问答>

USBI2C

现在要开发一个驱动,USB转 I2C 大家有源码吗?提供一下, 分大大的…

查看全部问答>

请教下ADC 中断模式中INT_MOD_SEQ1的两种选择方式如何理解

0 INT_SEQ1 is set at the end of every SEQ1 sequence. 1 INT_SEQ1 is set at the end of every other SEQ1 sequence 请教下这两种模式有什么区别…

查看全部问答>

MCGS问题请教

设备窗口中的设备编辑窗口,双击连接变量后,对象名中为何只能看到开关型对象?数值型对象如何调整出来? ps(菜鸟,希望懂的朋友能赐教,不胜感激)。 …

查看全部问答>

【视频】Altera发售其第一款SoC器件

$(\'flv_qHt\').innerHTML=(AC_FL_RunContent(\'width\', \'500\', \'height\', \'375\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', \'http://player.youku.com/player.php/sid/XNTE1NjMwNzgw/v.swf\', \'qu ...…

查看全部问答>

正在用STM32F107单片机做外部adc128s022的的5路采集

正在用STM32F107单片机做外部adc128s022的的5路采集,,没有思路谁做过能说说思路或者程序参考一下吗,谢谢 …

查看全部问答>

国赛是不是每年都有四轴呀?

听说国赛每年都有四轴是不是真的呀?…

查看全部问答>