hal_intr_excevt.h

来自「eCos操作系统源码」· C头文件 代码 · 共 256 行

H
256
字号
#ifndef CYGONCE_HAL_INTR_EXCEVT_H#define CYGONCE_HAL_INTR_EXCEVT_H//==========================================================================////      hal_intr_excevt.h////      HAL Interrupt and clock support for variants with EXCEVT style//      exception/interrupt mapping (SH3, SH4)////==========================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.//// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.// at http://sources.redhat.com/ecos/ecos-license/// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):    jskov// Contributors: jskov,// Date:         1999-04-24// Purpose:      Define Interrupt support// Description:  The macros defined here provide the HAL APIs for handling//               interrupts and the clock.//              // Usage:        Is included from <cyg/hal/hal_intr.h>////####DESCRIPTIONEND####////==========================================================================//--------------------------------------------------------------------------// SH exception vectors. These correspond to VSRs and are the values// to use for HAL_VSR_GET/SET//// Note that exceptions are decoded - there is a VSR slot for each exception// source, while interrupts are handled via the same VSR.#define CYGNUM_HAL_VECTOR_POWERON                0 // power-on#define CYGNUM_HAL_VECTOR_RESET                  1 // reset#define CYGNUM_HAL_VECTOR_TLBMISS_ACCESS         2 // TLB-miss/invalid load#define CYGNUM_HAL_VECTOR_TLBMISS_WRITE          3 // TLB-miss/invalid store#define CYGNUM_HAL_VECTOR_INITIAL_WRITE          4 // initial page write#define CYGNUM_HAL_VECTOR_TLBERROR_ACCESS        5 // TLB prot violation l#define CYGNUM_HAL_VECTOR_TLBERROR_WRITE         6 // TLB prot violation s#define CYGNUM_HAL_VECTOR_DATA_ACCESS            7 // address error (load)#define CYGNUM_HAL_VECTOR_DATA_WRITE             8 // address error (store)// RESERVED 9-10#define CYGNUM_HAL_VECTOR_TRAP                  11 // unconditional trap#define CYGNUM_HAL_VECTOR_ILLEGAL_INSTRUCTION   12 // reserved instruction#define CYGNUM_HAL_VECTOR_ILLEGAL_SLOT_INSTRUCTION  13                                            // illegal instruction in delay slot#define CYGNUM_HAL_VECTOR_NMI                   14 // NMI#define CYGNUM_HAL_VECTOR_INSTRUCTION_BP        15 // user breakpoint#define CYGNUM_HAL_VECTOR_INTERRUPT             16 // all interrupts#ifndef CYG_VECTOR_IS_INTERRUPT# define CYG_VECTOR_IS_INTERRUPT(v) (CYGNUM_HAL_VECTOR_INSTRUCTION_BP < (v))#endif#define CYGNUM_HAL_VSR_MIN                   CYGNUM_HAL_VECTOR_POWERON#ifndef CYGNUM_HAL_VSR_MAX# define CYGNUM_HAL_VSR_MAX                  CYGNUM_HAL_VECTOR_INTERRUPT#endif#define CYGNUM_HAL_VSR_COUNT                 ( CYGNUM_HAL_VSR_MAX + 1 )#ifndef CYGNUM_HAL_VSR_EXCEPTION_COUNT# define CYGNUM_HAL_VSR_EXCEPTION_COUNT       (CYGNUM_HAL_VECTOR_INSTRUCTION_BP-CYGNUM_HAL_VECTOR_POWERON+1)#endif// For the stub exception handling#define _CYGNUM_HAL_VECTOR_FIRST_MEM_FAULT       CYGNUM_HAL_EXCEPTION_TLBMISS_ACCESS#define _CYGNUM_HAL_VECTOR_LAST_MEM_FAULT        CYGNUM_HAL_EXCEPTION_DATA_WRITE// The decoded interrupts.#define CYGNUM_HAL_INTERRUPT_NMI             0#define CYGNUM_HAL_INTERRUPT_RESERVED_1E0    1#define CYGNUM_HAL_INTERRUPT_LVL0            2#define CYGNUM_HAL_INTERRUPT_LVL1            3#define CYGNUM_HAL_INTERRUPT_LVL2            4#define CYGNUM_HAL_INTERRUPT_LVL3            5#define CYGNUM_HAL_INTERRUPT_LVL4            6#define CYGNUM_HAL_INTERRUPT_LVL5            7#define CYGNUM_HAL_INTERRUPT_LVL6            8#define CYGNUM_HAL_INTERRUPT_LVL7            9#define CYGNUM_HAL_INTERRUPT_LVL8            10#define CYGNUM_HAL_INTERRUPT_LVL9            11#define CYGNUM_HAL_INTERRUPT_LVL10           12#define CYGNUM_HAL_INTERRUPT_LVL11           13#define CYGNUM_HAL_INTERRUPT_LVL12           14#define CYGNUM_HAL_INTERRUPT_LVL13           15#define CYGNUM_HAL_INTERRUPT_LVL14           16#define CYGNUM_HAL_INTERRUPT_RESERVED_3E0    17#define CYGNUM_HAL_INTERRUPT_TMU0_TUNI0      18#define CYGNUM_HAL_INTERRUPT_TMU1_TUNI1      19#define CYGNUM_HAL_INTERRUPT_TMU2_TUNI2      20#define CYGNUM_HAL_INTERRUPT_TMU2_TICPI2     21#define CYGNUM_HAL_INTERRUPT_RTC_ATI         22#define CYGNUM_HAL_INTERRUPT_RTC_PRI         23#define CYGNUM_HAL_INTERRUPT_RTC_CUI         24#define CYGNUM_HAL_INTERRUPT_SCI_ERI         25#define CYGNUM_HAL_INTERRUPT_SCI_RXI         26#define CYGNUM_HAL_INTERRUPT_SCI_TXI         27#define CYGNUM_HAL_INTERRUPT_SCI_TEI         28#define CYGNUM_HAL_INTERRUPT_WDT_ITI         29#define CYGNUM_HAL_INTERRUPT_REF_RCMI        30#define CYGNUM_HAL_INTERRUPT_REF_ROVI        31#ifndef CYGNUM_HAL_ISR_MAX# define CYGNUM_HAL_ISR_MAX                  CYGNUM_HAL_INTERRUPT_REF_ROVI#endif#define CYGNUM_HAL_ISR_MIN                   CYGNUM_HAL_INTERRUPT_NMI#define CYGNUM_HAL_ISR_COUNT                 ( CYGNUM_HAL_ISR_MAX - CYGNUM_HAL_ISR_MIN + 1 )// The vector used by the Real time clock#ifndef CYGNUM_HAL_INTERRUPT_RTC# define CYGNUM_HAL_INTERRUPT_RTC             CYGNUM_HAL_INTERRUPT_TMU0_TUNI0#endif//--------------------------------------------------------------------------// Exception vectors. These are the values used when passed out to an// external exception handler using cyg_hal_deliver_exception()// The exception indexes are EXPEVT/0x20. Variants may define additional// exception vectors.#define CYGNUM_HAL_EXCEPTION_POWERON                0 // power-on#define CYGNUM_HAL_EXCEPTION_RESET                  1 // reset#define CYGNUM_HAL_EXCEPTION_TLBMISS_ACCESS         2 // TLB-miss/invalid load#define CYGNUM_HAL_EXCEPTION_TLBMISS_WRITE          3 // TLB-miss/invalid store#define CYGNUM_HAL_EXCEPTION_INITIAL_WRITE          4 // initial page write#define CYGNUM_HAL_EXCEPTION_TLBERROR_ACCESS        5 // TLB prot violation l#define CYGNUM_HAL_EXCEPTION_TLBERROR_WRITE         6 // TLB prot violation s#define CYGNUM_HAL_EXCEPTION_DATA_ACCESS            7 // address error (load)#define CYGNUM_HAL_EXCEPTION_DATA_WRITE             8 // address error (store)#define CYGNUM_HAL_EXCEPTION_TRAP                  11 // unconditional trap#define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION   12 // reserved instruction#define CYGNUM_HAL_EXCEPTION_ILLEGAL_SLOT_INSTRUCTION  13                                            // illegal instruction in delay slot#define CYGNUM_HAL_EXCEPTION_INSTRUCTION_BP        15 // user breakpoint#define CYGNUM_HAL_EXCEPTION_MIN          CYGNUM_HAL_EXCEPTION_POWERON#ifndef CYGNUM_HAL_EXCEPTION_MAX# define CYGNUM_HAL_EXCEPTION_MAX         CYGNUM_HAL_EXCEPTION_INSTRUCTION_BP#endif#define CYGNUM_HAL_EXCEPTION_COUNT           \                 ( CYGNUM_HAL_EXCEPTION_MAX - CYGNUM_HAL_EXCEPTION_MIN + 1 )#ifndef __ASSEMBLER__#include <cyg/infra/cyg_type.h>#include <cyg/hal/sh_regs.h>            // register definitions#include <cyg/hal/hal_io.h>             // io macros#include <cyg/infra/cyg_ass.h>          // CYG_FAIL//--------------------------------------------------------------------------// Clock control, using TMU counter 0.#define CYGHWR_SH_RTC_TIMER_IS_TMU#define HAL_CLOCK_INITIALIZE( _period_ )                                    \    CYG_MACRO_START                                                         \    register cyg_uint8 _tstr_;                                              \                                                                            \    /* Disable timer while programming it. */                               \    HAL_READ_UINT8(CYGARC_REG_TSTR, _tstr_);                                \    _tstr_ &= ~CYGARC_REG_TSTR_STR0;                                        \    HAL_WRITE_UINT8(CYGARC_REG_TSTR, _tstr_);                               \                                                                            \    /* Set counter registers. */                                            \    HAL_WRITE_UINT32(CYGARC_REG_TCOR0, (_period_));                         \    HAL_WRITE_UINT32(CYGARC_REG_TCNT0, (_period_));                         \                                                                            \    /* Set interrupt on underflow and decrement frequency */                \    HAL_WRITE_UINT16(CYGARC_REG_TCR0, CYGARC_REG_TCR_UNIE |                 \                     ((4==CYGHWR_HAL_SH_TMU_PRESCALE_0) ?                   \                          CYGARC_REG_TCR_TPSC_4 :                           \                      (16==CYGHWR_HAL_SH_TMU_PRESCALE_0) ?                  \                          CYGARC_REG_TCR_TPSC_16:                           \                      (64==CYGHWR_HAL_SH_TMU_PRESCALE_0) ?                  \                          CYGARC_REG_TCR_TPSC_64:CYGARC_REG_TCR_TPSC_256)); \                                                                            \                                                                            \    /* Enable timer. */                                                     \    _tstr_ |= CYGARC_REG_TSTR_STR0;                                         \    HAL_WRITE_UINT8(CYGARC_REG_TSTR, _tstr_);                               \                                                                            \    CYG_MACRO_END#define HAL_CLOCK_RESET( _vector_, _period_ )           \    CYG_MACRO_START                                     \    register cyg_uint16 _tcr_;                          \                                                        \    /* Clear underflow flag. */                         \    HAL_READ_UINT16(CYGARC_REG_TCR0, _tcr_);            \    _tcr_ &= ~CYGARC_REG_TCR_UNF;                       \    HAL_WRITE_UINT16(CYGARC_REG_TCR0, _tcr_);           \    HAL_READ_UINT16(CYGARC_REG_TCR0, _tcr_);            \                                                        \    CYG_MACRO_END#define HAL_CLOCK_READ( _pvalue_ )                              \    CYG_MACRO_START                                             \    register cyg_uint32 _result_;                               \                                                                \    HAL_READ_UINT32(CYGARC_REG_TCNT0, _result_);                \                                                                \    *(_pvalue_) = CYGNUM_KERNEL_COUNTERS_RTC_PERIOD-_result_;   \    CYG_MACRO_END#ifdef CYGVAR_KERNEL_COUNTERS_CLOCK_LATENCY#define HAL_CLOCK_LATENCY( _pvalue_ ) HAL_CLOCK_READ(_pvalue_)#endifexternC void hal_delay_us(int);#define HAL_DELAY_US(n) hal_delay_us(n)#endif // __ASSEMBLER__//--------------------------------------------------------------------------#endif // ifndef CYGONCE_HAL_INTR_EXCEVT_H// End of hal_intr_excevt.h

⌨️ 快捷键说明

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