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

📄 platform.inc

📁 eCos1.31版
💻 INC
字号:
#ifndef CYGONCE_HAL_PLATFORM_INC#define CYGONCE_HAL_PLATFORM_INC##=============================================================================####	platform.inc####	DDB-VRC4373 board assembler header file####=============================================================================#####COPYRIGHTBEGIN#####                                                                          # -------------------------------------------                              # The contents of this file are subject to the Red Hat eCos Public License # Version 1.1 (the "License"); you may not use this file except in         # compliance with the License.  You may obtain a copy of the License at    # http://www.redhat.com/                                                   #                                                                          # Software distributed under the License is distributed on an "AS IS"      # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the # License for the specific language governing rights and limitations under # the License.                                                             #                                                                          # The Original Code is eCos - Embedded Configurable Operating System,      # released September 30, 1998.                                             #                                                                          # The Initial Developer of the Original Code is Red Hat.                   # Portions created by Red Hat are                                          # Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             # All Rights Reserved.                                                     # -------------------------------------------                              #                                                                          #####COPYRIGHTEND######=============================================================================#######DESCRIPTIONBEGIN######## Author(s): 	nickg## Contributors:	nickg## Date:	1999-04-06## Purpose:	VRC4373 board definitions.## Description:	This file contains various definitions and macros that are##              useful for writing assembly code for the VRC4373 board.## Usage:##		#include <cyg/hal/platform.inc>##		...##		########DESCRIPTIONEND########=============================================================================#include <cyg/hal/mips.inc>##-----------------------------------------------------------------------------## VRC4372 registers			#define CYGHWR_HAL_MIPS_VRC4373_BASE            0xbc000000#define CYGHWR_HAL_MIPS_VRC4373_INTC_POL        (CYGHWR_HAL_MIPS_VRC4373_BASE+0x200)#define CYGHWR_HAL_MIPS_VRC4373_INTC_TRIG       (CYGHWR_HAL_MIPS_VRC4373_BASE+0x204)#define CYGHWR_HAL_MIPS_VRC4373_INTC_PINS       (CYGHWR_HAL_MIPS_VRC4373_BASE+0x208)#define CYGHWR_HAL_MIPS_VRC4373_INTC_MASK0      (CYGHWR_HAL_MIPS_VRC4373_BASE+0x20c)#define CYGHWR_HAL_MIPS_VRC4373_INTC_STAT0      (CYGHWR_HAL_MIPS_VRC4373_BASE+0x210)#define CYGHWR_HAL_MIPS_VRC4373_INTC_MASK1      (CYGHWR_HAL_MIPS_VRC4373_BASE+0x214)#define CYGHWR_HAL_MIPS_VRC4373_INTC_STAT1      (CYGHWR_HAL_MIPS_VRC4373_BASE+0x218)#define CYGHWR_HAL_MIPS_VRC4373_INTC_MASK2      (CYGHWR_HAL_MIPS_VRC4373_BASE+0x21c)#define CYGHWR_HAL_MIPS_VRC4373_INTC_STAT2      (CYGHWR_HAL_MIPS_VRC4373_BASE+0x220)	##-----------------------------------------------------------------------------## configure the architecture HAL to define the right things.## ISR tables are defined in platform.S#define CYG_HAL_MIPS_ISR_TABLES_DEFINED## VSR table is at a fixed RAM address defined by the linker script#define CYG_HAL_MIPS_VSR_TABLE_DEFINED##-----------------------------------------------------------------------------#if defined(CYGSEM_HAL_USE_ROM_MONITOR_PMON)## Initial SR value for use with PMON:## CP0 usable## Vectors to RAM## All hw ints disabled#define INITIAL_SR	0x10000000	#elif defined(CYGSEM_HAL_USE_ROM_MONITOR_GDB_stubs)## Initial SR value for use with GDB stubs:## CP0 and CP1 usable## FP registers are 64 bit	## Vectors to RAM## All hw ints disabled#define INITIAL_SR	0x34000000		#else	## Initial SR value for use standalone:## CP0 usable## Vectors to RAM## All hw ints disabled#define INITIAL_SR	0x10000000	#endif#------------------------------------------------------------------------------## Load Address and Relocate. This macro is used in code that may be## linked to execute out of RAM but is actually executed from ROM. The## code that initializes the memory controller and copies the ROM## contents to RAM must work in this way, for example. This macro is used## in place of an "la" macro instruction when loading code and data## addresses.  There are two versions of the macro here. The first## assumes that we are executing in the ROM space at 0xbfc00000 and are## linked to run in the RAM space at 0x80000000.  It simply adds the## difference between the two to the loaded address.  The second is more## code, but will execute correctly at either location since it## calculates the difference at runtime.  The second variant is enabled## by default.#ifdef CYG_HAL_STARTUP_ROMRAM#if 0	.macro	lar	reg,addr	.set	noat	la	\reg,\addr	la	$at,0x3fc00000	add	\reg,\reg,$at	.set	at	.endm#else	.macro	lar	reg,addr	.set	noat	move	$at,ra			# save ra	la	\reg,\addr		# get address into register	la	ra,x\@			# get linked address of label	subu	\reg,\reg,ra		# subtract it from value	bal	x\@			# branch and link to label	nop				#  to get current actual addressx\@:	addu	\reg,\reg,ra		# add actual address	move	ra,$at			# restore ra	.set	at	.endm#endif#define	CYGPKG_HAL_MIPS_LAR_DEFINED#endif				#------------------------------------------------------------------------------# MMU macros.# The MMU must be set up on this board before we can access any external devices,# including the memory controller, so we have no RAM to work with yet.# Since the setup code must work only in registers, we do not do a subroutine# linkage here, instead the setup code knows to jump back here when finished.	#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)	.macro	hal_mmu_init	.extern	hal_mmu_setup	lar	k0,hal_mmu_setup	jr	k0        nop	.global hal_mmu_setup_returnhal_mmu_setup_return:	.endm#define CYGPKG_HAL_MIPS_MMU_DEFINED#endif	#------------------------------------------------------------------------------# MEMC macros.# 	#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)	.macro	hal_memc_init	.extern	hal_memc_setup	lar	k0,hal_memc_setup	jalr	k0	nop	# Having got the RAM working, we must now relocate the Entire	# ROM into it and then continue execution from RAM.	la	t0,0x80000000		# dest addr	la	t1,0xbfc00000		# source addr	la	t3,__ram_data_end	# end dest addr1:		lw	v0,0(t1)		# get word	addi	t1,t1,4	sw	v0,0(t0)		# write word	addi	t0,t0,4	bne	t0,t3,1b	nop	la	v0,2f			# RAM address to go to	jr	v0	nop2:		# We are now executing out of RAM!	.endm#define CYGPKG_HAL_MIPS_MEMC_DEFINED#endif	#------------------------------------------------------------------------------# Interrupt controller initialization.	# initialize all interrupts to disabled	.macro	hal_intc_init	mfc0	v0,status	nop	la	v1,0xFFFF00FF	and	v0,v0,v1		# clear the IntMask bits	ori	v0,v0,0x3800		# set 3 IPL bits	mtc0	v0,status	nop	nop	nop	# mask them all in the VRC4372 interrupt controller too,	# and write zeros to the status registers to clear any	# pending interrupts.	la	v0,CYGHWR_HAL_MIPS_VRC4373_INTC_MASK0	sw	zero,0(v0)	sw	zero,4(v0)	sw	zero,8(v0)	sw	zero,12(v0)	sw	zero,16(v0)	sw	zero,20(v0)	.endm#define CYGPKG_HAL_MIPS_INTC_INIT_DEFINED#------------------------------------------------------------------------------# Monitor initialization.	#ifndef CYGPKG_HAL_MIPS_MON_DEFINED	.macro	hal_mon_init	hal_mon_copy_trampoline	hal_mon_init_vsr_table	.endm#if defined(CYGSEM_HAL_USE_ROM_MONITOR_PMON)	# Copy the other_vector trampoline code into the RAM	# area so we intercept all interrupts.	.macro	hal_mon_copy_trampoline	la	a0,other_vector	la	a1,other_vector_end	la	t0,0xa00001801:	lw	v0,0(a0)	sw	v0,0(t0)	addiu	a0,a0,4	bne	a0,a1,1b	addiu	t0,t0,4	.endm	# plant a pointer to the breakpoint springboard into the	# correct vsr table slot.	.macro	hal_mon_init_vsr_table	.extern hal_breakpoint_springboard	la	v1,hal_vsr_table	# Plant the interrupt VSR	la	v0,__default_interrupt_vsr	sw	v0,(0*4)(v1)	# And the breakpoint VSR	la	v0,hal_breakpoint_springboard	sw	v0,(9*4)(v1)	# Temporarily also plant all the others, so all exceptions	# go to PMON.	sw	v0,(4*4)(v1)	sw	v0,(5*4)(v1)	sw	v0,(6*4)(v1)	sw	v0,(7*4)(v1)	sw	v0,(8*4)(v1)	sw	v0,(10*4)(v1)	sw	v0,(11*4)(v1)	sw	v0,(12*4)(v1)	sw	v0,(13*4)(v1)	sw	v0,(14*4)(v1)	sw	v0,(15*4)(v1) 	.endm#elif defined(CYGSEM_HAL_USE_ROM_MONITOR_GDB_stubs)	# The stubs have a trampoline of their own installed which	# already goes through the VSR table.	.macro	hal_mon_copy_trampoline	.endm	# plant a pointer to the interrupt VSR handler in the	# correct vsr table slot. Leave the rest for the monitor.	.macro	hal_mon_init_vsr_table	la	v0,__default_interrupt_vsr	la	v1,hal_vsr_table	sw	v0,(0*4)(v1)	# plant a pointer to our own bus error handler. See the	# comments in platform.S.	.extern	hal_bus_error_vsr	la	v0,hal_bus_error_vsr	sw	v0,(7*4)(v1)	.endm#else	# The other_vector trampoline is already installed as part of	# the executable image. However, the TLB exception is, in RAM	# in the analogous place to the reset vector in ROM. In a	# ROM or ROMRAM startup we need to copy it into place.#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)	.macro	hal_mon_copy_trampoline	la	a0,utlb_vector	la	a1,utlb_vector_end	la	t0,0xa00000001:	lw	v0,0(a0)	sw	v0,0(t0)	addiu	a0,a0,4	bne	a0,a1,1b	addiu	t0,t0,4	.endm#else	.macro	hal_mon_copy_trampoline	.endm#endif	# Fill the VSR table with the default VSRs.	# If we contain the stubs, the default VSR will pass	# exceptions on to the stubs.	.macro	hal_mon_init_vsr_table	la	v0,__default_exception_vsr	la	v1,hal_vsr_table	sw	v0,(1*4)(v1)	sw	v0,(2*4)(v1)	sw	v0,(3*4)(v1)	sw	v0,(4*4)(v1)	sw	v0,(5*4)(v1)	sw	v0,(6*4)(v1)	sw	v0,(7*4)(v1)	sw	v0,(8*4)(v1)	sw	v0,(9*4)(v1)	sw	v0,(10*4)(v1)	sw	v0,(11*4)(v1)	sw	v0,(12*4)(v1)	sw	v0,(13*4)(v1)	sw	v0,(14*4)(v1)	sw	v0,(15*4)(v1)	sw	v0,(23*4)(v1)	sw	v0,(24*4)(v1)#	sw	v0,(32*4)(v1)	# debug	sw	v0,(33*4)(v1)	# utlb	sw	v0,(34*4)(v1)	# nmi	la	v0,__default_interrupt_vsr	sw	v0,(0*4)(v1)	.endm#endif#define CYGPKG_HAL_MIPS_MON_DEFINED#endif	#------------------------------------------------------------------------------# Diagnostic macros#ifndef CYGPKG_HAL_MIPS_DIAG_DEFINED#if 0	# This code generates characters and hex values to a	# Grammar Engine PromICE AI interface.#define AILOC	0xbfc70000	.macro	hal_diag_init	la	v0,AILOC1:		lbu	v1,3(v0)	nop ; nop ; nop	subu	v1,0xCC	beqz	v1,1b	nop	lbu	v1,2(v0)	b	9f	nop	.global	hal_diag_ai_write_charhal_diag_ai_write_char:		.set	noat	la	v0,AILOC	# v0 = AI location		1:	lbu	v1,3(v0)	# v1 = status register	nop ; nop ; nop	andi	v1,v1,1		# v1 = TDA bit	bnez	v1,1b		# loop while non-zero	nop		sll	a0,a0,1		# a0 = a0<<1	ori	a0,a0,0x0201	# or in start and stop bits	li	$at,10		# we have 10 bits to send2:	andi	v1,a0,1		# v1 = ls bit of char	add	v1,v0,v1	# v1 = address of ZERO or ONE register	lbu	zero,0(v1)	# read it to send bit	la	v1,100		# delay a bit to let PROMICE deal with it3:	bnez	v1,3b		# loop while non-zero	add	v1,v1,-1	# decrement in delay slot	srl	a0,a0,1		# a0 = a0>>1	subu	$at,1		# decrement count	bnez	$at,2b		# loop while non-zero	nop	jr	ra		# all done, return	nop	.set	at	.global hal_diag_ai_write_hex1hal_diag_ai_write_hex1:	la	v0,9	andi	a0,a0,0xf	ble	a0,v0,1f	nop	addi	a0,a0,('A'-'9'-1)1:	addi	a0,a0,'0'	b	hal_diag_ai_write_char	nop	.global hal_diag_ai_write_hex2hal_diag_ai_write_hex2:	move	t0,ra		# save ra	move	t1,a0		# save arg	srl	a0,a0,4		# ms nibble		bal	hal_diag_ai_write_hex1	nop		move	a0,t1		# retrieve a0	move	ra,t0		# retrieve ra	b	hal_diag_ai_write_hex1	nop	.global hal_diag_ai_write_hex4hal_diag_ai_write_hex4:	move	t2,ra		# save ra	move	t3,a0		# save arg	srl	a0,a0,8		# ms byte		bal	hal_diag_ai_write_hex2	nop		move	a0,t3		# retrieve a0	move	ra,t2		# retrieve ra	b	hal_diag_ai_write_hex2	nop	.global hal_diag_ai_write_hex8hal_diag_ai_write_hex8:	move	t4,ra		# save ra	move	t5,a0		# save arg	srl	a0,a0,16	# ms short		bal	hal_diag_ai_write_hex4	nop		move	a0,t5		# retrieve a0	move	ra,t4		# retrieve ra	b	hal_diag_ai_write_hex4	nop	9:	# Output a '!' to check that the interface is working	li	a0,'!'	bal	hal_diag_ai_write_char	nop	.endm	# Utility macro to emit a character	.macro	hal_diag_writec char	.extern hal_diag_ai_write_char	la	a0,\char	lar	v0,hal_diag_ai_write_char	jalr	v0#	bal	hal_diag_ai_write_char	nop	.endm#if 0	# This macro outputs a '+', the exception number as a	# character offset from 'A' and the exception address	# in hex.	.macro	hal_diag_excpt_start	hal_diag_writec '+'	srl	k0,k0,2	addi	a0,k0,'A'	jal	hal_diag_ai_write_char	nop	move	a0,t6			# we know t6 contains the epc value	jal	hal_diag_ai_write_hex8	nop	.endm#else	.macro	hal_diag_excpt_start	.endm#endif#if 0	# This macro outputs a '=' and the vector number as a	# character offset from 'A'.	.macro	hal_diag_intr_start	.extern hal_diag_ai_write_char	hal_diag_writec '='	addi	a0,s2,'A'	jal	hal_diag_ai_write_char	nop	.endm#else	.macro	hal_diag_intr_start	.endm#endif#if 0	.macro	hal_diag_restore	hal_diag_writec '^'	lw	a0,mipsreg_pc(sp)	lar	k0,hal_diag_ai_write_hex8	jalr	k0	.endm#else	.macro	hal_diag_restore	.endm#endif#define CYGPKG_HAL_MIPS_DIAG_DEFINED		#elif 0#define DELAY(n) \        li      $at,n;		\9:	bnez    $at,9b;	 	\        subu    $at,1; 		\ /* Zilog Access Delay */#define DELZ 		DELAY( (200) )	.macro	hal_diag_init	la	v0,0xc2000000	DELZ	lbu	v1,8(v0)	andi	v1,v1,0xfc	DELZ	sb	v1,8(v0)	.endm	.macro	hal_diag_excpt_start	.endm	.macro	hal_diag_intr_start	la	v0,0xc2000000	DELZ	lbu	v1,8(v0)	xori	v1,v1,0x01	DELZ	sb	v1,8(v0)	.endm	.macro	hal_diag_restore	la	v0,0xc2000000	DELZ	lbu	v1,8(v0)	xori	v1,v1,0x01	DELZ	sb	v1,8(v0)#	li	a0,0x0310			# a0 = type = INTR,RAISE#	lw	a1,mipsreg_sr(sp)		# a1 = sr#	mfc0	a2,status#	jal	cyg_instrument			# call instrument function#	nop	.endm#define CYGPKG_HAL_MIPS_DIAG_DEFINED#endif#endif	#------------------------------------------------------------------------------#endif // ifndef CYGONCE_HAL_PLATFORM_INC# end of platform.inc

⌨️ 快捷键说明

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