URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [hal/] [sh/] [sh2/] [current/] [include/] [variant.inc] - Rev 786
Compare with Previous | Blame | View Log
#ifndef CYGONCE_HAL_VARIANT_INC#define CYGONCE_HAL_VARIANT_INC##=============================================================================#### variant.inc#### SH2 variant assembler header file####=============================================================================## ####ECOSGPLCOPYRIGHTBEGIN###### -------------------------------------------## This file is part of eCos, the Embedded Configurable Operating System.## Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, 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.,## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 v2.#### This exception does not invalidate any other reasons why a work based## on this file might be covered by the GNU General Public License.## -------------------------------------------## ####ECOSGPLCOPYRIGHTEND######=============================================================================#######DESCRIPTIONBEGIN######## Author(s): jskov## Contributors:jskov## Date: 2002-01-17## Purpose: SH2 variant definitions and init code## Description: This file contains various definitions and macros that are## useful for writing assembly code for the SH2 CPU family.## Usage:## #include <cyg/hal/variant.inc>## ...##########DESCRIPTIONEND########=============================================================================#include <pkgconf/hal.h>#include <cyg/hal/sh_regs.h>#===========================================================================## SR initialization value## zero all bits except:## I0-3 = Mask out all interrupts but NMI.#define CYG_SR (CYGARC_REG_SR_IMASK)##-----------------------------------------------------------------------------## Hardware init macros#ifndef CYGPKG_HAL_SH_POST_RESET_INIT.macro hal_post_reset_init# Initialize CPUmov.l $nCYG_SR,r1 ! Put CPU in a well-known stateldc r1,srmov #0,r0mov.l $CYGARC_REG_CCR,r1 ! Disable cache#if (CYGARC_SH_MOD_CAC == 1)mov.b r0,@r1#elif (CYGARC_SH_MOD_CAC == 2)mov.w r0,@r1#else# error "No CAC clear code"#endif#ifdef CYGARC_SH_MOD_UBC#if (CYGARC_SH_MOD_UBC == 2)mov.l $CYGARC_REG_BBRA,r1 ! Disable UBC Channel Amov.w r0,@r1mov.l $CYGARC_REG_BBRB,r1 ! Disable UBC Channel Bmov.w r0,@r1mov.l $CYGARC_REG_BBRC,r1 ! Disable UBC Channel Cmov.w r0,@r1mov.l $CYGARC_REG_BBRD,r1 ! Disable UBC Channel Dmov.w r0,@r1#endif#endif#ifdef CYGARC_SH_MOD_FRTmov.l $CYGARC_REG_TIER,r1 ! Disable FRT interruptsmov.b r0,@r1#endif#ifdef CYGARC_SH_MOD_CMTmov.l $CYGARC_REG_CMSTR,r1 ! Disable CMT timersmov.w r0,@r1#endifmov.l $CYGARC_REG_IPRA,r1 ! Disable interrupt request sourcesmov.w r0,@r1mov.l $CYGARC_REG_IPRB,r1mov.w r0,@r1#if (CYGARC_SH_MOD_INTC == 1)mov.l $CYGARC_REG_IPRC,r1mov.w r0,@r1mov.l $CYGARC_REG_IPRD,r1mov.w r0,@r1mov.l $CYGARC_REG_IPRE,r1mov.w r0,@r1mov.w $nCYG_ICR_INIT,r0mov.l $CYGARC_REG_ICR,r1 ! Set interrupt controller modemov.w r0,@r1#elif (CYGARC_SH_MOD_INTC == 2)mov.l $CYGARC_REG_IPRC,r1mov.w r0,@r1mov.l $CYGARC_REG_IPRD,r1mov.w r0,@r1mov.l $CYGARC_REG_IPRE,r1mov.w r0,@r1mov.l $CYGARC_REG_IPRF,r1mov.w r0,@r1mov.l $CYGARC_REG_IPRG,r1mov.w r0,@r1mov.l $CYGARC_REG_IPRH,r1mov.w r0,@r1mov.l $CYGARC_REG_ICR,r1 ! level triggeredmov.w r0,@r1mov.l $CYGARC_REG_ISR,r1 ! Clear any flagsmov.w r0,@r1#else# error "No INTC clear code"#endifmov.w $nCYG_WTCSR_INIT,r0 ! Disable watchdogmov.l $CYGARC_REG_WTCSR_W,r1mov.w r0,@r1# Initialize VBR if necessary#if !defined(CYG_HAL_STARTUP_RAM) || !defined(CYGSEM_HAL_USE_ROM_MONITOR)mov.l $_HW_EXC_ENTRY_TABLE,r1 ! Set VBRldc r1,vbr#endifbra 1fnop$nCYG_WTCSR_INIT:.word CYGARC_REG_WTCSR_INIT ! clear all CSR bits.align 2$nCYG_SR:.long CYG_SR$CYGARC_REG_CCR:.long CYGARC_REG_CCR$CYGARC_REG_BBRA:.long CYGARC_REG_BBRA$CYGARC_REG_BBRB:.long CYGARC_REG_BBRB$CYGARC_REG_BBRC:.long CYGARC_REG_BBRC$CYGARC_REG_BBRD:.long CYGARC_REG_BBRD#ifdef CYGARC_SH_MOD_FRT$CYGARC_REG_TIER:.long CYGARC_REG_TIER#endif#ifdef CYGARC_SH_MOD_CMT$CYGARC_REG_CMSTR:.long CYGARC_REG_CMSTR#endif$CYGARC_REG_WTCSR_W:.long CYGARC_REG_WTCSR_W#if !defined(CYG_HAL_STARTUP_RAM) || !defined(CYGSEM_HAL_USE_ROM_MONITOR)SYM_PTR_REF(_HW_EXC_ENTRY_TABLE)#endif$CYGARC_REG_IPRA:.long CYGARC_REG_IPRA$CYGARC_REG_IPRB:.long CYGARC_REG_IPRB#if (CYGARC_SH_MOD_INTC == 1)$CYGARC_REG_IPRC:.long CYGARC_REG_IPRC$CYGARC_REG_IPRD:.long CYGARC_REG_IPRD$CYGARC_REG_IPRE:.long CYGARC_REG_IPRE$CYGARC_REG_ICR:.long CYGARC_REG_ICR$nCYG_ICR_INIT:.word CYGARC_REG_ICR_INIT#elif (CYGARC_SH_MOD_INTC == 2)$CYGARC_REG_IPRC:.long CYGARC_REG_IPRC$CYGARC_REG_IPRD:.long CYGARC_REG_IPRD$CYGARC_REG_IPRE:.long CYGARC_REG_IPRE$CYGARC_REG_IPRF:.long CYGARC_REG_IPRF$CYGARC_REG_IPRG:.long CYGARC_REG_IPRG$CYGARC_REG_IPRH:.long CYGARC_REG_IPRH$CYGARC_REG_ICR:.long CYGARC_REG_ICR$CYGARC_REG_ISR:.long CYGARC_REG_ISR#endif1:.endm#define CYGPKG_HAL_SH_POST_RESET_INIT#endif##-----------------------------------------------------------------------------## Interrupt decode macros.macro hal_intc_decode tmp,inum.endm#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN.macro hal_intc_translate inum,vnummov #0,\vnum ! Just vector zero is supported.endm#else.macro hal_intc_translate inum,vnummov \inum,\vnum ! Vector == interrupt numbershll2 \vnum ! get from vector number to ISR index.endm#endif#------------------------------------------------------------------------------#endif // CYGONCE_HAL_VARIANT_INC# end of variant.inc
