⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pacexc.s

📁 itron
💻 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 + -