历史上的今天
返回首页

历史上的今天

今天是:2025年01月06日(星期一)

正在发生

2020年01月06日 | ATMEL精妙的IRQ中断处理过程

2020-01-06 来源:eefocus

A: 从栈地址开始,栈顶为AT91SAM7S64的16K片内RAM尽头0x00204000
IRQ_STACK_SIZE = 3*8*4
FIQ_STACK_SIZE = 0x004
ABT_STACK_SIZE = 0x004
UND_STACK_SIZE = 0x004
SVC_STACK_SIZE = 0x800
SYS_STACK_SIZE = 0x400

irq栈为什么用3*8*4=96B呢?因为irq最多8级嵌套,ARM字长4B,而3,是由于每次进栈均破坏了3个寄存器r0、spsr、lr,所以需要压栈保存的也就是3。计算十分精准,没有一个字浪费,这是AT第一牛X的地方。

当irq发生时,下列操作处理器自动完成:
1。r14(irq)=返回地址
2。spsr(irq)=cpsr(中断发生前的模式)
3。改cpsr,成模式为irq,禁止irq中断。
4。设pc,跳转到0x00000018去

下面看中断0x00000018指向的irq_handle代码:

;因为要继续调用函数,lr会被冲掉,所以压irq栈
sub lr,lr,#4
stmfd sp!,{lr}

;将r0和spsr压irq栈,因为下面用到r0,spsr
mrs r14,spsr
stmfd sp!,{r0,r14}

