Initial commit

This commit is contained in:
2026-03-31 13:10:37 +02:00
commit 03325b9502
566 changed files with 351758 additions and 0 deletions

View File

@@ -0,0 +1,302 @@
/*
* kinetis_sysinit.c - Default init routines for Flycatcher
* Kinetis ARM systems
* Copyright © 2012 Freescale semiConductor Inc. All Rights Reserved.
*/
#include "hal/derivative.h"
#include "kinetis_sysinit.h"
/**
**===========================================================================
** External declarations
**===========================================================================
*/
#if __cplusplus
extern "C" {
#endif
extern unsigned long _estack;
extern void __thumb_startup(void);
#if __cplusplus
}
#endif
/**
**===========================================================================
** Default interrupt handler
**===========================================================================
*/
void Default_Handler(void)
{
// Uncomment this breakpoint instruction if you are debugging a hard
// fault during development. If this breakpoint is hit without a
// debugger attached a LOCKUP is triggered. For this processor this
// causes an immediate system reset.
//asm volatile ("bkpt");
while(1);
/* Fault registers:
* 0xE000ED2C: HFSR (HardFault status register)
* 0xE000ED28: MMFSR (MemManage fault status register)
* 0xE000ED34: MMFAR (MemManage fault address register)
* 0xE000ED29: BFSR (BusFault status register)
* 0xE000ED38: BFAR (BusFault address register)
*/
}
/* Weak definitions of handlers point to Default_Handler if not implemented */
void NMI_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
void HardFault_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
void MemManage_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
void BusFault_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
void UsageFault_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
void SVC_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
void DebugMon_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
void PendSV_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
void SysTick_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
void DMA0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 0 transfer complete interrupt */
void DMA1_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 1 transfer complete interrupt */
void DMA2_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 2 transfer complete interrupt */
void DMA3_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 3 transfer complete interrupt */
void DMA4_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 4 transfer complete interrupt */
void DMA5_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 5 transfer complete interrupt */
void DMA6_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 6 transfer complete interrupt */
void DMA7_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 7 transfer complete interrupt */
void DMA8_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 8 transfer complete interrupt */
void DMA9_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 9 transfer complete interrupt */
void DMA10_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 10 transfer complete interrupt */
void DMA11_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 11 transfer complete interrupt */
void DMA12_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 12 transfer complete interrupt */
void DMA13_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 13 transfer complete interrupt */
void DMA14_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 14 transfer complete interrupt */
void DMA15_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA channel 15 transfer complete interrupt */
void DMA_Error_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DMA error interrupt */
void MCMNormal_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* MCM normal interrupt */
void FlashCmd_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Flash memory command complete interrupt */
void FlashReadErr_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Flash read collision interrupt */
void LVD_LVW_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Low Voltage Detect, Low Voltage Warning */
void LLW_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Low Leakage Wakeup */
void Watchdog_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* WDOG or EVM interrupt (shared) */
void Reserved39_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Reserved interrupt 39 */
void I2C0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* I2C0 interrupt */
void I2C1_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* I2C1 interrupt */
void SPI0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* SPI0 interrupt */
void SPI1_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* SPI1 interrupt */
void SPI2_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* SPI 2 interrupt */
void CAN0Msg_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CAN0 message buffer (0-15) interrupt */
void CAN0BusOff_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CAN0 Bus Off interrupt */
void CAN0Error_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CAN0 Error interrupt */
void CAN0Xmit_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CAN0 Transmit warning interrupt */
void CAN0Rcv_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CAN0 Recieve warning interrupt */
void CAN0Wake_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CAN0 Wake Up interrupt */
void I2S0_Tx_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* I2S0 transmit interrupt */
void I2S0_Rx_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* I2S0 receive interrupt */
void CAN1Msg_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CAN1Msg interrupt */
void CAN1BusOff_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CAN1BusOff interrupt */
void CAN1Error_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CAN1Error interrupt */
void CAN1Xmit_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CAN1Xmit interrupt */
void CAN1Rcv_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CAN1Rcv interrupt */
void CAN1Wake_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CAN1Wake interrupt */
void Reserved59_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Reserved interrupt 59 */
void UART0_LON_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* UART0 LON interrupt */
void UART0_RX_TX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* UART0 receive/transmit interrupt */
void UART0Error_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* UART0 error interrupt */
void UART1_RX_TX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* UART1 receive/transmit interrupt */
void UART1Error_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* UART1 error interrupt */
void UART2_RX_TX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* UART2 receive/transmit interrupt */
void UART2Error_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* UART2 error interrupt */
void UART3_RX_TX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* UART3 receive/transmit interrupt */
void UART3Error_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* UART3 error interrupt */
void UART4_RX_TX_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* UART4 receive/transmit interrupt */
void UART4Error_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* UART4 error interrupt */
void Reserved71_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Reserved interrupt 71 */
void Reserved72_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Reserved interrupt 72 */
void ADC0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* ADC0 interrupt */
void ADC1_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* ADC1 interrupt */
void CMP0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CMP0 interrupt */
void CMP1_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CMP1 interrupt */
void CMP2_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CMP2 interrupt */
void FTM0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* FTM0 fault, all sources interrupt */
void FTM1_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* FTM1 fault, all sources interrupt */
void FTM2_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* FTM2 fault, all sources interrupt */
void CMT_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* CMT interrupt */
void RTC_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* RTC alarm interrupt */
void RTCSeconds_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* RTC seconds interrupt */
void PIT0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* PIT timer channel 0 interrupt */
void PIT1_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* PIT timer channel 1 interrupt */
void PIT2_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* PIT timer channel 2 interrupt */
void PIT3_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* PIT timer channel 3 interrupt */
void PDB0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* PDB0 interrupt */
void USB_ISR(void) __attribute__ ((weak, alias("Default_Handler"))); /* USB OTG interrupt */
void USBCharge_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* USB charger detect interrupt */
void Reserved91_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Reserved interrupt 91 */
void Reserved92_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Reserved interrupt 92 */
void Reserved93_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Reserved interrupt 93 */
void Reserved94_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Reserved interrupt 94 */
void Reserved95_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Reserved interrupt 95 */
void SDHC_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* SDHC interrupt */
void DAC0_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* DAC0 interrupt */
void Reserved98_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Reserved interrupt 98 */
void TSI_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* TSI all sources interrupt */
void MCG_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* MCG interrupt */
void LPTimer_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Low-power Timer interrupt */
void Reserved102_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Reserved interrupt 102 */
void PORTA_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Port A pin detect interrupt */
void PORTB_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Port B pin detect interrupt */
void PORTC_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Port C pin detect interrupt */
void PORTD_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Port D pin detect interrupt */
void PORTE_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Port E pin detect interrupt */
void Reserved108_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Reserved interrupt 108 */
void Reserved109_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Reserved interrupt 109 */
void SWI_IRQHandler(void) __attribute__ ((weak, alias("Default_Handler"))); /* Software interrupt */
/* The Interrupt Vector Table */
void (* const InterruptVector[])(void) __attribute__ ((section(".vectortable"))) = {
/* Processor exceptions */
(void(*)(void)) &_estack,
__thumb_startup,
NMI_Handler,
HardFault_Handler,
MemManage_Handler,
BusFault_Handler,
UsageFault_Handler,
0,
0,
0,
0,
SVC_Handler,
DebugMon_Handler,
0,
PendSV_Handler,
SysTick_Handler,
/* Interrupts */
DMA0_IRQHandler, /* DMA channel 0 transfer complete interrupt */
DMA1_IRQHandler, /* DMA channel 1 transfer complete interrupt */
DMA2_IRQHandler, /* DMA channel 2 transfer complete interrupt */
DMA3_IRQHandler, /* DMA channel 3 transfer complete interrupt */
DMA4_IRQHandler, /* DMA channel 4 transfer complete interrupt */
DMA5_IRQHandler, /* DMA channel 5 transfer complete interrupt */
DMA6_IRQHandler, /* DMA channel 6 transfer complete interrupt */
DMA7_IRQHandler, /* DMA channel 7 transfer complete interrupt */
DMA8_IRQHandler, /* DMA channel 8 transfer complete interrupt */
DMA9_IRQHandler, /* DMA channel 9 transfer complete interrupt */
DMA10_IRQHandler, /* DMA channel 10 transfer complete interrupt */
DMA11_IRQHandler, /* DMA channel 11 transfer complete interrupt */
DMA12_IRQHandler, /* DMA channel 12 transfer complete interrupt */
DMA13_IRQHandler, /* DMA channel 13 transfer complete interrupt */
DMA14_IRQHandler, /* DMA channel 14 transfer complete interrupt */
DMA15_IRQHandler, /* DMA channel 15 transfer complete interrupt */
DMA_Error_IRQHandler, /* DMA error interrupt */
MCMNormal_IRQHandler, /* MCM normal interrupt */
FlashCmd_IRQHandler, /* Flash memory command complete interrupt */
FlashReadErr_IRQHandler, /* Flash read collision interrupt */
LVD_LVW_IRQHandler, /* Low Voltage Detect, Low Voltage Warning */
LLW_IRQHandler, /* Low Leakage Wakeup */
Watchdog_IRQHandler, /* WDOG or EVM interrupt (shared) */
Reserved39_IRQHandler, /* Reserved interrupt 39 */
I2C0_IRQHandler, /* I2C0 interrupt */
I2C1_IRQHandler, /* I2C1 interrupt */
SPI0_IRQHandler, /* SPI0 interrupt */
SPI1_IRQHandler, /* SPI1 interrupt */
SPI2_IRQHandler, /* SPI2 interrupt 44 */
CAN0Msg_IRQHandler, /* CAN0 message buffer (0-15) interrupt */
CAN0BusOff_IRQHandler, /* CAN0 Bus Off interrupt */
CAN0Error_IRQHandler, /* CAN0 Error interrupt */
CAN0Xmit_IRQHandler, /* CAN0 Transmit warning interrupt */
CAN0Rcv_IRQHandler, /* CAN0 Recieve warning interrupt */
CAN0Wake_IRQHandler, /* CAN0 Wake Up interrupt */
I2S0_Tx_IRQHandler, /* I2S0 transmit interrupt */
I2S0_Rx_IRQHandler, /* I2S0 receive interrupt */
CAN1Msg_IRQHandler, /* Reserved interrupt 53 */
CAN1BusOff_IRQHandler, /* Reserved interrupt 54 */
CAN1Error_IRQHandler, /* Reserved interrupt 55 */
CAN1Xmit_IRQHandler, /* Reserved interrupt 56 */
CAN1Rcv_IRQHandler, /* Reserved interrupt 57 */
CAN1Wake_IRQHandler, /* Reserved interrupt 58 */
Reserved59_IRQHandler, /* Reserved interrupt 59 */
UART0_LON_IRQHandler, /* UART0 LON interrupt */
UART0_RX_TX_IRQHandler, /* UART0 receive/transmit interrupt */
UART0Error_IRQHandler, /* UART0 error interrupt */
UART1_RX_TX_IRQHandler, /* UART1 receive/transmit interrupt */
UART1Error_IRQHandler, /* UART1 error interrupt */
UART2_RX_TX_IRQHandler, /* UART2 receive/transmit interrupt */
UART2Error_IRQHandler, /* UART2 error interrupt */
UART3_RX_TX_IRQHandler, /* UART3 receive/transmit interrupt */
UART3Error_IRQHandler, /* UART3 error interrupt */
UART4_RX_TX_IRQHandler, /* UART4 receive/transmit */
UART4Error_IRQHandler, /* UART4 error interrupt */
Reserved71_IRQHandler, /* Reserved interrupt 71 */
Reserved72_IRQHandler, /* Reserved interrupt 72 */
ADC0_IRQHandler, /* ADC0 interrupt */
ADC1_IRQHandler, /* ADC1 interrupt */
CMP0_IRQHandler, /* CMP0 interrupt */
CMP1_IRQHandler, /* CMP1 interrupt */
CMP2_IRQHandler, /* CMP2 interrupt */
FTM0_IRQHandler, /* FTM0 fault, all sources interrupt */
FTM1_IRQHandler, /* FTM1 fault, all sources interrupt */
FTM2_IRQHandler, /* FTM2 fault, all sources interrupt */
CMT_IRQHandler, /* CMT interrupt */
RTC_IRQHandler, /* RTC alarm interrupt */
RTCSeconds_IRQHandler, /* RTC seconds interrupt */
PIT0_IRQHandler, /* PIT timer channel 0 interrupt */
PIT1_IRQHandler, /* PIT timer channel 1 interrupt */
PIT2_IRQHandler, /* PIT timer channel 2 interrupt */
PIT3_IRQHandler, /* PIT timer channel 3 interrupt */
PDB0_IRQHandler, /* PDB0 interrupt */
USB_ISR, /* USB OTG interrupt */
USBCharge_IRQHandler, /* USB charger detect interrupt */
Reserved91_IRQHandler, /* Reserved interrupt 91 */
Reserved92_IRQHandler, /* Reserved interrupt 92 */
Reserved93_IRQHandler, /* Reserved interrupt 93 */
Reserved94_IRQHandler, /* Reserved interrupt 94 */
Reserved95_IRQHandler, /* Reserved interrupt 95 */
SDHC_IRQHandler, /* SDHC interrupt */
DAC0_IRQHandler, /* DAC0 interrupt */
Reserved98_IRQHandler, /* Reserved interrupt 98 */
TSI_IRQHandler, /* TSI all sources interrupt */
MCG_IRQHandler, /* MCG interrupt */
LPTimer_IRQHandler, /* Low-power Timer interrupt */
Reserved102_IRQHandler, /* Reserved interrupt 102 */
PORTA_IRQHandler, /* Port A pin detect interrupt */
PORTB_IRQHandler, /* Port B pin detect interrupt */
PORTC_IRQHandler, /* Port C pin detect interrupt */
PORTD_IRQHandler, /* Port D pin detect interrupt */
PORTE_IRQHandler, /* Port E pin detect interrupt */
Reserved108_IRQHandler, /* Reserved interrupt 108 */
Reserved109_IRQHandler, /* Reserved interrupt 109 */
SWI_IRQHandler /* Software interrupt */
};
/**
**===========================================================================
** Reset handler
**===========================================================================
*/
void __init_hardware(void)
{
SCB_VTOR = (uint32)&InterruptVector[0]; /* Set the interrupt vector table position */
#if defined(MKL25Z128)
// Disable the Watchdog because it may reset the core before entering main().
SIM_COPC = KINETIS_WDOG_DISABLED_CTRL;
#elif defined(MKE02Z64)
// Disable the Watchdog because it may reset the core before entering main().
WDOG_CNT = 0x20C5;
WDOG_CNT = 0x28D9;
WDOG_TOVAL = 0x28D9;
WDOG_CS2 = WDOG_CS2_CLK(0);
WDOG_CS1 = WDOG_CS1_UPDATE_MASK; //watchdog setting can be changed later
#elif defined(MK20DN512) || defined(MK20DX256)
// Disable the Watchdog because it may reset the core before entering main().
WDOG_UNLOCK = 0xC520; // Write 0xC520 to the unlock register
WDOG_UNLOCK = 0xD928; // Followed by 0xD928 to complete the unlock
WDOG_STCTRLH &= ~WDOG_STCTRLH_WDOGEN_MASK; // Clear the WDOGEN bit to disable the watchdog
#else
#error "MCU sub-model not supported!"
#endif
}