plf_intr.h

来自「eCos操作系统源码」· C头文件 代码 · 共 312 行 · 第 1/2 页

H
312
字号
    {                                                                       \        asm volatile (                                                      \            "mfc0   $3,$12\n"                                               \            "la     $2,0x00000400\n"                                        \            "sllv   $2,$2,%0\n"                                             \            "nor    $2,$2,$0\n"                                             \            "and    $3,$3,$2\n"                                             \            "mtc0   $3,$12\n"                                               \            "nop; nop; nop\n"                                               \            :                                                               \            : "r"(_vector_)                                                 \            : "$2", "$3"                                                    \            );                                                              \    }                                                                       \    else if ((_vector_) >= CYGNUM_HAL_INTERRUPT_CTRL2_BASE)                 \    {                                                                       \        cyg_uint8 _mask_;                                                   \        cyg_uint32 _shift_ = (_vector_)-CYGNUM_HAL_INTERRUPT_CTRL2_BASE;    \        HAL_READ_UINT8(HAL_PIIX4_SLAVE_OCW1, _mask_ );                      \        _mask_ |= (1<<_shift_);                                             \        HAL_WRITE_UINT8(HAL_PIIX4_SLAVE_OCW1, _mask_ );                     \    }                                                                       \    else /* CTRL1 */                                                        \    {                                                                       \        cyg_uint8 _mask_;                                                   \        cyg_uint32 _shift_ = (_vector_)-CYGNUM_HAL_INTERRUPT_CTRL1_BASE;    \        HAL_READ_UINT8(HAL_PIIX4_MASTER_OCW1, _mask_ );                     \        _mask_ |= (1<<_shift_);                                             \        HAL_WRITE_UINT8(HAL_PIIX4_MASTER_OCW1, _mask_ );                    \    }                                                                       \    CYG_MACRO_END#define HAL_INTERRUPT_UNMASK( _vector_ )                     \    CYG_MACRO_START                                                         \    if( (_vector_) <= CYGNUM_HAL_INTERRUPT_COMPARE )                        \    {                                                                       \        asm volatile (                                                      \            "mfc0   $3,$12\n"                                               \            "la     $2,0x00000400\n"                                        \            "sllv   $2,$2,%0\n"                                             \            "or     $3,$3,$2\n"                                             \            "mtc0   $3,$12\n"                                               \            "nop; nop; nop\n"                                               \            :                                                               \            : "r"(_vector_)                                                 \            : "$2", "$3"                                                    \            );                                                              \    }                                                                       \    else if ((_vector_) >= CYGNUM_HAL_INTERRUPT_CTRL2_BASE)                 \    {                                                                       \        cyg_uint8 _mask_;                                                   \        cyg_uint32 _shift_ = (_vector_)-CYGNUM_HAL_INTERRUPT_CTRL2_BASE;    \        HAL_READ_UINT8(HAL_PIIX4_SLAVE_OCW1, _mask_ );                      \        _mask_ &= ~(1<<_shift_);                                            \        HAL_WRITE_UINT8(HAL_PIIX4_SLAVE_OCW1, _mask_ );                     \    }                                                                       \    else /* CTRL1 */                                                        \    {                                                                       \        cyg_uint8 _mask_;                                                   \        cyg_uint32 _shift_ = (_vector_)-CYGNUM_HAL_INTERRUPT_CTRL1_BASE;    \        HAL_READ_UINT8(HAL_PIIX4_MASTER_OCW1, _mask_ );                     \        _mask_ &= ~(1<<_shift_);                                            \        HAL_WRITE_UINT8(HAL_PIIX4_MASTER_OCW1, _mask_ );                    \    }                                                                       \    CYG_MACRO_END#define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ )                   \    CYG_MACRO_START                                             \    cyg_uint32 _srvector_ = _vector_;                           \    if ((_vector_) >= CYGNUM_HAL_INTERRUPT_CTRL2_BASE)          \    {                                                           \        HAL_WRITE_UINT8(HAL_PIIX4_SLAVE_OCW3, 0x20 );           \    }                                                           \    if ((_vector_) >= CYGNUM_HAL_INTERRUPT_CTRL1_BASE)          \    {                                                           \        HAL_WRITE_UINT8(HAL_PIIX4_MASTER_OCW3, 0x20 );          \    }                                                           \    if ((_vector_) >= CYGNUM_HAL_INTERRUPT_EXTERNAL_BASE) {     \        _srvector_ = CYGNUM_HAL_INTERRUPT_SOUTH_BRIDGE_INTR;    \    }                                                           \    asm volatile (                                              \        "mfc0   $3,$13\n"                                       \        "la     $2,0x00000400\n"                                \        "sllv   $2,$2,%0\n"                                     \        "nor    $2,$2,$0\n"                                     \        "and    $3,$3,$2\n"                                     \        "mtc0   $3,$13\n"                                       \        "nop; nop; nop\n"                                       \        :                                                       \        : "r"(_srvector_)                                       \        : "$2", "$3"                                            \        );                                                      \    CYG_MACRO_END#define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ )                  \    CYG_MACRO_START                                                         \    if ((_vector_) >= CYGNUM_HAL_INTERRUPT_CTRL2_BASE)                      \    {                                                                       \        cyg_uint8 _mask_;                                                   \        cyg_uint32 _shift_ = (_vector_)-CYGNUM_HAL_INTERRUPT_CTRL2_BASE;    \        HAL_READ_UINT8(HAL_PIIX4_ELCR2, _mask_ );                           \        _mask_ &= ~(1<<_shift_);                                            \        if (_level_) _mask_ |= (1<<_shift_);                                \        _mask_ &= HAL_PIIX4_ELCR2_MASK;                                     \        HAL_WRITE_UINT8(HAL_PIIX4_ELCR2, _mask_ );                          \    }                                                                       \    else if ((_vector_) >= CYGNUM_HAL_INTERRUPT_CTRL1_BASE)                 \    {                                                                       \        cyg_uint8 _mask_;                                                   \        cyg_uint32 _shift_ = (_vector_)-CYGNUM_HAL_INTERRUPT_CTRL1_BASE;    \        HAL_READ_UINT8(HAL_PIIX4_ELCR1, _mask_ );                           \        _mask_ &= ~(1<<_shift_);                                            \        if (_level_) _mask_ |= (1<<_shift_);                                \        _mask_ &= HAL_PIIX4_ELCR1_MASK;                                     \        HAL_WRITE_UINT8(HAL_PIIX4_ELCR1, _mask_ );                          \    }                                                                       \    CYG_MACRO_END#define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ )#define CYGHWR_HAL_INTERRUPT_CONTROLLER_ACCESS_DEFINED#endif//--------------------------------------------------------------------------// Control-C support.#if defined(CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT)# define CYGHWR_HAL_GDB_PORT_VECTOR CYGNUM_HAL_INTERRUPT_SERexternC cyg_uint32 hal_ctrlc_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data);# define HAL_CTRLC_ISR hal_ctrlc_isr#endif//----------------------------------------------------------------------------// Reset.#ifndef CYGHWR_HAL_RESET_DEFINEDextern void hal_malta_reset( void );#define CYGHWR_HAL_RESET_DEFINED#define HAL_PLATFORM_RESET()             hal_malta_reset()#define HAL_PLATFORM_RESET_ENTRY 0xbfc00000#endif // CYGHWR_HAL_RESET_DEFINED#endif // __ASSEMBLER__//--------------------------------------------------------------------------#endif // ifndef CYGONCE_HAL_PLF_INTR_H// End of plf_intr.h

⌨️ 快捷键说明

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