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

📄 var_intr.h

📁 eCos1.31版
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef CYGONCE_VAR_INTR_H#define CYGONCE_VAR_INTR_H//=============================================================================////      var_intr.h////      Variant 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):   nickg// Contributors:nickg, jskov, jlarmour, hmt// Date:        2000-04-02// Purpose:     Variant interrupt support// Description: The macros defined here provide the HAL APIs for handling//              interrupts and the clock on the MPC8xx variant CPUs.// Usage:       Is included via the architecture interrupt header://              #include <cyg/hal/hal_intr.h>//              ...////####DESCRIPTIONEND####////=============================================================================#include <pkgconf/hal.h>#include <cyg/infra/cyg_type.h>         // types#include <cyg/hal/ppc_regs.h>           // register definitions#include <cyg/hal/hal_io.h>             // io macros#include <cyg/infra/cyg_ass.h>          // CYG_FAIL//-----------------------------------------------------------------------------// Exception vectors.// Additional exceptions on the MPC8xx CPUs#define CYGNUM_HAL_VECTOR_RESERVED_F         15#define CYGNUM_HAL_VECTOR_SW_EMUL            16#define CYGNUM_HAL_VECTOR_ITLB_MISS          17#define CYGNUM_HAL_VECTOR_DTLB_MISS          18#define CYGNUM_HAL_VECTOR_ITLB_ERROR         19#define CYGNUM_HAL_VECTOR_DTLB_ERROR         20#define CYGNUM_HAL_VECTOR_RESERVED_15        21#define CYGNUM_HAL_VECTOR_RESERVED_16        22#define CYGNUM_HAL_VECTOR_RESERVED_17        23#define CYGNUM_HAL_VECTOR_RESERVED_18        24#define CYGNUM_HAL_VECTOR_RESERVED_19        25#define CYGNUM_HAL_VECTOR_RESERVED_1A        26#define CYGNUM_HAL_VECTOR_RESERVED_1B        27#define CYGNUM_HAL_VECTOR_DATA_BP            28#define CYGNUM_HAL_VECTOR_INSTRUCTION_BP     29#define CYGNUM_HAL_VECTOR_PERIPHERAL_BP      30#define CYGNUM_HAL_VECTOR_NMI                31#define CYGNUM_HAL_VSR_MAX                   CYGNUM_HAL_VECTOR_NMI// These are the values used when passed out to an// external exception handler using cyg_hal_deliver_exception()#define CYGNUM_HAL_EXCEPTION_RESERVED_0      CYGNUM_HAL_VECTOR_RESERVED_0#define CYGNUM_HAL_EXCEPTION_MACHINE_CHECK   CYGNUM_HAL_VECTOR_MACHINE_CHECK#ifdef CYGPKG_HAL_POWERPC_MPC860// The MPC860 does not generate DSI and ISI: instead it goes to machine// check, so that a software VM system can then call into vectors 0x300 or// 0x400 if the address is truly invalid rather than merely not in the TLB// right now.  Shades of IBM wanting to port OS/MVS here!// See pp 7-9/10 in "PowerQUICC - MPC860 User's Manual"# undef CYGNUM_HAL_EXCEPTION_DATA_ACCESS# define CYGNUM_HAL_EXCEPTION_DATA_ACCESS    CYGNUM_HAL_VECTOR_MACHINE_CHECK// do not define catchers for DSI and ISI - should never happen.# undef CYGNUM_HAL_EXCEPTION_MACHINE_CHECK# undef CYGNUM_HAL_EXCEPTION_CODE_ACCESS#else# define CYGNUM_HAL_EXCEPTION_DATA_ACCESS    CYGNUM_HAL_VECTOR_DSI# define CYGNUM_HAL_EXCEPTION_CODE_ACCESS    CYGNUM_HAL_VECTOR_ISI#endif#define CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS  \           CYGNUM_HAL_VECTOR_ALIGNMENT#define CYGNUM_HAL_EXCEPTION_FPU_NOT_AVAIL   CYGNUM_HAL_VECTOR_FP_UNAVAILABLE#define CYGNUM_HAL_EXCEPTION_RESERVED_A      CYGNUM_HAL_VECTOR_RESERVED_A#define CYGNUM_HAL_EXCEPTION_RESERVED_B      CYGNUM_HAL_VECTOR_RESERVED_B#define CYGNUM_HAL_EXCEPTION_SYSTEM_CALL     CYGNUM_HAL_VECTOR_SYSTEM_CALL#define CYGNUM_HAL_EXCEPTION_TRACE           CYGNUM_HAL_VECTOR_TRACE#define CYGNUM_HAL_EXCEPTION_FP_ASSIST       CYGNUM_HAL_VECTOR_FP_ASSIST#define CYGNUM_HAL_EXCEPTION_RESERVED_F      CYGNUM_HAL_VECTOR_RESERVED_F#define CYGNUM_HAL_EXCEPTION_SW_EMUL         CYGNUM_HAL_VECTOR_SW_EMUL#define CYGNUM_HAL_EXCEPTION_CODE_TLBMISS_ACCESS  CYGNUM_HAL_VECTOR_ITLB_MISS#define CYGNUM_HAL_EXCEPTION_DATA_TLBMISS_ACCESS  CYGNUM_HAL_VECTOR_DTLB_MISS#define CYGNUM_HAL_EXCEPTION_CODE_TLBERROR_ACCESS \               CYGNUM_HAL_VECTOR_ITLB_ERROR#define CYGNUM_HAL_EXCEPTION_DATA_TLBERROR_ACCESS \           CYGNUM_HAL_VECTOR_DTLB_ERROR#define CYGNUM_HAL_EXCEPTION_RESERVED_15     CYGNUM_HAL_VECTOR_RESERVED_15#define CYGNUM_HAL_EXCEPTION_RESERVED_16     CYGNUM_HAL_VECTOR_RESERVED_16#define CYGNUM_HAL_EXCEPTION_RESERVED_17     CYGNUM_HAL_VECTOR_RESERVED_17#define CYGNUM_HAL_EXCEPTION_RESERVED_18     CYGNUM_HAL_VECTOR_RESERVED_18#define CYGNUM_HAL_EXCEPTION_RESERVED_19     CYGNUM_HAL_VECTOR_RESERVED_19#define CYGNUM_HAL_EXCEPTION_RESERVED_1A     CYGNUM_HAL_VECTOR_RESERVED_1A#define CYGNUM_HAL_EXCEPTION_RESERVED_1B     CYGNUM_HAL_VECTOR_RESERVED_1B#define CYGNUM_HAL_EXCEPTION_DATA_BP         CYGNUM_HAL_VECTOR_DATA_BP#define CYGNUM_HAL_EXCEPTION_INSTRUCTION_BP  CYGNUM_HAL_VECTOR_INSTRUCTION_BP#define CYGNUM_HAL_EXCEPTION_PERIPHERAL_BP   CYGNUM_HAL_VECTOR_PERIPHERAL_BP#define CYGNUM_HAL_EXCEPTION_NMI             CYGNUM_HAL_VECTOR_NMI#define CYGNUM_HAL_EXCEPTION_MIN             CYGNUM_HAL_EXCEPTION_RESERVED_0#define CYGNUM_HAL_EXCEPTION_MAX             CYGNUM_HAL_EXCEPTION_NMI#define CYGHWR_HAL_EXCEPTION_VECTORS_DEFINED//-----------------------------------------------------------------------------// Interrupts// The first level of external interrupts#define CYGNUM_HAL_INTERRUPT_SIU_IRQ0            1#define CYGNUM_HAL_INTERRUPT_SIU_LVL0            2#define CYGNUM_HAL_INTERRUPT_SIU_IRQ1            3#define CYGNUM_HAL_INTERRUPT_SIU_LVL1            4#define CYGNUM_HAL_INTERRUPT_SIU_IRQ2            5#define CYGNUM_HAL_INTERRUPT_SIU_LVL2            6#define CYGNUM_HAL_INTERRUPT_SIU_IRQ3            7#define CYGNUM_HAL_INTERRUPT_SIU_LVL3            8#define CYGNUM_HAL_INTERRUPT_SIU_IRQ4            9#define CYGNUM_HAL_INTERRUPT_SIU_LVL4           10#define CYGNUM_HAL_INTERRUPT_SIU_IRQ5           11#define CYGNUM_HAL_INTERRUPT_SIU_LVL5           12#define CYGNUM_HAL_INTERRUPT_SIU_IRQ6           13#define CYGNUM_HAL_INTERRUPT_SIU_LVL6           14#define CYGNUM_HAL_INTERRUPT_SIU_IRQ7           15#define CYGNUM_HAL_INTERRUPT_SIU_LVL7           16// Further decoded interrups#define CYGNUM_HAL_INTERRUPT_SIU_TB_A           17#define CYGNUM_HAL_INTERRUPT_SIU_TB_B           18#define CYGNUM_HAL_INTERRUPT_SIU_PIT            19#define CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC        20#define CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR        21#define CYGNUM_HAL_INTERRUPT_SIU_PCMCIA_A_IRQ   22#define CYGNUM_HAL_INTERRUPT_SIU_PCMCIA_A_CHLVL 23#define CYGNUM_HAL_INTERRUPT_SIU_PCMCIA_B_IRQ   24#define CYGNUM_HAL_INTERRUPT_SIU_PCMCIA_B_CHLVL 25#define CYGNUM_HAL_INTERRUPT_SIU_CPM            26// Even further...#define CYGNUM_HAL_INTERRUPT_CPM_PC15           27#define CYGNUM_HAL_INTERRUPT_CPM_SCC1           28#define CYGNUM_HAL_INTERRUPT_CPM_SCC2           29#define CYGNUM_HAL_INTERRUPT_CPM_SCC3           30#define CYGNUM_HAL_INTERRUPT_CPM_SCC4           31#define CYGNUM_HAL_INTERRUPT_CPM_PC14           32#define CYGNUM_HAL_INTERRUPT_CPM_TIMER1         33#define CYGNUM_HAL_INTERRUPT_CPM_PC13           34#define CYGNUM_HAL_INTERRUPT_CPM_PC12           35#define CYGNUM_HAL_INTERRUPT_CPM_SDMA           36#define CYGNUM_HAL_INTERRUPT_CPM_IDMA1          37#define CYGNUM_HAL_INTERRUPT_CPM_IDMA2          38#define CYGNUM_HAL_INTERRUPT_CPM_RESERVED_13    39#define CYGNUM_HAL_INTERRUPT_CPM_TIMER2         40#define CYGNUM_HAL_INTERRUPT_CPM_RISCTT         41#define CYGNUM_HAL_INTERRUPT_CPM_I2C            42#define CYGNUM_HAL_INTERRUPT_CPM_PC11           43#define CYGNUM_HAL_INTERRUPT_CPM_PC10           44#define CYGNUM_HAL_INTERRUPT_CPM_RESERVED_0D    45#define CYGNUM_HAL_INTERRUPT_CPM_TIMER3         46#define CYGNUM_HAL_INTERRUPT_CPM_PC9            47#define CYGNUM_HAL_INTERRUPT_CPM_PC8            48#define CYGNUM_HAL_INTERRUPT_CPM_PC7            49#define CYGNUM_HAL_INTERRUPT_CPM_RESERVED_08    50#define CYGNUM_HAL_INTERRUPT_CPM_TIMER4         51#define CYGNUM_HAL_INTERRUPT_CPM_PC6            52#define CYGNUM_HAL_INTERRUPT_CPM_SPI            53#define CYGNUM_HAL_INTERRUPT_CPM_SMC1           54#define CYGNUM_HAL_INTERRUPT_CPM_SMC2_PIP       55#define CYGNUM_HAL_INTERRUPT_CPM_PC5            56#define CYGNUM_HAL_INTERRUPT_CPM_PC4            57#define CYGNUM_HAL_INTERRUPT_CPM_ERROR          58#define CYGNUM_HAL_INTERRUPT_CPM_FIRST       CYGNUM_HAL_INTERRUPT_CPM_PC15#define CYGNUM_HAL_INTERRUPT_CPM_LAST        CYGNUM_HAL_INTERRUPT_CPM_ERROR#define CYGNUM_HAL_ISR_MAX                   CYGNUM_HAL_INTERRUPT_CPM_LAST#endif//--------------------------------------------------------------------------// Interrupt controller access#ifndef CYGHWR_HAL_INTERRUPT_CONTROLLER_ACCESS_DEFINED#ifdef CYGPKG_HAL_POWERPC_MPC860static __inline__ voidcyg_hal_interrupt_mask ( cyg_uint32 vector ){    switch (vector) {    case CYGNUM_HAL_INTERRUPT_SIU_IRQ0 ... CYGNUM_HAL_INTERRUPT_SIU_LVL7:    {        // SIU interrupt vectors        cyg_uint32 simask;        HAL_READ_UINT32 (CYGARC_REG_IMM_SIMASK, simask);        simask &= ~(((cyg_uint32) CYGARC_REG_IMM_SIMASK_IRQ0)                     >> (vector - CYGNUM_HAL_INTERRUPT_SIU_IRQ0));        HAL_WRITE_UINT32 (CYGARC_REG_IMM_SIMASK, simask);        break;    }    case CYGNUM_HAL_INTERRUPT_SIU_TB_A:    {        // TimeBase A interrupt        cyg_uint16 tbscr;        HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);        tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFAE);        HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);        break;    }    case CYGNUM_HAL_INTERRUPT_SIU_TB_B:    {        // TimeBase B interrupt        cyg_uint16 tbscr;        HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);        tbscr &= ~(CYGARC_REG_IMM_TBSCR_REFBE);        HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);        break;    }    case CYGNUM_HAL_INTERRUPT_SIU_PIT:    {        // Periodic Interrupt        cyg_uint16 piscr;        HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);        piscr &= ~(CYGARC_REG_IMM_PISCR_PIE);        HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);        break;    }    case CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC:    {        // Real Time Clock Second        cyg_uint16 rtcsc;        HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);        rtcsc &= ~(CYGARC_REG_IMM_RTCSC_SIE);        HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);        break;    }    case CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR:    {        // Real Time Clock Alarm        cyg_uint16 rtcsc;        HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);        rtcsc &= ~(CYGARC_REG_IMM_RTCSC_ALE);        HAL_WRITE_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);        break;    }    // PCMCIA_A_IRQ    // PCMCIA_A_CHLVL    // PCMCIA_B_IRQ    // PCMCIA_B_CHLVL    case CYGNUM_HAL_INTERRUPT_SIU_CPM:    {        // Communications Processor Module        cyg_uint32 cicr;        HAL_READ_UINT32 (CYGARC_REG_IMM_CICR, cicr);        cicr &= ~(CYGARC_REG_IMM_CICR_IEN);        HAL_WRITE_UINT32 (CYGARC_REG_IMM_CICR, cicr);        break;    }    case CYGNUM_HAL_INTERRUPT_CPM_FIRST ... CYGNUM_HAL_INTERRUPT_CPM_LAST:    {        // CPM interrupts        cyg_uint32 cimr;        HAL_READ_UINT32 (CYGARC_REG_IMM_CIMR, cimr);        cimr &= ~(((cyg_uint32) 0x80000000)                   >> (vector - CYGNUM_HAL_INTERRUPT_CPM_FIRST));        HAL_WRITE_UINT32 (CYGARC_REG_IMM_CIMR, cimr);        break;    }    default:        CYG_FAIL("Unknown Interrupt!!!");        break;    }}static __inline__ voidcyg_hal_interrupt_unmask ( cyg_uint32 vector ){    switch (vector) {    case CYGNUM_HAL_INTERRUPT_SIU_IRQ0 ... CYGNUM_HAL_INTERRUPT_SIU_LVL7:    {        // SIU interrupt vectors        cyg_uint32 simask;        HAL_READ_UINT32 (CYGARC_REG_IMM_SIMASK, simask);        simask |= (((cyg_uint32) CYGARC_REG_IMM_SIMASK_IRQ0)                    >> (vector - CYGNUM_HAL_INTERRUPT_SIU_IRQ0));        HAL_WRITE_UINT32 (CYGARC_REG_IMM_SIMASK, simask);        break;    }    case CYGNUM_HAL_INTERRUPT_SIU_TB_A:    {        // TimeBase A interrupt        cyg_uint16 tbscr;        HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);        tbscr |= CYGARC_REG_IMM_TBSCR_REFAE;        HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);        break;    }    case CYGNUM_HAL_INTERRUPT_SIU_TB_B:    {        // TimeBase B interrupt        cyg_uint16 tbscr;        HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);        tbscr |= CYGARC_REG_IMM_TBSCR_REFBE;        HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);

⌨️ 快捷键说明

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