历史上的今天

今天是:2024年09月30日(星期一)

正在发生

2021年09月30日 | s3c2440——swi异常

发布者:Jinghua6666 来源: eefocus关键字:s3c2440  系统复位 手机看文章 扫描二维码
随时随地手机看文章

系统复位的时候,从0地址开始执行,这个时候系统处于svc管理模式。


一般而言,我们的app应用程序是处于用户模式的,但是用户模式不能访问硬件,必须处于特权模式才可以。所以这里我们用swi软中断方式来实验。swi异常会让cpu进入svc模式。


首先,系统复位,执行代码,此刻处于svc模式,然后我们切换模式改变成为用户模式,再使用swi指令,处理软中断。

由于切换了模式,需要重新设置栈,因为我们要调用c函数,而栈我们是在sdram的最高地址往下开辟的。


这里,我们的swi异常发生时,硬件会让程序从地址0x8的地方开始执行,所以我们仿照之前的未定义异常编写软中断处理函数:


do_swi:

    /* 执行到这里之前:

     * 1. lr_svc保存有被中断模式中的下一条即将执行的指令的地址

     * 2. SPSR_svc保存有被中断模式的CPSR

     * 3. CPSR中的M4-M0被设置为10011, 进入到svc模式

     * 4. 跳到0x08的地方执行程序 

     */


    /* sp_svc未设置, 先设置它 */

    ldr sp, =0x33e00000


    /* 保存现场 */

    /* 在swi异常处理函数中有可能会修改r0-r12, 所以先保存 */

    /* lr是异常处理完后的返回地址, 也要保存 */

    stmdb sp!, {r0-r12, lr}  


    //mov r4, lr

    

    /* 处理swi异常 */

    mrs r0, cpsr

    ldr r1, =swi_string

    bl printException


    //sub r0, r4, #4

    ldr r0,=my_swi

    bl printSWIVal

    

    /* 恢复现场 */

    ldmia sp!, {r0-r12, pc}^  /* ^会把spsr的值恢复到cpsr里 */

    

swi_string:

    .string "swi exception"


.align 4


韦老大的代码通过swi异常保存lr的方式来达到读取软中断号,这样其实麻烦了,所以我直接在我们的swi 0x123处加上标签(my_swi:),这样直接就知道swi 0x123这条指令的地址,解引用这个地址,就可以得到0x123这个数值,而不用通过保存lr的值之后,再减去4的方式,可读性更高,代码也更简单呀!


这样,当代码运行到swi 0x123是,就会出现我们软中断异常处理,打印消息如下:

先发生未定义异常,然后发生swi异常。

上图是swi异常的打印函数,为什么取地址解引用之后,还要对0xff000000取反相与呢?

我们看看arm指令格式:

我们忽略cond条件(全为1,上篇随笔也有说到),而且紧跟着的4位也都是1,所以高八位都是1,即ff,所以我们要把高八位清零,剩下的就是我们my_swi标签地址内存中正真的数据了。


再说一下切换成usr用户的时候我们使用了 bic指令。


BIC指令的格式为:
BIC{条件}{S}  目的寄存器,操作数1,操作数2
BIC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。操作数1应是一个寄存器,
操作数2可以是一个寄存器、被移位的寄存器、或一个立即数。操作数2为32位的掩码,如果在
掩码中置了某一位1,则清除这一位。未设置的掩码位保持不变。
eg:
bic r0,r0,#0x1f
0x1f=11111b
其含义:清除r0的bit[4:0]位。

 

然后:

msr和mrs很像,不要混淆了。

mrs:(r:寄存器 ,s:状态  英文缩写)

将状态寄存器的内容传送至通用寄存器

msr:(s:状态 ,r:寄存器)

通用寄存器传送至状态寄存器传送指令

msr和mrs这两个指令从右往左看这三个字母,开头都是m就不管了,sr表示r->s(r到s),rs表示s->r(s到r),就是把什么寄存器传到什么寄存器去。

比如我们上面的msr cpsr, r0:表示把通用寄存器r0传送到状态寄存器cpsr。

关键字:s3c2440  系统复位 引用地址:s3c2440——swi异常

上一篇:ARM的7种工作模式、37个通用寄存器、CPSR程序状态寄存器
下一篇:TQ2440裸机中断(软中断swi)

推荐阅读

