|
发表于 2010-5-29 08:18:53
|
显示全部楼层
只有软中断可以进入特权模式,然后去禁止中断,或打开中断
你可以在你启动代码加入:
;软中断
SoftwareInterrupt
;//增加开/关中断处理
CMP R0, #4
LDRLO PC, [PC, R0, LSL #2]
MOVS PC, LR
SwiFunction
DCD IRQDisable ;0
DCD IRQEnable ;1
DCD FIQDisable ;2
DCD FIQEnable ;3
IRQDisable
;关IRQ中断
MRS R0, SPSR
ORR R0, R0, #I_Bit
MSR SPSR_c, R0
MOVS PC, LR
IRQEnable
;开IRQ中断
MRS R0, SPSR
BIC R0, R0, #I_Bit
MSR SPSR_c, R0
MOVS PC, LR
FIQDisable
;关FIQ中断
MRS R0, SPSR
ORR R0, R0, #F_Bit
MSR SPSR_c, R0
MOVS PC, LR
FIQEnable
;开FIQ中断
MRS R0, SPSR
BIC R0, R0, #F_Bit
MSR SPSR_c, R0
MOVS PC, LR
然后在你.C文件中可以这样写
/**************************************中断设置部分*****************************************************/
__swi(0x00) void SwiHandle1(int Handle);
#define IRQDisable() SwiHandle1(0)
#define IRQEnable() SwiHandle1(1)
#define FIQDisable() SwiHandle1(2)
#define FIQEnable() SwiHandle1(3)
/***********************************************备注****************************************************
**使用SWI软件中断跳出用户模式,进入特权模式访问CPSR
**相应代码存放在启动代码Startup.s中SWI软件中服务函数块
*******************************************************************************************
只要调用,IRQDisable() IRQEnable() FIQDisable() FIQEnable() 就行 |
|