;写IVR,支持保护模式,普通模式无效
;释放NIRQ,清除保护模式下中断源
ldr r14,=AT91C_BASE_AIC
ldr r0,[r14,#AIC_IVR]
str r14,[r14, #AIC_IVR]

;允许中断嵌套,由irq模式切换入svc模式
msr cpsr_c, #ARM_MODE_SVC

;保存scratch和被使用到的寄存器、lr入svc堆栈
stmfd sp!, {r1-r3, r12, r14}

;跳转到AIC_IVR指向的中断服务程序地址
mov r14,pc
bx r0

;恢复scratch、被用到的寄存器、lr
ldmia sp!,{r1-r3, r12, r14}

;禁止irq中断嵌套,由svc切换到irq模式。
msr cpsr_c,#I_BIT | ARM_MODE_IRQ

;写AIC_EOICR
ldr r14,=AT91C_BASE_AIC
str r14,[r14, #AIC_EOICR]

;恢复spsr、r0
ldmia sp!,{r0, r14}
msr spsr_cxsf, r14

;中断返回
ldmia sp!, {pc}^

以上就是全部,让我惊叹的是如上做法支持了中断嵌套,想了想,自己以前搞的东西还真是全部回避回去了,也就是说,以前各个中断并没有优先级区分,进了中断就关门i->I。中断服务程序执行完了再打开,优点是简单明了,缺点是中断服务程序必须迅速处理完.

推荐阅读

史海拾趣

Apex [Apex Microtechnology]公司的发展小趣事

Apex Microtechnology一直致力于开发在性能、质量和可靠性方面引领行业的产品。通过不断创新和研发,公司成功推出了多款具有竞争力的功率模拟产品,为全球客户提供高效的解决方案。同时,Apex Microtechnology也积极拓展全球市场,与众多知名企业建立了合作关系,进一步提升了其在电子行业的影响力。

EMBEST公司的发展小趣事

随着国内市场的逐步稳固,EMBEST开始寻求更广阔的发展空间。XXXX年,EMBEST的开发工具成功进入国际市场,并获得了多家芯片公司的认可,成为他们的第三方工具伙伴。这一举措不仅提升了EMBEST的品牌影响力,也为其带来了更多的商业机会。EMBEST凭借过硬的技术实力和优质的服务,逐渐在国际市场上崭露头角。

FSP [FSP TECHNOLOGY INC.]公司的发展小趣事

EMBEST公司成立于XXXX年,早期便专注于ARM嵌入式软件的开发。在XXXX年,EMBEST发布了国内首个具有自主知识产权的ARM嵌入式软件开发工具Embest IDE For ARM,这一里程碑式的产品不仅填补了国内市场的空白,也为EMBEST在嵌入式领域的地位奠定了基础。通过持续的创新和研发,EMBEST逐步建立了自己的技术壁垒,为公司的长远发展奠定了坚实基础。

Bharat Electronics Ltd公司的发展小趣事

Bharat Electronics Ltd(以下简称BEL)的创立可追溯到印度硅谷班加罗尔,那里不仅是科技创新的摇篮,也是BEL扎根生长的沃土。自1954年起,BEL便在飞利浦和大盾的支持下成立,初期主要生产ECC81、ECC82、ECC83、EL34等电子管,为国防事业提供关键技术支持。其成立之初便与印度国防部紧密合作,成为印度军工电子领域的领军企业,为国家的国防安全奠定了坚实的基础。

德索五金(dosinconn)公司的发展小趣事

发展历程:2015年,德索五金电子国际控股有限公司在香港注册成立,为公司拓展海外市场提供了有力支持。通过不断优化产品和服务,德索五金电子逐渐在国际市场上赢得了客户的信任和认可。

成果与影响:海外市场的拓展使德索五金电子的业务范围更加广泛,也为公司的国际化发展奠定了坚实的基础。

GainSpan ( Telit)公司的发展小趣事

进入21世纪后,风华高科加快了国际化进程。公司积极与国际知名企业开展合作,引进先进技术和设备,提升产品竞争力。同时,公司还不断拓展海外市场,产品远销北美、东南亚等地区。这些举措不仅提升了公司的国际知名度,也为公司带来了更多的业务机会和增长空间。

问答坊 | AI 解惑

DSP算法大全C语言版本

DSP算法大全C语言版本…

查看全部问答>

CPU风扇,本的外置散热风扇是直流的么?51单片机可以控制其转速么?

CPU风扇,本的外置散热风扇是直流的么?51单片机可以控制其转速么? 要怎么搞?…

查看全部问答>

EEW-DSO-V2.00设计思路

这段时间一直和网友东哥在讨论第二版的设计,大概确定了一下,下个版本的设计方案,采样芯片应该会换成ADC08100,最高100M采样,用两片IS61LV25616-10+CPLD来做FIFO,两片轮流寸,实现100M的读写速度.存储深度比上次用了很大的升级,CPU换成带外部总线的STM ...…

查看全部问答>

USB 2.0 规范

USB 2.0 规范 USB 是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据,最高速度 可达480Mb/S。USB 支持“总线供电”和“自供电”两种供电模式。在总线供电模式下, 设备最多可以获得500mA 的电流。USB2.0 被设计成为向下兼容的模式 ...…

查看全部问答>

请各位分析这样跳槽可以吗?

目前在公司担任研发主管,负责研发部门资源团队,个人觉的资源团队搞起来没啥意思,而且本人在资源团队搞了10年了。现在想需求更大发展。准备跳槽到另一家民营公司担任研发中心下一个研发一部担任部长,负责整个研发部门的工作。我想这样对这样生涯 ...…

查看全部问答>

最近在学习 ARM2440,买了一块杭州立宇泰的板子,遇到一个难题,请大家一起帮忙分析一下,谢谢!

最近在学习 ARM2440,买了一块杭州立宇泰 (套餐六) 的板子,遇到一个难题,请大家一起帮忙分析一下,谢谢! 问题是这样的。 开发板的初始化软件是能正常运行的。 我设置成网络启动也能正常工作, 我尝试修改了文件系统,运行了自己的程序,也 ...…

查看全部问答>

请问tilt wheel mouse中的WM_MOUSEHWHEEL消息如何在Win200/XP DDK中实现呀?

在Vista中,有mouse消息WM_MOUSEHWHEEL,而在2000/XP中则没有,我想写个mousefilter在2000/XP下来支持该功能,我该如何做呢?在MouseServiceCallback()当中做吗?我看在MOUSE_INPUT_DATA结构中不知怎样才能实现.…

查看全部问答>

酬金500元,北京,请教51单片机的TCP/IP问题

本人在北京,现有一块杭州晶控电子的51NET以太网开发板,开发板介绍:http://www.hificat.com/net/net.asp,想请教一下附带光盘里的单片机源码,(源码已上传,在附件里)。 内容:讲解源码,源码我没仔细看过,是单片机和PC通信的内容,应该是TCP ...…

查看全部问答>

变频器已运行就产生很大的干扰

我是做工控软件的,最近遇到一个让人恼火的问题,我们设备上采用了台安的变频器,我在用串口调试器调试通信时,当变频器运行起来时,一打开串口就有大量的乱码传过来,很是痛苦!!! 什么接地、加电容都试了,,没有解决,,请问各位达人有何高招 ...…

查看全部问答>