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

📄 pacirq.s

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