📄 pacirq.s
字号:
; ---------------------------------------------------------------------------
; Hyper Operating System V4 μITRON4.0慌屯 Real-Time OS
; プロセッサ藐据步コンポ〖ネント (ARM脱)
; IRQ毋嘲ハンドラ
;
; Copyright (C) 1998-2002 by Project HOS
; http://sourceforge.jp/projects/hos/
; ---------------------------------------------------------------------------
INCLUDE pacarm.inc
AREA inthdr_code, CODE, READONLY
EXPORT _HOS_IrqHandler
; ----------------------------------------------
; IRQ ハンドラ
; ----------------------------------------------
IMPORT hos_arm_sta_irq ; IRQの介袋步借妄
IMPORT hos_arm_end_irq ; IRQの姜位借妄
IMPORT kernel_sta_int ; 充り哈み倡幌借妄
IMPORT kernel_end_int ; 充り哈み姜位借妄
IMPORT kernel_exe_int ; 充り哈み借妄の悸乖
IMPORT kernel_int_sp ; 充り哈み脱スタックアドレス
IMPORT kernel_int_cnt ; 充り哈みネスト搀眶
IMPORT kernel_int_ssp ; 充り哈み箕スタック锣闰
_HOS_IrqHandler
sub lr, lr, #4 ; リタ〖ンアドレス换叫
; ---- Systemモ〖ドに败乖してレジスタ锣闰
mov r13, #I_Bit:OR:F_Bit:OR:Mode_SYS
msr cpsr_csxf, r13
stmfd sp!, {r1-r3, ip, lr} ; 绕脱レジスタ锣闰
; ---- IRQモ〖ドに提ってspsr瘦赂
mov r1, #I_Bit:OR:F_Bit:OR:Mode_IRQ
msr cpsr_c, r1
mrs r1, spsr ; spsr 艰り叫し
mov r2, lr ; 充り哈み牲耽黎瘦赂
; ---- USRモ〖ドに败乖
mov r3, #I_Bit:OR:F_Bit:OR:Mode_USR
msr cpsr_c, r3
; ---- レジスタ锣闰
stmfd sp!, {r0-r2} ; a1, spsr_irq, lr_irq 瘦赂
; ---- 驴脚充り哈みチェック
ldr r0, =kernel_int_cnt
ldr r1, [r0] ; 充り哈みネストカウンタ艰评
cmp r1, #0
add r1, r1, #1 ; 充り哈みネストカウンタインクリメント
str r1, [r0]
bne MultipleInt ; 驴脚充り哈みなら尸呆
; ---- スタックの掐れ仑え
ldr r0, =kernel_int_ssp
str sp, [r0] ; スタックポインタを锣闰
ldr r0, =kernel_int_sp
ldr sp, [r0] ; 充り哈み脱スタックを肋年
; ---- 充り哈み借妄の倡幌
bl kernel_sta_int
; ---- 充り哈み借妄
bl hos_arm_sta_irq ; IRQ倡幌借妄(充哈み戎规艰评)
bl kernel_exe_int ; 充り哈み借妄悸乖
bl hos_arm_end_irq ; IRQ姜位借妄
; ---- スタックの牲耽
ldr r0, =kernel_int_ssp
ldr sp, [r0] ; スタックポインタを牲耽
; ---- 充り哈みネストカウントデクリメント
ldr r0, =kernel_int_cnt
mov r1, #0
str r1, [r0] ; 充り哈みネストカウンタクリア
; ---- 觅变ディスパッチ悸乖
bl kernel_end_int ; 觅变ディスパッチ悸乖
; ---- 充り哈みからの牲耽
ReturnInt
IMPORT pac_arm_swi_ret
ldmfd sp!, {r0-r2}
ldr r3, =pac_arm_swi_ret
stmia r3, {r0-r2} ; 充り哈み牲耽デ〖タ肋年
ldmfd sp!, {r1-r3, ip, lr} ; レジスタ牲耽
mov a1, #2
swi 0x10
;---- 驴脚充り哈み借妄
MultipleInt
; ---- 充り哈み借妄
bl hos_arm_sta_irq ; IRQ倡幌借妄(充哈み戎规艰评)
bl kernel_exe_int ; 充り哈み借妄悸乖
bl hos_arm_end_irq ; IRQ姜位借妄
; ---- 充り哈みネストカウントデクリメント
ldr r0, =kernel_int_cnt
ldr r1, [r0]
sub r1, r1, #1
str r1, [r0]
b ReturnInt
END
; ---------------------------------------------------------------------------
; Copyright (C) 1998-2002 by Project HOS
; ---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -