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

📄 pacirq.s

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