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

📄 vectors.s

📁 eCos操作系统源码
💻 S
📖 第 1 页 / 共 2 页
字号:
##=============================================================================####	vectors.S####	H8/300 exception vectors####=============================================================================#####ECOSGPLCOPYRIGHTBEGIN###### -------------------------------------------## This file is part of eCos, the Embedded Configurable Operating System.## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.#### eCos is free software; you can redistribute it and/or modify it under## the terms of the GNU General Public License as published by the Free## Software Foundation; either version 2 or (at your option) any later version.#### eCos is distributed in the hope that it will be useful, but WITHOUT ANY## WARRANTY; without even the implied warranty of MERCHANTABILITY or## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License## for more details.#### You should have received a copy of the GNU General Public License along## with eCos; if not, write to the Free Software Foundation, Inc.,## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.#### As a special exception, if other files instantiate templates or use macros## or inline functions from this file, or you compile this file and link it## with other works to produce a work based on this file, this file does not## by itself cause the resulting work to be covered by the GNU General Public## License. However the source code for this file must still be made available## in accordance with section (3) of the GNU General Public License.#### This exception does not invalidate any other reasons why a work based on## this file might be covered by the GNU General Public License.#### Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.## at http://sources.redhat.com/ecos/ecos-license/## -------------------------------------------#####ECOSGPLCOPYRIGHTEND######=============================================================================#######DESCRIPTIONBEGIN######## Author(s): 	Yoshinori Sato## Contributors: Yoshinori Sato## Date:	2002-02-14## Purpose:	H8/300 exception vectors## Description:	This file defines the code placed into the exception##              vectors. It also contains the first level default VSRs##		that save and restore state for both exceptions and##		interrupts.########DESCRIPTIONEND########=============================================================================#include <pkgconf/hal.h>#ifdef CYGPKG_REDBOOT#include <pkgconf/redboot.h>#endif	#ifdef CYGPKG_KERNEL#include <pkgconf/kernel.h>	#endif		#include <cyg/hal/arch.inc>	#include <cyg/hal/basetype.h>	#include <cyg/hal/variant.inc>				##-----------------------------------------------------------------------------	#ifdef CYGPKG_HAL_H8300_H8300H	.h8300h	.macro	shll2 reg	shll.l	\reg	shll.l	\reg	.endm	.macro	shlr2 reg	shlr.l	\reg	shlr.l	\reg	.endm#endif#ifdef CYGPKG_HAL_H8300_H8S	.h8300s	.macro	shll2 reg	shll.l	#2,\reg	.endm	.macro	shlr2 reg	shlr.l	#2,\reg	.endm#endif	#ifdef CYGPKG_CYGMON##-----------------------------------------------------------------------------## Macros for Stack handling when running Cygmon        		.macro hal_cygmon_switch_app_stack#ifdef CYGPKG_HAL_H8300_H8300H	; Switch to interrupt stack to handle exception	; First, save some scratch registers	mov.l	er0,@-sp	mov.l	er1,@-sp	; Copy the exception frame	mov.l	#__cygmon_interrupt_stack,er0	mov.l	@(8:16,sp),er1	mov.l	er1,@-er0	; Save the pre-exception sp in the register image	 	mov.l	sp,@-er0	; Actually switch the stack	mov.l	er0,sp		mov.l	@sp,er0	adds	#4,er0	adds	#4,er0	mov.l	er0,@sp	; Now, restore the scratch registers	mov.l	@(-4:16,er0),er1	mov.l	@(-8:16,er0),er0#endif#ifdef CYGPKG_HAL_H8300_H8S	; Switch to interrupt stack to handle exception	; First, save some scratch registers	stm.l	er0-er1,@-sp		; Copy the exception frame	mov.l	#__cygmon_interrupt_stack,er0	mov.l	@(10,sp:16),er1	mov.l	er1,@-er0	mov.w	@(10,sp:16),r1	mov.w	r1,@-er0	; Save the pre-exception sp in the register image	 	mov.l	sp,@-er0	; Actually switch the stack	mov.l	er0,sp		mov.l	@sp,er0	adds	#4,er0	adds	#4,er0	mov.l	er0,@sp	; Now, restore the scratch registers	mov.l	@(-4:16,er0),er1	mov.l	@(-8:16,er0),er0#endif.endm.macro hal_cygmon_restore_app_stack	// For cygmon we are switching stacks immediately on exception.	// We must wait until the very end before restoring the original stack.#ifdef CYGPKG_HAL_H8300_H8300H	; Save some scratch registers	subs	#4,sp	mov.l	er0,@-sp	mov.l	er1,@-sp	; We need to restore the application stack pointer, but we also	; need to restore the exception frame.	mov.l	@(12:16,sp),er0	mov.l	@(16:16,sp),er1	mov.l	er1,@er0	mov.l	er0,@(8:16,sp)	; Restore the scratch registers	mov.l	@sp+,er1	mov.l	@sp+,er0	mov.l	@sp+,sp			// Restore the frame-adjusted SP#endif#ifdef CYGPKG_HAL_H8300_H8S	; Save some scratch registers	subs	#4,sp	stm.l	er0-er1,@-sp	; We need to restore the application stack pointer, but we also	; need to restore the exception frame.	mov.l	@(12:16,sp),er0	mov.w	@(16:16,sp),r1	mov.w	r1,@er0	mov.l	@(18:16,sp),er1	mov.l	er1,@er0	mov.l	er0,@(8:16,sp)	; Restore the scratch registers	ldm.l	@sp+,er0-er1	mov.l	@sp+,sp			// Restore the frame-adjusted SP#endif.endm#endif // CYGPKG_CYGMON##-----------------------------------------------------------------------------		#if (defined(CYG_HAL_STARTUP_ROM) || \     defined(CYGPKG_HAL_H8300_H8300H_SIM) || \     defined(CYGPKG_HAL_H8300_H8S_SIM))    	.section .vectors,"a"		.globl	reset_vectorreset_vector:	.long	CYG_LABEL_DEFN(_start)	.long	CYG_LABEL_DEFN(_start)vector	=	2	.rept	CYG_ISR_TABLE_SIZE-2	.long	interrupt_redirect_table+vector*4vector	=	vector + 1	.endr#endif#if !defined(CYGSEM_HAL_H8300_VECTOR_HOOK)	.section .int_hook_table,"ax"interrupt_redirect_table:	vector	=	0	.rept	CYG_ISR_TABLE_SIZE	jsr	@interrupt_entryvector	=	vector + 1	.endr#else	.section .int_hook_table,"x"interrupt_redirect_table:		.space	4*CYG_ISR_TABLE_SIZE#endif##-----------------------------------------------------------------------------## Startup code				.text	.globl	CYG_LABEL_DEFN(_start)CYG_LABEL_DEFN(_start):	; set up stack	mov.l	#__interrupt_stack,sp		; Initialize hardware	hal_cpu_init	hal_mmu_init	hal_memc_init	hal_diag_init	hal_intc_init	hal_cache_init	hal_timer_init	hal_mon_init#ifdef CYG_HAL_STARTUP_ROM		; Copy data from ROM to RAM	mov.l	#CYG_LABEL_DEFN(__rom_data_start),er5	mov.l	#CYG_LABEL_DEFN(__ram_data_start),er6	mov.l	#CYG_LABEL_DEFN(__ram_data_end),er4	sub.l	er6,er4	shlr2	er41:		mov.l	@er5+,er0	mov.l	er0,@er6	adds	#4,er6	dec.l	#1,er4	bne	1b#endif#if defined(CYGSEM_HAL_H8300_VECTOR_HOOK)	; Setup Interrupt Vector (virtual)	;; check rom table	mov.l	#8*4,er0	mov.l	@er0+,er1	adds	#4,er1	mov.b	#3,r3l1:	mov.l	@er0+,er2	cmp.l	er1,er2	bne	3f	adds	#4,er1	dec.b	r3l	bne	1b	;; calculate vector address	mov.l	@8*4,er0	and.w	#0xff,e0	sub.l	#8*4,er0	;; build ram vector	mov.l	er0,@__interrupt_table	mov.l	#0x5e000000+interrupt_entry,er1	mov.l	#save_vector_table,er3	mov.b	#0,r2l2:	;; check saved vector	mov.b	@er3+,r2h	cmp.b	r2l,r2h	beq	5f	subs	#1,er3	mov.l	er1,@er05:		adds	#4,er0	inc.b	r2l	cmp.b	#CYG_ISR_TABLE_SIZE,r2l	bcs	2b	bra	4f3:	bra	3b4:			#else	mov.l	#interrupt_redirect_table,er0	mov.l	er0,@__interrupt_table#endif		; Clear BSS	mov.l	#CYG_LABEL_DEFN(__bss_start),er5	mov.l	#CYG_LABEL_DEFN(__bss_end),er4	sub.l	#CYG_LABEL_DEFN(__bss_start),er4	shlr2	er4	sub.l	er0,er01:	mov.l	er0,@er5	adds	#4,er5	dec.l	#1,er4	bne	1b		; Call variant and platform HAL	; initialization routines.	.extern CYG_LABEL_DEFN(hal_variant_init)	jsr	@CYG_LABEL_DEFN(hal_variant_init)	.extern CYG_LABEL_DEFN(hal_platform_init)	jsr	@CYG_LABEL_DEFN(hal_platform_init)		; Call constructors	.extern CYG_LABEL_DEFN(cyg_hal_invoke_constructors)	jsr	@CYG_LABEL_DEFN(cyg_hal_invoke_constructors)#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS        .extern CYG_LABEL_DEFN(initialize_stub)        jsr	@CYG_LABEL_DEFN(initialize_stub)#endif#if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) \    || defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT)	.extern CYG_LABEL_DEFN(hal_ctrlc_isr_init)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -