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

📄 hal_intr.h

📁 eCos1.31版
💻 H
📖 第 1 页 / 共 2 页
字号:
        (_index_) = (_vector_);                                            \    else                                                                   \    {                                                                      \        /* ICRs are 16 bit regs at 32 bit spacing */                       \        cyg_ucount16 _ix_ = ((_vector_)>>2)<<1;                            \                                                                           \        /* read the appropriate interrupt control register */              \        cyg_uint16 _icr_ = mn10300_interrupt_control[_ix_];                \                                                                           \        /* extract interrupt priority level */                             \        _index_ = CYGNUM_HAL_INTERRUPT_RESERVED_3 + ((_icr_ >> 12) & 0x7); \    }                                                                      \}#else#define HAL_TRANSLATE_VECTOR(_vector_,_index_) _index_ = (_vector_)#endif#endif//--------------------------------------------------------------------------// Interrupt and VSR attachment macros#define HAL_INTERRUPT_IN_USE( _vector_, _state_)                                \CYG_MACRO_START                                                                 \    cyg_uint32 _index_;                                                         \    HAL_TRANSLATE_VECTOR ((_vector_), _index_);                                 \                                                                                \    if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)HAL_DEFAULT_ISR )       \        (_state_) = 0;                                                          \    else                                                                        \        (_state_) = 1;                                                          \CYG_MACRO_END#define HAL_INTERRUPT_ATTACH( _vector_, _isr_, _data_, _object_ )               \CYG_MACRO_START                                                                 \    cyg_uint32 _index_;                                                         \    HAL_TRANSLATE_VECTOR(_vector_,_index_);                                     \                                                                                \    if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)HAL_DEFAULT_ISR )       \    {                                                                           \        hal_interrupt_handlers[_index_] = (CYG_ADDRESS)_isr_;                   \        hal_interrupt_data[_index_] = (CYG_ADDRWORD)_data_;                     \        hal_interrupt_objects[_index_] = (CYG_ADDRESS)_object_;                 \    }                                                                           \CYG_MACRO_END#define HAL_INTERRUPT_DETACH( _vector_, _isr_ )                         \CYG_MACRO_START                                                         \    cyg_uint32 _index_;                                                 \    HAL_TRANSLATE_VECTOR(_vector_,_index_);                             \                                                                        \    if( hal_interrupt_handlers[_index_] == (CYG_ADDRESS)_isr_ )         \    {                                                                   \        hal_interrupt_handlers[_index_] = (CYG_ADDRESS)HAL_DEFAULT_ISR; \        hal_interrupt_data[_index_] = 0;                                \        hal_interrupt_objects[_index_] = 0;                             \    }                                                                   \CYG_MACRO_END#define HAL_VSR_GET( _vector_, _pvsr_ )                                 \    *((CYG_ADDRESS *)_pvsr_) = hal_vsr_table[_vector_];    #define HAL_VSR_SET( _vector_, _vsr_, _poldvsr_ )                       \    if( _poldvsr_ != NULL )                                             \        *(CYG_ADDRESS *)_poldvsr_ = hal_vsr_table[_vector_];            \    hal_vsr_table[_vector_] = (CYG_ADDRESS)_vsr_;//--------------------------------------------------------------------------// Interrupt controller access// Read interrupt control registers back after writing to them. This// ensures that the written value is not sitting in the store buffers// when interrupts are re-enabled.#define HAL_INTERRUPT_MASK( _vector_ )                                  \{                                                                       \    /* ICRs are 16 bit regs at 32 bit spacing */                        \    cyg_ucount16 _index_ = ((_vector_)>>2)<<1;                          \                                                                        \    /* read the appropriate interrupt control register */               \    cyg_uint16 _icr_ = mn10300_interrupt_control[_index_];              \                                                                        \    /* clear interrupt enable bit for this vector */                    \    _icr_ &= ~(0x0100<<((_vector_)&3));                                 \                                                                        \    /* restore the interrupt control register */                        \    mn10300_interrupt_control[_index_] = _icr_;                         \    _icr_ = mn10300_interrupt_control[_index_];                         \}#define HAL_INTERRUPT_UNMASK( _vector_ )                                \{                                                                       \    /* ICRs are 16 bit regs at 32 bit spacing */                        \    cyg_ucount16 _index_ = (_vector_>>2)<<1;                            \                                                                        \    /* read the appropriate interrupt control register */               \    cyg_uint16 _icr_ = mn10300_interrupt_control[_index_];              \                                                                        \    /* set interrupt enable bit for this vector */                      \    _icr_ |= (0x0100<<(_vector_&3));                                    \                                                                        \    /* restore the interrupt control register */                        \    mn10300_interrupt_control[_index_] = _icr_;                         \    _icr_ = mn10300_interrupt_control[_index_];                         \}#define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ )                   \{                                                               \    /* ICRs are 16 bit regs at 32 bit spacing */                \    cyg_ucount16 _index_ = ((_vector_)>>2)<<1;                  \                                                                \    /* read the appropriate interrupt control register */       \    cyg_uint16 _icr_ = mn10300_interrupt_control[_index_];      \                                                                \    /* clear interrupt request bit for this vector */           \    _icr_ &= ~(0x0010<<((_vector_)&3));                         \                                                                \    /* set interrupt detect bit for this vector */              \    _icr_ |= (0x0001<<((_vector_)&3));                          \                                                                \    /* restore the interrupt control register */                \    mn10300_interrupt_control[_index_] = _icr_;                 \    _icr_ = mn10300_interrupt_control[_index_];                 \}#if !defined(HAL_INTERRUPT_CONFIGURE)#error HAL_INTERRUPT_CONFIGURE not defined by variant#endif#define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ )            \{                                                               \    /* ICRs are 16 bit regs at 32 bit spacing */                \    cyg_ucount16 _index_ = (_vector_>>2)<<1;                    \                                                                \    /* read the appropriate interrupt control register */       \    cyg_uint16 _icr_ = mn10300_interrupt_control[_index_];      \                                                                \    /* set interrupt level for this group of vectors */         \    _icr_ &= 0x0FFF;                                            \    _icr_ |= (_level_)<<12;                                     \                                                                \    /* restore the interrupt control register */                \    mn10300_interrupt_control[_index_] = _icr_;                 \    _icr_ = mn10300_interrupt_control[_index_];                 \}//--------------------------------------------------------------------------// Clock control.// This is almost all handled in the var_intr.h.#ifdef CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY#define HAL_CLOCK_LATENCY(_pvalue_) HAL_CLOCK_READ(_pvalue_)#endif//--------------------------------------------------------------------------#endif // ifndef CYGONCE_HAL_HAL_INTR_H// EOF hal_intr.h

⌨️ 快捷键说明

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