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 + -
显示快捷键?