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

📄 hal_intr.h

📁 eCos1.31版
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef CYGONCE_HAL_INTR_H#define CYGONCE_HAL_INTR_H//==========================================================================////      hal_intr.h////      HAL Interrupt and clock support////==========================================================================//####COPYRIGHTBEGIN####//                                                                          // -------------------------------------------                              // The contents of this file are subject to the Red Hat eCos Public License // Version 1.1 (the "License"); you may not use this file except in         // compliance with the License.  You may obtain a copy of the License at    // http://www.redhat.com/                                                   //                                                                          // 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 Configurable Operating System,      // released September 30, 1998.                                             //                                                                          // The Initial Developer of the Original Code is Red Hat.                   // Portions created by Red Hat are                                          // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             // All Rights Reserved.                                                     // -------------------------------------------                              //                                                                          //####COPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):    jskov// Contributors: jskov,// Date:         1999-04-24// 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>// More include statements below. First part of this file must be// usable for both assembly and C files, so only use defines here.//--------------------------------------------------------------------------// SH3 exception vectors. These correspond to VSRs and are the values// to use for HAL_VSR_GET/SET//// Note that exceptions are decoded - there is a VSR slot for each exception// source, while interrupts are handled via the same VSR.#define CYGNUM_HAL_VECTOR_POWERON                0 // power-on#define CYGNUM_HAL_VECTOR_RESET                  1 // reset#define CYGNUM_HAL_VECTOR_TLBMISS_ACCESS         2 // TLB-miss/invalid load#define CYGNUM_HAL_VECTOR_TLBMISS_WRITE          3 // TLB-miss/invalid store#define CYGNUM_HAL_VECTOR_INITIAL_WRITE          4 // initial page write#define CYGNUM_HAL_VECTOR_TLBERROR_ACCESS        5 // TLB prot violation l#define CYGNUM_HAL_VECTOR_TLBERROR_WRITE         6 // TLB prot violation s#define CYGNUM_HAL_VECTOR_DATA_ACCESS            7 // address error (load)#define CYGNUM_HAL_VECTOR_DATA_WRITE             8 // address error (store)// define CYGNUM_HAL_VECTOR_RESERVED_9           9// define CYGNUM_HAL_VECTOR_RESERVED_10         10#define CYGNUM_HAL_VECTOR_TRAP                  11 // unconditional trap#define CYGNUM_HAL_VECTOR_ILLEGAL_INSTRUCTION   12 // reserved instruction#define CYGNUM_HAL_VECTOR_ILLEGAL_SLOT_INSTRUCTION  13                                            // illegal instruction in delay slot// define CYGNUM_HAL_VECTOR_RESERVED_14         14#define CYGNUM_HAL_VECTOR_INSTRUCTION_BP        15 // user breakpoint#define CYG_VECTOR_IS_INTERRUPT(v)   \    (CYGNUM_HAL_VECTOR_INSTRUCTION_BP < (v))#define CYGNUM_HAL_VECTOR_INTERRUPT             16 // all interrupts#define CYGNUM_HAL_VSR_MIN                   CYGNUM_HAL_VECTOR_POWERON#define CYGNUM_HAL_VSR_MAX                   CYGNUM_HAL_VECTOR_INTERRUPT#define CYGNUM_HAL_VSR_COUNT                 ( CYGNUM_HAL_VSR_MAX + 1 )#define CYGNUM_HAL_VSR_EXCEPTION_COUNT       (CYGNUM_HAL_VECTOR_INSTRUCTION_BP-CYGNUM_HAL_VECTOR_POWERON+1)// The decoded interrupts.#define CYGNUM_HAL_INTERRUPT_NMI             0#define CYGNUM_HAL_INTERRUPT_RESERVED_1E0    1#define CYGNUM_HAL_INTERRUPT_LVL0            2#define CYGNUM_HAL_INTERRUPT_LVL1            3#define CYGNUM_HAL_INTERRUPT_LVL2            4#define CYGNUM_HAL_INTERRUPT_LVL3            5#define CYGNUM_HAL_INTERRUPT_LVL4            6#define CYGNUM_HAL_INTERRUPT_LVL5            7#define CYGNUM_HAL_INTERRUPT_LVL6            8#define CYGNUM_HAL_INTERRUPT_LVL7            9#define CYGNUM_HAL_INTERRUPT_LVL8            10#define CYGNUM_HAL_INTERRUPT_LVL9            11#define CYGNUM_HAL_INTERRUPT_LVL10           12#define CYGNUM_HAL_INTERRUPT_LVL11           13#define CYGNUM_HAL_INTERRUPT_LVL12           14#define CYGNUM_HAL_INTERRUPT_LVL13           15#define CYGNUM_HAL_INTERRUPT_LVL14           16#define CYGNUM_HAL_INTERRUPT_RESERVED_3E0    17#define CYGNUM_HAL_INTERRUPT_TMU0_TUNI0      18#define CYGNUM_HAL_INTERRUPT_TMU1_TUNI1      19#define CYGNUM_HAL_INTERRUPT_TMU2_TUNI2      20#define CYGNUM_HAL_INTERRUPT_TMU2_TICPI2     21#define CYGNUM_HAL_INTERRUPT_RTC_ATI         22#define CYGNUM_HAL_INTERRUPT_RTC_PRI         23#define CYGNUM_HAL_INTERRUPT_RTC_CUI         24#define CYGNUM_HAL_INTERRUPT_SCI_ERI         25#define CYGNUM_HAL_INTERRUPT_SCI_RXI         26#define CYGNUM_HAL_INTERRUPT_SCI_TXI         27#define CYGNUM_HAL_INTERRUPT_SCI_TEI         28#define CYGNUM_HAL_INTERRUPT_WDT_ITI         29#define CYGNUM_HAL_INTERRUPT_REF_RCMI        30#define CYGNUM_HAL_INTERRUPT_REF_ROVI        31// CYGNUM_HAL_ISR_COUNT must match CYG_ISR_TABLE_SIZE defined in vectors.S.#define CYGNUM_HAL_ISR_MIN                   CYGNUM_HAL_INTERRUPT_NMI#define CYGNUM_HAL_ISR_MAX                   CYGNUM_HAL_INTERRUPT_REF_ROVI#define CYGNUM_HAL_ISR_COUNT                 ( CYGNUM_HAL_ISR_MAX + 1 )// Exception vectors. These are the values used when passed out to an// external exception handler using cyg_hal_deliver_exception()// The exception indexes are EXPEVT/0x20#define CYGNUM_HAL_EXCEPTION_POWERON                0 // power-on#define CYGNUM_HAL_EXCEPTION_RESET                  1 // reset#define CYGNUM_HAL_EXCEPTION_TLBMISS_ACCESS         2 // TLB-miss/invalid load#define CYGNUM_HAL_EXCEPTION_TLBMISS_WRITE          3 // TLB-miss/invalid store#define CYGNUM_HAL_EXCEPTION_INITIAL_WRITE          4 // initial page write#define CYGNUM_HAL_EXCEPTION_TLBERROR_ACCESS        5 // TLB prot violation l#define CYGNUM_HAL_EXCEPTION_TLBERROR_WRITE         6 // TLB prot violation s#define CYGNUM_HAL_EXCEPTION_DATA_ACCESS            7 // address error (load)#define CYGNUM_HAL_EXCEPTION_DATA_WRITE             8 // address error (store)// define CYGNUM_HAL_EXCEPTION_RESERVED_9           9// define CYGNUM_HAL_EXCEPTION_RESERVED_10         10#define CYGNUM_HAL_EXCEPTION_TRAP                  11 // unconditional trap#define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION   12 // reserved instruction#define CYGNUM_HAL_EXCEPTION_ILLEGAL_SLOT_INSTRUCTION  13                                            // illegal instruction in delay slot// define CYGNUM_HAL_EXCEPTION_RESERVED_14         14#define CYGNUM_HAL_EXCEPTION_INSTRUCTION_BP        15 // user breakpoint#define CYGNUM_HAL_EXCEPTION_MIN          CYGNUM_HAL_EXCEPTION_POWERON#define CYGNUM_HAL_EXCEPTION_MAX          CYGNUM_HAL_EXCEPTION_INSTRUCTION_BP#define CYGNUM_HAL_EXCEPTION_COUNT           \                 ( CYGNUM_HAL_EXCEPTION_MAX - CYGNUM_HAL_EXCEPTION_MIN + 1 )// The vector used by the Real time clock#define CYGNUM_HAL_INTERRUPT_RTC             CYGNUM_HAL_INTERRUPT_TMU0_TUNI0#ifndef __ASSEMBLER__#include <cyg/infra/cyg_type.h>#include <cyg/hal/sh_regs.h>            // register definitions#include <cyg/hal/hal_io.h>             // io macros#include <cyg/infra/cyg_ass.h>          // CYG_FAIL//--------------------------------------------------------------------------// Static data used by HAL// ISR tablesexternC volatile CYG_ADDRESS    hal_interrupt_handlers[CYGNUM_HAL_ISR_COUNT];externC volatile CYG_ADDRWORD   hal_interrupt_data[CYGNUM_HAL_ISR_COUNT];externC volatile CYG_ADDRESS    hal_interrupt_objects[CYGNUM_HAL_ISR_COUNT];// VSR tableexternC volatile CYG_ADDRESS    hal_vsr_table[CYGNUM_HAL_VSR_COUNT];//--------------------------------------------------------------------------// Default ISRexternC cyg_uint32 hal_default_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data);//--------------------------------------------------------------------------// Interrupt state storagetypedef cyg_uint32 CYG_INTERRUPT_STATE;//--------------------------------------------------------------------------// Interrupt control macros//// Note that these macros control interrupt state by setting the Imask// of the SR rather than the (more obvious) BL. This is because a CPU// reset is forced if execptions (such as breakpoints) are generated// while the BL flag is set.#define HAL_DISABLE_INTERRUPTS(_old_)           \    CYG_MACRO_START                             \    cyg_uint32 _tmp_;                           \    asm volatile (                              \        "stc    sr,%1    \n\t"                  \        "mov    %2,%0    \n\t"                  \        "and    %1,%0    \n\t"                  \        "or     %2,%1    \n\t"                  \        "ldc    %1,sr    \n\t"                  \        : "=&r"(_old_), "=&r" (_tmp_)           \        : "r" (CYGARC_REG_SR_IMASK)             \        );                                      \    CYG_MACRO_END#define HAL_ENABLE_INTERRUPTS()                 \    CYG_MACRO_START                             \    cyg_uint32 _tmp_;                           \    asm volatile (                              \        "stc    sr,%0    \n\t"                  \        "and    %1,%0    \n\t"                  \        "ldc    %0,sr    \n\t"                  \        : "=&r" (_tmp_)                         \        : "r" (~CYGARC_REG_SR_IMASK)            \        );                                      \    CYG_MACRO_END#define HAL_RESTORE_INTERRUPTS(_old_)                   \    CYG_MACRO_START                                     \    cyg_uint32 _tmp1_, _tmp2_;                          \    asm volatile (                                      \        "stc    sr,%0    \n\t"                          \        "and    %3,%0    \n\t"                          \        "not    %3,%1    \n\t"                          \        "and    %2,%1    \n\t"                          \        "or     %1,%0    \n\t"                          \        "ldc    %0,sr    \n\t"                          \        : "=&r" (_tmp1_), "=&r" (_tmp2_)                \        : "r" (_old_), "r" (~CYGARC_REG_SR_IMASK)       \        );                                              \    CYG_MACRO_END#define HAL_QUERY_INTERRUPTS(_old_)             \    CYG_MACRO_START                             \    asm volatile (                              \        "stc    sr,%0    \n\t"                  \        "and    %1,%0    \n\t"                  \        : "=&r"(_old_)                          \        : "r" (CYGARC_REG_SR_IMASK)             \        );                                      \    CYG_MACRO_END//--------------------------------------------------------------------------// Vector translation.#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN# define HAL_TRANSLATE_VECTOR(_vector_,_index_) (_index_) = 0#else# define HAL_TRANSLATE_VECTOR(_vector_,_index_) (_index_) = (_vector_)#endif//--------------------------------------------------------------------------// 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.#define HAL_INTERRUPT_STACK_BASE cyg_interrupt_stack_base

⌨️ 快捷键说明

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