智能手机增势趋缓已是不争事实,离开了这一动力,下一步的经济增长动力将来自哪里?诸如5G、新能源汽车、自动驾驶、物联网等潜力行业均在翘首接盘,但问题是,智能手机从出现到饱和用了十年时间,下滑亦是从顶峰开始,而这些市场的向上攀爬还在初始阶段,最终谁将能问鼎?可能第一步就要看哪一产业能像手机一样缔造上万亿元的市场了。 何时规模达千亿元?...
stm32的文档上说can有两个接收fifo,但是对具体怎么使用并没有特别提到,在网上也没有找到靠谱或者统一的说法我看了几个例子和文档也没发现具体怎么设置使用哪个fifo今天仔细的看了下文档里的图片,突然想到fifo可能是在设置filter的时候启用的,然后测试了下证实了想法可以看看can的几个例子,filter是必须设置的,不然没法收到数据,而使用哪个fifo就是...
集微网9月29日报道近日,5G广播中国战略及前景展望研讨会在线上召开,高通中国区技术标准负责人李俨在研讨会上表示,5G广播具有非常大的应用潜力。李俨指出,数字经济发展中很重要的环节是信息数据的流通,5G广播使用户能够以更低的成本享受各种服务,将会改变人们的生活甚至生产的方式。就像3G、4G带动移动互联网的迅猛发展一样,5G广播的成熟,将再次调...
所谓高频小毛刺噪声,是指在波形上面看到的那些乱的小细线。在测试时,像一些刷新率低的示波器,如泰克1000系列的示波器,由于刷新率低,采集叠加的帧数不够,所以能看到少数的杂乱小细线。而一些刷新率较高的示波器,像ZDS2022(刷新率高达33万帧/秒),和安捷伦的MSO3000系列示波器(刷新率最高1M帧/秒),因为采集叠加的波形帧很多,此时无数的杂乱小细...

史海拾趣

问答坊 | AI 解惑

PCB的基本设计方法和原则要求

一、印刷线路元件布局结构设计讨论  一台性能优良的仪器,除选择高质量的元器件,合理的电路外,印刷线路板的元件布局和电气连线方向的正确结构设计是决定仪器能否可靠工作的一个关键问题,对同一种元件和参数的电路,由于元件布局设计和电气连线 ...…

查看全部问答∨

【藏书阁】单片机精品课件,教程,试题库,实验指导

包括: 单片机实用技术教程 300页 12.3M Word版 精品题库 11份 2.9M Word版 51系列单片机实验系统指导书 80页 1.7M.doc 编程器的使用 2页.doc 开发工具介绍 14页 0.2M.doc 模块系列实验 13页.doc 实验系统的使用 5页.doc 硬件在线仿真 ...…

查看全部问答∨

这辆婴儿车下面有一个滑板

维也纳设计师valentin vodev设计的一个婴儿车非常有趣,他在推车的后轮处增加了一块踏板,边推婴儿车的时候,还可以当滑板一样滑行。为了安全考虑,设计师给婴儿配备了安全带,并在推手处加上了刹车     …

查看全部问答∨

急求跟踪器实现~~~~~~~~

有没有人知道跟踪器的主要构成及实现的原理,     实现它应该需要哪方面的知识 啊 ~~~~~   急求,在线等............也可以加我Q:920035498…

查看全部问答∨

如何在控制面板里添加蓝牙?(很急)

如题, 怎么生成bthpnl.cpl?catalog items里应该如何勾选?谢谢达人朋友解答!…

查看全部问答∨

请教:USB批量传输与速度问题

各位达人好,俺最近搞一个LPC2378+ISP1161的USB主机项目,遇到几个问题请教各位达人: 1,在批量传输数据的时候经常出现这样的情况(但不是每次都出现):命令阶段正常,数据阶段正常,可到了状态阶段出现了问题,单步跟踪后发现是状态阶段收到的P ...…

查看全部问答∨

世界500强公司--上海招聘(待遇优厚,不会后悔)

-精C++,嵌入式编程,Unix, MFC, Vxworks -工作经验2年以上 -学历要求本科以上 -英语听说读写熟练 工作环境宽松,薪资丰厚,有意者请尽快联系MSN;linxin710@hotmail.com …

查看全部问答∨

51测频率(2K~2M)5位精度+1602显示驱动库

 Program Size: data=36.0 xdata=0 code=982 我的信号发生器不太稳定,具体精度未准确测量…

查看全部问答∨

TI元件库 欢迎(提供+下载)

PCB制板时,可能大家都有个体会,如果元器件封装有误时,轻则焊接不正常,或者飞线,严重者则PCB报废。正确的元件封对于刚接触布板者尤为重要。   由此想到,如果大家都把元器件的封装、特别是经过验证的封装贡献出来,相互交流,对大家都有 ...…

查看全部问答∨

做恒流和涓流的问题

请教各位大侠,音频变压器和高频变压器有什么区别?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved