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

📄 pacexc.s

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