📄 hal_intr.h
字号:
#ifndef CYGONCE_HAL_INTR_H#define CYGONCE_HAL_INTR_H//===========================================================================//// hal_intr.h//// HAL Interrupt and clock support////===========================================================================//####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): nickg, gthomas, hmt// Contributors: nickg, gthomas, hmt,// jlarmour// Date: 1999-02-20// Purpose: Define Interrupt support// Description: The macros defined here provide the HAL APIs for handling// interrupts and the clock.// // Usage:// #include <cyg/hal/hal_intr.h>// ...// ////####DESCRIPTIONEND####////===========================================================================#include <pkgconf/hal.h>#include <pkgconf/hal_sparclite.h>#include <cyg/infra/cyg_type.h>//---------------------------------------------------------------------------// SPARClite exception vectors.//// A note on nomenclature://// SPARClite has traps: interrupts are traps, and so are exceptions.// There are 255 of them in the hardware: this HAL's trampoline code decodes// them into the 27 listed below as CYGNUM_HAL_VECTOR_xxx.// They are handled uniformly in the trampoline code in the sense that// each vector has a VSR which is called in the same way.// Interrupts (vectors 1-15) have one VSR by default, exceptions (vectors// 16-26) another.// The interrupt VSR sets up a C stack and calls the corresponding ISR with// the required arguments; this ABI is mandated by the kernel.// The exception VSR sets up a C stack and calls the corresponding XSR// (just an entry in the ISR[sic] table) with similar arguments, such that// it (by default) can call the kernel's cyg_hal_deliver_exception().// // So:// CYGNUM_HAL_VSR_MAX/MIN/COUNT describe the number of VSR entries *and*// the number of ISR (and associated data) entries (including those which// are XSRs, just a special case of ISRs).// CYGNUM_HAL_ISR_MAX/MIN/COUNT describe the number of interrupt sources// and is used for bounds checking in kernel interrupt objects.// CYGNUM_HAL_EXCEPTION_MAX/MIN/COUNT describe vector numbers which have// by default the exception VSR and default XSR installed.// These correspond to VSRs and the values are the ones to use for// HAL_VSR_GET/SET#define CYGNUM_HAL_VECTOR_RESERVED_0 0#define CYGNUM_HAL_VECTOR_INTERRUPT_1 1 // NB: least important#define CYGNUM_HAL_VECTOR_INTERRUPT_2 2 // (lowest priority)#define CYGNUM_HAL_VECTOR_INTERRUPT_3 3#define CYGNUM_HAL_VECTOR_INTERRUPT_4 4#define CYGNUM_HAL_VECTOR_INTERRUPT_5 5#define CYGNUM_HAL_VECTOR_INTERRUPT_6 6#define CYGNUM_HAL_VECTOR_INTERRUPT_7 7#define CYGNUM_HAL_VECTOR_INTERRUPT_8 8#define CYGNUM_HAL_VECTOR_INTERRUPT_9 9#define CYGNUM_HAL_VECTOR_INTERRUPT_10 10#define CYGNUM_HAL_VECTOR_INTERRUPT_11 11#define CYGNUM_HAL_VECTOR_INTERRUPT_12 12#define CYGNUM_HAL_VECTOR_INTERRUPT_13 13#define CYGNUM_HAL_VECTOR_INTERRUPT_14 14 // (highest priority)#define CYGNUM_HAL_VECTOR_INTERRUPT_15 15 // NB: most important (NMI)#define CYG_VECTOR_IS_INTERRUPT(v) (15 >= (v))#define CYGNUM_HAL_VECTOR_USER_TRAP 16 // Ticc instructions#define CYGNUM_HAL_VECTOR_FETCH_ABORT 17 // trap type 1#define CYGNUM_HAL_VECTOR_ILLEGAL_OP 18 // trap type 2#define CYGNUM_HAL_VECTOR_PRIV_OP 19 // tt 3: privileged op#define CYGNUM_HAL_VECTOR_NOFPCP 20 // tt 4,36: FP or coproc#define CYGNUM_HAL_VECTOR_RESERVED_1 21 // (not used)#define CYGNUM_HAL_VECTOR_RESERVED_2 22 // (not used)#define CYGNUM_HAL_VECTOR_UNALIGNED 23 // tt 7: unaligned memory access#define CYGNUM_HAL_VECTOR_TT_EIGHT 24 // tt 8: not defined#define CYGNUM_HAL_VECTOR_DATA_ABORT 25 // tt 9: read/write failed #define CYGNUM_HAL_VECTOR_OTHERS 26 // any others#define CYGNUM_HAL_VSR_MIN 0#define CYGNUM_HAL_VSR_MAX 26#define CYGNUM_HAL_VSR_COUNT 27// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Interrupt vectors. These are the values used with HAL_INTERRUPT_ATTACH()// et al#define CYGNUM_HAL_INTERRUPT_RESERVED_0 CYGNUM_HAL_VECTOR_RESERVED_0#define CYGNUM_HAL_INTERRUPT_1 CYGNUM_HAL_VECTOR_INTERRUPT_1#define CYGNUM_HAL_INTERRUPT_2 CYGNUM_HAL_VECTOR_INTERRUPT_2#define CYGNUM_HAL_INTERRUPT_3 CYGNUM_HAL_VECTOR_INTERRUPT_3#define CYGNUM_HAL_INTERRUPT_4 CYGNUM_HAL_VECTOR_INTERRUPT_4#define CYGNUM_HAL_INTERRUPT_5 CYGNUM_HAL_VECTOR_INTERRUPT_5#define CYGNUM_HAL_INTERRUPT_6 CYGNUM_HAL_VECTOR_INTERRUPT_6#define CYGNUM_HAL_INTERRUPT_7 CYGNUM_HAL_VECTOR_INTERRUPT_7#define CYGNUM_HAL_INTERRUPT_8 CYGNUM_HAL_VECTOR_INTERRUPT_8#define CYGNUM_HAL_INTERRUPT_9 CYGNUM_HAL_VECTOR_INTERRUPT_9#define CYGNUM_HAL_INTERRUPT_10 CYGNUM_HAL_VECTOR_INTERRUPT_10#define CYGNUM_HAL_INTERRUPT_11 CYGNUM_HAL_VECTOR_INTERRUPT_11#define CYGNUM_HAL_INTERRUPT_12 CYGNUM_HAL_VECTOR_INTERRUPT_12#define CYGNUM_HAL_INTERRUPT_13 CYGNUM_HAL_VECTOR_INTERRUPT_13#define CYGNUM_HAL_INTERRUPT_14 CYGNUM_HAL_VECTOR_INTERRUPT_14#define CYGNUM_HAL_INTERRUPT_15 CYGNUM_HAL_VECTOR_INTERRUPT_15#define CYGNUM_HAL_ISR_MIN 0#define CYGNUM_HAL_ISR_MAX 15#define CYGNUM_HAL_ISR_COUNT 16// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Exception vectors. These are the values used when passed out to an// external exception handler using cyg_hal_deliver_exception()// They can also be used with HAL_INTERRUPT_ATTACH() et al to install// different XSRs.#define CYGNUM_HAL_EXCEPTION_TRAP CYGNUM_HAL_VECTOR_USER_TRAP#define CYGNUM_HAL_EXCEPTION_CODE_ACCESS CYGNUM_HAL_VECTOR_FETCH_ABORT#define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION \ CYGNUM_HAL_VECTOR_ILLEGAL_OP#define CYGNUM_HAL_EXCEPTION_PRIVILEGED_INSTRUCTION \ CYGNUM_HAL_VECTOR_PRIV_OP#define CYGNUM_HAL_EXCEPTION_FPU_NOT_AVAIL CYGNUM_HAL_VECTOR_NOFPCP#define CYGNUM_HAL_EXCEPTION_RESERVED1 CYGNUM_HAL_VECTOR_RESERVED1#define CYGNUM_HAL_EXCEPTION_RESERVED2 CYGNUM_HAL_VECTOR_RESERVED2#define CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS \ CYGNUM_HAL_VECTOR_UNALIGNED#define CYGNUM_HAL_EXCEPTION_TT_EIGHT CYGNUM_HAL_VECTOR_TT_EIGHT#define CYGNUM_HAL_EXCEPTION_DATA_ACCESS CYGNUM_HAL_VECTOR_DATA_ABORT#define CYGNUM_HAL_EXCEPTION_OTHERS CYGNUM_HAL_VECTOR_OTHERS#define CYGNUM_HAL_EXCEPTION_MIN 16#define CYGNUM_HAL_EXCEPTION_MAX (16 + 10)#define CYGNUM_HAL_EXCEPTION_COUNT (1 + CYGNUM_HAL_EXCEPTION_MAX - \ CYGNUM_HAL_EXCEPTION_MIN)//---------------------------------------------------------------------------// (Null) Translation from a wider space of interrupt sources:#define HAL_TRANSLATE_VECTOR(_vector_,_index_) _index_ = (_vector_)//---------------------------------------------------------------------------// Routine to execute DSRs using separate interrupt stack#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACKexternC void hal_interrupt_stack_call_pending_DSRs(void);#define HAL_INTERRUPT_STACK_CALL_PENDING_DSRS() \ hal_interrupt_stack_call_pending_DSRs()// these are offered solely for stack usage testing// if they are not defined, then there is no interrupt stack.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -