📄 pacirq.s
字号:
/* ------------------------------------------------------------------------ */
/* Hyper Operating System V4 μITRON4.0慌屯 Real-Time OS */
/* プロセッサ藐据步コンポ〖ネント (ARM gcc脱) */
/* IRQ毋嘲ハンドラ */
/* */
/* Copyright (C) 1998-2002 by Project HOS */
/* http://sourceforge.jp/projects/hos/ */
/* ------------------------------------------------------------------------ */
#include "pacarm.inc"
.text
.align 4
.global _HOS_IrqHandler
/************************************************
IRQ ハンドラ
*************************************************/
.extern hos_arm_sta_irq /* IRQの介袋步借妄 */
.extern hos_arm_end_irq /* IRQの姜位借妄 */
.extern kernel_sta_int /* 充り哈み倡幌借妄 */
.extern kernel_end_int /* 充り哈み姜位借妄 */
.extern kernel_exe_int /* 充り哈み借妄の悸乖 */
.extern kernel_int_sp /* 充り哈み脱スタックアドレス */
.extern kernel_int_cnt /* 充り哈みネスト搀眶 */
.extern kernel_int_ssp /* 充り哈み箕スタック锣闰 */
_HOS_IrqHandler:
sub lr, lr, #4 /* リタ〖ンアドレス换叫 */
/* Systemモ〖ドに败乖してレジスタ锣闰 */
mov r13, #(I_Bit | F_Bit | Mode_SYS)
msr cpsr_csxf, r13
stmfd sp!, {r1-r3, ip, lr} /* 绕脱レジスタ锣闰 */
/* IRQモ〖ドに提ってspsr瘦赂 */
mov r1, #(I_Bit | F_Bit | Mode_IRQ)
msr cpsr_c, r1
mrs r1, spsr /* spsr 艰り叫し */
mov r2, lr /* 充り哈み牲耽黎瘦赂 */
/* USRモ〖ドに败乖 */
mov r3, #(I_Bit | F_Bit | 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:
.extern 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 + -