📄 pacexc.s
字号:
/* ------------------------------------------------------------------------ *//* Hyper Operating System V4 μITRON4.0慌屯 Real-Time OS *//* プロセッサ藐据步コンポ〖ネント (ARM gcc脱) *//* 毋嘲ハンドラ *//* *//* Copyright (C) 1998-2002 by Project HOS *//* http://sourceforge.jp/projects/hos/ *//* ------------------------------------------------------------------------ */#include "pacarm.inc" .text .align 4 .global _HOS_CpuExceptionHandler/************************************************ CPU毋嘲ハンドラ*************************************************/ .extern kernel_sta_exc /* CPU毋嘲ハンドラ倡幌借妄 */ .extern kernel_end_exc /* CPU毋嘲ハンドラ姜位借妄 */ .extern kernel_exe_exc /* CPU毋嘲ハンドラの悸乖 */ .extern kernel_int_sp /* 充り哈み脱スタックアドレス */ .extern _HOS_int_cnt /* 充り哈みネスト搀眶 */ .extern _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 + -