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

📄 var_intr.h

📁 eCos操作系统源码
💻 H
字号:
#ifndef CYGONCE_HAL_VAR_INTR_H#define CYGONCE_HAL_VAR_INTR_H//==========================================================================////      var_intr.h////      H8S 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):    yoshinori sato// Contributors: yoshinori sato// Date:         2003-01-01// Purpose:      H8S Interrupt Support// Description:  The macros defined here provide the HAL APIs for handling//               interrupts and the clock for H8/300H variants of the H8/300//               architecture.//              // Usage://              #include <cyg/hal/var_intr.h>//              ...//              ////####DESCRIPTIONEND####////==========================================================================#include <pkgconf/hal.h>#include <cyg/infra/cyg_type.h>#include <cyg/hal/plf_intr.h>#include <cyg/hal/var_arch.h>//--------------------------------------------------------------------------// Interrupt vectors.// The level-specific hardware vectors// These correspond to VSRs and are the values to use for HAL_VSR_GET/SET#define CYGNUM_HAL_VECTOR_RESET_P              0#define CYGNUM_HAL_VECTOR_RESET_M              1#define CYGNUM_HAL_VECTOR_RSV2                 2#define CYGNUM_HAL_VECTOR_RSV3                 3#define CYGNUM_HAL_VECTOR_RSV4                 4#define CYGNUM_HAL_VECTOR_TRACE                5#define CYGNUM_HAL_VECTOR_DIRECT               6#define CYGNUM_HAL_VECTOR_NMI                  7#define CYGNUM_HAL_VECTOR_TRAP0                8#define CYGNUM_HAL_VECTOR_TRAP1                9#define CYGNUM_HAL_VECTOR_TRAP2                10#define CYGNUM_HAL_VECTOR_TRAP3                11#define CYGNUM_HAL_VSR_MIN                     0#define CYGNUM_HAL_VSR_MAX                     11#define CYGNUM_HAL_VSR_COUNT                   12// Exception numbers. These are the values used when passed out to an// external exception handler using cyg_hal_deliver_exception()#define CYGNUM_HAL_EXCEPTION_NMI               CYGNUM_HAL_VECTOR_NMI#if 0#define CYGNUM_HAL_EXCEPTION_DATA_ACCESS       0#endif#define CYGNUM_HAL_EXCEPTION_MIN               CYGNUM_HAL_VSR_MIN#define CYGNUM_HAL_EXCEPTION_MAX               CYGNUM_HAL_VSR_MAX#define CYGNUM_HAL_EXCEPTION_COUNT             CYGNUM_HAL_VSR_COUNT// The decoded interrupts#define CYGNUM_HAL_INTERRUPT_EXTERNAL_0        16#define CYGNUM_HAL_INTERRUPT_EXTERNAL_1        17#define CYGNUM_HAL_INTERRUPT_EXTERNAL_2        18#define CYGNUM_HAL_INTERRUPT_EXTERNAL_3        19#define CYGNUM_HAL_INTERRUPT_EXTERNAL_4        20#define CYGNUM_HAL_INTERRUPT_EXTERNAL_5        21#define CYGNUM_HAL_INTERRUPT_EXTERNAL_6        22#define CYGNUM_HAL_INTERRUPT_EXTERNAL_7        23#define CYGNUM_HAL_INTERRUPT_EXTERNAL_8        24#define CYGNUM_HAL_INTERRUPT_EXTERNAL_9        25#define CYGNUM_HAL_INTERRUPT_EXTERNAL_10       26#define CYGNUM_HAL_INTERRUPT_EXTERNAL_11       27#define CYGNUM_HAL_INTERRUPT_EXTERNAL_12       28#define CYGNUM_HAL_INTERRUPT_EXTERNAL_13       29#define CYGNUM_HAL_INTERRUPT_EXTERNAL_14       30#define CYGNUM_HAL_INTERRUPT_EXTERNAL_15       31#define CYGNUM_HAL_INTERRUPT_DTC               32#define CYGNUM_HAL_INTERRUPT_WDT               33#define CYGNUM_HAL_INTERRUPT_RSV34             34#define CYGNUM_HAL_INTERRUPT_RFSHCMI           35#define CYGNUM_HAL_INTERRUPT_RSV36             36#define CYGNUM_HAL_INTERRUPT_RSV37             37#define CYGNUM_HAL_INTERRUPT_ADI               38#define CYGNUM_HAL_INTERRUPT_RSV39             39#define CYGNUM_HAL_INTERRUPT_TGI0A             40#define CYGNUM_HAL_INTERRUPT_TGI0B             41#define CYGNUM_HAL_INTERRUPT_TGI0C             42#define CYGNUM_HAL_INTERRUPT_TGI0D             43#define CYGNUM_HAL_INTERRUPT_TGI0V             44#define CYGNUM_HAL_INTERRUPT_RSV45             45#define CYGNUM_HAL_INTERRUPT_RSV46             46#define CYGNUM_HAL_INTERRUPT_RSV47             47#define CYGNUM_HAL_INTERRUPT_TGI1A             48#define CYGNUM_HAL_INTERRUPT_TGI1B             49#define CYGNUM_HAL_INTERRUPT_TGI1V             50#define CYGNUM_HAL_INTERRUPT_TGI1U             51#define CYGNUM_HAL_INTERRUPT_TGI2A             52#define CYGNUM_HAL_INTERRUPT_TGI2B             53#define CYGNUM_HAL_INTERRUPT_TGI2V             54#define CYGNUM_HAL_INTERRUPT_TGI2U             55#define CYGNUM_HAL_INTERRUPT_TGI3A             56#define CYGNUM_HAL_INTERRUPT_TGI3B             57#define CYGNUM_HAL_INTERRUPT_TGI3C             58#define CYGNUM_HAL_INTERRUPT_TGI3D             59#define CYGNUM_HAL_INTERRUPT_TGI3V             60#define CYGNUM_HAL_INTERRUPT_RSV61             61#define CYGNUM_HAL_INTERRUPT_RSV62             62#define CYGNUM_HAL_INTERRUPT_RSV63             63#define CYGNUM_HAL_INTERRUPT_TGI4A             64#define CYGNUM_HAL_INTERRUPT_TGI4B             65#define CYGNUM_HAL_INTERRUPT_TGI4V             66#define CYGNUM_HAL_INTERRUPT_TGI4U             67#define CYGNUM_HAL_INTERRUPT_TGI5A             68#define CYGNUM_HAL_INTERRUPT_TGI5B             69#define CYGNUM_HAL_INTERRUPT_TGI5V             70#define CYGNUM_HAL_INTERRUPT_TGI5U             71#define CYGNUM_HAL_INTERRUPT_CMIA0             72#define CYGNUM_HAL_INTERRUPT_CMIB0             73#define CYGNUM_HAL_INTERRUPT_OVI0              74#define CYGNUM_HAL_INTERRUPT_RSV75             75#define CYGNUM_HAL_INTERRUPT_CMIA1             76#define CYGNUM_HAL_INTERRUPT_CMIB1             77#define CYGNUM_HAL_INTERRUPT_OVI1              78#define CYGNUM_HAL_INTERRUPT_RSV79             79#define CYGNUM_HAL_INTERRUPT_DEND0A            80#define CYGNUM_HAL_INTERRUPT_DEND0B            81#define CYGNUM_HAL_INTERRUPT_DEND1A            82#define CYGNUM_HAL_INTERRUPT_DEND1B            83#define CYGNUM_HAL_INTERRUPT_EXDEND0           84#define CYGNUM_HAL_INTERRUPT_EXDEND1           85#define CYGNUM_HAL_INTERRUPT_EXDEND2           86#define CYGNUM_HAL_INTERRUPT_EXDEND3           87#define CYGNUM_HAL_INTERRUPT_ERI0              88#define CYGNUM_HAL_INTERRUPT_RXI0              89#define CYGNUM_HAL_INTERRUPT_TXI0              90#define CYGNUM_HAL_INTERRUPT_TEI0              91#define CYGNUM_HAL_INTERRUPT_ERI1              92#define CYGNUM_HAL_INTERRUPT_RXI1              93#define CYGNUM_HAL_INTERRUPT_TXI1              94#define CYGNUM_HAL_INTERRUPT_TEI1              95#define CYGNUM_HAL_INTERRUPT_ERI2              96#define CYGNUM_HAL_INTERRUPT_RXI2              97#define CYGNUM_HAL_INTERRUPT_TXI2              98#define CYGNUM_HAL_INTERRUPT_TEI2              99#define CYGNUM_HAL_INTERRUPT_RSV100            100#define CYGNUM_HAL_INTERRUPT_RSV101            101#define CYGNUM_HAL_INTERRUPT_RSV102            102#define CYGNUM_HAL_INTERRUPT_RSV103            103#define CYGNUM_HAL_INTERRUPT_RSV104            104#define CYGNUM_HAL_INTERRUPT_RSV105            105#define CYGNUM_HAL_INTERRUPT_RSV106            106#define CYGNUM_HAL_INTERRUPT_RSV107            107#define CYGNUM_HAL_INTERRUPT_RSV108            108#define CYGNUM_HAL_INTERRUPT_RSV109            109#define CYGNUM_HAL_INTERRUPT_RSV110            110#define CYGNUM_HAL_INTERRUPT_RSV111            111#define CYGNUM_HAL_INTERRUPT_RSV112            112#define CYGNUM_HAL_INTERRUPT_RSV113            113#define CYGNUM_HAL_INTERRUPT_RSV114            114#define CYGNUM_HAL_INTERRUPT_RSV115            115#define CYGNUM_HAL_INTERRUPT_RSV116            116#define CYGNUM_HAL_INTERRUPT_RSV117            117#define CYGNUM_HAL_INTERRUPT_RSV118            118#define CYGNUM_HAL_INTERRUPT_RSV119            119#define CYGNUM_HAL_INTERRUPT_RSV120            120#define CYGNUM_HAL_INTERRUPT_RSV121            121#define CYGNUM_HAL_INTERRUPT_RSV122            122#define CYGNUM_HAL_INTERRUPT_RSV123            123#define CYGNUM_HAL_INTERRUPT_RSV124            124#define CYGNUM_HAL_INTERRUPT_RSV125            125#define CYGNUM_HAL_INTERRUPT_RSV126            126#define CYGNUM_HAL_INTERRUPT_RSV127            127#define CYGNUM_HAL_ISR_MIN                     16#define CYGNUM_HAL_ISR_MAX                     127#define CYGNUM_HAL_ISR_COUNT                   (3+((CYGNUM_HAL_ISR_MAX+1)/4))// The vector used by the Real time clock#define CYGNUM_HAL_INTERRUPT_RTC                CYGNUM_HAL_INTERRUPT_CMIA1//--------------------------------------------------------------------------// Interrupt vector translation.#if !defined(HAL_TRANSLATE_VECTOR) && !defined(CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN)#define HAL_TRANSLATE_VECTOR(_vector_,_index_)                             \              _index_ = (_vector_)#endif//--------------------------------------------------------------------------// H8/300H specific version of HAL_INTERRUPT_CONFIGURE#define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ )                \        hal_interrupt_configure( _vector_, _level_, _up_ )externC void hal_interrupt_configure(int vector,int level,int up);#define HAL_INTERRUPT_CONFIGURE_DEFINED//--------------------------------------------------------------------------// Interrupt control macros#define HAL_DISABLE_INTERRUPTS(_old_)   \        asm volatile (                  \            "sub.l er0,er0\n\t"         \            "stc exr,r0l\n\t"           \            "orc #0x7,exr\n\t"          \            "and.b #0x07,r0l\n\t"       \            "mov.l er0,%0"              \            : "=r"(_old_)               \            :                           \            : "er0"                     \            );#define HAL_ENABLE_INTERRUPTS()         \        asm volatile (                  \            "andc #0xf8,exr"            \            );#define HAL_RESTORE_INTERRUPTS(_old_)   \        asm volatile (                  \            "mov.l %0,er0\n\t"          \            "and.b #0x07,r0l\n\t"       \            "stc exr,r0h\n\t"           \            "and.b #0xf8,r0h\n\t"       \            "or.b r0h,r0l\n\t"          \            "ldc r0l,exr"               \            :                           \            : "r"(_old_)                \            : "er0"                     \            );#define HAL_QUERY_INTERRUPTS(_old_)     \        asm volatile (                  \            "sub.l er0,er0\n\t"         \            "stc exr,r0l\n\t"           \            "and.b #0x07,r0l\n\t"       \            "mov.l er0,%0"              \            : "=r"(_old_)               \            );//--------------------------------------------------------------------------// Clock control.externC void hal_clock_initialize(cyg_uint32 period);externC void hal_clock_reset(cyg_uint32 vector,cyg_uint32 period);externC void hal_clock_read(cyg_uint32 *pvalue);#define HAL_CLOCK_INITIALIZE( _period_ ) \        hal_clock_initialize( _period_ )#define HAL_CLOCK_RESET( _vector_, _period_ ) \        hal_clock_reset( _vector_, _period_ )#define HAL_CLOCK_READ( _pvalue_ ) \        hal_clock_read( _pvalue_ )// FIXME: above line should not use CYGNUM_KERNEL_COUNTERS_RTC_PERIOD since// this means the HAL gets configured by kernel options even when the// kernel is disabled!//--------------------------------------------------------------------------#endif // ifndef CYGONCE_HAL_VAR_INTR_H// End of var_intr.h

⌨️ 快捷键说明

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