variant.inc
来自「eCos操作系统源码」· INC 代码 · 共 250 行
INC
250 行
#ifndef CYGONCE_HAL_VARIANT_INC#define CYGONCE_HAL_VARIANT_INC##=============================================================================#### variant.inc#### IDT32334 family assembler header file####=============================================================================#####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): tmichals## Contributors: nickg## Date: 2003-02-13## Purpose: MIPS IDT32334 family definitions.## Description: This file contains various definitions and macros that are## useful for writing assembly code for the MIPS IDT32334 CPU family.## Usage:## #include <cyg/hal/variant.inc>## ...## ########DESCRIPTIONEND########=============================================================================#include <pkgconf/hal.h>#include <cyg/hal/mips.inc>#include <cyg/hal/platform.inc>#define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS#ifndef __ASSEMBLER__#define __ASSEMBLER__#endif//#include <cyg/hal/mips-regs.h>#define CYGARC_ADDRESS_REG_UNCACHED(reg) \ and reg, reg, ~CYGARC_KSEG_MASK; \ or reg, reg, CYGARC_KSEG_UNCACHED#define CYGARC_KSEG_MASK (0xE0000000)#define CYGARC_KSEG_CACHED (0x80000000)#define CYGARC_KSEG_UNCACHED (0xA0000000)#define CYGARC_KSEG_CACHED_BASE (0x80000000)#define CYGARC_KSEG_UNCACHED_BASE (0xA0000000)//-----------------------------------------------------------------------------// 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 .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 sub \reg,\reg,ra # subtract it from value bal x\@ # branch and link to label nop # to get current actual addressx\@: add \reg,\reg,ra # add actual address move ra,$at # restore ra.set at .endm #define CYGPKG_HAL_MIPS_LAR_DEFINED#endif#------------------------------------------------------------------------------# Cache macros. #ifndef CYGPKG_HAL_MIPS_CACHE_DEFINED .macro hal_cache_init # Setup a temporary stack pointer for running C code. la a0,__interrupt_stack move sp,a0 CYGARC_ADDRESS_REG_UNCACHED(sp) # Read the CONFIG1 register into a0# mfc0 a0, C0_CONFIG nop nop nop # Jump to C-code to initialize caches (uncached) lar k0, hal_c_cache_init CYGARC_ADDRESS_REG_UNCACHED(k0) jalr k0 nop .endm#define CYGPKG_HAL_MIPS_CACHE_DEFINED#endif ##-----------------------------------------------------------------------------## Define CPU variant for architecture HAL. ##-----------------------------------------------------------------------------## Indicate that the ISR tables are defined in variant.S#define CYG_HAL_MIPS_ISR_TABLES_DEFINED##-----------------------------------------------------------------------------## #ifndef CYGPKG_HAL_MIPS_MEMC_DEFINED## ROM timing characteristics are dependent on the clock speed. .macro hal_memc_init .endm#define CYGPKG_HAL_MIPS_MEMC_DEFINED #endif ##-----------------------------------------------------------------------------## IDT32334 interrupt handling.#ifndef CYGPKG_HAL_MIPS_INTC_DEFINED # Set all ILRX registers to 0, masking all external interrupts. .macro hal_intc_init .endm .macro hal_intc_decode vnum mfc0 v1,cause nop mfc0 v0,status nop and v1,v0,v1 srl v1,v1,11 # shift IP bits to ls bits andi v1,v1,0x7F # isolate IP bits la v0,hal_intc_translation_table # address of translation table add v0,v0,v1 # offset of index byte lb \vnum,0(v0) # load it .endm#ifndef CYGPKG_HAL_MIPS_INTC_TRANSLATE_DEFINED#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN .macro hal_intc_translate inum,vnum move \vnum,zero # Just vector zero is supported .endm#else .macro hal_intc_translate inum,vnum move \vnum,\inum # Vector == interrupt number .endm#endif#endif# This table translates from the 6 bit value supplied in the IP bits# of the cause register into a 0..16 offset into the ISR tables. .macro hal_intc_decode_datahal_intc_translation_table: .byte 0,1,0,0,3,3,0,0 .byte 0,0,0,0,0,0,0,0 .byte 5,5,0,0,3,5,0,0 .byte 0,0,0,0,0,0,0,0 .byte 0,0,0,0,0,0,0,0 .byte 0,0,0,0,0,0,0,0 .byte 0,0,0,0,0,0,0,0 .byte 0,0,0,0,0,0,0,0 .endm#define CYGPKG_HAL_MIPS_INTC_DEFINED#endif#------------------------------------------------------------------------------# Diagnostics macros. #if 0 #ifndef CYGPKG_HAL_MIPS_DIAG_DEFINED # Set up PIO0 for debugging output .macro hal_diag_init .endm#define CYGPKG_HAL_MIPS_DIAG_DEFINED #endif #endif#------------------------------------------------------------------------------#endif // ifndef CYGONCE_HAL_VARIANT_INC# end of variant.inc
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?