⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hal_intr.h

📁 ecos为实时嵌入式操作系统
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef CYGONCE_HAL_HAL_INTR_H#define CYGONCE_HAL_HAL_INTR_H//==========================================================================////      hal_intr.h////      HAL Interrupt and clock support////==========================================================================//####COPYRIGHTBEGIN####//// -------------------------------------------// The contents of this file are subject to the Cygnus eCos Public License// Version 1.0 (the "License"); you may not use this file except in// compliance with the License.  You may obtain a copy of the License at// http://sourceware.cygnus.com/ecos//// Software distributed under the License is distributed on an "AS IS"// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the// License for the specific language governing rights and limitations under// the License.//// The Original Code is eCos - Embedded Cygnus Operating System, released// October 31, 1998.//// The Initial Developer of the Original Code is Cygnus.  Portions created// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions.  All Rights Reserved.// -------------------------------------------////####COPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):    proven// Contributors: proven, jskov// 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_i386.h>#include <cyg/infra/cyg_type.h>#ifdef CYGPKG_HAL_I386_LINUX#include <pkgconf/hal_i386_linux.h>     // CYGSEM_HAL_I386_LINUX_REAL_TIME#endif//--------------------------------------------------------------------------// Interrupt vectors.#define CYGNUM_HAL_VECTOR_NMI                0#define CYGNUM_HAL_ISR_MAX                   CYGNUM_HAL_VECTOR_NMI#define CYGNUM_HAL_VSR_MIN                   0#define CYGNUM_HAL_VSR_MAX                   0#define CYGNUM_HAL_VSR_COUNT                 ( CYGNUM_HAL_VSR_MAX + 1 )#define CYGNUM_HAL_EXCEPTION_MIN             0#define CYGNUM_HAL_EXCEPTION_MAX             0#define CYGNUM_HAL_EXCEPTION_COUNT           ( CYGNUM_HAL_EXCEPTION_MAX + 1 )#define CYGNUM_HAL_ISR_MIN                   0   #define CYGNUM_HAL_ISR_COUNT                 ( CYGNUM_HAL_ISR_MAX + 1 )#ifdef CYGPKG_HAL_I386_LINUX// Additional vectors on Linux. These match the Linux signals.#define CYGNUM_HAL_VECTOR_SIGHUP             1#define CYGNUM_HAL_VECTOR_SIGINT             2#define CYGNUM_HAL_VECTOR_SIGQUIT            3#define CYGNUM_HAL_VECTOR_SIGILL             4#define CYGNUM_HAL_VECTOR_SIGTRAP            5#define CYGNUM_HAL_VECTOR_SIGIOT             6#define CYGNUM_HAL_VECTOR_SIGBUS             7#define CYGNUM_HAL_VECTOR_SIGFPE             8#define CYGNUM_HAL_VECTOR_SIGKILL            9#define CYGNUM_HAL_VECTOR_SIGUSR1           10#define CYGNUM_HAL_VECTOR_SIGSEGV           11#define CYGNUM_HAL_VECTOR_SIGUSR2           12#define CYGNUM_HAL_VECTOR_SIGPIPE           13#define CYGNUM_HAL_VECTOR_SIGALRM           14#define CYGNUM_HAL_VECTOR_SIGTERM           15#define CYGNUM_HAL_VECTOR_SIGCHLD           17#define CYGNUM_HAL_VECTOR_SIGCONT           18#define CYGNUM_HAL_VECTOR_SIGSTOP           19#define CYGNUM_HAL_VECTOR_SIGTSTP           20#define CYGNUM_HAL_VECTOR_SIGTTIN           21#define CYGNUM_HAL_VECTOR_SIGTTOU           22#define CYGNUM_HAL_VECTOR_SIGURG            23#define CYGNUM_HAL_VECTOR_SIGXCPU           24#define CYGNUM_HAL_VECTOR_SIGXFSZ           25#define CYGNUM_HAL_VECTOR_SIGVTALRM         26#define CYGNUM_HAL_VECTOR_SIGPROF           27#define CYGNUM_HAL_VECTOR_SIGWINCH          28#define CYGNUM_HAL_VECTOR_SIGIO             29#define CYGNUM_HAL_VECTOR_SIGPWR            30#undef CYGNUM_HAL_ISR_MAX#define CYGNUM_HAL_ISR_MAX                    CYGNUM_HAL_VECTOR_SIGPWR// Generic exception vector names#define CYGNUM_HAL_EXCEPTION_INTERRUPT            CYGNUM_HAL_VECTOR_SIGINT#define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION  CYGNUM_HAL_VECTOR_SIGILL#define CYGNUM_HAL_EXCEPTION_TRAP                 CYGNUM_HAL_VECTOR_SIGTRAP#define CYGNUM_HAL_EXCEPTION_DATA_ACCESS          CYGNUM_HAL_VECTOR_SIGBUS#define CYGNUM_HAL_EXCEPTION_FPU                  CYGNUM_HAL_VECTOR_SIGFPE#define CYGNUM_HAL_EXCEPTION_STACK_OVERFLOW       CYGNUM_HAL_VECTOR_SIGSEGV#undef CYGNUM_HAL_EXCEPTION_MAX#define CYGNUM_HAL_EXCEPTION_MAX          CYGNUM_HAL_EXCEPTION_STACK_OVERFLOW// The vector used by the Real time clock#ifdef CYGSEM_HAL_I386_LINUX_REAL_TIME#define CYGNUM_HAL_INTERRUPT_RTC              CYGNUM_HAL_VECTOR_SIGALRM#else#define CYGNUM_HAL_INTERRUPT_RTC              CYGNUM_HAL_VECTOR_SIGVTALRM#endif#endif // ifdef CYGPKG_HAL_I386_LINUX//--------------------------------------------------------------------------// Static data used by HAL// ISR tablesexternC volatile CYG_ADDRESS  cyg_hal_interrupt_handlers[CYGNUM_HAL_ISR_COUNT];externC volatile CYG_ADDRWORD cyg_hal_interrupt_data[CYGNUM_HAL_ISR_COUNT];externC volatile CYG_ADDRESS  cyg_hal_interrupt_objects[CYGNUM_HAL_ISR_COUNT];// VSR tableexternC volatile CYG_ADDRESS  cyg_hal_vsr_table[CYGNUM_HAL_VSR_COUNT];#ifdef CYGPKG_HAL_I386_LINUX// Interrupt controler emulation variables.externC volatile int cyg_hal_interrupts_disabled;externC volatile int cyg_hal_interrupts_deferred;externC volatile int cyg_hal_interrupts_unhandled[CYGNUM_HAL_ISR_COUNT];#endif//--------------------------------------------------------------------------// Interrupt state storagetypedef cyg_uint32 CYG_INTERRUPT_STATE;//--------------------------------------------------------------------------// Interrupt control macros#ifdef CYGPKG_HAL_I386_LINUXexternC void cyg_hal_default_interrupt_vsr(int vector);externC void cyg_hal_default_exception_vsr(int vector);externC int  cyg_hal_sys_sigprocmask(int, const long*, long*);#define HAL_ENABLE_INTERRUPTS()                                            \    CYG_MACRO_START                                                        \    cyg_ucount8 _i_;                                                       \    cyg_hal_interrupts_disabled = 0;                                       \    if (cyg_hal_interrupts_deferred) {                                     \        cyg_hal_interrupts_deferred = 0;                                   \        for (_i_ = CYGNUM_HAL_ISR_MIN; _i_ <= CYGNUM_HAL_ISR_MAX; _i_++) { \            if (cyg_hal_interrupts_unhandled[_i_]) {                       \                cyg_hal_default_interrupt_vsr(_i_);                        \            }                                                              \        }                                                                  \    }                                                                      \    CYG_MACRO_END#define HAL_DISABLE_INTERRUPTS(_old_)           \    CYG_MACRO_START                             \    (_old_) = cyg_hal_interrupts_disabled++;    \    CYG_MACRO_END

⌨️ 快捷键说明

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