1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/cpu/kinetis/vectors.c
Hauke Petersen edb890ff93 cpu/kinetis: move IRQ name adaption to cpu_conf.h
Found and fixed the issue for the kinetis-based boards: The kinetis
code is using some macros to map some IRQ names, that differ in
some versions of vendor headers, to a RIOT wide unique name. The
doxygen of this mapping states, that this mapping must be done before
any vendor header is included. Unfortunately, the mapping was so far
placed in cpu/kinetis/vectors.c, before any other include statement.

In some cases, the vendor headers might be included before the
mapping macros in vectors.c, leading to the compilation errors down
the line. To fix this, the adaption defines are moved into
cpu/kinetis/cpu_conf.h, which is the file that actually includes
the vendor headers. This way it is ensured, that these adaption
macros are always defined before any vendor header is included,
and therefore preventing this kind of error for good.
2021-02-26 11:34:52 +01:00

416 lines
15 KiB
C

/*
* Copyright (C) 2017 Eistec AB
*
* This file is subject to the terms and conditions of the GNU Lesser General
* Public License v2.1. See the file LICENSE in the top level directory for more
* details.
*/
/**
* @ingroup cpu_kinetis
* @{
*
* @file
*
* @brief Interrupt vector for Kinetis MCUs
*
* @author Joakim Nohlgård <joakim.nohlgard@eistec.se>
*
* @note It is not necessary to modify this file to define custom interrupt
* service routines. All symbols are defined weak, it is only necessary to
* define a function with the same name in another file to override the default
* interrupt handlers.
*/
/**
* @name Interrupt vector definition
* @{
*/
#include "vectors_kinetis.h"
/* CPU specific interrupt vector table */
ISR_VECTOR(1) const isr_t vector_cpu[CPU_IRQ_NUMOF] = {
#ifdef DMA0
/* Devices with >16 DMA channels combine two channels per IRQ number */
#if defined(DMA_INT_INT16_MASK)
[DMA0_DMA16_IRQn ] = isr_dma0_dma16, /* DMA Channel 0, 16 Transfer Complete */
#elif defined(DMA_INT_INT0_MASK)
[DMA0_IRQn ] = isr_dma0, /* DMA Channel 0 Transfer Complete */
#endif
#if defined(DMA_INT_INT17_MASK)
[DMA1_DMA17_IRQn ] = isr_dma1_dma17, /* DMA Channel 1, 17 Transfer Complete */
#elif defined(DMA_INT_INT1_MASK)
[DMA1_IRQn ] = isr_dma1, /* DMA Channel 1 Transfer Complete */
#endif
#if defined(DMA_INT_INT18_MASK)
[DMA2_DMA18_IRQn ] = isr_dma2_dma18, /* DMA Channel 2, 18 Transfer Complete */
#elif defined(DMA_INT_INT2_MASK)
[DMA2_IRQn ] = isr_dma2, /* DMA Channel 2 Transfer Complete */
#endif
#if defined(DMA_INT_INT19_MASK)
[DMA3_DMA19_IRQn ] = isr_dma3_dma19, /* DMA Channel 3, 19 Transfer Complete */
#elif defined(DMA_INT_INT3_MASK)
[DMA3_IRQn ] = isr_dma3, /* DMA Channel 3 Transfer Complete */
#endif
#if defined(DMA_INT_INT20_MASK)
[DMA4_DMA20_IRQn ] = isr_dma4_dma20, /* DMA Channel 4, 20 Transfer Complete */
#elif defined(DMA_INT_INT4_MASK)
[DMA4_IRQn ] = isr_dma4, /* DMA Channel 4 Transfer Complete */
#endif
#if defined(DMA_INT_INT21_MASK)
[DMA5_DMA21_IRQn ] = isr_dma5_dma21, /* DMA Channel 5, 21 Transfer Complete */
#elif defined(DMA_INT_INT5_MASK)
[DMA5_IRQn ] = isr_dma5, /* DMA Channel 5 Transfer Complete */
#endif
#if defined(DMA_INT_INT22_MASK)
[DMA6_DMA22_IRQn ] = isr_dma6_dma22, /* DMA Channel 6, 22 Transfer Complete */
#elif defined(DMA_INT_INT6_MASK)
[DMA6_IRQn ] = isr_dma6, /* DMA Channel 6 Transfer Complete */
#endif
#if defined(DMA_INT_INT23_MASK)
[DMA7_DMA23_IRQn ] = isr_dma7_dma23, /* DMA Channel 7, 23 Transfer Complete */
#elif defined(DMA_INT_INT7_MASK)
[DMA7_IRQn ] = isr_dma7, /* DMA Channel 7 Transfer Complete */
#endif
#if defined(DMA_INT_INT24_MASK)
[DMA8_DMA24_IRQn ] = isr_dma8_dma24, /* DMA Channel 8, 24 Transfer Complete */
#elif defined(DMA_INT_INT8_MASK)
[DMA8_IRQn ] = isr_dma8, /* DMA Channel 8 Transfer Complete */
#endif
#if defined(DMA_INT_INT25_MASK)
[DMA9_DMA25_IRQn ] = isr_dma9_dma25, /* DMA Channel 9, 25 Transfer Complete */
#elif defined(DMA_INT_INT9_MASK)
[DMA9_IRQn ] = isr_dma9, /* DMA Channel 9 Transfer Complete */
#endif
#if defined(DMA_INT_INT26_MASK)
[DMA10_DMA26_IRQn] = isr_dma10_dma26, /* DMA Channel 10, 26 Transfer Complete */
#elif defined(DMA_INT_INT10_MASK)
[DMA10_IRQn ] = isr_dma10, /* DMA Channel 10 Transfer Complete */
#endif
#if defined(DMA_INT_INT27_MASK)
[DMA11_DMA27_IRQn] = isr_dma11_dma27, /* DMA Channel 11, 27 Transfer Complete */
#elif defined(DMA_INT_INT11_MASK)
[DMA11_IRQn ] = isr_dma11, /* DMA Channel 11 Transfer Complete */
#endif
#if defined(DMA_INT_INT28_MASK)
[DMA12_DMA28_IRQn] = isr_dma12_dma28, /* DMA Channel 12, 28 Transfer Complete */
#elif defined(DMA_INT_INT12_MASK)
[DMA12_IRQn ] = isr_dma12, /* DMA Channel 12 Transfer Complete */
#endif
#if defined(DMA_INT_INT29_MASK)
[DMA13_DMA29_IRQn] = isr_dma13_dma29, /* DMA Channel 13, 29 Transfer Complete */
#elif defined(DMA_INT_INT13_MASK)
[DMA13_IRQn ] = isr_dma13, /* DMA Channel 13 Transfer Complete */
#endif
#if defined(DMA_INT_INT30_MASK)
[DMA14_DMA30_IRQn] = isr_dma14_dma30, /* DMA Channel 14, 30 Transfer Complete */
#elif defined(DMA_INT_INT14_MASK)
[DMA14_IRQn ] = isr_dma14, /* DMA Channel 14 Transfer Complete */
#endif
#if defined(DMA_INT_INT31_MASK)
[DMA15_DMA31_IRQn] = isr_dma15_dma31, /* DMA Channel 15, 31 Transfer Complete */
#elif defined(DMA_INT_INT15_MASK)
[DMA15_IRQn ] = isr_dma15, /* DMA Channel 15 Transfer Complete */
#endif
#ifndef KINETIS_CORE_Z
[DMA_Error_IRQn ] = isr_dma_error, /* DMA Error Interrupt */
#endif
#endif /* defined(DMA0) */
#if defined(MCM) && !defined(KINETIS_CORE_Z)
[MCM_IRQn ] = isr_mcm, /* Normal Interrupt */
#endif
#if defined(FTFA)
[FTFA_IRQn ] = isr_ftfa, /* FTFA command complete */
#ifndef KINETIS_CORE_Z
[FTFA_Collision_IRQn] = isr_ftfa_collision, /* FTFA read collision */
#endif
#elif defined(FTFE)
[FTFE_IRQn ] = isr_ftfe, /* FTFE command complete */
#ifndef KINETIS_CORE_Z
[FTFE_Collision_IRQn] = isr_ftfe_collision, /* FTFE read collision */
#endif
#elif defined(FTFL)
[FTFL_IRQn ] = isr_ftfl, /* FTFL command complete */
#ifndef KINETIS_CORE_Z
[FTFL_Collision_IRQn] = isr_ftfl_collision, /* FTFL read collision */
#endif
#endif
#ifdef PMC
[LVD_LVW_IRQn ] = isr_lvd_lvw, /* Low Voltage Detect, Low Voltage Warning */
#endif
#ifdef LLWU
[LLWU_IRQn ] = isr_llwu, /* Low Leakage Wakeup Unit */
#endif
#ifdef WDOG
[WDOG_EWM_IRQn ] = isr_wdog_ewm, /* WDOG/EWM Interrupt */
#endif
#ifdef RNG
[RNG_IRQn ] = isr_rng, /* RNG Interrupt */
#endif
#ifdef I2C0
[I2C0_IRQn ] = isr_i2c0, /* I2C0 interrupt */
#endif
#ifdef I2C1
[I2C1_IRQn ] = isr_i2c1, /* I2C1 interrupt */
#endif
#ifdef I2C2
[I2C2_IRQn ] = isr_i2c2, /* I2C2 interrupt */
#endif
#ifdef I2C3
[I2C3_IRQn ] = isr_i2c3, /* I2C3 interrupt */
#endif
#ifdef SPI0
[SPI0_IRQn ] = isr_spi0, /* SPI0 Interrupt */
#endif
#ifdef SPI1
[SPI1_IRQn ] = isr_spi1, /* SPI1 Interrupt */
#endif
#ifdef SPI2
[SPI2_IRQn ] = isr_spi2, /* SPI2 Interrupt */
#endif
#ifdef I2S0
#ifdef I2S_TCR1_TFW_MASK
/* K parts */
[I2S0_Tx_IRQn ] = isr_i2s0_tx, /* I2S0 transmit interrupt */
[I2S0_Rx_IRQn ] = isr_i2s0_rx, /* I2S0 receive interrupt */
#else
/* KL parts */
[I2S0_IRQn ] = isr_i2s0, /* I2S0 interrupt */
#endif
#endif
#ifdef UART0
#ifdef KINETIS_SINGLE_UART_IRQ
[UART0_IRQn] = isr_uart0, /* UART0 interrupt */
#else
#ifdef UART_RPL_RPL_MASK
[UART0_LON_IRQn ] = isr_uart0_lon, /* UART0 LON interrupt */
#endif
[UART0_RX_TX_IRQn] = isr_uart0_rx_tx, /* UART0 Receive/Transmit interrupt */
[UART0_ERR_IRQn ] = isr_uart0_err, /* UART0 Error interrupt */
#endif
#endif
#ifdef UART1
#ifdef KINETIS_SINGLE_UART_IRQ
[UART1_IRQn] = isr_uart1, /* UART1 interrupt */
#else
[UART1_RX_TX_IRQn] = isr_uart1_rx_tx, /* UART1 Receive/Transmit interrupt */
[UART1_ERR_IRQn ] = isr_uart1_err, /* UART1 Error interrupt */
#endif
#endif
#ifdef UART2
#if defined(KINETIS_SINGLE_UART_IRQ)
[UART2_IRQn] = isr_uart2, /* UART2 interrupt */
#elif defined(FLEXIO_VERID_MAJOR_MASK)
/* KL parts with FlexIO uses combined IRQ */
[UART2_FLEXIO_IRQn] = isr_uart2_flexio, /* UART2 or FLEXIO */
#else
[UART2_RX_TX_IRQn] = isr_uart2_rx_tx, /* UART2 Receive/Transmit interrupt */
[UART2_ERR_IRQn ] = isr_uart2_err, /* UART2 Error interrupt */
#endif
#endif
#ifdef UART3
#ifdef KINETIS_SINGLE_UART_IRQ
[UART3_IRQn] = isr_uart3, /* UART3 interrupt */
#else
[UART3_RX_TX_IRQn] = isr_uart3_rx_tx, /* UART3 Receive/Transmit interrupt */
[UART3_ERR_IRQn ] = isr_uart3_err, /* UART3 Error interrupt */
#endif
#endif
#ifdef UART4
#ifdef KINETIS_SINGLE_UART_IRQ
[UART4_IRQn] = isr_uart4, /* UART4 interrupt */
#else
[UART4_RX_TX_IRQn] = isr_uart4_rx_tx, /* UART4 Receive/Transmit interrupt */
[UART4_ERR_IRQn ] = isr_uart4_err, /* UART4 Error interrupt */
#endif
#endif
#ifdef UART5
#ifdef KINETIS_SINGLE_UART_IRQ
[UART5_IRQn] = isr_uart5, /* UART5 interrupt */
#else
[UART5_RX_TX_IRQn] = isr_uart5_rx_tx, /* UART5 Receive/Transmit interrupt */
[UART5_ERR_IRQn ] = isr_uart5_err, /* UART5 Error interrupt */
#endif
#endif
#ifdef ADC0
[ADC0_IRQn ] = isr_adc0, /* ADC0 interrupt */
#endif
#ifdef ADC1
[ADC1_IRQn ] = isr_adc1, /* ADC1 interrupt */
#endif
#ifdef ADC2
[ADC2_IRQn ] = isr_adc2, /* ADC2 interrupt */
#endif
#ifdef CMP0
[CMP0_IRQn ] = isr_cmp0, /* CMP0 interrupt */
#endif
#ifdef CMP1
[CMP1_IRQn ] = isr_cmp1, /* CMP1 interrupt */
#endif
#ifdef CMP2
[CMP2_IRQn ] = isr_cmp2, /* CMP2 interrupt */
#endif
#ifdef CMP3
[CMP3_IRQn ] = isr_cmp3, /* CMP3 interrupt */
#endif
#ifdef FTM0
[FTM0_IRQn ] = isr_ftm0, /* FTM0 fault, overflow and channels interrupt */
#endif
#ifdef FTM1
[FTM1_IRQn ] = isr_ftm1, /* FTM1 fault, overflow and channels interrupt */
#endif
#ifdef FTM2
[FTM2_IRQn ] = isr_ftm2, /* FTM2 fault, overflow and channels interrupt */
#endif
#ifdef FTM3
[FTM3_IRQn ] = isr_ftm3, /* FTM3 fault, overflow and channels interrupt */
#endif
#ifdef CMT
[CMT_IRQn ] = isr_cmt, /* CMT interrupt */
#endif
#ifdef RTC
[RTC_IRQn ] = isr_rtc, /* RTC interrupt */
# ifndef KINETIS_SERIES_EA
[RTC_Seconds_IRQn] = isr_rtc_seconds, /* RTC seconds interrupt */
# endif
#endif
#ifdef PIT
#ifdef KINETIS_CORE_Z
# ifdef KINETIS_SERIES_EA
[PIT0_IRQn ] = isr_pit0, /* PIT timer channel 0 interrupt */
[PIT1_IRQn ] = isr_pit1, /* PIT timer channel 1 interrupt */
# else
[PIT_IRQn ] = isr_pit, /* PIT any channel interrupt */
#endif
#else
[PIT0_IRQn ] = isr_pit0, /* PIT timer channel 0 interrupt */
[PIT1_IRQn ] = isr_pit1, /* PIT timer channel 1 interrupt */
[PIT2_IRQn ] = isr_pit2, /* PIT timer channel 2 interrupt */
[PIT3_IRQn ] = isr_pit3, /* PIT timer channel 3 interrupt */
#endif
#endif /* defined(PIT) */
#ifdef PDB0
[PDB0_IRQn ] = isr_pdb0, /* PDB0 Interrupt */
#endif
#ifdef USB0
[USB0_IRQn ] = isr_usb0, /* USB0 interrupt */
#endif
#ifdef USBDCD
[USBDCD_IRQn ] = isr_usbdcd, /* USBDCD Interrupt */
#endif
#if DAC0_BASE /* Not #ifdef because of error in MKW2xD.h files */
[DAC0_IRQn ] = isr_dac0, /* DAC0 interrupt */
#endif
#ifdef DAC1
[DAC1_IRQn ] = isr_dac1, /* DAC1 interrupt */
#endif
#ifdef MCG
#ifndef MCG_MC_LIRC_DIV2_MASK
/* Only on full MCG, not MCG_Lite */
[MCG_IRQn ] = isr_mcg, /* MCG Interrupt */
#endif /* MCG_MC_LIRC_DIV2_MASK */
#endif /* MCG */
#ifdef LPTMR0
[LPTMR0_IRQn ] = isr_lptmr0, /* LPTimer interrupt */
#endif
#ifdef PORTA
[PORTA_IRQn ] = isr_porta, /* Port A interrupt */
#endif
#ifdef KINETIS_CORE_Z
#if defined(PORTB) && defined(PORTC) && !defined(PORTD)
[PORTB_PORTC_IRQn] = isr_portb_portc, /* Port B, C combined interrupt */
#elif defined(PORTC) && defined(PORTD)
[PORTC_PORTD_IRQn] = isr_portc_portd, /* Port C, D combined interrupt */
#endif
#else
#ifdef PORTB
[PORTB_IRQn ] = isr_portb, /* Port B interrupt */
#endif
#ifdef PORTC
[PORTC_IRQn ] = isr_portc, /* Port C interrupt */
#endif
#ifdef PORTD
[PORTD_IRQn ] = isr_portd, /* Port D interrupt */
#endif
#ifdef PORTE
[PORTE_IRQn ] = isr_porte, /* Port E interrupt */
#endif
#endif
#if __CORTEX_M >= 3
[SWI_IRQn ] = isr_swi, /* Software interrupt */
#endif
#ifdef CAN0
[CAN0_ORed_Message_buffer_IRQn] = isr_can0_ored_message_buffer, /* CAN0 OR'd message buffers interrupt */
[CAN0_Bus_Off_IRQn] = isr_can0_bus_off, /* CAN0 bus off interrupt */
[CAN0_Error_IRQn ] = isr_can0_error, /* CAN0 error interrupt */
[CAN0_Tx_Warning_IRQn] = isr_can0_tx_warning, /* CAN0 Tx warning interrupt */
[CAN0_Rx_Warning_IRQn] = isr_can0_rx_warning, /* CAN0 Rx warning interrupt */
[CAN0_Wake_Up_IRQn] = isr_can0_wake_up, /* CAN0 wake up interrupt */
#endif
#ifdef CAN1
[CAN1_ORed_Message_buffer_IRQn] = isr_can1_ored_message_buffer, /* CAN1 OR'd message buffers interrupt */
[CAN1_Bus_Off_IRQn] = isr_can1_bus_off, /* CAN1 bus off interrupt */
[CAN1_Error_IRQn ] = isr_can1_error, /* CAN1 error interrupt */
[CAN1_Tx_Warning_IRQn] = isr_can1_tx_warning, /* CAN1 Tx warning interrupt */
[CAN1_Rx_Warning_IRQn] = isr_can1_rx_warning, /* CAN1 Rx warning interrupt */
[CAN1_Wake_Up_IRQn] = isr_can1_wake_up, /* CAN1 wake up interrupt */
#endif
#ifdef MSCAN
[MSCAN_RX_IRQn] = isr_mscan_rx, /* MSCAN RX interrupt */
[MSCAN_TX_IRQn] = isr_mscan_tx, /* MSCAN TX/Err/Wake-up interrupt */
#endif
#ifdef SDHC
[SDHC_IRQn ] = isr_sdhc, /* SDHC interrupt */
#endif
#ifdef ENET
[ENET_1588_Timer_IRQn] = isr_enet_1588_timer, /* Ethernet MAC IEEE 1588 Timer Interrupt */
[ENET_Transmit_IRQn] = isr_enet_transmit, /* Ethernet MAC Transmit Interrupt */
[ENET_Receive_IRQn] = isr_enet_receive, /* Ethernet MAC Receive Interrupt */
[ENET_Error_IRQn ] = isr_enet_error, /* Ethernet MAC Error and miscellaneous Interrupt */
#endif
#ifdef LPUART0
[LPUART0_IRQn ] = isr_lpuart0, /* LPUART0 status/error interrupt */
#endif
#ifdef LPUART1
[LPUART1_IRQn ] = isr_lpuart1, /* LPUART1 status/error interrupt */
#endif
#ifdef LPUART2
[LPUART2_IRQn ] = isr_lpuart2, /* LPUART2 status/error interrupt */
#endif
#ifdef LPUART3
[LPUART3_IRQn ] = isr_lpuart3, /* LPUART3 status/error interrupt */
#endif
#ifdef LPUART4
[LPUART4_IRQn ] = isr_lpuart4, /* LPUART4 status/error interrupt */
#endif
#ifdef LPUART5
[LPUART5_IRQn ] = isr_lpuart5, /* LPUART5 status/error interrupt */
#endif
#ifdef TSI0
[TSI0_IRQn ] = isr_tsi0, /* TSI0 interrupt */
#endif
#ifdef TPM0
[TPM0_IRQn ] = isr_tpm0, /* TPM1 fault, overflow and channels interrupt */
#endif
#ifdef TPM1
[TPM1_IRQn ] = isr_tpm1, /* TPM1 fault, overflow and channels interrupt */
#endif
#ifdef TPM2
[TPM2_IRQn ] = isr_tpm2, /* TPM2 fault, overflow and channels interrupt */
#endif
#ifdef USBHSDCD
[USBHSDCD_IRQn ] = isr_usbhsdcd, /* USBHSDCD, USBHS Phy Interrupt */
#endif
#ifdef USBHS
[USBHS_IRQn ] = isr_usbhs, /* USB high speed OTG interrupt */
#endif
#ifdef BTLE_RF
[Radio_0_IRQn ] = isr_radio_0, /* Radio INT0 interrupt */
#endif
#ifdef ZLL
[Radio_1_IRQn ] = isr_radio_1, /* Radio INT1 interrupt */
#endif
};
/** @} */