历史上的今天
今天是:2024年12月24日(星期二)
2019年12月24日 | arm异常与中断
2019-12-24 来源:elecfans
1 swi中断的处理步骤:
1) 进中断时pc->lr, cpsr->spsr, cpsr_mode置为特权模式,均由硬件完成。
2)注册中断向量表由软件完成,可以用B指令,也可以用ldr跟dcd表的方式,在中断向量处放置一条跳转指令,跳到中断处理handler处。
3)一级中断处理程序主要目的是根据arm或者thumb状态获取swi号,期间注意保存寄存器和返回。
4)二级中断处理程序可以用C或者汇编,主要是一个分支结构,根据中断号做相应的事,可以用函数指针方式实现。
-----应用程序中使用软中断时,可以使用__swi (仅armcc)关键字声明软中断函数,调用时自动获取中断号。
2 基于s3c2410的irq中断
先上个直接从芯片手册里截的图

前面的subsrcpnd srcpnd intpnd都是三星提供的sfr,是做到芯片里面的,它们的清零方式比较特殊,是对相应的位赋1,联想到外部中断的置一方式只能由外部事件驱动,所以这个也不难理解。
当中断被送到irq时处理步骤如下:
1 查跳到异常向量表0x18处,取一条跳转指令,跳转到一级irq中断处理函数中。
2 一级中断处理函数的任务是通过intoffset寄存器,查的中断源的偏移号,然后根据偏移号和基地址得到二级中断处理函数的地址,将此地址赋给pc,然后跳转到二级中断处理函数处。
3 二级中断处理函数可能还要查相应的寄存器,得到具体的中断源,然后进行相应的处理。
4 中断返回,因为进入中断时用户态的cpsr已经压入spsr中,所以可以直接用subs pc, lr, 4这种格式恢复。恢复原来的寄存器模式和状态。
to be continue。。。
上一篇:arm学习——有关位操作的总结
下一篇:s3c2410的存储系统
史海拾趣
|
一、线路图: 1、rsense电阻取1欧姆时。充电电流为250MA,0.5欧姆时,电流为520MA,2N6109用TIP42代替,SHUNT电阻为限流电阻,大约1K,其他参数如图。 转绢流后充电机充电电流是原来的1/8还是1/16取决于PGM3脚的接法: Rsense电阻两 ...… 查看全部问答> |
|
本人刚学VB,在写一个串口数据采集大的小软件,刚开始就遇到了问题,以下代码,我在调试时都正常运行,能正确获得返回数据,可是生成exe文件后,程序却没反应,也没有错误信息出现!就是没有数据,求高手帮忙! Public gSend As Boolean &nb ...… 查看全部问答> |
|
quartus功能仿真出现致命错误。 Fatal error: Module: quartus_sim.exe Exception: Access Violat *** Fatal error: Module: quartus_sim.exe Exception: Access Violation Stack Trace: 01a314e6: SDB_DFF_INFO::set_last_clock_value() + 0x34 (tsm_sdb) 01a03144: EDS_ENGINE::propagate() + 0xb0 (TSM_EDS) 01a03321: EDS_ENGINE::propaga ...… 查看全部问答> |
|
LM4871/CSC8002低电压3W功率放大器IC应用电路原理图说明 LM4871/CSC8002 是一个BTL 桥连接的音频功率放大器.它能够在5V 电源电压下给一个3Ω 负载提供THD 小于10%、平均值为3W 输出功率。在关闭模式下电流的典型值为0.6uA. LM4871/CSC8002 是为提供大功率,高保真音频输出而专门设计的.它仅仅需要少量 ...… 查看全部问答> |
|
最近在研究将TPM(安全模块)应用到ARM7上,要在ucosii里添加TPM的驱动,但是现在都是linux下的驱动。有没有大侠可以指点下,可以在ucosii中加TPM的驱动吗?… 查看全部问答> |




