这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 综合技术» 基础知识» nbsp,nbsp,irq,inc 关于 irq.inc

共2条 1/1 1 跳转至

nbsp,nbsp,irq,inc 关于 irq.inc 的问题

院士
2006-09-17 18:14:16 打赏
nbsp,nbsp,irq,inc 关于 irq.inc 的问题



关键词: 关于 irq.inc 问题

院士
2006-12-22 22:43:00 打赏
2楼
问 NoInt& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;EQU 0x80

USR32Mode& nbsp;& nbsp;& nbsp;EQU 0x10
SVC32Mode& nbsp;& nbsp;& nbsp;EQU 0x13
SYS32Mode& nbsp;& nbsp;& nbsp;EQU 0x1f
IRQ32Mode& nbsp;& nbsp;& nbsp;EQU 0x12
FIQ32Mode& nbsp;& nbsp;& nbsp;EQU 0x11


;引入的外部标号在这声明
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;IMPORT& nbsp;& nbsp;OSIntCtxSw& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;;任务切换函数
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;IMPORT& nbsp;& nbsp;OSIntExit& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;;中断退出函数
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;IMPORT& nbsp;& nbsp;OSTCBCur
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;IMPORT& nbsp;& nbsp;OSTCBHighRdy
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;IMPORT& nbsp;& nbsp;OSIntNesting& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;;中断嵌套计数器
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;IMPORT& nbsp;& nbsp;StackUsr
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;IMPORT& nbsp;& nbsp;OsEnterSum

& nbsp;& nbsp;& nbsp;& nbsp;CODE32

& nbsp;& nbsp;& nbsp;& nbsp;AREA& nbsp;& nbsp;& nbsp;& nbsp;IRQ,CODE,READONLY

& nbsp;& nbsp;& nbsp;& nbsp;MACRO
$IRQ_Label HANDLER $IRQ_Exception_Function

& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;EXPORT& nbsp;& nbsp;$IRQ_Label& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; 输出的标号
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;IMPORT& nbsp;& nbsp;$IRQ_Exception_Function& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; 引用的外部标号

$IRQ_Label
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;SUB& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;LR, LR, #4& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; 计算返回地址
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;STMFD& nbsp;& nbsp;& nbsp;SP!, {R0-R3, R12, LR}& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; 保存任务环境
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;MRS& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R3, SPSR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; 保存状态
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;STMFD& nbsp;& nbsp;& nbsp;SP, {R3, SP, LR}^& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; 保存用户状态的R3,SP,LR,注意不能回写
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; 如果回写的是用户的SP,所以后面要调整SP
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;LDR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R2,& nbsp;& nbsp;=OSIntNesting& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; OSIntNesting++
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;LDRB& nbsp;& nbsp;& nbsp;& nbsp;R1, [R2]
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;ADD& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R1, R1, #1
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;STRB& nbsp;& nbsp;& nbsp;& nbsp;R1, [R2]

& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;SUB& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;SP, SP, #4*3
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;MSR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;CPSR_c, #(NoInt | SYS32Mode)& nbsp;& nbsp;& nbsp;& nbsp;; 切换到系统模式
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;CMP& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R1, #1
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;LDREQ& nbsp;& nbsp;& nbsp;SP, =StackUsr
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;BL& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;$IRQ_Exception_Function& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; 调用c语言的中断处理程序

& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;MSR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;CPSR_c, #(NoInt | SYS32Mode)& nbsp;& nbsp;& nbsp;& nbsp;; 切换到系统模式
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;LDR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R2, =OsEnterSum& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; OsEnterSum,使OSIntExit退出时中断关闭
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;MOV& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R1, #1
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;STR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R1, [R2]

& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;BL& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;OSIntExit

& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;LDR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R2, =OsEnterSum& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; 因为中断服务程序要退出,所以OsEnterSum=0
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;MOV& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R1, #0
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;STR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R1, [R2]

& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;MSR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;CPSR_c, #(NoInt | IRQ32Mode)& nbsp;& nbsp;& nbsp;& nbsp;; 切换回 irq模式
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;LDMFD& nbsp;& nbsp;& nbsp;SP, {R3, SP, LR}^& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; 恢复用户状态的R3,SP,LR,注意不能回写
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; 如果回写的是用户的SP,所以后面要调整SP
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;LDR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R0, =OSTCBHighRdy
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;LDR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R0, [R0]
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;LDR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R1, =OSTCBCur
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;LDR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R1, [R1]
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;CMP& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;R0, R1

& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;ADD& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;SP, SP, #4*3& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;;
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;MSR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;SPSR_cxsf, R3
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;LDMEQFD SP!, {R0-R3, R12, PC}^& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; 不进行任务切换
& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;LDR& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;PC, =OSIntCtxSw& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;; 进行任务切换
& nbsp;& nbsp;& nbsp;& nbsp;MEND

& nbsp;& nbsp;& nbsp;& nbsp;END

******************************************************

& nbsp;& nbsp;& nbsp;请问& nbsp;& nbsp;这里的 HANDLER& nbsp;& nbsp;在哪里定义?具体的意义?
& nbsp;& nbsp;
另外: 下面的中断标号,前后有什么区别?比如IRQ_Handler和IRQ_Exception的区别
;/*中断*/
IRQ_Handler& nbsp;& nbsp;& nbsp;& nbsp;HANDLER IRQ_Exception
;/*定时器0中断*/
Timer0_Handler& nbsp;& nbsp;HANDLER Timer0_Exception
1: re请看宏定义的相关资料中有介绍

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]