hal_intr.h

来自「eCos操作系统源码」· C头文件 代码 · 共 366 行 · 第 1/2 页

H
366
字号
#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// Contributors: nickg, gthomas,//               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 <cyg/infra/cyg_type.h>// This is to allow a variant to decide that there is no platform-specific// interrupts file; and that in turn can be overridden by a platform that// refines the variant's ideas.#ifdef    CYGBLD_HAL_PLF_INTS_H# include CYGBLD_HAL_PLF_INTS_H // should include variant data as required#else # ifdef    CYGBLD_HAL_VAR_INTS_H#  include CYGBLD_HAL_VAR_INTS_H# else#  include <cyg/hal/plf_ints.h> // default less-complex platforms# endif#endif// Spurious interrupt (no interrupt source could be found)#define CYGNUM_HAL_INTERRUPT_NONE -1//--------------------------------------------------------------------------// FUJITSU exception vectors.// The Fujitsu FR-V architecture supports up to 256 interrupt/exceptions.// Each vectors to a specific VSR which is 16 bytes (4 instructions) long.// These vectors correspond to VSRs. These values are the ones to use for// HAL_VSR_GET/SET#define CYGNUM_HAL_VECTOR_RESET                       0x00#define CYGNUM_HAL_VECTOR_INSTR_ACCESS_MMU_MISS       0x01#define CYGNUM_HAL_VECTOR_INSTR_ACCESS_ERROR          0x02#define CYGNUM_HAL_VECTOR_INSTR_ACCESS_EXCEPTION      0x03#define CYGNUM_HAL_VECTOR_PRIVELEDGED_INSTRUCTION     0x06#define CYGNUM_HAL_VECTOR_ILLEGAL_INSTRUCTION         0x07#define CYGNUM_HAL_VECTOR_REGISTER_EXCEPTION          0x08#define CYGNUM_HAL_VECTOR_FP_DISABLED                 0x0A#define CYGNUM_HAL_VECTOR_MP_DISABLED                 0x0B#define CYGNUM_HAL_VECTOR_FP_EXCEPTION                0x0D#define CYGNUM_HAL_VECTOR_MP_EXCEPTION                0x0E#define CYGNUM_HAL_VECTOR_MEMORY_ADDRESS_NOT_ALIGNED  0x10#define CYGNUM_HAL_VECTOR_DATA_ACCESS_ERROR           0x11#define CYGNUM_HAL_VECTOR_DATA_ACCESS_MMU_MISS        0x12#define CYGNUM_HAL_VECTOR_DATA_ACCESS_EXCEPTION       0x13#define CYGNUM_HAL_VECTOR_DATA_STORE_ERROR            0x14#define CYGNUM_HAL_VECTOR_DIVISION_EXCEPTION          0x17#define CYGNUM_HAL_VECTOR_COMMIT_EXCEPTION            0x19#define CYGNUM_HAL_VECTOR_COMPOUND_EXCEPTION          0x20#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_1  0x21#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_2  0x22#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_3  0x23#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_4  0x24#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_5  0x25#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_6  0x26#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_7  0x27#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_8  0x28#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_9  0x29#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_10 0x2A#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_11 0x2B#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_12 0x2C#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_13 0x2D#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_14 0x2E#define CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_15 0x2F#define CYGNUM_HAL_VECTOR_SYSCALL                     0x80  // tira gr0,#0#define CYGNUM_HAL_VECTOR_BREAKPOINT_TRAP             0x81  // tira gr0,#1#define CYGNUM_HAL_VECTOR_BREAKPOINT                  0xFF  // break#define CYGNUM_HAL_VSR_MIN                     0#define CYGNUM_HAL_VSR_MAX                   255#define CYGNUM_HAL_VSR_COUNT                 256#define CYGNUM_HAL_ISR_COUNT                 256  // 1-1 mapping// Exception vectors. These are the values used when passed out to an// external exception handler using cyg_hal_deliver_exception()#define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION \          CYGNUM_HAL_VECTOR_ILLEGAL_INSTRUCTION#define CYGNUM_HAL_EXCEPTION_INTERRUPT \          CYGNUM_HAL_VECTOR_SOFTWARE_INTERRUPT#define CYGNUM_HAL_EXCEPTION_CODE_ACCESS    CYGNUM_HAL_VECTOR_INSTR_ACCESS_ERROR#define CYGNUM_HAL_EXCEPTION_DATA_ACCESS    CYGNUM_HAL_VECTOR_DATA_ACCESS_ERROR#define CYGNUM_HAL_EXCEPTION_MIN     CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION#define CYGNUM_HAL_EXCEPTION_MAX     CYGNUM_HAL_EXCEPTION_DATA_ACCESS#define CYGNUM_HAL_EXCEPTION_COUNT   (CYGNUM_HAL_EXCEPTION_MAX - \                                      CYGNUM_HAL_EXCEPTION_MIN + 1)#define CYGNUM_HAL_ISR_MIN CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_1#define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_VECTOR_EXTERNAL_INTERRUPT_LEVEL_15//--------------------------------------------------------------------------// Static data used by HAL// ISR tablesexternC CYG_ADDRESS    hal_interrupt_handlers[CYGNUM_HAL_ISR_COUNT];externC CYG_ADDRWORD   hal_interrupt_data[CYGNUM_HAL_ISR_COUNT];externC CYG_ADDRESS    hal_interrupt_objects[CYGNUM_HAL_ISR_COUNT];// VSR tableexternC CYG_ADDRESS    hal_vsr_table[CYGNUM_HAL_VSR_COUNT];// Platform setup memory size (0 if unknown by hardware)externC CYG_ADDRWORD   hal_dram_size;// what, if anything, this means, is platform dependent:externC CYG_ADDRWORD   hal_dram_type; #if CYGINT_HAL_FRV_MEM_REAL_REGION_TOPexternC cyg_uint8 *hal_frv_mem_real_region_top( cyg_uint8 *_regionend_ );                                                # define HAL_MEM_REAL_REGION_TOP( _regionend_ ) \    hal_frv_mem_real_region_top( _regionend_ )#endif//--------------------------------------------------------------------------// Default ISR// The #define is used to test whether this routine exists, and to allow// code outside the HAL to call it. externC cyg_uint32 hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data);

⌨️ 快捷键说明

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