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