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

📄 var_intr.h

📁 eCos1.31版
💻 H
📖 第 1 页 / 共 2 页
字号:
        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_acknowledge ( cyg_uint32 vector ){    switch (vector) {    case CYGNUM_HAL_INTERRUPT_SIU_IRQ0 ... CYGNUM_HAL_INTERRUPT_SIU_LVL7:    {        // SIU interrupt vectors        cyg_uint32 sipend;        // When IRQx is configured as an edge interrupt it needs to be        // cleared. Write to INTx and IRQ/level bits are ignore so        // it's safe to do always.        HAL_READ_UINT32 (CYGARC_REG_IMM_SIPEND, sipend);        sipend |= (((cyg_uint32) CYGARC_REG_IMM_SIPEND_IRQ0)                    >> (vector - CYGNUM_HAL_INTERRUPT_SIU_IRQ0));        HAL_WRITE_UINT32 (CYGARC_REG_IMM_SIPEND, sipend);        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_REFA;        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_REFB;        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_PS;        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_SEC;        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_ALR;        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        // The CPM interrupts must be acknowledged individually.        break;    case CYGNUM_HAL_INTERRUPT_CPM_FIRST ... CYGNUM_HAL_INTERRUPT_CPM_LAST:    {        // CPM interrupts        cyg_uint32 cisr;        HAL_READ_UINT32 (CYGARC_REG_IMM_CISR, cisr);        cisr |= (((cyg_uint32) 0x80000000)                  >> (vector - CYGNUM_HAL_INTERRUPT_CPM_FIRST));        HAL_WRITE_UINT32 (CYGARC_REG_IMM_CISR, cisr);        break;    }    default:        CYG_FAIL("Unknown Interrupt!!!");        break;    }}static __inline__ voidcyg_hal_interrupt_configure ( cyg_uint32 vector,                              cyg_bool level,                              cyg_bool up ){    switch (vector) {    case CYGNUM_HAL_INTERRUPT_SIU_IRQ0:    case CYGNUM_HAL_INTERRUPT_SIU_IRQ1:    case CYGNUM_HAL_INTERRUPT_SIU_IRQ2:    case CYGNUM_HAL_INTERRUPT_SIU_IRQ3:    case CYGNUM_HAL_INTERRUPT_SIU_IRQ4:    case CYGNUM_HAL_INTERRUPT_SIU_IRQ5:    case CYGNUM_HAL_INTERRUPT_SIU_IRQ6:    case CYGNUM_HAL_INTERRUPT_SIU_IRQ7:    {        // External interrupts        cyg_uint32 siel, bit;        CYG_ASSERT( level || !up, "Only falling edge is supported");            bit = (((cyg_uint32) CYGARC_REG_IMM_SIEL_IRQ0)                >> (vector - CYGNUM_HAL_INTERRUPT_SIU_IRQ0));        HAL_READ_UINT32 (CYGARC_REG_IMM_SIEL, siel);        siel &= ~bit;        if (!level) {            // Set edge detect bit.            siel |= bit;        }        HAL_WRITE_UINT32 (CYGARC_REG_IMM_SIEL, siel);        break;    }    case CYGNUM_HAL_INTERRUPT_SIU_LVL0:    case CYGNUM_HAL_INTERRUPT_SIU_LVL1:    case CYGNUM_HAL_INTERRUPT_SIU_LVL2:    case CYGNUM_HAL_INTERRUPT_SIU_LVL3:    case CYGNUM_HAL_INTERRUPT_SIU_LVL4:    case CYGNUM_HAL_INTERRUPT_SIU_LVL5:    case CYGNUM_HAL_INTERRUPT_SIU_LVL6:    case CYGNUM_HAL_INTERRUPT_SIU_LVL7:    case CYGNUM_HAL_INTERRUPT_SIU_TB_A:    case CYGNUM_HAL_INTERRUPT_SIU_TB_B:    case CYGNUM_HAL_INTERRUPT_SIU_PIT:    case CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC:    case CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR:    // PCMCIA_A_IRQ    // PCMCIA_A_CHLVL    // PCMCIA_B_IRQ    // PCMCIA_B_CHLVL    case CYGNUM_HAL_INTERRUPT_SIU_CPM:    case CYGNUM_HAL_INTERRUPT_CPM_FIRST ... CYGNUM_HAL_INTERRUPT_CPM_LAST:        // These cannot be configured.        break;    default:        CYG_FAIL("Unknown Interrupt!!!");        break;    }}static __inline__ voidcyg_hal_interrupt_set_level ( cyg_uint32 vector, cyg_uint32 level ){    // Note: highest priority has the lowest numerical value.    CYG_ASSERT( level >= CYGARC_SIU_PRIORITY_HIGH, "Invalid priority");    CYG_ASSERT( level <= CYGARC_SIU_PRIORITY_LOW, "Invalid priority");    switch (vector) {    case CYGNUM_HAL_INTERRUPT_SIU_IRQ0 ... CYGNUM_HAL_INTERRUPT_SIU_LVL7:        // These cannot be configured.        break;    case CYGNUM_HAL_INTERRUPT_SIU_TB_A:    case CYGNUM_HAL_INTERRUPT_SIU_TB_B:    {        // TimeBase A+B interrupt        cyg_uint16 tbscr;        HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);        tbscr &= ~(CYGARC_REG_IMM_TBSCR_IRQMASK);        tbscr |= CYGARC_REG_IMM_TBSCR_IRQ0 >> level;        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_IRQMASK);        piscr |= CYGARC_REG_IMM_PISCR_IRQ0 >> level;        HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);        break;    }    case CYGNUM_HAL_INTERRUPT_SIU_RTC_SEC:    case CYGNUM_HAL_INTERRUPT_SIU_RTC_ALR:    {        // Real Time Clock Second & Real Time Clock Alarm        cyg_uint16 rtcsc;        HAL_READ_UINT16 (CYGARC_REG_IMM_RTCSC, rtcsc);        rtcsc &= ~(CYGARC_REG_IMM_RTCSC_IRQMASK);        rtcsc |= CYGARC_REG_IMM_RTCSC_IRQ0 >> level;        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_IRQMASK);        cicr |= level << CYGARC_REG_IMM_CICR_IRQ_SHIFT;        HAL_WRITE_UINT32 (CYGARC_REG_IMM_CICR, cicr);        break;    }    case CYGNUM_HAL_INTERRUPT_CPM_FIRST ... CYGNUM_HAL_INTERRUPT_CPM_LAST:        // CPM interrupt levels are for internal priority. All interrupts        // fed to the CPU use the CPM level set above.        // FIXME: Control of SCdP ordering.        break;    default:        CYG_FAIL("Unknown Interrupt!!!");        break;    }}// The decrementer interrupt cannnot be masked, configured or acknowledged.#define HAL_INTERRUPT_MASK( _vector_ )                    \    CYG_MACRO_START                                       \    if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_))   \        cyg_hal_interrupt_mask ( (_vector_) );            \    CYG_MACRO_END#define HAL_INTERRUPT_UNMASK( _vector_ )                  \    CYG_MACRO_START                                       \    if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_))   \        cyg_hal_interrupt_unmask ( (_vector_) );          \    CYG_MACRO_END#define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ )             \    CYG_MACRO_START                                       \    if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_))   \        cyg_hal_interrupt_acknowledge ( (_vector_) );     \    CYG_MACRO_END#define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ )              \    CYG_MACRO_START                                                     \    if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_))                 \        cyg_hal_interrupt_configure ( (_vector_), (_level_), (_up_) );  \    CYG_MACRO_END#define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ )            \    CYG_MACRO_START                                             \    if (CYGNUM_HAL_INTERRUPT_DECREMENTER != (_vector_))         \        cyg_hal_interrupt_set_level ( (_vector_) , (_level_) ); \    CYG_MACRO_END#define CYGHWR_HAL_INTERRUPT_CONTROLLER_ACCESS_DEFINED#endif//--------------------------------------------------------------------------// Interrupt arbiters#ifdef CYGPKG_HAL_POWERPC_MPC860externC cyg_uint32 hal_arbitration_isr_tb (CYG_ADDRWORD vector,                                            CYG_ADDRWORD data);externC cyg_uint32 hal_arbitration_isr_pit (CYG_ADDRWORD vector,                                            CYG_ADDRWORD data);externC cyg_uint32 hal_arbitration_isr_rtc (CYG_ADDRWORD vector,                                            CYG_ADDRWORD data);externC cyg_uint32 hal_arbitration_isr_cpm (CYG_ADDRWORD vector,                                            CYG_ADDRWORD data);#endif // ifdef CYGPKG_HAL_POWERPC_MPC860//-----------------------------------------------------------------------------#endif // ifndef CYGONCE_VAR_INTR_H// End of var_intr.h

⌨️ 快捷键说明

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