📄 plf_intr.h
字号:
// Array which stores the configured priority levels for the configured
// interrupts.
externC volatile CYG_BYTE cyg_hal_interrupt_level[CYGNUM_HAL_ISR_COUNT];
#define HAL_INTERRUPT_MASK( _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" \
"nor $2,$2,$0\n" \
"and $3,$3,$2\n" \
"mtc0 $3,$12\n" \
"nop; nop; nop\n" \
: \
: "r"(_vector_) \
: "$2", "$3" \
); \
} \
else \
{ \
CYG_WORD32 _mask_; \
CYG_BYTE _shift_; \
HAL_IO_REGISTER _maskreg_ = CYGHWR_HAL_MIPS_VRC4372_INTC_MASK0 + \
cyg_hal_interrupt_level[_vector_] * \
CYGHWR_HAL_MIPS_VRC4372_INTC_MASK_OFF; \
HAL_READ_UINT32( _maskreg_, _mask_ ); \
_shift_ = _vector_-CYGNUM_HAL_INTERRUPT_REALTIME_A; \
_mask_ &= ~(1<<_shift_); \
HAL_WRITE_UINT32( _maskreg_, _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 \
{ \
CYG_WORD32 _mask_; \
CYG_BYTE _shift_; \
HAL_IO_REGISTER _maskreg_ = CYGHWR_HAL_MIPS_VRC4372_INTC_MASK0 + \
cyg_hal_interrupt_level[_vector_] * \
CYGHWR_HAL_MIPS_VRC4372_INTC_MASK_OFF; \
HAL_READ_UINT32( _maskreg_, _mask_ ); \
_shift_ = _vector_-CYGNUM_HAL_INTERRUPT_REALTIME_A; \
_mask_ |= 1<<_shift_; \
HAL_WRITE_UINT32( _maskreg_, _mask_ ); \
} \
CYG_MACRO_END
#define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ ) \
CYG_MACRO_START \
CYG_WORD32 _srvector_ = _vector_; \
if( _vector_ > CYGNUM_HAL_INTERRUPT_COMPARE ) \
{ \
CYG_WORD32 _stat_; \
CYG_BYTE _shift_; \
HAL_IO_REGISTER _statreg_ = CYGHWR_HAL_MIPS_VRC4372_INTC_STAT0 +\
cyg_hal_interrupt_level[_vector_] * \
CYGHWR_HAL_MIPS_VRC4372_INTC_MASK_OFF; \
HAL_READ_UINT32( _statreg_, _stat_ ); \
_shift_ = _vector_-CYGNUM_HAL_INTERRUPT_REALTIME_A; \
_stat_ &= ~(1<<_shift_); \
HAL_WRITE_UINT32( _statreg_, _stat_ ); \
_srvector_ = cyg_hal_interrupt_level[_vector_] + \
CYGNUM_HAL_INTERRUPT_IPL0; \
} \
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_REALTIME_A) && \
(_vector_ <= CYGNUM_HAL_INTERRUPT_INT_13)) \
{ \
CYG_WORD32 mask = 1<<(_vector_-CYGNUM_HAL_INTERRUPT_REALTIME_A); \
CYG_WORD32 pol; \
CYG_WORD32 trig; \
HAL_READ_UINT32( CYGHWR_HAL_MIPS_VRC4372_INTC_POL, pol ); \
HAL_READ_UINT32( CYGHWR_HAL_MIPS_VRC4372_INTC_TRIG, trig ); \
if( _level_ ) \
{ \
pol &= ~mask; \
if( _up_ ) trig |= mask; \
else trig &= ~mask; \
} \
else \
{ \
pol |= mask; \
if( !(_up_) ) trig |= mask; \
else trig &= ~mask; \
} \
HAL_WRITE_UINT32( CYGHWR_HAL_MIPS_VRC4372_INTC_POL, pol ); \
HAL_WRITE_UINT32( CYGHWR_HAL_MIPS_VRC4372_INTC_TRIG, trig ); \
} \
CYG_MACRO_END
#define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ ) \
CYG_MACRO_START \
if( _vector_ > CYGNUM_HAL_INTERRUPT_COMPARE ) \
{ \
cyg_uint32 _ilevel_ = _level_; \
while( _ilevel_ > 2 ) _ilevel_ -= 2; \
cyg_hal_interrupt_level[_vector_] = _ilevel_; \
} \
CYG_MACRO_END
#define CYGHWR_HAL_INTERRUPT_CONTROLLER_ACCESS_DEFINED
//--------------------------------------------------------------------------
// Control-C support.
#if defined(CYGDBG_HAL_MIPS_DEBUG_GDB_CTRLC_SUPPORT)
# define CYGHWR_HAL_GDB_PORT_VECTOR CYGNUM_HAL_INTERRUPT_DUART
externC cyg_uint32 hal_ctrlc_isr(CYG_ADDRWORD vector, CYG_ADDRWORD data);
#define HAL_CTRLC_ISR hal_ctrlc_isr
#endif
//----------------------------------------------------------------------------
// Reset.
#define HAL_PLATFORM_RESET() CYG_EMPTY_STATEMENT
#define HAL_PLATFORM_RESET_ENTRY 0xbfc00000
//--------------------------------------------------------------------------
#endif // ifndef CYGONCE_HAL_PLF_INTR_H
// End of plf_intr.h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -