历史上的今天
返回首页

历史上的今天

今天是:2024年09月06日(星期五)

正在发生

2019年09月06日 | ARM9 SWI软件中断

2019-09-06 来源:eefocus

一、SWI软件中断原理。


在特权模式下,处理器模式切换可以通过软件控制进行切换,即修改 CPSR 的模式位。但在用户模式下,是没有权限通过修改 CPSR 实现模式转换的,除非 通过外部中断或是异常处理过程进行切换。为方便在用户模式下灵活实现模式的 转换, ARM 指令集提供了产生异常的指令,即软件中断指令 SWI 。也就是说用 户程序里可以通过写入 SWI 指令来切换到特权模式,当 CPU 执行到 SWI 指令时会 从用户模式切换到管理模式下,执行软件中断处理。在其他模式下也可以使用 SWI 指令,处理器同样切换到管理模式。 


指令格式:

SWI{cond} immed_24 

其中: immed_24 为 24 位立即数,值为从 0――16777215 之间的整数。它 用来做用户程序和软中断处理程序之间的接头暗号。通过该软中断立即数来区分 用户不同操作。 


指令编码格式: 

指令举例: 

SWI 1;产生 1 号软中断


指令说明: 

在用户模式下调用 SWI 软中断指令,可使处理器跳转至 SWI 中断向量表所对 应的地址中,继而跳入软中断处理程序


中。在软中断处理程序中,可根据软中断号,实现不同的操作。软中断号的判断方法如下: 


