Initial commit
This commit is contained in:
295
Clean_TMC2209/lib/tmc/hal/Landungsbruecke/freescale/Cpu.c
Normal file
295
Clean_TMC2209/lib/tmc/hal/Landungsbruecke/freescale/Cpu.c
Normal file
@@ -0,0 +1,295 @@
|
||||
/* ###################################################################
|
||||
** THIS COMPONENT MODULE IS GENERATED BY THE TOOL. DO NOT MODIFY IT.
|
||||
** Filename : Cpu.c
|
||||
** Project : FS_TC_Test
|
||||
** Processor : MK20DN512VLL10
|
||||
** Component : MK20DN512LL10
|
||||
** Version : Component 01.000, Driver 01.04, CPU db: 3.00.000
|
||||
** Datasheet : K20P144M100SF2V2RM Rev. 2, Jun 2012
|
||||
** Compiler : GNU C Compiler
|
||||
** Date/Time : 2014-12-22, 13:39, # CodeGen: 7
|
||||
** Abstract :
|
||||
**
|
||||
** Settings :
|
||||
**
|
||||
** Contents :
|
||||
** No public methods
|
||||
**
|
||||
** Copyright : 1997 - 2014 Freescale Semiconductor, Inc.
|
||||
** All Rights Reserved.
|
||||
**
|
||||
** Redistribution and use in source and binary forms, with or without modification,
|
||||
** are permitted provided that the following conditions are met:
|
||||
**
|
||||
** o Redistributions of source code must retain the above copyright notice, this list
|
||||
** of conditions and the following disclaimer.
|
||||
**
|
||||
** o 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.
|
||||
**
|
||||
** o Neither the name of Freescale Semiconductor, Inc. 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 HOLDER 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.
|
||||
**
|
||||
** http: www.freescale.com
|
||||
** mail: support@freescale.com
|
||||
** ###################################################################*/
|
||||
/*!
|
||||
** @file Cpu.c
|
||||
** @version 01.04
|
||||
** @brief
|
||||
**
|
||||
*/
|
||||
/*!
|
||||
** @addtogroup Cpu_module Cpu module documentation
|
||||
** @{
|
||||
*/
|
||||
|
||||
/* MODULE Cpu. */
|
||||
|
||||
/* {Default RTOS Adapter} No RTOS includes */
|
||||
|
||||
#include "hal/derivative.h"
|
||||
#include "Cpu.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Global variables */
|
||||
volatile uint8 SR_reg; /* Current value of the FAULTMASK register */
|
||||
volatile uint8 SR_lock = 0x00U; /* Lock */
|
||||
|
||||
void LowLevelInit(void);
|
||||
void InitClocks(void);
|
||||
|
||||
|
||||
CpuTypeDef Cpu =
|
||||
{
|
||||
.initClocks = InitClocks,
|
||||
.initLowLevel = LowLevelInit,
|
||||
};
|
||||
|
||||
/*
|
||||
** ===================================================================
|
||||
** Method : Cpu_SetBASEPRI (component MK20DN512LL10)
|
||||
**
|
||||
** Description :
|
||||
** This method sets the BASEPRI core register.
|
||||
** This method is internal. It is used by Processor Expert only.
|
||||
** ===================================================================
|
||||
*/
|
||||
void Cpu_SetBASEPRI(uint32 Level);
|
||||
|
||||
/*
|
||||
** ===================================================================
|
||||
** Method : Cpu_INT_NMIInterrupt (component MK20DN512LL10)
|
||||
**
|
||||
** Description :
|
||||
** This ISR services the Non Maskable Interrupt interrupt.
|
||||
** This method is internal. It is used by Processor Expert only.
|
||||
** ===================================================================
|
||||
*/
|
||||
|
||||
void __attribute__ ((interrupt)) Cpu_INT_NMIInterrupt(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
** ===================================================================
|
||||
** Method : Cpu_Cpu_Interrupt (component MK20DN512LL10)
|
||||
**
|
||||
** Description :
|
||||
** This ISR services an unused interrupt/exception vector.
|
||||
** This method is internal. It is used by Processor Expert only.
|
||||
** ===================================================================
|
||||
*/
|
||||
void __attribute__ ((interrupt)) Cpu_Interrupt(void)
|
||||
{
|
||||
/* This code can be changed using the CPU component property "Build Options / Unhandled int code" */
|
||||
PE_DEBUGHALT();
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************//**
|
||||
\fn InitClocks(void)
|
||||
\brief Initialize the clock PLL
|
||||
|
||||
This function inializes the PLL to 96MHz (with 16MHz crystal
|
||||
freqeuncy) and then switches to PLL clock.
|
||||
So the following frequencies are used:
|
||||
Core: 96MHz
|
||||
Bus: 48MHz
|
||||
FlexBus: 48MHz
|
||||
Flash: 24MHz
|
||||
|
||||
This routine has been generated by ProcessorExpert and cleaned
|
||||
up manually.
|
||||
********************************************************************/
|
||||
void InitClocks(void)
|
||||
{
|
||||
//Turn on clocking for all ports to enable pin routing
|
||||
SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK
|
||||
| SIM_SCGC5_PORTB_MASK
|
||||
| SIM_SCGC5_PORTC_MASK
|
||||
| SIM_SCGC5_PORTD_MASK
|
||||
| SIM_SCGC5_PORTE_MASK );
|
||||
|
||||
//PLL already selected by bootloader? => exit
|
||||
if((MCG_S & 0x0C)==0x0C) return;
|
||||
|
||||
SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0x00) |
|
||||
SIM_CLKDIV1_OUTDIV2(0x01) |
|
||||
SIM_CLKDIV1_OUTDIV3(0x03) |
|
||||
SIM_CLKDIV1_OUTDIV4(0x03); /* Set the system prescalers to safe value */
|
||||
|
||||
if((PMC_REGSC & PMC_REGSC_ACKISO_MASK) != 0x0U)
|
||||
{
|
||||
/* PMC_REGSC: ACKISO=1 */
|
||||
PMC_REGSC |= PMC_REGSC_ACKISO_MASK; /* Release IO pads after wakeup from VLLS mode. */
|
||||
}
|
||||
/* SIM_CLKDIV1: OUTDIV1=0,OUTDIV2=1,OUTDIV3=1,OUTDIV4=3,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0 */
|
||||
SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0x00) |
|
||||
SIM_CLKDIV1_OUTDIV2(0x01) |
|
||||
SIM_CLKDIV1_OUTDIV3(0x01) |
|
||||
SIM_CLKDIV1_OUTDIV4(0x03); /* Update system prescalers */
|
||||
/* SIM_SOPT2: PLLFLLSEL=1 */
|
||||
SIM_SOPT2 |= SIM_SOPT2_PLLFLLSEL_MASK|SIM_SOPT2_CLKOUTSEL(6); /* Select PLL as a clock source for various peripherals */
|
||||
/* SIM_SOPT1: OSC32KSEL=3 */
|
||||
SIM_SOPT1 |= SIM_SOPT1_OSC32KSEL(0x03); /* LPO 1kHz oscillator drives 32 kHz clock for various peripherals */
|
||||
/* Switch to FBE Mode */
|
||||
/* MCG_C2: LOCRE0=0,??=0,RANGE0=2,HGO0=0,EREFS0=1,LP=0,IRCS=0 */
|
||||
MCG_C2 = (MCG_C2_RANGE0(0x02) | MCG_C2_EREFS0_MASK);
|
||||
/* OSC_CR: ERCLKEN=1,??=0,EREFSTEN=0,??=0,SC2P=0,SC4P=0,SC8P=0,SC16P=0 */
|
||||
OSC_CR = OSC_CR_ERCLKEN_MASK;
|
||||
/* MCG_C1: CLKS=2,FRDIV=4,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
|
||||
MCG_C1 = (MCG_C1_CLKS(0x02) | MCG_C1_FRDIV(0x04) | MCG_C1_IRCLKEN_MASK);
|
||||
/* MCG_C4: DMX32=0,DRST_DRS=0 */
|
||||
MCG_C4 &= (uint8)~(uint8)((MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS(0x03)));
|
||||
/* MCG_C5: ??=0,PLLCLKEN0=0,PLLSTEN0=0,PRDIV0=3 */
|
||||
MCG_C5 = MCG_C5_PRDIV0(0x03);
|
||||
/* MCG_C6: LOLIE0=0,PLLS=0,CME0=0,VDIV0=0 */
|
||||
MCG_C6 = MCG_C6_VDIV0(0x00);
|
||||
while((MCG_S & MCG_S_OSCINIT0_MASK) == 0x00U); /* Check that the oscillator is running */
|
||||
while((MCG_S & MCG_S_IREFST_MASK) != 0x00U); /* Check that the source of the FLL reference clock is the external reference clock. */
|
||||
while((MCG_S & 0x0CU) != 0x08U); /* Wait until external reference clock is selected as MCG output */
|
||||
/* Switch to PBE Mode */
|
||||
/* MCG_C6: LOLIE0=0,PLLS=1,CME0=0,VDIV0=0 */
|
||||
MCG_C6 = (MCG_C6_PLLS_MASK | MCG_C6_VDIV0(0x00));
|
||||
while((MCG_S & 0x0CU) != 0x08U); /* Wait until external reference clock is selected as MCG output */
|
||||
while((MCG_S & MCG_S_LOCK0_MASK) == 0x00U); /* Wait until locked */
|
||||
/* Switch to PEE Mode */
|
||||
/* MCG_C1: CLKS=0,FRDIV=4,IREFS=0,IRCLKEN=1,IREFSTEN=0 */
|
||||
MCG_C1 = (MCG_C1_CLKS(0x00) | MCG_C1_FRDIV(0x04) | MCG_C1_IRCLKEN_MASK);
|
||||
while((MCG_S & 0x0CU) != 0x0CU); /* Wait until output of the PLL is selected */
|
||||
}
|
||||
|
||||
/*
|
||||
** ===================================================================
|
||||
** Method : Cpu_SetBASEPRI (component MK20DN512LL10)
|
||||
**
|
||||
** Description :
|
||||
** This method sets the BASEPRI core register.
|
||||
** This method is internal. It is used by Processor Expert only.
|
||||
** ===================================================================
|
||||
*/
|
||||
/*lint -save -e586 -e950 Disable MISRA rule (2.1,1.1) checking. */
|
||||
#ifdef _lint
|
||||
#define Cpu_SetBASEPRI(Level) /* empty */
|
||||
#else
|
||||
void Cpu_SetBASEPRI(uint32 Level) {
|
||||
__asm ("msr basepri, %[input]"::[input] "r" (Level):);
|
||||
}
|
||||
#endif
|
||||
/*lint -restore Enable MISRA rule (2.1,1.1) checking. */
|
||||
|
||||
|
||||
|
||||
/***************************************************************//**
|
||||
\fn LowLevelInit(void)
|
||||
\brief Low level initialization of the MCU
|
||||
|
||||
This function does some low level initialization of the MCU.
|
||||
Generated by ProcessorExpert and then cleaned up manually.
|
||||
********************************************************************/
|
||||
void LowLevelInit(void)
|
||||
{
|
||||
/* Initialization of the RCM module */ //***TEST_OK: Kann je nach Beschaltung des Reset-Pins zum Absturz führen
|
||||
/* RCM_RPFW: RSTFLTSEL=0 */
|
||||
RCM_RPFW &= (uint8)~(uint8)(RCM_RPFW_RSTFLTSEL(0x1F));
|
||||
/* RCM_RPFC: RSTFLTSS=0,RSTFLTSRW=0 */
|
||||
RCM_RPFC &= (uint8)~(uint8)(
|
||||
RCM_RPFC_RSTFLTSS_MASK |
|
||||
RCM_RPFC_RSTFLTSRW(0x03)
|
||||
);
|
||||
/* Initialization of the FTFL_FlashConfig module */
|
||||
/* SIM_SCGC7: MPU=1 */
|
||||
SIM_SCGC7 |= SIM_SCGC7_MPU_MASK;
|
||||
/* Initialization of the MPU module */
|
||||
|
||||
//Turn off MPU (important e.g. for the USB stack to work properly)
|
||||
/* MPU_CESR: SPERR=0,VLD=0 */
|
||||
MPU_CESR &= (uint32)~(uint32)((MPU_CESR_SPERR(0x1F) | MPU_CESR_VLD_MASK));
|
||||
|
||||
/* Initialization of the PMC module */
|
||||
/* PMC_LVDSC1: LVDACK=1,LVDIE=0,LVDRE=1,LVDV=0 */
|
||||
PMC_LVDSC1 = (uint8)((PMC_LVDSC1 & (uint8)~(uint8)(
|
||||
PMC_LVDSC1_LVDIE_MASK |
|
||||
PMC_LVDSC1_LVDV(0x03)
|
||||
)) | (uint8)(
|
||||
PMC_LVDSC1_LVDACK_MASK |
|
||||
PMC_LVDSC1_LVDRE_MASK
|
||||
));
|
||||
/* PMC_LVDSC2: LVWACK=1,LVWIE=0,LVWV=0 */
|
||||
PMC_LVDSC2 = (uint8)((PMC_LVDSC2 & (uint8)~(uint8)(
|
||||
PMC_LVDSC2_LVWIE_MASK |
|
||||
PMC_LVDSC2_LVWV(0x03)
|
||||
)) | (uint8)(
|
||||
PMC_LVDSC2_LVWACK_MASK
|
||||
));
|
||||
/* PMC_REGSC: BGEN=0,ACKISO=0,BGBE=0 */
|
||||
PMC_REGSC &= (uint8)~(uint8)(
|
||||
PMC_REGSC_BGEN_MASK |
|
||||
PMC_REGSC_ACKISO_MASK |
|
||||
PMC_REGSC_BGBE_MASK
|
||||
);
|
||||
/* SMC_PMPROT: ??=0,??=0,AVLP=0,??=0,ALLS=0,??=0,AVLLS=0,??=0 */
|
||||
SMC_PMPROT = 0x00U; /* Setup Power mode protection register */
|
||||
|
||||
//Interrupt priority base setting
|
||||
Cpu_SetBASEPRI(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* END Cpu. */
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
/*!
|
||||
** @}
|
||||
*/
|
||||
/*
|
||||
** ###################################################################
|
||||
**
|
||||
** This file was created by Processor Expert 10.4 [05.11]
|
||||
** for the Freescale Kinetis series of microcontrollers.
|
||||
**
|
||||
** ###################################################################
|
||||
*/
|
||||
Reference in New Issue
Block a user