您的位置:首页 > 其它

ucOS-II基于ARM920T的中断处理过程

2008-11-04 22:05 267 查看
程序清单:ucOS-II基于ARM920T的中断处理过程
UCOS_IRQHandler//中断入口地址,在中断向量表初始化时被设置
/*
此时已处于中断模式(在ARM处理器中,当中断发生时,CPU自动保存CPSR到SPSR_irq,并切换到中断模式),因此sp为中断模式下的栈指针(如上所说,ARM具有中断模式栈)
*/
;保存现场,先将任务的现场保存到中断栈中
stmfd sp!,{r0-r3,r12,lr}
;调用相关函数
bl OSIntEnter
bl C_IRQHandler
;调用OSIntExit函数,该函数判断是否有更高优先级的任务进入就绪
bl OSIntExit
;if(OSIntCtxSwFlag == 1) _IntCtxSw()
ldr r0,=OSIntCtxSwFlag
ldr r1,[r0]
cmp r1,#1
;有更高优先级的任务进入了就绪状态,则进行中断级的任务切换,返回执行新的任务
beq _IntCtxSw
/*不进行任务切换,返回被中断的任务*/
;恢复现场
ldmfd sp!,{r0-r3,r12,lr}
;下面的指令令pc = lr-4实现中断返回,同时将spsr_irq的值复制到CPSR,实现模式切换(即返回到用户模式)
subs pc,lr,#4

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: