📄 plf_intr.h
字号:
{ \
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_SER
externC cyg_uint32 hal_ctrlc_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data);
# define HAL_CTRLC_ISR hal_ctrlc_isr
#endif
//----------------------------------------------------------------------------
// Reset.
#ifndef CYGHWR_HAL_RESET_DEFINED
extern 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -