z8_vector.s

来自「這是一個實時嵌入式作業系統 實作了MCS51 ARM等MCU」· S 代码 · 共 874 行 · 第 1/2 页

S
874
字号
/**************************************************************************
 * arch/z80/src/z8/z8_xdef.S
 * Interrupt Handling
 *
 *   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.
 *
 **************************************************************************/

/**************************************************************************
 * Included Files
 **************************************************************************/

#include <nuttx/config.h>
#include <arch/irq.h>

#include <ez8.inc>
#include <vect.inc>

/**************************************************************************
 * Definitions
 **************************************************************************/

/**************************************************************************
 * External References / External Definitions
 **************************************************************************/

	xref	_up_doirq:ROM

#if defined(ENCORE_VECTORS)
	xdef	_z8_wdt_handler
	xdef	_z8_trap_handler
if EZ8_TIMER3=1
	xdef	_z8_timer2_handler
endif
	xdef	_z8_timer1_handler
	xdef	_z8_timer0_handler
if EZ8_UART0=1
	xdef	_z8_uart0rx_handler
	xdef	_z8_uart0tx_handler
endif
if EZ8_I2C=1
	xdef	_z8_i2c_handler
endif
if EZ8_SPI=1
	xdef	_z8_spi_handler
endif
if EZ8_ADC=1
	xdef	_z8_adc_handler
endif
	xdef	_z8_p7ad_handler
	xdef	_z8_p6ad_handler
 	xdef	_z8_p5ad_handler
	xdef	_z8_p4ad_handler
	xdef	_z8_p3ad_handler
	xdef	_z8_p2ad_handler
	xdef	_z8_p1ad_handler
	xdef	_z8_p0ad_handler
if EZ8_TIMER4=1
	xdef	_z8_timer3_handler
endif
if EZ8_UART1=1
	xdef	_z8_uart1rx_handler
	xdef	_z8_uart1tx_handler
endif
if EZ8_DMA=1
	xdef	_z8_dma_handler
endif
if EZ8_PORT1=0
	xdef	_z8_c3_handler
	xdef	_z8_c2_handler
	xdef	_z8_c1_handler
	xdef	_z8_c0_handler
endif

/**************************************************************************/

#elif defined(ENCORE_XP_VECTORS)

	xdef _z8_wdt_handler
	xdef _z8_trap_handler
if EZ8_TIMER3=1
	xdef _z8_timer2_handler
endif
	xdef _z8_timer1_handler
	xdef _z8_timer0_handler
if EZ8_UART0=1
	xdef _z8_uart0rx_handler
	xdef _z8_uart0tx_handler
endif
if EZ8_I2C=1
	xdef _z8_i2c_handler
endif
if EZ8_SPI=1
	xdef _z8_spi_handler
endif
if (EZ8_ADC=1) || (EZ8_ADC_NEW=1)
	xdef _z8_adc_handler
endif
	xdef _z8_p7ad_handler
	xdef _z8_p6ad_handler
 	xdef _z8_p5ad_handler
	xdef _z8_p4ad_handler
	xdef _z8_p3ad_handler
	xdef _z8_p2ad_handler
	xdef _z8_p1ad_handler
	xdef _z8_p0ad_handler
if EZ8_TIMER4=1
	xdef _z8_timer3_handler
endif
if EZ8_UART1=1
	xdef _z8_uart1rx_handler
	xdef _z8_uart1tx_handler
endif
if EZ8_DMA=1
	xdef _z8_dma_handler
endif
if (EZ8_PORT1=0)
	xdef _z8_c3_handler
	xdef _z8_c2_handler
	xdef _z8_c1_handler
	xdef _z8_c0_handler
endif
	xdef _z8_potrap_handler
	xdef _z8_wotrap_handler

/**************************************************************************/

#elif defined(ENCORE_XP16K_VECTORS)

	xdef _z8_wdt_handler
	xdef _z8_trap_handler
if EZ8_TIMER3=1
	xdef _z8_timer2_handler
endif
	xdef _z8_timer1_handler
	xdef _z8_timer0_handler
if EZ8_UART0=1
	xdef _z8_uart0rx_handler
	xdef _z8_uart0tx_handler
endif
if EZ8_I2C=1
	xdef _z8_i2c_handler
endif
if EZ8_ESPI=1
	xdef _z8_spi_handler
endif
if EZ8_ADC_NEW=1
	xdef _z8_adc_handler
endif
	xdef _z8_p7ad_handler
	xdef _z8_p6ad_handler
 	xdef _z8_p5ad_handler
	xdef _z8_p4ad_handler
	xdef _z8_p3ad_handler
	xdef _z8_p2ad_handler
	xdef _z8_p1ad_handler
	xdef _z8_p0ad_handler
if EZ8_MCT=1
	xdef _z8_mct_handler
endif
if EZ8_UART1=1
	xdef _z8_uart1rx_handler
	xdef _z8_uart1tx_handler
endif
	xdef _z8_c3_handler
	xdef _z8_c2_handler
	xdef _z8_c1_handler
	xdef _z8_c0_handler
	xdef _z8_potrap_handler
	xdef _z8_wotrap_handler

/**************************************************************************/

#elif defined(ENCORE_MC_VECTORS)

	xdef _z8_wdt_handler
	xdef _z8_trap_handler
	xdef _z8_pwmtimer_handler
	xdef _z8_pwmfault_handler
if EZ8_ADC_NEW=1
	xdef _z8_adc_handler
endif
	xdef _z8_cmp_handler
	xdef _z8_timer0_handler
if EZ8_UART0
	xdef _z8_uart0rx_handler
	xdef _z8_uart0tx_handler
endif
if EZ8_SPI=1
	xdef _z8_spi_handler
endif
if EZ8_I2C=1
	xdef _z8_i2c_handler
endif
	xdef _z8_c0_handler
	xdef _z8_pb_handler
	xdef _z8_p7ap3a_handler
	xdef _z8_p6ap2a_handler
	xdef _z8_p5ap1a_handler
	xdef _z8_p4ap0a_handler
	xdef _z8_potrap_handler
	xdef _z8_wotrap_handler
#endif 

/**************************************************************************
 * Macros
 **************************************************************************/

ENTER :	MACRO	val
	pushx	rp			/* Save the current RP value in the stack */
	srp	#%f0			/* Load the interrupt register pointer */
	ld	r0, #val		/* Pass the new value in r0 */
	jr	_z8_common_handler	/* The rest of the handling is common */
	ENDMAC	ENTER

LEAVE :	MACRO
	popx	rp			/* Restore the user register pointer */
	iret				/* And return from interrupt */
	ENDMAC	LEAVE

/**************************************************************************
 * Code
 **************************************************************************/

	segment CODE

/**************************************************************************
 * Interrupt Vectors
 **************************************************************************/

#if defined(ENCORE_VECTORS)
	vector WDT	= _z8_wdt_handler
	vector TRAP	= _z8_trap_handler
if EZ8_TIMER3=1
	vector TIMER2	= _z8_timer2_handler
endif
	vector TIMER1	= _z8_timer1_handler
	vector TIMER0	= _z8_timer0_handler
if EZ8_UART0=1
	vector UART0_RX	= _z8_uart0rx_handler
	vector UART0_TX	= _z8_uart0tx_handler
endif
if EZ8_I2C=1
	vector I2C	= _z8_i2c_handler
endif
if EZ8_SPI=1
	vector SPI	= _z8_spi_handler
endif
if EZ8_ADC=1
	vector ADC	= _z8_adc_handler
endif
	vector P7AD	= _z8_p7ad_handler
	vector P6AD	= _z8_p6ad_handler
 	vector P5AD	= _z8_p5ad_handler
	vector P4AD	= _z8_p4ad_handler
	vector P3AD	= _z8_p3ad_handler
	vector P2AD	= _z8_p2ad_handler
	vector P1AD	= _z8_p1ad_handler
	vector P0AD	= _z8_p0ad_handler
if EZ8_TIMER4=1
	vector TIMER3	= _z8_timer3_handler
endif
if EZ8_UART1=1
	vector UART1_RX	= _z8_uart1rx_handler
	vector UART1_TX	= _z8_uart1tx_handler
endif
if EZ8_DMA=1
	vector DMA	= _z8_dma_handler
endif
if EZ8_PORT1=0
	vector C3	= _z8_c3_handler
	vector C2	= _z8_c2_handler
	vector C1	= _z8_c1_handler
	vector C0	= _z8_c0_handler
endif

/**************************************************************************/

#elif defined(ENCORE_XP_VECTORS)

	vector WDT	= _z8_wdt_handler
	vector TRAP	= _z8_trap_handler
if EZ8_TIMER3=1
	vector TIMER2	= _z8_timer2_handler
endif
	vector TIMER1	= _z8_timer1_handler
	vector TIMER0	= _z8_timer0_handler
if EZ8_UART0=1
	vector UART0_RX	= _z8_uart0rx_handler
	vector UART0_TX	= _z8_uart0tx_handler
endif
if EZ8_I2C=1
	vector I2C	= _z8_i2c_handler
endif
if EZ8_SPI=1
	vector SPI	= _z8_spi_handler
endif
if (EZ8_ADC=1) || (EZ8_ADC_NEW=1)
	vector ADC	= _z8_adc_handler
endif
	vector P7AD	= _z8_p7ad_handler
	vector P6AD	= _z8_p6ad_handler
 	vector P5AD	= _z8_p5ad_handler
	vector P4AD	= _z8_p4ad_handler
	vector P3AD	= _z8_p3ad_handler
	vector P2AD	= _z8_p2ad_handler
	vector P1AD	= _z8_p1ad_handler
	vector P0AD	= _z8_p0ad_handler
if EZ8_TIMER4=1
	vector TIMER3	= _z8_timer3_handler
endif
if EZ8_UART1=1
	vector UART1_RX	= _z8_uart1rx_handler
	vector UART1_TX	= _z8_uart1tx_handler
endif
if EZ8_DMA=1
	vector DMA	= _z8_dma_handler
endif
if EZ8_PORT1=0
	vector C3	= _z8_c3_handler
	vector C2	= _z8_c2_handler
	vector C1	= _z8_c1_handler
	vector C0	= _z8_c0_handler
endif
	vector POTRAP	= _z8_potrap_handler
	vector WOTRAP	= _z8_wotrap_handler

/**************************************************************************/

#elif defined(ENCORE_XP16K_VECTORS)

	vector WDT	= _z8_wdt_handler
	vector TRAP	= _z8_trap_handler
if EZ8_TIMER3=1
	vector TIMER2	= _z8_timer2_handler
endif
	vector TIMER1	= _z8_timer1_handler
	vector TIMER0	= _z8_timer0_handler
if EZ8_UART0=1
	vector UART0_RX	= _z8_uart0rx_handler
	vector UART0_TX	= _z8_uart0tx_handler
endif
if EZ8_I2C=1
	vector I2C	= _z8_i2c_handler
endif
if EZ8_ESPI=1
	vector SPI	= _z8_spi_handler
endif
if EZ8_ADC_NEW=1
	vector ADC	= _z8_adc_handler
endif
	vector P7AD	= _z8_p7ad_handler
	vector P6AD	= _z8_p6ad_handler
 	vector P5AD	= _z8_p5ad_handler
	vector P4AD	= _z8_p4ad_handler
	vector P3AD	= _z8_p3ad_handler
	vector P2AD	= _z8_p2ad_handler
	vector P1AD	= _z8_p1ad_handler
	vector P0AD	= _z8_p0ad_handler
if EZ8_MCT=1
	vector MCT	= _z8_mct_handler
endif
if EZ8_UART1=1
	vector UART1_RX	= _z8_uart1rx_handler
	vector UART1_TX	= _z8_uart1tx_handler
endif
	vector C3	= _z8_c3_handler
	vector C2	= _z8_c2_handler
	vector C1	= _z8_c1_handler
	vector C0	= _z8_c0_handler
	vector POTRAP	= _z8_potrap_handler
	vector WOTRAP	= _z8_wotrap_handler

/**************************************************************************/

#elif defined(ENCORE_MC_VECTORS)

	vector WDT	= _z8_wdt_handler
	vector TRAP	= _z8_trap_handler
	vector PWMTIMER	= _z8_pwmtimer_handler
	vector PWMFAULT	= _z8_pwmfault_handler
if EZ8_ADC_NEW=1
	vector ADC	= _z8_adc_handler
endif
	vector CMP	= _z8_cmp_handler
	vector TIMER0	= _z8_timer0_handler
if EZ8_UART0
	vector UART0_RX	= _z8_uart0rx_handler
	vector UART0_TX	= _z8_uart0tx_handler
endif
if EZ8_SPI=1
	vector SPI	= _z8_spi_handler
endif
if EZ8_I2C=1
	vector I2C	= _z8_i2c_handler
endif
	vector C0	= _z8_c0_handler
	vector PB	= _z8_pb_handler
	vector P7A	= _z8_p7ap3a_handler
	vector P6A	= _z8_p6ap2a_handler
	vector P5A	= _z8_p5ap1a_handler
	vector P4A	= _z8_p4ap0a_handler
	vector POTRAP	= _z8_potrap_handler
	vector WOTRAP	= _z8_wotrap_handler
#endif 

/**************************************************************************
 * Name: _z16f_*_handler
 *

⌨️ 快捷键说明

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