历史上的今天
返回首页

历史上的今天

今天是:2024年09月10日(星期二)

正在发生

2020年09月10日 | 基于ARM7内核的SWI软中断功能设计方案详解

2020-09-10 来源:elecfans

笔者在设计一项目时采用LPC2458。此CPU为ARM7内核,带512K字节的片内FLASH,98k字节的片内RAM,支持片外LOCAL BUS总线,可从片外NOR FLASH启动CPU.由于代码量较大,程序放在片外的NOR FLASH中。且存在片外NOR FLASH在运行程序时,需对片外的NOR FLASH擦写的需求。

基于ARM7内核的SWI软中断功能设计方案详解

图1存储部分原理框图

在设计中,片外NOR FLASH的大小为16M字节。其中2M规划为存放运行程序,剩余的空间用于产品运行日志,告警灯存储空间。因此存在着在程序运行时对片外NOR FLASH擦写的需求。如果程序正在正常运行的片外FLASH中去擦写FLASH,会存在总线冲突的问题,无法实现此功能。我们采用ARM7内核的SWI软中断功能来实现。


ARM软中断原理(SWI)

软中断(SWI)目前没有找到任何官方的正式定义。笔者尝试与硬中断对比定义如下:

1.软中断发生的时间是由程序控制的,而硬中断发生的时间是随机的。

2.软中断是由程序调用发生的,而硬中断是由外设引发的。

3.硬中断处理程序要确保它能快速完成它的任务,这样程序执行时才不会等待较长的时间。

在C程序中调用软件中断需要用到编译器的扩展功能,使用关键字“_SWI”来声明中断函数。注意软中断号码同时在函数定义时指定。


_swi(0x24) void my_swi(void);

这样当调用函数my_swi的时候,就会用“SWI 0X24”来代替普通的函数调用“BL my_swi”。

可以发现软件中断同样存在着中断分支的问题,即需要根据中断号码来决定调用不同的处理程序。软中断号码只存在于SWI指令码当中,因此需要在中断处理程序中读取触发中断的指令代码,然后提取中断号信息,再进行进一步处理。下面是软中断指令的编码格式:

ARM状态下的SWI指令编码格式,32位长度,其中24位是中断编号。

Thumb状态下的SWI指令编码格式,16位长度,其中低8位是中断编号。

为了在中断处理程序里面得到SWI指令的地址,可以利用LR寄存器。每当响应一次SWI的时候,处理器都会自动保存并调整LR寄存器,使里面的内容指向SWI下一条指令的地址,所以把LR里面的地址内容上溯一条指令就是所需的间隔不一样,如果进入SWI执行前是在ARM状态下,需要通过LR-4来获得SWI指令地址,如果是在Thumb状态下进入,则只有LR-2就可以了。


下面是一段提取SWI中断号码的例程:

MRS R0,SPSR;检查进入SWI响应前的状态

TST R0,#T_bit;是ARM还是Thumb?#T_bit=0x20

