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

📄 irq.h

📁 這是一個實時嵌入式作業系統 實作了MCS51 ARM等MCU
💻 H
字号:
/**************************************************************************** * arch/z8/include/z8/irq.h * arch/chip/irq.h * *   Copyright (C) 2008 Gregory Nutt. All rights reserved. *   Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * 3. Neither the name NuttX nor the names of its contributors may be *    used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************//* This file should never be included directed but, rather, * only indirectly through nuttx/irq.h (via arch/irq.h) */#ifndef __ARCH_Z8_IRQ_H#define __ARCH_Z8_IRQ_H/**************************************************************************** * Included Files ****************************************************************************//**************************************************************************** * Definitions ****************************************************************************//* This is similar configuration information that is contained in ez8.h. * However, this file must be include-able by assembly language files and, * hence, cannot include ez8.h.  The logic is fragmentary at present. */#ifndef ENCORE_VECTORS#  if defined(_Z8ENCORE_F642X) || defined(_Z8ENCORE_64K_SERIES)#    define ENCORE_VECTORS 1#  endif#  if defined(_Z8ENCORE_F640X) || defined(_Z8ENCORE_640_FAMILY)#    define ENCORE_VECTORS 1#  endif#  if defined(_Z8ENCORE_F08X) || defined(_Z8ENCORE_8K_SERIES)#    define ENCORE_VECTORS 1#  endif#  if defined(_Z8ENCORE_4K_SERIES)#    define ENCORE_VECTORS 1#  endif#endif/* ez8 Interrupt Numbers ****************************************************/#if defined(ENCORE_VECTORS)#  define  Z8_WDT_IRQ        0#  define  Z8_TRAP_IRQ       1#  define  Z8_TIMER2_IRQ     2 /* Only if EZ8_TIMER3 defined */#  define  Z8_TIMER1_IRQ     3#  define  Z8_TIMER0_IRQ     4#  define  Z8_UART0_RX_IRQ   5 /* Only if EZ8_UART0 defined */#  define  Z8_UART0_TX_IRQ   6 /* Only if EZ8_UART0 defined */#  define  Z8_I2C_IRQ        7 /* Only if EZ8_I2C defined */#  define  Z8_SPI_IRQ        8 /* Only if EZ8_SPI defined */#  define  Z8_ADC_IRQ        9 /* Only if EZ8_ADC defined */#  define  Z8_P7AD_IRQ      10#  define  Z8_P6AD_IRQ      11#  define  Z8_P5AD_IRQ      12#  define  Z8_P4AD_IRQ      13#  define  Z8_P3AD_IRQ      14#  define  Z8_P2AD_IRQ      15#  define  Z8_P1AD_IRQ      16#  define  Z8_P0AD_IRQ      17#  define  Z8_TIMER3_IRQ    18 /* Only if EZ8_TIMER4 defined */#  define  Z8_UART1_RX_IRQ  19 /* Only if EZ8_UART1 defined */#  define  Z8_UART1_TX_IRQ  20 /* Only if EZ8_UART1 defined */#  define  Z8_DMA_IRQ       21 /* Only if EZ8_DMA defined */#  define  Z8_C3_IRQ        22 /* Only if EZ8_PORT1 defined */#  define  Z8_C2_IRQ        23 /* Only if EZ8_PORT1 defined */#  define  Z8_C1_IRQ        24 /* Only if EZ8_PORT1 defined */#  define  Z8_C0_IRQ        25 /* Only if EZ8_PORT1 defined */#  define NR_IRQS          (26)#elif defined(ENCORE_XP_VECTORS)#  define  Z8_WDT_IRQ        0#  define  Z8_TRAP_IRQ       1#  define  Z8_TIMER2_IRQ     2 /* Only if EZ8_TIMER3 defined */#  define  Z8_TIMER1_IRQ     3#  define  Z8_TIMER0_IRQ     4#  define  Z8_UART0_RX_IRQ   5 /* Only if EZ8_UART0 defined */#  define  Z8_UART0_TX_IRQ   6 /* Only if EZ8_UART0 defined */#  define  Z8_I2C_IRQ        7 /* Only if EZ8_I2C defined */#  define  Z8_SPI_IRQ        8 /* Only if EZ8_SPI defined */#  define  Z8_ADC_IRQ        9 /* Only if EZ8_ADC or EZ8_ADC_NEW defined */#  define  Z8_P7AD_IRQ      10#  define  Z8_P6AD_IRQ      11#  define  Z8_P5AD_IRQ      12#  define  Z8_P4AD_IRQ      13#  define  Z8_P3AD_IRQ      14#  define  Z8_P2AD_IRQ      15#  define  Z8_P1AD_IRQ      16#  define  Z8_P0AD_IRQ      17#  define  Z8_TIMER3_IRQ    18 /* Only if EZ8_TIMER4 defined */#  define  Z8_UART1_RX_IRQ  19 /* Only if EZ8_UART1 defined */#  define  Z8_UART1_TX_IRQ  20 /* Only if EZ8_UART1 defined */#  define  Z8_DMA_IRQ       21 /* Only if EZ8_DMA defined */#  define  Z8_C3_IRQ        22 /* Only if EZ8_PORT1 defined */#  define  Z8_C2_IRQ        23 /* Only if EZ8_PORT1 defined */#  define  Z8_C1_IRQ        24 /* Only if EZ8_PORT1 defined */#  define  Z8_C0_IRQ        25 /* Only if EZ8_PORT1 defined */#  define  Z8_POTRAP_IRQ    27#  define  Z8_WOTRAP_IRQ    28#  define NR_IRQS          (29)#elif defined(ENCORE_XP16K_VECTORS)#  define  Z8_WDT_IRQ        0#  define  Z8_TRAP_IRQ       1#  define  Z8_TIMER2_IRQ     2 /* Only if EZ8_TIMER3 defined */#  define  Z8_TIMER1_IRQ     3#  define  Z8_TIMER0_IRQ     4#  define  Z8_UART0_RX_IRQ   5 /* Only if EZ8_UART0 defined */#  define  Z8_UART0_TX_IRQ   6 /* Only if EZ8_UART0 defined */#  define  Z8_I2C_IRQ        7 /* Only if EZ8_I2C defined */#  define  Z8_SPI_IRQ        8 /* Only if EZ8_ESPI defined */#  define  Z8_ADC_IRQ        9 /* Only if EZ8_ADC_NEW defined */#  define  Z8_P7AD_IRQ      10#  define  Z8_P6AD_IRQ      11#  define  Z8_P5AD_IRQ      12#  define  Z8_P4AD_IRQ      13#  define  Z8_P3AD_IRQ      14#  define  Z8_P2AD_IRQ      15#  define  Z8_P1AD_IRQ      16#  define  Z8_P0AD_IRQ      17#  define  Z8_MCT_IRQ       19 /* Only if EZ8_MCT defined */#  define  Z8_UART1_RX_IRQ  20 /* Only if EZ8_UART1 defined */#  define  Z8_UART1_TX_IRQ  21 /* Only if EZ8_UART1 defined */#  define  Z8_C3_IRQ        22#  define  Z8_C2_IRQ        23#  define  Z8_C1_IRQ        24#  define  Z8_C0_IRQ        25#  define  Z8_POTRAP_IRQ    27#  define  Z8_WOTRAP_IRQ    28#  define NR_IRQS          (29)#elif defined(ENCORE_MC_VECTORS)#  define  Z8_WDT_IRQ        0#  define  Z8_TRAP_IRQ       1#  define  Z8_PWMTIMER_IRQ   2#  define  Z8_PWMFAULT_IRQ   3#  define  Z8_ADC_IRQ        4 /* Only if EZ8_ADC_NEW defined */#  define  Z8_CMP_IRQ        5#  define  Z8_TIMER0_IRQ     6#  define  Z8_UART0_RX_IRQ   7 /* Only if EZ8_UART0 defined */#  define  Z8_UART0_TX_IRQ   8 /* Only if EZ8_UART0 defined */#  define  Z8_SPI_IRQ        9 /* Only if EZ8_SPI defined */#  define  Z8_I2C_IRQ       10 /* Only if EZ8_I2C defined */#  define  Z8_C0_IRQ        12#  define  Z8_PB_IRQ        13#  define  Z8_P7AP3A_IRQ    14#  define  Z8_P6AP2A_IRQ    15#  define  Z8_P5AP1A_IRQ    16#  define  Z8_P4AP0A_IRQ    17#  define  Z8_POTRAP_IRQ    27#  define  Z8_WOTRAP_IRQ    28#  define NR_IRQS          (29)#endif #define Z8_IRQ_SYSTIMER Z8_TIMER0_IRQ/* IRQ Management Macros ****************************************************//* These macros map IRQ numbers to IRQ registers and bits. * WARNING: These have only been verified for the Z8F640X family! */#ifdef ENCORE_VECTORS#  define Z8_IRQ0_MIN      Z8_TIMER2_IRQ#  define Z8_IRQ0_BIT(irq) (1 << (Z8_ADC_IRQ - (irq)))#  define Z8_IRQ0_MAX      Z8_ADC_IRQ#  define Z8_IRQ1_MIN      Z8_P7AD_IRQ#  define Z8_IRQ1_BIT(irq) (1 << (Z8_P0AD_IRQ - (irq)))#  define Z8_IRQ1_MAX      Z8_P0AD_IRQ#  define Z8_IRQ2_MIN      Z8_TIMER3_IRQ#  define Z8_IRQ2_BIT(irq) (1 << (Z8_C0_IRQ - (irq)))#  define Z8_IRQ2_MAX      Z8_C0_IRQ#else#  error "Add IRQ support for Z8F family"#endif/* IRQ State Save Format **************************************************** * * These indices describe how the ez8 context is save in the state save array * * Byte offsets: */#define XCPT8_R0              (0) /* Offset 0-15:  R0-R15 */#define XCPT8_R1              (1)#define XCPT8_R2              (2)#define XCPT8_R3              (3)#define XCPT8_R4              (4)#define XCPT8_R5              (5)#define XCPT8_R6              (6)#define XCPT8_R7              (7)#define XCPT8_R8              (8)#define XCPT8_R9              (9)#define XCPT8_R10            (10)#define XCPT8_R11            (11)#define XCPT8_R12            (12)#define XCPT8_R13            (13)#define XCPT8_R14            (14)#define XCPT8_R15            (15)#define XCPT8_SPH            (16) /* Offset 16: SP[8:15] */#define XCPT8_SPL            (17) /* Offset 17: SP[0:7] */#define XCPT8_RP             (18) /* Offset 18: Register pointer */#define XCPT8_FLAGS          (19) /* Offset 19: FLAGS */#define XCPT8_PCH            (20) /* Offset 20: PC[8:15] */#define XCPT8_PCL            (21) /* Offset 21: PC[0:7] *//* 16-bit "word" offsets */#define XCPT_RR0              (0) /* Indices 0-7:  RR0-RR14 */#define XCPT_RR2              (1)#define XCPT_RR4              (2)#define XCPT_RR6              (3)#define XCPT_RR8              (4)#define XCPT_RR10             (5)#define XCPT_RR12             (6)#define XCPT_RR14             (7)#define XCPT_IRQCTL           (8) /* Index  8: IRQCTL register */#define XCPT_SP               (9) /* Index  9: SP[8:15] */#define XCPT_RPFLAGS         (10) /* Index 10: RP (MS) and FLAGS (LS) */#define XCPT_PC              (11) /* Index 11: PC[8:15] */#define XCPTCONTEXT_REGS     (12)/* Byte offsets: */#define XCPT_R0_OFFS         (2*XCPT_RR0)       /* Offset 0-15:  R0-R15 */#define XCPT_R1_OFFS         (2*XCPT_RR0+1)#define XCPT_R2_OFFS         (2*XCPT_RR2)#define XCPT_R3_OFFS         (2*XCPT_RR2+1)#define XCPT_R4_OFFS         (2*XCPT_RR4)#define XCPT_R5_OFFS         (2*XCPT_RR4+1)#define XCPT_R6_OFFS         (2*XCPT_RR6)#define XCPT_R7_OFFS         (2*XCPT_RR6+1)#define XCPT_R8_OFFS         (2*XCPT_RR8)#define XCPT_R9_OFFS         (2*XCPT_RR8+1)#define XCPT_R10_OFFS        (2*XCPT_RR10)#define XCPT_R11_OFFS        (2*XCPT_RR10+1)#define XCPT_R12_OFFS        (2*XCPT_RR12)#define XCPT_R13_OFFS        (2*XCPT_RR12+1)#define XCPT_R14_OFFS        (2*XCPT_RR14)#define XCPT_R15_OFFS        (2*XCPT_RR14+1)#define XCPT_UNUSED_OFFS     (2*XCPT_IRQCTL)    /* Offset 16: Unused (zero) */#define XCPT_IRQCTL_OFFS     (2*XCPT_IRQCTL+1)  /* offset 17: IRQCTL register */#define XCPT_SPH_OFFS        (2*XCPT_SP)        /* Offset 18: SP[8:15] */#define XCPT_SPL_OFFS        (2*XCPT_SP+1)      /* Offset 19: SP[0:7] */#define XCPT_RP_OFFS         (2*XCPT_RPFLAGS)   /* Offset 20: Register pointer */#define XCPT_FLAGS_OFFS      (2*XCPT_RPFLAGS+1) /* Offset 21: FLAGS */#define XCPT_PCH_OFFS        (2*XCPT_PC)        /* Offset 22: PC[8:15] */#define XCPT_PCL_OFFS        (2*XCPT_PC+1)      /* Offset 23: PC[0:7] */#define XCPTCONTEXT_SIZE     (2*XCPTCONTEXT_REGS)/**************************************************************************** * Public Types ****************************************************************************/#ifndef __ASSEMBLY__/* This is the the type of the register save array */typedef uint16 chipreg_t;/* This struct defines the way the registers are stored. */struct xcptcontext{  /* Register save area */  chipreg_t regs[XCPTCONTEXT_REGS];  /* The following function pointer is non-zero if there   * are pending signals to be processed.   */#ifndef CONFIG_DISABLE_SIGNALS  CODE void *sigdeliver; /* Actual type is sig_deliver_t */  /* The following retains that state during signal execution */  uint16 saved_pc;	/* Saved return address */  uint16 saved_irqctl;	/* Saved interrupt state */#endif};#endif/**************************************************************************** * Inline functions ****************************************************************************//**************************************************************************** * Public Variables ****************************************************************************//**************************************************************************** * Public Function Prototypes ****************************************************************************/#ifndef __ASSEMBLY__#ifdef __cplusplus#define EXTERN extern "C"extern "C" {#else#define EXTERN extern#endifEXTERN irqstate_t irqsave(void);EXTERN void irqrestore(irqstate_t flags);#undef EXTERN#ifdef __cplusplus}#endif#endif#endif /* __ARCH_Z8_IRQ_H */

⌨️ 快捷键说明

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