LDR R4, [LR, #-4] ; LR 为硬件自动保存 SWI xxx 指令的下一条指令地址

; LR – 4 就是 SWI 指令地址

BIC R4, R4, #0xFF000000 ;将 SWI 指令高 8 位清除掉,只保留低 24 位立

; 即数,取得SWI指令编码,则 R4 即为 SWI

;指令后的软中断号; 


二、代码


AREA Stack1,DATA,READWRITE

stack1 DCD 10*512

PRESERVE8

AREA TEST,CODE,READONLY

CODE32

ENTRY

b reset

b _undefined_instruction

b _software_interrupt

b _prefetch_abort

b _data_abort

b _not_used

b _irq

b _fiq

_undefined_instruction

nop

_prefetch_abort

nop

_data_abort

nop

_not_used

nop

_irq

nop

_fiq

nop

reset

mrs r0,cpsr

bic r0,r0,#0x1f

orr r0,r0,#0xd3

msr cpsr_c,r0 ;Enable svc mode of cpu

init_stack

ldr r0,=stack1 ;get stack top pointer*/

;svc mode stack

mov sp,r0

sub r0,#128*4 ;/*512 byte for irq mode of stack*/

;/****irq mode stack**/

msr cpsr_c,#0xd2

mov sp,r0

sub r0,#128*4 ;/*512 byte for irq mode of stack*/

;/***fiq mode stack***/

msr cpsr_c,#0xd1

mov sp,r0

sub r0,#0

;/***abort mode stack***/

msr cpsr_c,#0xd7

mov sp,r0

sub r0,#0

;/***undefine mode stack***/

msr cpsr_c,#0xdb

mov sp,r0

sub r0,#0

;/*** sys mode and usr mode stack ***/

msr cpsr_c,#0x10

mov sp,r0 ;/*1024 byte for user mode of stack*/

swi 1

swi 2

LOOP

B LOOP

_software_interrupt

STMFD SP!, {R0-R4, LR} ; 保存程序执行现场

LDR R4, [LR, #-4] ; LR - 4 为指令" swi xxx" 的地址,低 24 位 是 软件中断号

BIC R4, R4, #0xFF000000 ; 取得 ARM 指令 24 位立即数

CMP R4, #1

ADDEQ R5,R5,#1 ; 判断 24 位立即数,如果为 1,则执行R5+1 操作

LDREQ PC, =swi_return ; 软中断处理返回CMP R4, #2 ; 判断 24 位立即数,如果为 2,则执行 R6+1 操作

ADDEQ R6,R6,#1

LDREQ PC, =swi_return ; 软中断处理返回地址

swi_return

LDMFD SP!, {R0-R4, PC}^ ; 中断返回, ^表示将 spsr 的值复制到 cpsr

END


PS:

1. bic

BIC指令的格式为:

BIC{条件}{S}  目的寄存器,操作数1,操作数2

BIC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。操作数1应是一个寄存器,

操作数2可以是一个寄存器、被移位的寄存器、或一个立即数。操作数2为32位的掩码,如果在

掩码中置了某一位1,则清除这一位。未设置的掩码位保持不变。


bic r0,r0,#0x1f

0x1f=11111b

其含义:清除r0的bit[4:0]位。


2,orr

ORR指令的格式为:

ORR{条件}{S}  目的寄存器,操作数1,操作数2

ORR指令用于在两个操作数上进行逻辑戒运算,并把结果放置到目的寄存器中。操作数1应该是一

个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操

作数1的某些位。

指令示例:

ORR R0,R0,#3          ;  该指令设置R0的0、1位,其余位保持不变。


orr r0,r0,#0xd3

     0xd3=1101 0111

     将r0与0xd3作算数或运算,然后将结果返还给r0,即把r0的bit[7:6]和bit[4]和bit[2:0]置为1。


推荐阅读

史海拾趣

ETAL公司的发展小趣事

作为一家有社会责任感的企业,ETAL始终关注社会公益事业。公司积极参与各种慈善活动和社会捐赠项目,为贫困地区的教育事业、环保事业等提供了力所能及的帮助。此外,ETAL还定期组织员工参与志愿服务活动,通过实际行动传递正能量和爱心。这些公益事业不仅提升了公司的社会形象,也增强了员工的凝聚力和向心力。

Allied Electronic & Semiconductor Technology Inc公司的发展小趣事

AE&ST公司自创立之初,就深知技术创新是电子行业的核心竞争力。公司投入大量资源进行研发,不断探索新的半导体材料和生产工艺。在一次偶然的实验中,AE&ST的研发团队发现了一种新型半导体材料,这种材料在能效和稳定性方面表现出色。公司迅速将这一发现转化为产品,并推向市场。新产品一经推出,便因其卓越的性能获得了市场的广泛认可,AE&ST公司因此获得了巨大的商业成功。

DIOTEC公司的发展小趣事

为了进一步拓展欧洲市场,DIOTEC于1989年在斯洛文尼亚的特尔博夫列建立了第二家工厂。这座工厂成为了DIOTEC在欧洲的重要生产基地,不仅提高了产能,还使得公司能够更好地服务欧洲客户。斯洛文尼亚工厂的建成,标志着DIOTEC在欧洲市场的地位得到了进一步巩固。

Hongfa公司的发展小趣事

宏发公司的发展离不开自主研发和技术创新。1998年,宏发成立了精合公司,开启了自主研发自动化设备设计及制造的征程。此后,公司不断加大在技术研发上的投入,建立了博士后科研工作站和院士专家工作站,形成了从产品研发、模具制造、零件制造到自动化成品装配及在线检测的一体化全产业链。通过技术创新,宏发不仅提升了产品性能和质量,还成功打破了国外技术垄断,实现了高端继电器的自主研发和生产。

Aces Electronics Co Ltd公司的发展小趣事

在发展过程中,Aces也面临过各种挑战和危机。例如,原材料价格波动、市场竞争激烈、贸易壁垒等因素都曾经给公司带来不小的压力。然而,Aces凭借敏锐的市场洞察力和强大的危机管理能力,成功应对了这些挑战。公司及时调整采购策略、优化产品结构、拓展销售渠道等措施,有效缓解了外部压力,保持了稳定的发展态势。

这些故事虽然基于假设和推测,但反映了一个电子企业在发展过程中可能遇到的各种情况。无论面对技术挑战、市场竞争还是行业变革,Aces Electronics Co., Ltd.都展现了坚韧不拔、勇往直前的精神风貌。未来,公司将继续致力于技术创新和市场拓展,为电子行业的发展贡献更多力量。

Esterline Technologies Corporation公司的发展小趣事

随着技术的不断进步和产品的日益成熟,Aces开始将目光投向国际市场。公司积极参与国际电子展会和技术交流,与多家国际知名企业建立了合作关系。通过引进国外先进的技术和管理经验,Aces不断提升自身竞争力,逐渐在国际市场上占据了一席之地。同时,公司还积极拓展海外市场,将产品销往全球多个国家和地区。

问答坊 | AI 解惑

MCGS组态软件设计及其应用

一、引言     过去工业控制计算机系统的软件功能都靠软件人员编程实现。工作量大,软件通用性差,且易产生错误。随着工业控制要求的不断提高,专门用于工业控制的组态软件应运而生,它是一套功能齐全的组态生成工具软件,通用性强,而 ...…

查看全部问答>

ARM c程序的问题

_irqHandler PROC    1. STMFD   sp!,{r0-r4,r12,lr}    2. mov     r4,#0x80000000  //中断控制寄存器首地址(假设的)    3. ldr     r0,[r4,#0] ...…

查看全部问答>

给论坛的建议

我希望论坛能够在下载扣金币方面可以放松点,比如每次只扣一个或者在某个贴上下载只扣若干个就好了,因为有些文件确实比较大,要下好几个压缩文件才能行的,而每下一个就扣好几,很多人都有些不舍得,毕竟金币有比较难得,特别是新手就更麻烦了,我 ...…

查看全部问答>

wince 桌面快捷方式

请问: wince中的文件夹有没有后缀名? 我想把一个名为NandFlash的文件夹,放到桌面快捷方式, 我在WINCE500\\PLATFORM\\SMDK2440\\FILES创建了一个NandFlash.LNK文件,里面写上22#\\windows\\NandFlash 我又在Project.bib 里面加上 NandFlash ...…

查看全部问答>

PCI设备识别不正常

首先我的程序在某些主板上是可以正常工作的(具体型号我也搞不懂),设置的是从设备,内部只有从设备状态机。没有接入奇偶检验,仲裁和热插拔。 问题是在一些主板上发现设置为从设备时无法找到设备,设置为主设备可以找到,但是通过软件读取配置信 ...…

查看全部问答>

0

居然要全部下完才能都打开?这个有点不厚道…

查看全部问答>

LM3S程序求教

//————————————————头文件————————————————————#include \"inc/hw_ints.h\"//硬件中断#include \"inc/hw_memmap.h\"#include \"inc/hw_types.h\"//硬件类型#include \"driverlib/gpio.h\"//GPIO#include \"dri ...…

查看全部问答>

中断究竟是个怎么回事?

今天听单片机老师讲课讲中断,说分了好几种,被他弄得一头雾水,还是没明白他说的中断都有什么,怎么配置,查了查2553手册,愣是没找到讲解终端的地方,球大神指点123!不胜感激。…

查看全部问答>

DCDC电源中的电流检测

文章介绍了7中电流检测的办法,可以作为电流检测的入门读物 …

查看全部问答>