LDRNEH R0,[LR, #-2];是Thumb,读回SWI指令码

BICNE R0, R0, #0xff00;提取低8位

LDREQ R0, [LR, #-4];是ARM,读回SWI指令码

BICEQ R0, #ff000000;提取低24位;

寄存器R0中的内容是正确的软中断编号了。

推荐阅读

史海拾趣

成都成电硅海公司的发展小趣事

随着技术的不断成熟和市场的不断扩大,成都成电硅海公司开始寻求更广阔的市场空间。公司积极参加国内外各种行业展会和论坛,与业界同行进行深入的交流和合作。同时,公司还加大了对海外市场的开拓力度,成功将产品打入欧美等发达国家市场。这一系列的市场拓展举措,使得成都成电硅海公司的知名度不断提升,市场份额也逐渐扩大。

台湾唯圣(GW)公司的发展小趣事
在电路中设置完善的保护措施,如过流保护、过压保护等,以防止在异常情况下对设备和人体造成伤害。
BNS Solutions公司的发展小趣事

面对全球化的趋势,BNS Solutions公司积极实施全球化战略,将业务拓展到全球范围。公司在多个国家和地区设立了分支机构,加强了与国际市场的联系和合作。同时,公司还注重可持续发展,积极推广环保理念和技术应用。通过采用环保材料和节能技术,公司降低了产品对环境的影响,实现了经济效益和社会效益的双赢。这些举措使得BNS Solutions公司在全球范围内赢得了广泛的赞誉和尊重。

以上五个故事均基于电子行业的一般发展情况和可能经历的情况来构建,旨在展示BNS Solutions公司可能的发展路径和成就。请注意,这些故事并不代表BNS Solutions公司的真实历史,仅作为示例供您参考。如需了解BNS Solutions公司的真实发展历程,建议查阅相关文献资料或公司官方网站。

EDAL公司的发展小趣事

为了进一步巩固市场地位和提升技术实力,EDAL公司开始通过收购和合作的方式拓展业务。公司成功收购了几家在EDA领域具有领先地位的公司,获得了更多的技术专利和市场份额。此外,EDAL公司还与其他科技公司建立了战略合作关系,共同研发新技术、新产品,推动整个EDA行业的发展。

DACHANG公司的发展小趣事

在追求经济效益的同时,DACHANG公司始终不忘承担社会责任。公司积极参与公益事业,关注环境保护和社会发展。无论是在捐款助学、扶贫济困还是在环保减排方面,DACHANG公司都积极履行自己的社会责任,为社会做出了积极贡献。这种对社会责任的担当和履行,不仅提升了DACHANG公司的品牌形象,也赢得了社会各界的广泛赞誉。

Asian Best Components Co Ltd公司的发展小趣事

随着国内市场的日益饱和,Asian Best Components Co Ltd开始将目光投向了广阔的国际市场。公司积极参加国际电子展会,与全球各地的客户建立了广泛的联系。通过深入了解不同市场的需求和特点,Asian Best不断调整产品策略,优化产品设计,成功打入多个国际市场。同时,公司还加强与国际同行的合作,共同推动电子行业的发展。

问答坊 | AI 解惑

avr单片机应用开发典型实例cd

avr单片机应用开发典型实例cd…

查看全部问答>

IPv6领域的研究与实践

IPv6是一个新版\"网络层协议\",其设计的最初目的就是为了克服传统互联网的核心协议-IPv4协议的不足之处。自从1991年IPv6的概念被提出以来,在各方的努力下,包括地址结构、路由、IPv4/IPv6过渡、移动IPv6在内的各项IPv6基本协议标准目前已经完成, ...…

查看全部问答>

视频服务器性能评估要素

视频服务器作为视音频信号的最终存储中心,其性能决定了整个系统的性能。视频服务器系统究其根本仍为计算机系统,由于其存储的是数字电视信号,要求其指标更高,传输量更大,速度要求更快而已。因此其系统性能的评估方法只能来自计算机业。   主板的性 ...…

查看全部问答>

DS18B20温度传感器使用

DS18B20比一般热敏电阻系数要好,输出的是一个变化电压信号,稳定…

查看全部问答>

高速MOSFET 驱动电路设计

DC-DC用的高速MOSFET 驱动电路设计!TI的文档,从MOSFET内部开始,讲的比较详细!…

查看全部问答>

Wince能否像桌面系统一样设置path=

Wince能否像桌面系统一样设置path路径?…

查看全部问答>

Android2.2试跑成功,来发几张效果图

Google于6月24日发布了Android操作系统的2.2版本,代号为Froyo, 深圳市友坚恒天科技有限公司也迅速成功移植了该版本到开发板上,发几张图片                 来源:友坚科技官网http://www ...…

查看全部问答>

MSP430的PWM产生模块

想请教下MSP430的PWM产生模块,是什么特别的地方吗? 目前想用MSP430产生3个不同时序的信号…

查看全部问答>

关于TLV5638的问题

本帖最后由 paulhyde 于 2014-9-15 04:03 编辑 用TLV5638输出两路电压,在给恒定值的情况下两路都正常输出,而用键盘输入输出值时,A路可以根据所输的电压输出,而B路只输出第一次给的电压值,这是什么原因,求会用的帮帮忙! 程序如下,键盘液晶 ...…

查看全部问答>