From 4183ad0e87b55a0eefaaa4cdb4cbb586467b7c08 Mon Sep 17 00:00:00 2001 From: gitlab-runner Date: Thu, 25 Jun 2020 12:20:10 -0500 Subject: [PATCH] Upload TARGET_CY8CPROTO-063-BLE 1.3.0.15346 --- .../GeneratedSource/cycfg.c | 4 +- .../GeneratedSource/cycfg.h | 4 +- .../GeneratedSource/cycfg.timestamp | 4 +- .../GeneratedSource/cycfg_notices.h | 4 +- .../GeneratedSource/cycfg_peripherals.c | 4 +- .../GeneratedSource/cycfg_peripherals.h | 4 +- .../GeneratedSource/cycfg_pins.c | 4 +- .../GeneratedSource/cycfg_pins.h | 16 +- .../GeneratedSource/cycfg_routing.c | 4 +- .../GeneratedSource/cycfg_routing.h | 4 +- .../GeneratedSource/cycfg_system.c | 1310 ++++++++++++----- .../GeneratedSource/cycfg_system.h | 8 +- COMPONENT_BSP_DESIGN_MODUS/design.modus | 2 +- .../TOOLCHAIN_ARM/cy8c6xx7_cm0plus.sct | 2 +- .../TOOLCHAIN_GCC_ARM/cy8c6xx7_cm0plus.ld | 2 +- .../TOOLCHAIN_IAR/cy8c6xx7_cm0plus.icf | 2 +- COMPONENT_CM0P/system_psoc6_cm0plus.c | 3 +- .../TOOLCHAIN_ARM/cy8c6xx7_cm4_dual.sct | 2 +- .../TOOLCHAIN_A_Clang/cy8c6xx7_cm4_dual.mk | 2 +- .../TOOLCHAIN_GCC_ARM/cy8c6xx7_cm4_dual.ld | 2 +- .../TOOLCHAIN_IAR/cy8c6xx7_cm4_dual.icf | 2 +- COMPONENT_CM4/system_psoc6_cm4.c | 12 +- README.md | 6 +- RELEASE.md | 10 +- cybsp.c | 8 + docs/html/cypress_logo.png | Bin 37711 -> 0 bytes docs/html/doxygen_style.css | 2 +- docs/html/group__group__bsp__functions.html | 2 +- docs/html/group__group__bsp__macros.html | 2 +- docs/html/group__group__bsp__pin__state.html | 2 +- docs/html/group__group__bsp__pins.html | 2 +- docs/html/group__group__bsp__pins__btn.html | 2 +- docs/html/group__group__bsp__pins__comm.html | 2 +- docs/html/group__group__bsp__pins__led.html | 2 +- docs/html/group__group__bsp__settings.html | 2 +- docs/html/index.html | 11 +- docs/html/logo.png | Bin 0 -> 40802 bytes .../html/md_bsp_boards_mt_bsp_user_guide.html | 10 +- docs/html/modules.html | 2 +- system_psoc6.h | 53 +- version.xml | 2 +- 41 files changed, 1088 insertions(+), 433 deletions(-) delete mode 100644 docs/html/cypress_logo.png create mode 100644 docs/html/logo.png diff --git a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.c b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.c index e6f020c..6811fdf 100644 --- a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.c +++ b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.c @@ -4,8 +4,8 @@ * Description: * Wrapper function to initialize all generated code. * This file was automatically generated and should not be modified. -* Device Configurator: 2.0.0.1483 -* Device Support Library (libs/psoc6pdl): 1.4.1.2240 +* cfg-backend-cli: 1.2.0.1483 +* Device Support Library (libs/psoc6pdl): 1.6.0.4266 * ******************************************************************************** * Copyright 2017-2019 Cypress Semiconductor Corporation diff --git a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.h b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.h index 2e1d84b..b4e30e0 100644 --- a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.h +++ b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.h @@ -4,8 +4,8 @@ * Description: * Simple wrapper header containing all generated files. * This file was automatically generated and should not be modified. -* Device Configurator: 2.0.0.1483 -* Device Support Library (libs/psoc6pdl): 1.4.1.2240 +* cfg-backend-cli: 1.2.0.1483 +* Device Support Library (libs/psoc6pdl): 1.6.0.4266 * ******************************************************************************** * Copyright 2017-2019 Cypress Semiconductor Corporation diff --git a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.timestamp b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.timestamp index 216bafa..4114cb1 100755 --- a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.timestamp +++ b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg.timestamp @@ -4,8 +4,8 @@ * Description: * Sentinel file for determining if generated source is up to date. * This file was automatically generated and should not be modified. -* Device Configurator: 2.0.0.1483 -* Device Support Library (libs/psoc6pdl): 1.4.1.2240 +* cfg-backend-cli: 1.2.0.1483 +* Device Support Library (libs/psoc6pdl): 1.6.0.4266 * ******************************************************************************** * Copyright 2017-2019 Cypress Semiconductor Corporation diff --git a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_notices.h b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_notices.h index 0d31cfa..a00457a 100644 --- a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_notices.h +++ b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_notices.h @@ -5,8 +5,8 @@ * Contains warnings and errors that occurred while generating code for the * design. * This file was automatically generated and should not be modified. -* Device Configurator: 2.0.0.1483 -* Device Support Library (libs/psoc6pdl): 1.4.1.2240 +* cfg-backend-cli: 1.2.0.1483 +* Device Support Library (libs/psoc6pdl): 1.6.0.4266 * ******************************************************************************** * Copyright 2017-2019 Cypress Semiconductor Corporation diff --git a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.c b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.c index e712b85..e9c0ef8 100644 --- a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.c +++ b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.c @@ -4,8 +4,8 @@ * Description: * Peripheral Hardware Block configuration * This file was automatically generated and should not be modified. -* Device Configurator: 2.0.0.1483 -* Device Support Library (libs/psoc6pdl): 1.4.1.2240 +* cfg-backend-cli: 1.2.0.1483 +* Device Support Library (libs/psoc6pdl): 1.6.0.4266 * ******************************************************************************** * Copyright 2017-2019 Cypress Semiconductor Corporation diff --git a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.h b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.h index 39bf8ec..b25adc8 100644 --- a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.h +++ b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_peripherals.h @@ -4,8 +4,8 @@ * Description: * Peripheral Hardware Block configuration * This file was automatically generated and should not be modified. -* Device Configurator: 2.0.0.1483 -* Device Support Library (libs/psoc6pdl): 1.4.1.2240 +* cfg-backend-cli: 1.2.0.1483 +* Device Support Library (libs/psoc6pdl): 1.6.0.4266 * ******************************************************************************** * Copyright 2017-2019 Cypress Semiconductor Corporation diff --git a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_pins.c b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_pins.c index 7badcb5..591d07e 100644 --- a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_pins.c +++ b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_pins.c @@ -4,8 +4,8 @@ * Description: * Pin configuration * This file was automatically generated and should not be modified. -* Device Configurator: 2.0.0.1483 -* Device Support Library (libs/psoc6pdl): 1.4.1.2240 +* cfg-backend-cli: 1.2.0.1483 +* Device Support Library (libs/psoc6pdl): 1.6.0.4266 * ******************************************************************************** * Copyright 2017-2019 Cypress Semiconductor Corporation diff --git a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_pins.h b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_pins.h index 97674bc..e212686 100644 --- a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_pins.h +++ b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_pins.h @@ -4,8 +4,8 @@ * Description: * Pin configuration * This file was automatically generated and should not be modified. -* Device Configurator: 2.0.0.1483 -* Device Support Library (libs/psoc6pdl): 1.4.1.2240 +* cfg-backend-cli: 1.2.0.1483 +* Device Support Library (libs/psoc6pdl): 1.6.0.4266 * ******************************************************************************** * Copyright 2017-2019 Cypress Semiconductor Corporation @@ -53,6 +53,9 @@ extern "C" { #if defined (CY_USING_HAL) #define WCO_IN_HAL_PORT_PIN P0_0 #endif //defined (CY_USING_HAL) +#if defined (CY_USING_HAL) + #define WCO_IN P0_0 +#endif //defined (CY_USING_HAL) #if defined (CY_USING_HAL) #define WCO_IN_HAL_IRQ CYHAL_GPIO_IRQ_NONE #endif //defined (CY_USING_HAL) @@ -77,6 +80,9 @@ extern "C" { #if defined (CY_USING_HAL) #define WCO_OUT_HAL_PORT_PIN P0_1 #endif //defined (CY_USING_HAL) +#if defined (CY_USING_HAL) + #define WCO_OUT P0_1 +#endif //defined (CY_USING_HAL) #if defined (CY_USING_HAL) #define WCO_OUT_HAL_IRQ CYHAL_GPIO_IRQ_NONE #endif //defined (CY_USING_HAL) @@ -101,6 +107,9 @@ extern "C" { #if defined (CY_USING_HAL) #define SWDIO_HAL_PORT_PIN P6_6 #endif //defined (CY_USING_HAL) +#if defined (CY_USING_HAL) + #define SWDIO P6_6 +#endif //defined (CY_USING_HAL) #if defined (CY_USING_HAL) #define SWDIO_HAL_IRQ CYHAL_GPIO_IRQ_NONE #endif //defined (CY_USING_HAL) @@ -125,6 +134,9 @@ extern "C" { #if defined (CY_USING_HAL) #define SWCLK_HAL_PORT_PIN P6_7 #endif //defined (CY_USING_HAL) +#if defined (CY_USING_HAL) + #define SWCLK P6_7 +#endif //defined (CY_USING_HAL) #if defined (CY_USING_HAL) #define SWCLK_HAL_IRQ CYHAL_GPIO_IRQ_NONE #endif //defined (CY_USING_HAL) diff --git a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_routing.c b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_routing.c index 7195301..9de76f9 100644 --- a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_routing.c +++ b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_routing.c @@ -4,8 +4,8 @@ * Description: * Establishes all necessary connections between hardware elements. * This file was automatically generated and should not be modified. -* Device Configurator: 2.0.0.1483 -* Device Support Library (libs/psoc6pdl): 1.4.1.2240 +* cfg-backend-cli: 1.2.0.1483 +* Device Support Library (libs/psoc6pdl): 1.6.0.4266 * ******************************************************************************** * Copyright 2017-2019 Cypress Semiconductor Corporation diff --git a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_routing.h b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_routing.h index add7b12..d7955be 100644 --- a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_routing.h +++ b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_routing.h @@ -4,8 +4,8 @@ * Description: * Establishes all necessary connections between hardware elements. * This file was automatically generated and should not be modified. -* Device Configurator: 2.0.0.1483 -* Device Support Library (libs/psoc6pdl): 1.4.1.2240 +* cfg-backend-cli: 1.2.0.1483 +* Device Support Library (libs/psoc6pdl): 1.6.0.4266 * ******************************************************************************** * Copyright 2017-2019 Cypress Semiconductor Corporation diff --git a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_system.c b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_system.c index 9a92b14..749c8da 100644 --- a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_system.c +++ b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_system.c @@ -4,8 +4,8 @@ * Description: * System configuration * This file was automatically generated and should not be modified. -* Device Configurator: 2.0.0.1483 -* Device Support Library (libs/psoc6pdl): 1.4.1.2240 +* cfg-backend-cli: 1.2.0.1483 +* Device Support Library (libs/psoc6pdl): 1.6.0.4266 * ******************************************************************************** * Copyright 2017-2019 Cypress Semiconductor Corporation @@ -32,47 +32,80 @@ #define CY_CFG_SYSCLK_FLL_ERROR 4 #define CY_CFG_SYSCLK_WCO_ERROR 5 #define CY_CFG_SYSCLK_CLKBAK_ENABLED 1 +#define CY_CFG_SYSCLK_CLKBAK_SOURCE CY_SYSCLK_BAK_IN_WCO #define CY_CFG_SYSCLK_CLKFAST_ENABLED 1 +#define CY_CFG_SYSCLK_CLKFAST_DIVIDER 0 #define CY_CFG_SYSCLK_FLL_ENABLED 1 +#define CY_CFG_SYSCLK_FLL_MULT 500U +#define CY_CFG_SYSCLK_FLL_REFDIV 20U +#define CY_CFG_SYSCLK_FLL_CCO_RANGE CY_SYSCLK_FLL_CCO_RANGE4 +#define CY_CFG_SYSCLK_FLL_ENABLE_OUTDIV true +#define CY_CFG_SYSCLK_FLL_LOCK_TOLERANCE 10U +#define CY_CFG_SYSCLK_FLL_IGAIN 9U +#define CY_CFG_SYSCLK_FLL_PGAIN 5U +#define CY_CFG_SYSCLK_FLL_SETTLING_COUNT 8 +#define CY_CFG_SYSCLK_FLL_OUTPUT_MODE CY_SYSCLK_FLLPLL_OUTPUT_OUTPUT +#define CY_CFG_SYSCLK_FLL_CCO_FREQ 355 +#define CY_CFG_SYSCLK_FLL_OUT_FREQ 100000000 #define CY_CFG_SYSCLK_CLKHF0_ENABLED 1 +#define CY_CFG_SYSCLK_CLKHF0_DIVIDER CY_SYSCLK_CLKHF_NO_DIVIDE #define CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ 100UL #define CY_CFG_SYSCLK_CLKHF0_CLKPATH CY_SYSCLK_CLKHF_IN_CLKPATH0 #define CY_CFG_SYSCLK_ILO_ENABLED 1 +#define CY_CFG_SYSCLK_ILO_HIBERNATE true #define CY_CFG_SYSCLK_IMO_ENABLED 1 #define CY_CFG_SYSCLK_CLKLF_ENABLED 1 #define CY_CFG_SYSCLK_CLKPATH0_ENABLED 1 #define CY_CFG_SYSCLK_CLKPATH0_SOURCE CY_SYSCLK_CLKPATH_IN_IMO +#define CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM 0UL #define CY_CFG_SYSCLK_CLKPATH1_ENABLED 1 #define CY_CFG_SYSCLK_CLKPATH1_SOURCE CY_SYSCLK_CLKPATH_IN_IMO +#define CY_CFG_SYSCLK_CLKPATH1_SOURCE_NUM 0UL #define CY_CFG_SYSCLK_CLKPATH2_ENABLED 1 #define CY_CFG_SYSCLK_CLKPATH2_SOURCE CY_SYSCLK_CLKPATH_IN_IMO +#define CY_CFG_SYSCLK_CLKPATH2_SOURCE_NUM 0UL #define CY_CFG_SYSCLK_CLKPATH3_ENABLED 1 #define CY_CFG_SYSCLK_CLKPATH3_SOURCE CY_SYSCLK_CLKPATH_IN_IMO +#define CY_CFG_SYSCLK_CLKPATH3_SOURCE_NUM 0UL #define CY_CFG_SYSCLK_CLKPATH4_ENABLED 1 #define CY_CFG_SYSCLK_CLKPATH4_SOURCE CY_SYSCLK_CLKPATH_IN_IMO +#define CY_CFG_SYSCLK_CLKPATH4_SOURCE_NUM 0UL #define CY_CFG_SYSCLK_CLKPERI_ENABLED 1 +#define CY_CFG_SYSCLK_CLKPERI_DIVIDER 1 #define CY_CFG_SYSCLK_CLKSLOW_ENABLED 1 +#define CY_CFG_SYSCLK_CLKSLOW_DIVIDER 0 #define CY_CFG_SYSCLK_WCO_ENABLED 1 +#define CY_CFG_SYSCLK_WCO_IN_PRT GPIO_PRT0 +#define CY_CFG_SYSCLK_WCO_IN_PIN 0U +#define CY_CFG_SYSCLK_WCO_OUT_PRT GPIO_PRT0 +#define CY_CFG_SYSCLK_WCO_OUT_PIN 1U +#define CY_CFG_SYSCLK_WCO_BYPASS CY_SYSCLK_WCO_NOT_BYPASSED #define CY_CFG_PWR_ENABLED 1 #define CY_CFG_PWR_INIT 1 #define CY_CFG_PWR_USING_PMIC 0 #define CY_CFG_PWR_VBACKUP_USING_VDDD 1 #define CY_CFG_PWR_LDO_VOLTAGE CY_SYSPM_LDO_VOLTAGE_LP #define CY_CFG_PWR_USING_ULP 0 +#define CY_CFG_PWR_REGULATOR_MODE_MIN false -static const cy_stc_fll_manual_config_t srss_0_clock_0_fll_0_fllConfig = -{ - .fllMult = 500U, - .refDiv = 20U, - .ccoRange = CY_SYSCLK_FLL_CCO_RANGE4, - .enableOutputDiv = true, - .lockTolerance = 10U, - .igain = 9U, - .pgain = 5U, - .settlingCount = 8U, - .outputMode = CY_SYSCLK_FLLPLL_OUTPUT_OUTPUT, - .cco_Freq = 355U, -}; +#if defined (CY_DEVICE_SECURE) && (CY_CPU_CORTEX_M4) + static cy_stc_pra_system_config_t srss_0_clock_0_secureConfig; +#endif //defined (CY_DEVICE_SECURE) && (CY_CPU_CORTEX_M4) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + static const cy_stc_fll_manual_config_t srss_0_clock_0_fll_0_fllConfig = + { + .fllMult = 500U, + .refDiv = 20U, + .ccoRange = CY_SYSCLK_FLL_CCO_RANGE4, + .enableOutputDiv = true, + .lockTolerance = 10U, + .igain = 9U, + .pgain = 5U, + .settlingCount = 8U, + .outputMode = CY_SYSCLK_FLLPLL_OUTPUT_OUTPUT, + .cco_Freq = 355U, + }; +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) #if defined (CY_USING_HAL) const cyhal_resource_inst_t srss_0_clock_0_pathmux_0_obj = { @@ -119,393 +152,946 @@ __WEAK void cycfg_ClockStartupError(uint32_t error) (void)error; /* Suppress the compiler warning */ while(1); } -__STATIC_INLINE void Cy_SysClk_ClkBakInit() -{ - Cy_SysClk_ClkBakSetSource(CY_SYSCLK_BAK_IN_WCO); -} -__STATIC_INLINE void Cy_SysClk_ClkFastInit() -{ - Cy_SysClk_ClkFastSetDivider(0U); -} -__STATIC_INLINE void Cy_SysClk_FllInit() -{ - if (CY_SYSCLK_SUCCESS != Cy_SysClk_FllManualConfigure(&srss_0_clock_0_fll_0_fllConfig)) - { - cycfg_ClockStartupError(CY_CFG_SYSCLK_FLL_ERROR); - } - if (CY_SYSCLK_SUCCESS != Cy_SysClk_FllEnable(200000UL)) - { - cycfg_ClockStartupError(CY_CFG_SYSCLK_FLL_ERROR); - } -} -__STATIC_INLINE void Cy_SysClk_ClkHf0Init() -{ - Cy_SysClk_ClkHfSetSource(0U, CY_CFG_SYSCLK_CLKHF0_CLKPATH); - Cy_SysClk_ClkHfSetDivider(0U, CY_SYSCLK_CLKHF_NO_DIVIDE); -} -__STATIC_INLINE void Cy_SysClk_IloInit() -{ - /* The WDT is unlocked in the default startup code */ - Cy_SysClk_IloEnable(); - Cy_SysClk_IloHibernateOn(true); -} -__STATIC_INLINE void Cy_SysClk_ClkLfInit() -{ - /* The WDT is unlocked in the default startup code */ - Cy_SysClk_ClkLfSetSource(CY_SYSCLK_CLKLF_IN_WCO); -} -__STATIC_INLINE void Cy_SysClk_ClkPath0Init() -{ - Cy_SysClk_ClkPathSetSource(0U, CY_CFG_SYSCLK_CLKPATH0_SOURCE); -} -__STATIC_INLINE void Cy_SysClk_ClkPath1Init() -{ - Cy_SysClk_ClkPathSetSource(1U, CY_CFG_SYSCLK_CLKPATH1_SOURCE); -} -__STATIC_INLINE void Cy_SysClk_ClkPath2Init() -{ - Cy_SysClk_ClkPathSetSource(2U, CY_CFG_SYSCLK_CLKPATH2_SOURCE); -} -__STATIC_INLINE void Cy_SysClk_ClkPath3Init() -{ - Cy_SysClk_ClkPathSetSource(3U, CY_CFG_SYSCLK_CLKPATH3_SOURCE); -} -__STATIC_INLINE void Cy_SysClk_ClkPath4Init() -{ - Cy_SysClk_ClkPathSetSource(4U, CY_CFG_SYSCLK_CLKPATH4_SOURCE); -} -__STATIC_INLINE void Cy_SysClk_ClkPeriInit() -{ - Cy_SysClk_ClkPeriSetDivider(1U); -} -__STATIC_INLINE void Cy_SysClk_ClkSlowInit() -{ - Cy_SysClk_ClkSlowSetDivider(0U); -} -__STATIC_INLINE void Cy_SysClk_WcoInit() -{ - (void)Cy_GPIO_Pin_FastInit(GPIO_PRT0, 0U, 0x00U, 0x00U, HSIOM_SEL_GPIO); - (void)Cy_GPIO_Pin_FastInit(GPIO_PRT0, 1U, 0x00U, 0x00U, HSIOM_SEL_GPIO); - if (CY_SYSCLK_SUCCESS != Cy_SysClk_WcoEnable(1000000UL)) - { - cycfg_ClockStartupError(CY_CFG_SYSCLK_WCO_ERROR); - } -} -__STATIC_INLINE void init_cycfg_power(void) -{ - /* Reset the Backup domain on POR, XRES, BOD only if Backup domain is supplied by VDDD */ - #if (CY_CFG_PWR_VBACKUP_USING_VDDD) - #ifdef CY_CFG_SYSCLK_ILO_ENABLED - if (0u == Cy_SysLib_GetResetReason() /* POR, XRES, or BOD */) - { - Cy_SysLib_ResetBackupDomain(); - Cy_SysClk_IloDisable(); - Cy_SysClk_IloInit(); - } - #endif /* CY_CFG_SYSCLK_ILO_ENABLED */ - #endif /* CY_CFG_PWR_VBACKUP_USING_VDDD */ - - /* Configure core regulator */ - #if CY_CFG_PWR_USING_LDO - Cy_SysPm_LdoSetVoltage(CY_SYSPM_LDO_VOLTAGE_LP); - Cy_SysPm_LdoSetMode(CY_SYSPM_LDO_MODE_NORMAL); - #else - Cy_SysPm_BuckEnable(CY_SYSPM_BUCK_OUT1_VOLTAGE_LP); - #endif /* CY_CFG_PWR_USING_LDO */ - /* Configure PMIC */ - Cy_SysPm_UnlockPmic(); - #if CY_CFG_PWR_USING_PMIC - Cy_SysPm_PmicEnableOutput(); - #else - Cy_SysPm_PmicDisableOutput(); - #endif /* CY_CFG_PWR_USING_PMIC */ -} +#if defined (CY_DEVICE_SECURE) && (CY_CPU_CORTEX_M4) + __STATIC_INLINE void init_cycfg_secure_struct(cy_stc_pra_system_config_t * secure_config) + { + #ifdef CY_CFG_PWR_ENABLED + secure_config->powerEnable = CY_CFG_PWR_ENABLED; + #endif /* CY_CFG_PWR_ENABLED */ + #ifdef CY_CFG_PWR_USING_LDO + secure_config->ldoEnable = CY_CFG_PWR_USING_LDO; + #endif /* CY_CFG_PWR_USING_LDO */ -void init_cycfg_system(void) -{ - /* Set worst case memory wait states (! ultra low power, 150 MHz), will update at the end */ - Cy_SysLib_SetWaitStates(false, 150UL); - #ifdef CY_CFG_PWR_ENABLED - #ifdef CY_CFG_PWR_INIT - init_cycfg_power(); - #else - #warning Power system will not be configured. Update power personality to v1.20 or later. - #endif /* CY_CFG_PWR_INIT */ - #endif /* CY_CFG_PWR_ENABLED */ - - /* Reset the core clock path to default and disable all the FLLs/PLLs */ - Cy_SysClk_ClkHfSetDivider(0U, CY_SYSCLK_CLKHF_NO_DIVIDE); - Cy_SysClk_ClkFastSetDivider(0U); - Cy_SysClk_ClkPeriSetDivider(1U); - Cy_SysClk_ClkSlowSetDivider(0U); - for (uint32_t pll = CY_SRSS_NUM_PLL; pll > 0UL; --pll) /* PLL 1 is the first PLL. 0 is invalid. */ + #ifdef CY_CFG_PWR_USING_PMIC + secure_config->pmicEnable = CY_CFG_PWR_USING_PMIC; + #endif /* CY_CFG_PWR_USING_PMIC */ + + #ifdef CY_CFG_PWR_VBACKUP_USING_VDDD + secure_config->vBackupVDDDEnable = CY_CFG_PWR_VBACKUP_USING_VDDD; + #endif /* CY_CFG_PWR_VBACKUP_USING_VDDD */ + + #ifdef CY_CFG_PWR_USING_ULP + secure_config->ulpEnable = CY_CFG_PWR_USING_ULP; + #endif /* CY_CFG_PWR_USING_ULP */ + + #ifdef CY_CFG_SYSCLK_ECO_ENABLED + secure_config->ecoEnable = CY_CFG_SYSCLK_ECO_ENABLED; + #endif /* CY_CFG_SYSCLK_ECO_ENABLED */ + + #ifdef CY_CFG_SYSCLK_EXTCLK_ENABLED + secure_config->extClkEnable = CY_CFG_SYSCLK_EXTCLK_ENABLED; + #endif /* CY_CFG_SYSCLK_EXTCLK_ENABLED */ + + #ifdef CY_CFG_SYSCLK_ILO_ENABLED + secure_config->iloEnable = CY_CFG_SYSCLK_ILO_ENABLED; + #endif /* CY_CFG_SYSCLK_ILO_ENABLED */ + + #ifdef CY_CFG_SYSCLK_WCO_ENABLED + secure_config->wcoEnable = CY_CFG_SYSCLK_WCO_ENABLED; + #endif /* CY_CFG_SYSCLK_WCO_ENABLED */ + + #ifdef CY_CFG_SYSCLK_FLL_ENABLED + secure_config->fllEnable = CY_CFG_SYSCLK_FLL_ENABLED; + #endif /* CY_CFG_SYSCLK_FLL_ENABLED */ + + #ifdef CY_CFG_SYSCLK_PLL0_ENABLED + secure_config->pll0Enable = CY_CFG_SYSCLK_PLL0_ENABLED; + #endif /* CY_CFG_SYSCLK_PLL0_ENABLED */ + + #ifdef CY_CFG_SYSCLK_PLL1_ENABLED + secure_config->pll1Enable = CY_CFG_SYSCLK_PLL1_ENABLED; + #endif /* CY_CFG_SYSCLK_PLL1_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKPATH0_ENABLED + secure_config->path0Enable = CY_CFG_SYSCLK_CLKPATH0_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKPATH0_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKPATH1_ENABLED + secure_config->path1Enable = CY_CFG_SYSCLK_CLKPATH1_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKPATH1_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKPATH2_ENABLED + secure_config->path2Enable = CY_CFG_SYSCLK_CLKPATH2_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKPATH2_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKPATH3_ENABLED + secure_config->path3Enable = CY_CFG_SYSCLK_CLKPATH3_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKPATH3_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKPATH4_ENABLED + secure_config->path4Enable = CY_CFG_SYSCLK_CLKPATH4_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKPATH4_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKPATH5_ENABLED + secure_config->path5Enable = CY_CFG_SYSCLK_CLKPATH5_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKPATH5_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKFAST_ENABLED + secure_config->clkFastEnable = CY_CFG_SYSCLK_CLKFAST_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKFAST_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKPERI_ENABLED + secure_config->clkPeriEnable = CY_CFG_SYSCLK_CLKPERI_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKPERI_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKSLOW_ENABLED + secure_config->clkSlowEnable = CY_CFG_SYSCLK_CLKSLOW_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKSLOW_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKHF0_ENABLED + secure_config->clkHF0Enable = CY_CFG_SYSCLK_CLKHF0_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKHF0_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKHF1_ENABLED + secure_config->clkHF1Enable = CY_CFG_SYSCLK_CLKHF1_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKHF1_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKHF2_ENABLED + secure_config->clkHF2Enable = CY_CFG_SYSCLK_CLKHF2_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKHF2_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKHF3_ENABLED + secure_config->clkHF3Enable = CY_CFG_SYSCLK_CLKHF3_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKHF3_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKHF4_ENABLED + secure_config->clkHF4Enable = CY_CFG_SYSCLK_CLKHF4_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKHF4_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKHF5_ENABLED + secure_config->clkHF5Enable = CY_CFG_SYSCLK_CLKHF5_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKHF5_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKPUMP_ENABLED + secure_config->clkPumpEnable = CY_CFG_SYSCLK_CLKPUMP_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKPUMP_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKLF_ENABLED + secure_config->clkLFEnable = CY_CFG_SYSCLK_CLKLF_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKLF_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKBAK_ENABLED + secure_config->clkBakEnable = CY_CFG_SYSCLK_CLKBAK_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKBAK_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKTIMER_ENABLED + secure_config->clkTimerEnable = CY_CFG_SYSCLK_CLKTIMER_ENABLED; + #endif /* CY_CFG_SYSCLK_CLKTIMER_ENABLED */ + + #ifdef CY_CFG_SYSCLK_CLKALTSYSTICK_ENABLED + #error Configuration Error : ALT SYSTICK cannot be enabled for Secure devices. + #endif /* CY_CFG_SYSCLK_CLKALTSYSTICK_ENABLED */ + + #ifdef CY_CFG_SYSCLK_PILO_ENABLED + secure_config->piloEnable = CY_CFG_SYSCLK_PILO_ENABLED; + #endif /* CY_CFG_SYSCLK_PILO_ENABLED */ + + #ifdef CY_CFG_SYSCLK_ALTHF_ENABLED + secure_config->clkAltHfEnable = CY_CFG_SYSCLK_ALTHF_ENABLED; + #endif /* CY_CFG_SYSCLK_ALTHF_ENABLED */ + + #ifdef CY_CFG_PWR_LDO_VOLTAGE + secure_config->ldoVoltage = CY_CFG_PWR_LDO_VOLTAGE; + #endif /* CY_CFG_PWR_LDO_VOLTAGE */ + + #ifdef CY_CFG_PWR_REGULATOR_MODE_MIN + secure_config->pwrCurrentModeMin = CY_CFG_PWR_REGULATOR_MODE_MIN; + #endif /* CY_CFG_PWR_REGULATOR_MODE_MIN */ + + #ifdef CY_CFG_PWR_BUCK_VOLTAGE + secure_config->buckVoltage = CY_CFG_PWR_BUCK_VOLTAGE; + #endif /* CY_CFG_PWR_BUCK_VOLTAGE */ + + #ifdef CY_CFG_SYSCLK_ECO_FREQ + secure_config->ecoFreqHz = CY_CFG_SYSCLK_ECO_FREQ; + #endif /* CY_CFG_SYSCLK_ECO_FREQ */ + + #ifdef CY_CFG_SYSCLK_ECO_CLOAD + secure_config->ecoLoad = CY_CFG_SYSCLK_ECO_CLOAD; + #endif /* CY_CFG_SYSCLK_ECO_CLOAD */ + + #ifdef CY_CFG_SYSCLK_ECO_ESR + secure_config->ecoEsr = CY_CFG_SYSCLK_ECO_ESR; + #endif /* CY_CFG_SYSCLK_ECO_ESR */ + + #ifdef CY_CFG_SYSCLK_ECO_DRIVE_LEVEL + secure_config->ecoDriveLevel = CY_CFG_SYSCLK_ECO_DRIVE_LEVEL; + #endif /* CY_CFG_SYSCLK_ECO_DRIVE_LEVEL */ + + #ifdef CY_CFG_SYSCLK_ECO_GPIO_IN_PRT + secure_config->ecoInPort = CY_CFG_SYSCLK_ECO_GPIO_IN_PRT; + #endif /* CY_CFG_SYSCLK_ECO_GPIO_IN_PRT */ + + #ifdef CY_CFG_SYSCLK_ECO_GPIO_OUT_PRT + secure_config->ecoOutPort = CY_CFG_SYSCLK_ECO_GPIO_OUT_PRT; + #endif /* CY_CFG_SYSCLK_ECO_GPIO_OUT_PRT */ + + #ifdef CY_CFG_SYSCLK_ECO_GPIO_IN_PIN + secure_config->ecoInPinNum = CY_CFG_SYSCLK_ECO_GPIO_IN_PIN; + #endif /* CY_CFG_SYSCLK_ECO_GPIO_IN_PIN */ + + #ifdef CY_CFG_SYSCLK_ECO_GPIO_OUT_PIN + secure_config->ecoOutPinNum = CY_CFG_SYSCLK_ECO_GPIO_OUT_PIN; + #endif /* CY_CFG_SYSCLK_ECO_GPIO_OUT_PIN */ + + #ifdef CY_CFG_SYSCLK_EXTCLK_FREQ + secure_config->extClkFreqHz = CY_CFG_SYSCLK_EXTCLK_FREQ; + #endif /* CY_CFG_SYSCLK_EXTCLK_FREQ */ + + #ifdef CY_CFG_SYSCLK_EXTCLK_GPIO_PRT + secure_config->extClkPort = CY_CFG_SYSCLK_EXTCLK_GPIO_PRT; + #endif /* CY_CFG_SYSCLK_EXTCLK_GPIO_PRT */ + + #ifdef CY_CFG_SYSCLK_EXTCLK_GPIO_PIN + secure_config->extClkPinNum = CY_CFG_SYSCLK_EXTCLK_GPIO_PIN; + #endif /* CY_CFG_SYSCLK_EXTCLK_GPIO_PIN */ + + #ifdef CY_CFG_SYSCLK_EXTCLK_GPIO_HSIOM + secure_config->extClkHsiom = CY_CFG_SYSCLK_EXTCLK_GPIO_HSIOM; + #endif /* CY_CFG_SYSCLK_EXTCLK_GPIO_HSIOM */ + + #ifdef CY_CFG_SYSCLK_ILO_HIBERNATE + secure_config->iloHibernateON = CY_CFG_SYSCLK_ILO_HIBERNATE; + #endif /* CY_CFG_SYSCLK_ILO_HIBERNATE */ + + #ifdef CY_CFG_SYSCLK_WCO_BYPASS + secure_config->bypassEnable = CY_CFG_SYSCLK_WCO_BYPASS; + #endif /* CY_CFG_SYSCLK_WCO_BYPASS */ + + #ifdef CY_CFG_SYSCLK_WCO_IN_PRT + secure_config->wcoInPort = CY_CFG_SYSCLK_WCO_IN_PRT; + #endif /* CY_CFG_SYSCLK_WCO_IN_PRT */ + + #ifdef CY_CFG_SYSCLK_WCO_OUT_PRT + secure_config->wcoOutPort = CY_CFG_SYSCLK_WCO_OUT_PRT; + #endif /* CY_CFG_SYSCLK_WCO_OUT_PRT */ + + #ifdef CY_CFG_SYSCLK_WCO_IN_PIN + secure_config->wcoInPinNum = CY_CFG_SYSCLK_WCO_IN_PIN; + #endif /* CY_CFG_SYSCLK_WCO_IN_PIN */ + + #ifdef CY_CFG_SYSCLK_WCO_OUT_PIN + secure_config->wcoOutPinNum = CY_CFG_SYSCLK_WCO_OUT_PIN; + #endif /* CY_CFG_SYSCLK_WCO_OUT_PIN */ + + #ifdef CY_CFG_SYSCLK_FLL_OUT_FREQ + secure_config->fllOutFreqHz = CY_CFG_SYSCLK_FLL_OUT_FREQ; + #endif /* CY_CFG_SYSCLK_FLL_OUT_FREQ */ + + #ifdef CY_CFG_SYSCLK_FLL_MULT + secure_config->fllMult = CY_CFG_SYSCLK_FLL_MULT; + #endif /* CY_CFG_SYSCLK_FLL_MULT */ + + #ifdef CY_CFG_SYSCLK_FLL_REFDIV + secure_config->fllRefDiv = CY_CFG_SYSCLK_FLL_REFDIV; + #endif /* CY_CFG_SYSCLK_FLL_REFDIV */ + + #ifdef CY_CFG_SYSCLK_FLL_CCO_RANGE + secure_config->fllCcoRange = CY_CFG_SYSCLK_FLL_CCO_RANGE; + #endif /* CY_CFG_SYSCLK_FLL_CCO_RANGE */ + + #ifdef CY_CFG_SYSCLK_FLL_ENABLE_OUTDIV + secure_config->enableOutputDiv = CY_CFG_SYSCLK_FLL_ENABLE_OUTDIV; + #endif /* CY_CFG_SYSCLK_FLL_ENABLE_OUTDIV */ + + #ifdef CY_CFG_SYSCLK_FLL_LOCK_TOLERANCE + secure_config->lockTolerance = CY_CFG_SYSCLK_FLL_LOCK_TOLERANCE; + #endif /* CY_CFG_SYSCLK_FLL_LOCK_TOLERANCE */ + + #ifdef CY_CFG_SYSCLK_FLL_IGAIN + secure_config->igain = CY_CFG_SYSCLK_FLL_IGAIN; + #endif /* CY_CFG_SYSCLK_FLL_IGAIN */ + + #ifdef CY_CFG_SYSCLK_FLL_PGAIN + secure_config->pgain = CY_CFG_SYSCLK_FLL_PGAIN; + #endif /* CY_CFG_SYSCLK_FLL_PGAIN */ + + #ifdef CY_CFG_SYSCLK_FLL_SETTLING_COUNT + secure_config->settlingCount = CY_CFG_SYSCLK_FLL_SETTLING_COUNT; + #endif /* CY_CFG_SYSCLK_FLL_SETTLING_COUNT */ + + #ifdef CY_CFG_SYSCLK_FLL_OUTPUT_MODE + secure_config->outputMode = CY_CFG_SYSCLK_FLL_OUTPUT_MODE; + #endif /* CY_CFG_SYSCLK_FLL_OUTPUT_MODE */ + + #ifdef CY_CFG_SYSCLK_FLL_CCO_FREQ + secure_config->ccoFreq = CY_CFG_SYSCLK_FLL_CCO_FREQ; + #endif /* CY_CFG_SYSCLK_FLL_CCO_FREQ */ + + #ifdef CY_CFG_SYSCLK_PLL0_FEEDBACK_DIV + secure_config->pll0FeedbackDiv = CY_CFG_SYSCLK_PLL0_FEEDBACK_DIV; + #endif /* CY_CFG_SYSCLK_PLL0_FEEDBACK_DIV */ + + #ifdef CY_CFG_SYSCLK_PLL0_REFERENCE_DIV + secure_config->pll0ReferenceDiv = CY_CFG_SYSCLK_PLL0_REFERENCE_DIV; + #endif /* CY_CFG_SYSCLK_PLL0_REFERENCE_DIV */ + + #ifdef CY_CFG_SYSCLK_PLL0_OUTPUT_DIV + secure_config->pll0OutputDiv = CY_CFG_SYSCLK_PLL0_OUTPUT_DIV; + #endif /* CY_CFG_SYSCLK_PLL0_OUTPUT_DIV */ + + #ifdef CY_CFG_SYSCLK_PLL0_LF_MODE + secure_config->pll0LfMode = CY_CFG_SYSCLK_PLL0_LF_MODE; + #endif /* CY_CFG_SYSCLK_PLL0_LF_MODE */ + + #ifdef CY_CFG_SYSCLK_PLL0_OUTPUT_MODE + secure_config->pll0OutputMode = CY_CFG_SYSCLK_PLL0_OUTPUT_MODE; + #endif /* CY_CFG_SYSCLK_PLL0_OUTPUT_MODE */ + + #ifdef CY_CFG_SYSCLK_PLL0_OUTPUT_FREQ + secure_config->pll0OutFreqHz = CY_CFG_SYSCLK_PLL0_OUTPUT_FREQ; + #endif /* CY_CFG_SYSCLK_PLL0_OUTPUT_FREQ */ + + #ifdef CY_CFG_SYSCLK_PLL1_FEEDBACK_DIV + secure_config->pll1FeedbackDiv = CY_CFG_SYSCLK_PLL1_FEEDBACK_DIV; + #endif /* CY_CFG_SYSCLK_PLL1_FEEDBACK_DIV */ + + #ifdef CY_CFG_SYSCLK_PLL1_REFERENCE_DIV + secure_config->pll1ReferenceDiv = CY_CFG_SYSCLK_PLL1_REFERENCE_DIV; + #endif /* CY_CFG_SYSCLK_PLL1_REFERENCE_DIV */ + + #ifdef CY_CFG_SYSCLK_PLL1_OUTPUT_DIV + secure_config->pll1OutputDiv = CY_CFG_SYSCLK_PLL1_OUTPUT_DIV; + #endif /* CY_CFG_SYSCLK_PLL1_OUTPUT_DIV */ + + #ifdef CY_CFG_SYSCLK_PLL1_LF_MODE + secure_config->pll1LfMode = CY_CFG_SYSCLK_PLL1_LF_MODE; + #endif /* CY_CFG_SYSCLK_PLL1_LF_MODE */ + + #ifdef CY_CFG_SYSCLK_PLL1_OUTPUT_MODE + secure_config->pll1OutputMode = CY_CFG_SYSCLK_PLL1_OUTPUT_MODE; + #endif /* CY_CFG_SYSCLK_PLL1_OUTPUT_MODE */ + + #ifdef CY_CFG_SYSCLK_PLL1_OUTPUT_FREQ + secure_config->pll1OutFreqHz = CY_CFG_SYSCLK_PLL1_OUTPUT_FREQ; + #endif /* CY_CFG_SYSCLK_PLL1_OUTPUT_FREQ */ + + #ifdef CY_CFG_SYSCLK_CLKPATH0_SOURCE + secure_config->path0Src = CY_CFG_SYSCLK_CLKPATH0_SOURCE; + #endif /* CY_CFG_SYSCLK_CLKPATH0_SOURCE */ + + #ifdef CY_CFG_SYSCLK_CLKPATH1_SOURCE + secure_config->path1Src = CY_CFG_SYSCLK_CLKPATH1_SOURCE; + #endif /* CY_CFG_SYSCLK_CLKPATH1_SOURCE */ + + #ifdef CY_CFG_SYSCLK_CLKPATH2_SOURCE + secure_config->path2Src = CY_CFG_SYSCLK_CLKPATH2_SOURCE; + #endif /* CY_CFG_SYSCLK_CLKPATH2_SOURCE */ + + #ifdef CY_CFG_SYSCLK_CLKPATH3_SOURCE + secure_config->path3Src = CY_CFG_SYSCLK_CLKPATH3_SOURCE; + #endif /* CY_CFG_SYSCLK_CLKPATH3_SOURCE */ + + #ifdef CY_CFG_SYSCLK_CLKPATH4_SOURCE + secure_config->path4Src = CY_CFG_SYSCLK_CLKPATH4_SOURCE; + #endif /* CY_CFG_SYSCLK_CLKPATH4_SOURCE */ + + #ifdef CY_CFG_SYSCLK_CLKPATH5_SOURCE + secure_config->path5Src = CY_CFG_SYSCLK_CLKPATH5_SOURCE; + #endif /* CY_CFG_SYSCLK_CLKPATH5_SOURCE */ + + #ifdef CY_CFG_SYSCLK_CLKFAST_DIVIDER + secure_config->clkFastDiv = CY_CFG_SYSCLK_CLKFAST_DIVIDER; + #endif /* CY_CFG_SYSCLK_CLKFAST_DIVIDER */ + + #ifdef CY_CFG_SYSCLK_CLKPERI_DIVIDER + secure_config->clkPeriDiv = CY_CFG_SYSCLK_CLKPERI_DIVIDER; + #endif /* CY_CFG_SYSCLK_CLKPERI_DIVIDER */ + + #ifdef CY_CFG_SYSCLK_CLKSLOW_DIVIDER + secure_config->clkSlowDiv = CY_CFG_SYSCLK_CLKSLOW_DIVIDER; + #endif /* CY_CFG_SYSCLK_CLKSLOW_DIVIDER */ + + #ifdef CY_CFG_SYSCLK_CLKHF0_CLKPATH + secure_config->hf0Source = CY_CFG_SYSCLK_CLKHF0_CLKPATH; + #endif /* CY_CFG_SYSCLK_CLKHF0_CLKPATH */ + + #ifdef CY_CFG_SYSCLK_CLKHF0_DIVIDER + secure_config->hf0Divider = CY_CFG_SYSCLK_CLKHF0_DIVIDER; + #endif /* CY_CFG_SYSCLK_CLKHF0_DIVIDER */ + + #ifdef CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ + secure_config->hf0OutFreqMHz = CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ; + #endif /* CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ */ + + #ifdef CY_CFG_SYSCLK_CLKHF1_CLKPATH + secure_config->hf1Source = CY_CFG_SYSCLK_CLKHF1_CLKPATH; + #endif /* CY_CFG_SYSCLK_CLKHF1_CLKPATH */ + + #ifdef CY_CFG_SYSCLK_CLKHF1_DIVIDER + secure_config->hf1Divider = CY_CFG_SYSCLK_CLKHF1_DIVIDER; + #endif /* CY_CFG_SYSCLK_CLKHF1_DIVIDER */ + + #ifdef CY_CFG_SYSCLK_CLKHF1_FREQ_MHZ + secure_config->hf1OutFreqMHz = CY_CFG_SYSCLK_CLKHF1_FREQ_MHZ; + #endif /* CY_CFG_SYSCLK_CLKHF1_FREQ_MHZ */ + + #ifdef CY_CFG_SYSCLK_CLKHF2_CLKPATH + secure_config->hf2Source = CY_CFG_SYSCLK_CLKHF2_CLKPATH; + #endif /* CY_CFG_SYSCLK_CLKHF2_CLKPATH */ + + #ifdef CY_CFG_SYSCLK_CLKHF2_DIVIDER + secure_config->hf2Divider = CY_CFG_SYSCLK_CLKHF2_DIVIDER; + #endif /* CY_CFG_SYSCLK_CLKHF2_DIVIDER */ + + #ifdef CY_CFG_SYSCLK_CLKHF2_FREQ_MHZ + secure_config->hf2OutFreqMHz = CY_CFG_SYSCLK_CLKHF2_FREQ_MHZ; + #endif /* CY_CFG_SYSCLK_CLKHF2_FREQ_MHZ */ + + #ifdef CY_CFG_SYSCLK_CLKHF3_CLKPATH + secure_config->hf3Source = CY_CFG_SYSCLK_CLKHF3_CLKPATH; + #endif /* CY_CFG_SYSCLK_CLKHF3_CLKPATH */ + + #ifdef CY_CFG_SYSCLK_CLKHF3_DIVIDER + secure_config->hf3Divider = CY_CFG_SYSCLK_CLKHF3_DIVIDER; + #endif /* CY_CFG_SYSCLK_CLKHF3_DIVIDER */ + + #ifdef CY_CFG_SYSCLK_CLKHF3_FREQ_MHZ + secure_config->hf3OutFreqMHz = CY_CFG_SYSCLK_CLKHF3_FREQ_MHZ; + #endif /* CY_CFG_SYSCLK_CLKHF3_FREQ_MHZ */ + + #ifdef CY_CFG_SYSCLK_CLKHF4_CLKPATH + secure_config->hf4Source = CY_CFG_SYSCLK_CLKHF4_CLKPATH; + #endif /* CY_CFG_SYSCLK_CLKHF4_CLKPATH */ + + #ifdef CY_CFG_SYSCLK_CLKHF4_DIVIDER + secure_config->hf4Divider = CY_CFG_SYSCLK_CLKHF4_DIVIDER; + #endif /* CY_CFG_SYSCLK_CLKHF4_DIVIDER */ + + #ifdef CY_CFG_SYSCLK_CLKHF4_FREQ_MHZ + secure_config->hf4OutFreqMHz = CY_CFG_SYSCLK_CLKHF4_FREQ_MHZ; + #endif /* CY_CFG_SYSCLK_CLKHF4_FREQ_MHZ */ + + #ifdef CY_CFG_SYSCLK_CLKHF5_CLKPATH + secure_config->hf5Source = CY_CFG_SYSCLK_CLKHF5_CLKPATH; + #endif /* CY_CFG_SYSCLK_CLKHF5_CLKPATH */ + + #ifdef CY_CFG_SYSCLK_CLKHF5_DIVIDER + secure_config->hf5Divider = CY_CFG_SYSCLK_CLKHF5_DIVIDER; + #endif /* CY_CFG_SYSCLK_CLKHF5_DIVIDER */ + + #ifdef CY_CFG_SYSCLK_CLKHF5_FREQ_MHZ + secure_config->hf5OutFreqMHz = CY_CFG_SYSCLK_CLKHF5_FREQ_MHZ; + #endif /* CY_CFG_SYSCLK_CLKHF5_FREQ_MHZ */ + + #ifdef CY_CFG_SYSCLK_CLKPUMP_SOURCE + secure_config->pumpSource = CY_CFG_SYSCLK_CLKPUMP_SOURCE; + #endif /* CY_CFG_SYSCLK_CLKPUMP_SOURCE */ + + #ifdef CY_CFG_SYSCLK_CLKPUMP_DIVIDER + secure_config->pumpDivider = CY_CFG_SYSCLK_CLKPUMP_DIVIDER; + #endif /* CY_CFG_SYSCLK_CLKPUMP_DIVIDER */ + + #ifdef CY_CFG_SYSCLK_CLKLF_SOURCE + secure_config->clkLfSource = CY_CFG_SYSCLK_CLKLF_SOURCE; + #endif /* CY_CFG_SYSCLK_CLKLF_SOURCE */ + + #ifdef CY_CFG_SYSCLK_CLKBAK_SOURCE + secure_config->clkBakSource = CY_CFG_SYSCLK_CLKBAK_SOURCE; + #endif /* CY_CFG_SYSCLK_CLKBAK_SOURCE */ + + #ifdef CY_CFG_SYSCLK_CLKTIMER_SOURCE + secure_config->clkTimerSource = CY_CFG_SYSCLK_CLKTIMER_SOURCE; + #endif /* CY_CFG_SYSCLK_CLKTIMER_SOURCE */ + + #ifdef CY_CFG_SYSCLK_CLKTIMER_DIVIDER + secure_config->clkTimerDivider = CY_CFG_SYSCLK_CLKTIMER_DIVIDER; + #endif /* CY_CFG_SYSCLK_CLKTIMER_DIVIDER */ + + #ifdef CY_CFG_SYSCLK_CLKALTSYSTICK_SOURCE + secure_config->clkSrcAltSysTick = CY_CFG_SYSCLK_CLKALTSYSTICK_SOURCE; + #endif /* CY_CFG_SYSCLK_CLKALTSYSTICK_SOURCE */ + + #ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLOAD + secure_config->altHFcLoad = CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLOAD; + #endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLOAD */ + + #ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_TIME + secure_config->altHFxtalStartUpTime = CY_CFG_SYSCLK_ALTHF_BLE_ECO_TIME; + #endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_TIME */ + + #ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_FREQ + secure_config->altHFfreq = CY_CFG_SYSCLK_ALTHF_BLE_ECO_FREQ; + #endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_FREQ */ + + #ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLK_DIV + secure_config->altHFsysClkDiv = CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLK_DIV; + #endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_CLK_DIV */ + + #ifdef CY_CFG_SYSCLK_ALTHF_BLE_ECO_VOL_REGULATOR + secure_config->altHFvoltageReg = CY_CFG_SYSCLK_ALTHF_BLE_ECO_VOL_REGULATOR; + #endif /* CY_CFG_SYSCLK_ALTHF_BLE_ECO_VOL_REGULATOR */ + } +#endif //defined (CY_DEVICE_SECURE) && (CY_CPU_CORTEX_M4) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_ClkBakInit() { - (void)Cy_SysClk_PllDisable(pll); + Cy_SysClk_ClkBakSetSource(CY_SYSCLK_BAK_IN_WCO); } - Cy_SysClk_ClkPathSetSource(CY_SYSCLK_CLKHF_IN_CLKPATH1, CY_SYSCLK_CLKPATH_IN_IMO); - - if ((CY_SYSCLK_CLKHF_IN_CLKPATH0 == Cy_SysClk_ClkHfGetSource(0UL)) && - (CY_SYSCLK_CLKPATH_IN_WCO == Cy_SysClk_ClkPathGetSource(CY_SYSCLK_CLKHF_IN_CLKPATH0))) +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_ClkFastInit() + { + Cy_SysClk_ClkFastSetDivider(0U); + } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_FllInit() + { + if (CY_SYSCLK_SUCCESS != Cy_SysClk_FllManualConfigure(&srss_0_clock_0_fll_0_fllConfig)) + { + cycfg_ClockStartupError(CY_CFG_SYSCLK_FLL_ERROR); + } + if (CY_SYSCLK_SUCCESS != Cy_SysClk_FllEnable(200000UL)) + { + cycfg_ClockStartupError(CY_CFG_SYSCLK_FLL_ERROR); + } + } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_ClkHf0Init() + { + Cy_SysClk_ClkHfSetSource(0U, CY_CFG_SYSCLK_CLKHF0_CLKPATH); + Cy_SysClk_ClkHfSetDivider(0U, CY_SYSCLK_CLKHF_NO_DIVIDE); + } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_IloInit() + { + /* The WDT is unlocked in the default startup code */ + Cy_SysClk_IloEnable(); + Cy_SysClk_IloHibernateOn(true); + } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_ClkLfInit() + { + /* The WDT is unlocked in the default startup code */ + Cy_SysClk_ClkLfSetSource(CY_SYSCLK_CLKLF_IN_WCO); + } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_ClkPath0Init() + { + Cy_SysClk_ClkPathSetSource(0U, CY_CFG_SYSCLK_CLKPATH0_SOURCE); + } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_ClkPath1Init() { - Cy_SysClk_ClkHfSetSource(0U, CY_SYSCLK_CLKHF_IN_CLKPATH1); + Cy_SysClk_ClkPathSetSource(1U, CY_CFG_SYSCLK_CLKPATH1_SOURCE); } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_ClkPath2Init() + { + Cy_SysClk_ClkPathSetSource(2U, CY_CFG_SYSCLK_CLKPATH2_SOURCE); + } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_ClkPath3Init() + { + Cy_SysClk_ClkPathSetSource(3U, CY_CFG_SYSCLK_CLKPATH3_SOURCE); + } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_ClkPath4Init() + { + Cy_SysClk_ClkPathSetSource(4U, CY_CFG_SYSCLK_CLKPATH4_SOURCE); + } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_ClkPeriInit() + { + Cy_SysClk_ClkPeriSetDivider(1U); + } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_ClkSlowInit() + { + Cy_SysClk_ClkSlowSetDivider(0U); + } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void Cy_SysClk_WcoInit() + { + (void)Cy_GPIO_Pin_FastInit(GPIO_PRT0, 0U, 0x00U, 0x00U, HSIOM_SEL_GPIO); + (void)Cy_GPIO_Pin_FastInit(GPIO_PRT0, 1U, 0x00U, 0x00U, HSIOM_SEL_GPIO); + if (CY_SYSCLK_SUCCESS != Cy_SysClk_WcoEnable(1000000UL)) + { + cycfg_ClockStartupError(CY_CFG_SYSCLK_WCO_ERROR); + } + } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) +#if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + __STATIC_INLINE void init_cycfg_power(void) + { + /* Reset the Backup domain on POR, XRES, BOD only if Backup domain is supplied by VDDD */ + #if (CY_CFG_PWR_VBACKUP_USING_VDDD) + #ifdef CY_CFG_SYSCLK_ILO_ENABLED + if (0u == Cy_SysLib_GetResetReason() /* POR, XRES, or BOD */) + { + Cy_SysLib_ResetBackupDomain(); + Cy_SysClk_IloDisable(); + Cy_SysClk_IloInit(); + } + #endif /* CY_CFG_SYSCLK_ILO_ENABLED */ + #endif /* CY_CFG_PWR_VBACKUP_USING_VDDD */ + /* Configure core regulator */ + #if !((CY_CPU_CORTEX_M4) && (defined(CY_DEVICE_SECURE))) + #if CY_CFG_PWR_USING_LDO + Cy_SysPm_LdoSetVoltage(CY_SYSPM_LDO_VOLTAGE_LP); + #else + Cy_SysPm_BuckEnable(CY_SYSPM_BUCK_OUT1_VOLTAGE_LP); + #endif /* CY_CFG_PWR_USING_LDO */ + #if CY_CFG_PWR_REGULATOR_MODE_MIN + Cy_SysPm_SystemSetMinRegulatorCurrent(); + #else + Cy_SysPm_SystemSetNormalRegulatorCurrent(); + #endif /* CY_CFG_PWR_REGULATOR_MODE_MIN */ + #endif /* !((CY_CPU_CORTEX_M4) && (defined(CY_DEVICE_SECURE))) */ + /* Configure PMIC */ + Cy_SysPm_UnlockPmic(); + #if CY_CFG_PWR_USING_PMIC + Cy_SysPm_PmicEnableOutput(); + #else + Cy_SysPm_PmicDisableOutput(); + #endif /* CY_CFG_PWR_USING_PMIC */ + } +#endif //((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) - Cy_SysClk_FllDisable(); - Cy_SysClk_ClkPathSetSource(CY_SYSCLK_CLKHF_IN_CLKPATH0, CY_SYSCLK_CLKPATH_IN_IMO); - Cy_SysClk_ClkHfSetSource(0UL, CY_SYSCLK_CLKHF_IN_CLKPATH0); - #ifdef CY_IP_MXBLESS - (void)Cy_BLE_EcoReset(); - #endif +void init_cycfg_system(void) +{ + #if ((CY_CPU_CORTEX_M4) && (defined(CY_DEVICE_SECURE))) + cy_en_pra_status_t configStatus; + init_cycfg_secure_struct(&srss_0_clock_0_secureConfig); + #if ((CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM != 0UL) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 0UL)) + #error Configuration Error : ECO, WCO, ALTHF, EXTCLK, ILO, PILO cannot drive HF0. + #endif + #if ((CY_CFG_SYSCLK_CLKPATH1_SOURCE_NUM != 0UL) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 1UL)) + #error Configuration Error : ECO, WCO, ALTHF, EXTCLK, ILO, PILO cannot drive HF0. + #endif + #if ((CY_CFG_SYSCLK_CLKPATH2_SOURCE_NUM != 0UL) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 2UL)) + #error Configuration Error : ECO, WCO, ALTHF, EXTCLK, ILO, PILO cannot drive HF0. + #endif + #if ((CY_CFG_SYSCLK_CLKPATH3_SOURCE_NUM != 0UL) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 3UL)) + #error Configuration Error : ECO, WCO, ALTHF, EXTCLK, ILO, PILO cannot drive HF0. + #endif + #if ((CY_CFG_SYSCLK_CLKPATH4_SOURCE_NUM != 0UL) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 4UL)) + #error Configuration Error : ECO, WCO, ALTHF, EXTCLK, ILO, PILO cannot drive HF0. + #endif + #if ((CY_CFG_SYSCLK_CLKPATH5_SOURCE_NUM != 0UL) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 5UL)) + #error Configuration Error : ECO, WCO, ALTHF, EXTCLK, ILO, PILO cannot drive HF0. + #endif - /* Enable all source clocks */ - #ifdef CY_CFG_SYSCLK_PILO_ENABLED - Cy_SysClk_PiloInit(); - #endif + configStatus = CY_PRA_FUNCTION_CALL_RETURN_PARAM(CY_PRA_MSG_TYPE_SYS_CFG_FUNC, + CY_PRA_FUNC_INIT_CYCFG_DEVICE, + &srss_0_clock_0_secureConfig); + if ( configStatus != CY_PRA_STATUS_SUCCESS ) + { + cycfg_ClockStartupError(configStatus); + } - #ifdef CY_CFG_SYSCLK_WCO_ENABLED - Cy_SysClk_WcoInit(); - #endif + #ifdef CY_CFG_SYSCLK_EXTCLK_FREQ + Cy_SysClk_ExtClkSetFrequency(CY_CFG_SYSCLK_EXTCLK_FREQ); + #endif /* CY_CFG_SYSCLK_EXTCLK_FREQ */ + #else /* ((CY_CPU_CORTEX_M4) && (defined(CY_DEVICE_SECURE))) */ - #ifdef CY_CFG_SYSCLK_CLKLF_ENABLED - Cy_SysClk_ClkLfInit(); - #endif + /* Set worst case memory wait states (! ultra low power, 150 MHz), will update at the end */ + Cy_SysLib_SetWaitStates(false, 150UL); + #ifdef CY_CFG_PWR_ENABLED + #ifdef CY_CFG_PWR_INIT + init_cycfg_power(); + #else + #warning Power system will not be configured. Update power personality to v1.20 or later. + #endif /* CY_CFG_PWR_INIT */ + #endif /* CY_CFG_PWR_ENABLED */ - #ifdef CY_CFG_SYSCLK_ALTHF_ENABLED - Cy_SysClk_AltHfInit(); - #endif + /* Reset the core clock path to default and disable all the FLLs/PLLs */ + Cy_SysClk_ClkHfSetDivider(0U, CY_SYSCLK_CLKHF_NO_DIVIDE); + Cy_SysClk_ClkFastSetDivider(0U); + Cy_SysClk_ClkPeriSetDivider(1U); + Cy_SysClk_ClkSlowSetDivider(0U); + for (uint32_t pll = CY_SRSS_NUM_PLL; pll > 0UL; --pll) /* PLL 1 is the first PLL. 0 is invalid. */ + { + (void)Cy_SysClk_PllDisable(pll); + } + Cy_SysClk_ClkPathSetSource(CY_SYSCLK_CLKHF_IN_CLKPATH1, CY_SYSCLK_CLKPATH_IN_IMO); - #ifdef CY_CFG_SYSCLK_ECO_ENABLED - Cy_SysClk_EcoInit(); - #endif + if ((CY_SYSCLK_CLKHF_IN_CLKPATH0 == Cy_SysClk_ClkHfGetSource(0UL)) && + (CY_SYSCLK_CLKPATH_IN_WCO == Cy_SysClk_ClkPathGetSource(CY_SYSCLK_CLKHF_IN_CLKPATH0))) + { + Cy_SysClk_ClkHfSetSource(0U, CY_SYSCLK_CLKHF_IN_CLKPATH1); + } - #ifdef CY_CFG_SYSCLK_EXTCLK_ENABLED - Cy_SysClk_ExtClkInit(); - #endif + Cy_SysClk_FllDisable(); + Cy_SysClk_ClkPathSetSource(CY_SYSCLK_CLKHF_IN_CLKPATH0, CY_SYSCLK_CLKPATH_IN_IMO); + Cy_SysClk_ClkHfSetSource(0UL, CY_SYSCLK_CLKHF_IN_CLKPATH0); + #ifdef CY_IP_MXBLESS + (void)Cy_BLE_EcoReset(); + #endif - /* Configure CPU clock dividers */ - #ifdef CY_CFG_SYSCLK_CLKFAST_ENABLED - Cy_SysClk_ClkFastInit(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPERI_ENABLED - Cy_SysClk_ClkPeriInit(); - #endif + /* Enable all source clocks */ + #ifdef CY_CFG_SYSCLK_PILO_ENABLED + Cy_SysClk_PiloInit(); + #endif - #ifdef CY_CFG_SYSCLK_CLKSLOW_ENABLED - Cy_SysClk_ClkSlowInit(); - #endif + #ifdef CY_CFG_SYSCLK_WCO_ENABLED + Cy_SysClk_WcoInit(); + #endif - #if ((CY_CFG_SYSCLK_CLKPATH0_SOURCE == CY_SYSCLK_CLKPATH_IN_WCO) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH == CY_SYSCLK_CLKHF_IN_CLKPATH0)) - /* Configure HFCLK0 to temporarily run from IMO to initialize other clocks */ - Cy_SysClk_ClkPathSetSource(1UL, CY_SYSCLK_CLKPATH_IN_IMO); - Cy_SysClk_ClkHfSetSource(0UL, CY_SYSCLK_CLKHF_IN_CLKPATH1); - #else - #ifdef CY_CFG_SYSCLK_CLKPATH1_ENABLED - Cy_SysClk_ClkPath1Init(); + #ifdef CY_CFG_SYSCLK_CLKLF_ENABLED + Cy_SysClk_ClkLfInit(); #endif - #endif - /* Configure Path Clocks */ - #ifdef CY_CFG_SYSCLK_CLKPATH0_ENABLED - Cy_SysClk_ClkPath0Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH2_ENABLED - Cy_SysClk_ClkPath2Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH3_ENABLED - Cy_SysClk_ClkPath3Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH4_ENABLED - Cy_SysClk_ClkPath4Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH5_ENABLED - Cy_SysClk_ClkPath5Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH6_ENABLED - Cy_SysClk_ClkPath6Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH7_ENABLED - Cy_SysClk_ClkPath7Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH8_ENABLED - Cy_SysClk_ClkPath8Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH9_ENABLED - Cy_SysClk_ClkPath9Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH10_ENABLED - Cy_SysClk_ClkPath10Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH11_ENABLED - Cy_SysClk_ClkPath11Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH12_ENABLED - Cy_SysClk_ClkPath12Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH13_ENABLED - Cy_SysClk_ClkPath13Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH14_ENABLED - Cy_SysClk_ClkPath14Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKPATH15_ENABLED - Cy_SysClk_ClkPath15Init(); - #endif + #ifdef CY_CFG_SYSCLK_ALTHF_ENABLED + Cy_SysClk_AltHfInit(); + #endif - /* Configure and enable FLL */ - #ifdef CY_CFG_SYSCLK_FLL_ENABLED - Cy_SysClk_FllInit(); - #endif + #ifdef CY_CFG_SYSCLK_ECO_ENABLED + Cy_SysClk_EcoInit(); + #endif - Cy_SysClk_ClkHf0Init(); + #ifdef CY_CFG_SYSCLK_EXTCLK_ENABLED + Cy_SysClk_ExtClkInit(); + #endif - #if ((CY_CFG_SYSCLK_CLKPATH0_SOURCE == CY_SYSCLK_CLKPATH_IN_WCO) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH == CY_SYSCLK_CLKHF_IN_CLKPATH0)) - #ifdef CY_CFG_SYSCLK_CLKPATH1_ENABLED - /* Apply the ClkPath1 user setting */ - Cy_SysClk_ClkPath1Init(); + /* Configure CPU clock dividers */ + #ifdef CY_CFG_SYSCLK_CLKFAST_ENABLED + Cy_SysClk_ClkFastInit(); #endif - #endif - /* Configure and enable PLLs */ - #ifdef CY_CFG_SYSCLK_PLL0_ENABLED - Cy_SysClk_Pll0Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL1_ENABLED - Cy_SysClk_Pll1Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL2_ENABLED - Cy_SysClk_Pll2Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL3_ENABLED - Cy_SysClk_Pll3Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL4_ENABLED - Cy_SysClk_Pll4Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL5_ENABLED - Cy_SysClk_Pll5Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL6_ENABLED - Cy_SysClk_Pll6Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL7_ENABLED - Cy_SysClk_Pll7Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL8_ENABLED - Cy_SysClk_Pll8Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL9_ENABLED - Cy_SysClk_Pll9Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL10_ENABLED - Cy_SysClk_Pll10Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL11_ENABLED - Cy_SysClk_Pll11Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL12_ENABLED - Cy_SysClk_Pll12Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL13_ENABLED - Cy_SysClk_Pll13Init(); - #endif - #ifdef CY_CFG_SYSCLK_PLL14_ENABLED - Cy_SysClk_Pll14Init(); - #endif + #ifdef CY_CFG_SYSCLK_CLKPERI_ENABLED + Cy_SysClk_ClkPeriInit(); + #endif - /* Configure HF clocks */ - #ifdef CY_CFG_SYSCLK_CLKHF1_ENABLED - Cy_SysClk_ClkHf1Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF2_ENABLED - Cy_SysClk_ClkHf2Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF3_ENABLED - Cy_SysClk_ClkHf3Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF4_ENABLED - Cy_SysClk_ClkHf4Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF5_ENABLED - Cy_SysClk_ClkHf5Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF6_ENABLED - Cy_SysClk_ClkHf6Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF7_ENABLED - Cy_SysClk_ClkHf7Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF8_ENABLED - Cy_SysClk_ClkHf8Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF9_ENABLED - Cy_SysClk_ClkHf9Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF10_ENABLED - Cy_SysClk_ClkHf10Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF11_ENABLED - Cy_SysClk_ClkHf11Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF12_ENABLED - Cy_SysClk_ClkHf12Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF13_ENABLED - Cy_SysClk_ClkHf13Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF14_ENABLED - Cy_SysClk_ClkHf14Init(); - #endif - #ifdef CY_CFG_SYSCLK_CLKHF15_ENABLED - Cy_SysClk_ClkHf15Init(); - #endif + #ifdef CY_CFG_SYSCLK_CLKSLOW_ENABLED + Cy_SysClk_ClkSlowInit(); + #endif - /* Configure miscellaneous clocks */ - #ifdef CY_CFG_SYSCLK_CLKTIMER_ENABLED - Cy_SysClk_ClkTimerInit(); - #endif + #if ((CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM == 0x6UL) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 0U)) + /* Configure HFCLK0 to temporarily run from IMO to initialize other clocks */ + Cy_SysClk_ClkPathSetSource(1UL, CY_SYSCLK_CLKPATH_IN_IMO); + Cy_SysClk_ClkHfSetSource(0UL, CY_SYSCLK_CLKHF_IN_CLKPATH1); + #else + #ifdef CY_CFG_SYSCLK_CLKPATH1_ENABLED + Cy_SysClk_ClkPath1Init(); + #endif + #endif - #ifdef CY_CFG_SYSCLK_CLKALTSYSTICK_ENABLED - Cy_SysClk_ClkAltSysTickInit(); - #endif + /* Configure Path Clocks */ + #ifdef CY_CFG_SYSCLK_CLKPATH0_ENABLED + Cy_SysClk_ClkPath0Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH2_ENABLED + Cy_SysClk_ClkPath2Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH3_ENABLED + Cy_SysClk_ClkPath3Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH4_ENABLED + Cy_SysClk_ClkPath4Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH5_ENABLED + Cy_SysClk_ClkPath5Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH6_ENABLED + Cy_SysClk_ClkPath6Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH7_ENABLED + Cy_SysClk_ClkPath7Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH8_ENABLED + Cy_SysClk_ClkPath8Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH9_ENABLED + Cy_SysClk_ClkPath9Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH10_ENABLED + Cy_SysClk_ClkPath10Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH11_ENABLED + Cy_SysClk_ClkPath11Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH12_ENABLED + Cy_SysClk_ClkPath12Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH13_ENABLED + Cy_SysClk_ClkPath13Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH14_ENABLED + Cy_SysClk_ClkPath14Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKPATH15_ENABLED + Cy_SysClk_ClkPath15Init(); + #endif - #ifdef CY_CFG_SYSCLK_CLKPUMP_ENABLED - Cy_SysClk_ClkPumpInit(); - #endif + /* Configure and enable FLL */ + #ifdef CY_CFG_SYSCLK_FLL_ENABLED + Cy_SysClk_FllInit(); + #endif - #ifdef CY_CFG_SYSCLK_CLKBAK_ENABLED - Cy_SysClk_ClkBakInit(); - #endif + Cy_SysClk_ClkHf0Init(); - /* Configure default enabled clocks */ - #ifdef CY_CFG_SYSCLK_ILO_ENABLED - Cy_SysClk_IloInit(); - #else - Cy_SysClk_IloDisable(); - Cy_SysClk_IloHibernateOn(false); - #endif + #if ((CY_CFG_SYSCLK_CLKPATH0_SOURCE_NUM == 0x6UL) && (CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM == 0U)) + #ifdef CY_CFG_SYSCLK_CLKPATH1_ENABLED + /* Apply the ClkPath1 user setting */ + Cy_SysClk_ClkPath1Init(); + #endif + #endif - #ifndef CY_CFG_SYSCLK_IMO_ENABLED - #error the IMO must be enabled for proper chip operation - #endif + /* Configure and enable PLLs */ + #ifdef CY_CFG_SYSCLK_PLL0_ENABLED + Cy_SysClk_Pll0Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL1_ENABLED + Cy_SysClk_Pll1Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL2_ENABLED + Cy_SysClk_Pll2Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL3_ENABLED + Cy_SysClk_Pll3Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL4_ENABLED + Cy_SysClk_Pll4Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL5_ENABLED + Cy_SysClk_Pll5Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL6_ENABLED + Cy_SysClk_Pll6Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL7_ENABLED + Cy_SysClk_Pll7Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL8_ENABLED + Cy_SysClk_Pll8Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL9_ENABLED + Cy_SysClk_Pll9Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL10_ENABLED + Cy_SysClk_Pll10Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL11_ENABLED + Cy_SysClk_Pll11Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL12_ENABLED + Cy_SysClk_Pll12Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL13_ENABLED + Cy_SysClk_Pll13Init(); + #endif + #ifdef CY_CFG_SYSCLK_PLL14_ENABLED + Cy_SysClk_Pll14Init(); + #endif + + /* Configure HF clocks */ + #ifdef CY_CFG_SYSCLK_CLKHF1_ENABLED + Cy_SysClk_ClkHf1Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF2_ENABLED + Cy_SysClk_ClkHf2Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF3_ENABLED + Cy_SysClk_ClkHf3Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF4_ENABLED + Cy_SysClk_ClkHf4Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF5_ENABLED + Cy_SysClk_ClkHf5Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF6_ENABLED + Cy_SysClk_ClkHf6Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF7_ENABLED + Cy_SysClk_ClkHf7Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF8_ENABLED + Cy_SysClk_ClkHf8Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF9_ENABLED + Cy_SysClk_ClkHf9Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF10_ENABLED + Cy_SysClk_ClkHf10Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF11_ENABLED + Cy_SysClk_ClkHf11Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF12_ENABLED + Cy_SysClk_ClkHf12Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF13_ENABLED + Cy_SysClk_ClkHf13Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF14_ENABLED + Cy_SysClk_ClkHf14Init(); + #endif + #ifdef CY_CFG_SYSCLK_CLKHF15_ENABLED + Cy_SysClk_ClkHf15Init(); + #endif + + /* Configure miscellaneous clocks */ + #ifdef CY_CFG_SYSCLK_CLKTIMER_ENABLED + Cy_SysClk_ClkTimerInit(); + #endif + + #ifdef CY_CFG_SYSCLK_CLKALTSYSTICK_ENABLED + Cy_SysClk_ClkAltSysTickInit(); + #endif + + #ifdef CY_CFG_SYSCLK_CLKPUMP_ENABLED + Cy_SysClk_ClkPumpInit(); + #endif + + #ifdef CY_CFG_SYSCLK_CLKBAK_ENABLED + Cy_SysClk_ClkBakInit(); + #endif + + /* Configure default enabled clocks */ + #ifdef CY_CFG_SYSCLK_ILO_ENABLED + Cy_SysClk_IloInit(); + #endif + + #ifndef CY_CFG_SYSCLK_IMO_ENABLED + #error the IMO must be enabled for proper chip operation + #endif + + #endif /* ((CY_CPU_CORTEX_M4) && (defined(CY_DEVICE_SECURE))) */ #ifdef CY_CFG_SYSCLK_MFO_ENABLED - Cy_SysClk_MfoInit(); + Cy_SysClk_MfoInit(); #endif #ifdef CY_CFG_SYSCLK_CLKMF_ENABLED - Cy_SysClk_ClkMfInit(); + Cy_SysClk_ClkMfInit(); #endif - /* Set accurate flash wait states */ - #if (defined (CY_CFG_PWR_ENABLED) && defined (CY_CFG_SYSCLK_CLKHF0_ENABLED)) - Cy_SysLib_SetWaitStates(CY_CFG_PWR_USING_ULP != 0, CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ); - #endif + #if ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) + /* Set accurate flash wait states */ + #if (defined (CY_CFG_PWR_ENABLED) && defined (CY_CFG_SYSCLK_CLKHF0_ENABLED)) + Cy_SysLib_SetWaitStates(CY_CFG_PWR_USING_ULP != 0, CY_CFG_SYSCLK_CLKHF0_FREQ_MHZ); + #endif + + /* Update System Core Clock values for correct Cy_SysLib_Delay functioning */ + SystemCoreClockUpdate(); + #ifndef CY_CFG_SYSCLK_ILO_ENABLED + #ifdef CY_CFG_SYSCLK_CLKLF_ENABLED + /* Wait 4 ILO cycles in case of unfinished CLKLF clock source transition */ + Cy_SysLib_DelayUs(200U); + #endif + Cy_SysClk_IloDisable(); + Cy_SysClk_IloHibernateOn(false); + #endif + + #endif /* ((!CY_CPU_CORTEX_M4) || (!defined(CY_DEVICE_SECURE))) */ - /* Update System Core Clock values for correct Cy_SysLib_Delay functioning */ - SystemCoreClockUpdate(); #if defined (CY_USING_HAL) cyhal_hwmgr_reserve(&srss_0_clock_0_pathmux_0_obj); diff --git a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_system.h b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_system.h index 6db989a..a7dc76a 100644 --- a/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_system.h +++ b/COMPONENT_BSP_DESIGN_MODUS/GeneratedSource/cycfg_system.h @@ -4,8 +4,8 @@ * Description: * System configuration * This file was automatically generated and should not be modified. -* Device Configurator: 2.0.0.1483 -* Device Support Library (libs/psoc6pdl): 1.4.1.2240 +* cfg-backend-cli: 1.2.0.1483 +* Device Support Library (libs/psoc6pdl): 1.6.0.4266 * ******************************************************************************** * Copyright 2017-2019 Cypress Semiconductor Corporation @@ -29,6 +29,8 @@ #include "cycfg_notices.h" #include "cy_sysclk.h" +#include "cy_pra.h" +#include "cy_pra_cfg.h" #include "cy_ble_clk.h" #if defined (CY_USING_HAL) #include "cyhal_hwmgr.h" @@ -47,10 +49,12 @@ extern "C" { #define srss_0_clock_0_fll_0_ENABLED 1U #define srss_0_clock_0_hfclk_0_ENABLED 1U #define CY_CFG_SYSCLK_CLKHF0 0UL +#define CY_CFG_SYSCLK_CLKHF0_CLKPATH_NUM 0UL #define srss_0_clock_0_ilo_0_ENABLED 1U #define srss_0_clock_0_imo_0_ENABLED 1U #define srss_0_clock_0_lfclk_0_ENABLED 1U #define CY_CFG_SYSCLK_CLKLF_FREQ_HZ 32768 +#define CY_CFG_SYSCLK_CLKLF_SOURCE CY_SYSCLK_CLKLF_IN_WCO #define srss_0_clock_0_pathmux_0_ENABLED 1U #define srss_0_clock_0_pathmux_1_ENABLED 1U #define srss_0_clock_0_pathmux_2_ENABLED 1U diff --git a/COMPONENT_BSP_DESIGN_MODUS/design.modus b/COMPONENT_BSP_DESIGN_MODUS/design.modus index d648858..31be9bb 100644 --- a/COMPONENT_BSP_DESIGN_MODUS/design.modus +++ b/COMPONENT_BSP_DESIGN_MODUS/design.modus @@ -155,7 +155,7 @@ - + diff --git a/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx7_cm0plus.sct b/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx7_cm0plus.sct index 3c70be4..d573d95 100644 --- a/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx7_cm0plus.sct +++ b/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx7_cm0plus.sct @@ -4,7 +4,7 @@ ;******************************************************************************* ;* \file cy8c6xx7_cm0plus.sct -;* \version 2.70.1 +;* \version 2.80 ;* ;* Linker file for the ARMCC. ;* diff --git a/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm0plus.ld b/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm0plus.ld index 1e40f15..ed628a9 100644 --- a/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm0plus.ld +++ b/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm0plus.ld @@ -1,6 +1,6 @@ /***************************************************************************//** * \file cy8c6xx7_cm0plus.ld -* \version 2.70.1 +* \version 2.80 * * Linker file for the GNU C compiler. * diff --git a/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx7_cm0plus.icf b/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx7_cm0plus.icf index 3934087..412fc76 100644 --- a/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx7_cm0plus.icf +++ b/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx7_cm0plus.icf @@ -1,6 +1,6 @@ /******************************************************************************* * \file cy8c6xx7_cm0plus.icf -* \version 2.70.1 +* \version 2.80 * * Linker file for the IAR compiler. * diff --git a/COMPONENT_CM0P/system_psoc6_cm0plus.c b/COMPONENT_CM0P/system_psoc6_cm0plus.c index 5f2d588..e3080a5 100644 --- a/COMPONENT_CM0P/system_psoc6_cm0plus.c +++ b/COMPONENT_CM0P/system_psoc6_cm0plus.c @@ -1,6 +1,6 @@ /***************************************************************************//** * \file system_psoc6_cm0plus.c -* \version 2.70.1 +* \version 2.80 * * The device system-source file. * @@ -130,6 +130,7 @@ uint32_t cy_delay32kMs = CY_DELAY_MS_OVERFLOW_THRESHOLD * * - Unlocks and disables WDT. * - Calls Cy_PDL_Init() function to define the driver library. * - Calls the Cy_SystemInit() function, if compiled from PSoC Creator. +* - Calls \ref Cy_PRA_Init() for PSoC 64 devices. * - Calls \ref SystemCoreClockUpdate(). * *******************************************************************************/ diff --git a/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx7_cm4_dual.sct b/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx7_cm4_dual.sct index e515fb3..7da451c 100644 --- a/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx7_cm4_dual.sct +++ b/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx7_cm4_dual.sct @@ -4,7 +4,7 @@ ;******************************************************************************* ;* \file cy8c6xx7_cm4_dual.sct -;* \version 2.70.1 +;* \version 2.80 ;* ;* Linker file for the ARMCC. ;* diff --git a/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx7_cm4_dual.mk b/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx7_cm4_dual.mk index 20b0085..f8fd2ed 100644 --- a/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx7_cm4_dual.mk +++ b/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx7_cm4_dual.mk @@ -1,6 +1,6 @@ ################################################################################ # \file cy8c6xx7_cm4_dual.mk -# \version 2.70.1 +# \version 2.80 # # \brief # Specifies the starting address and the size of the segments in the output diff --git a/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm4_dual.ld b/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm4_dual.ld index 39b4f82..574bcd0 100644 --- a/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm4_dual.ld +++ b/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm4_dual.ld @@ -1,6 +1,6 @@ /***************************************************************************//** * \file cy8c6xx7_cm4_dual.ld -* \version 2.70.1 +* \version 2.80 * * Linker file for the GNU C compiler. * diff --git a/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx7_cm4_dual.icf b/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx7_cm4_dual.icf index bb93cf4..1e644dd 100644 --- a/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx7_cm4_dual.icf +++ b/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx7_cm4_dual.icf @@ -1,6 +1,6 @@ /******************************************************************************* * \file cy8c6xx7_cm4_dual.icf -* \version 2.70.1 +* \version 2.80 * * Linker file for the IAR compiler. * diff --git a/COMPONENT_CM4/system_psoc6_cm4.c b/COMPONENT_CM4/system_psoc6_cm4.c index 4260fab..d717147 100644 --- a/COMPONENT_CM4/system_psoc6_cm4.c +++ b/COMPONENT_CM4/system_psoc6_cm4.c @@ -1,6 +1,6 @@ /***************************************************************************//** * \file system_psoc6_cm4.c -* \version 2.70.1 +* \version 2.80 * * The device system-source file. * @@ -40,6 +40,10 @@ #endif /* defined(CY_DEVICE_PSOC6ABLE2) */ #endif /* !defined(CY_IPC_DEFAULT_CFG_DISABLE) */ +#if defined(CY_DEVICE_SECURE) + #include "cy_pra.h" +#endif /* defined(CY_DEVICE_SECURE) */ + /******************************************************************************* * SystemCoreClockUpdate() @@ -125,6 +129,7 @@ uint32_t cy_delay32kMs = CY_DELAY_MS_OVERFLOW_THRESHOLD * * - Unlocks and disables WDT. * - Calls Cy_PDL_Init() function to define the driver library. * - Calls the Cy_SystemInit() function, if compiled from PSoC Creator. +* - Calls \ref Cy_PRA_Init() for PSoC 64 devices. * - Calls \ref SystemCoreClockUpdate(). * \endcond *******************************************************************************/ @@ -233,6 +238,11 @@ void SystemInit(void) #endif /* defined(CY_DEVICE_PSOC6ABLE2) */ #endif /* !defined(CY_IPC_DEFAULT_CFG_DISABLE) */ + +#if defined(CY_DEVICE_SECURE) + /* Initialize Protected Register Access driver */ + Cy_PRA_Init(); +#endif /* defined(CY_DEVICE_SECURE) */ } diff --git a/README.md b/README.md index a1ee778..46b6494 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ ## Overview The PSoC 6 BLE Prototyping Kit (CY8CPROTO-063-BLE) is a low-cost hardware platform that enables design and debug of PSoC 6 MCUs. This kit is designed with a snap-away form-factor, allowing users to separate the KitProg (on-board programmer and debugger) from the target board and use independently. + ![](docs/html/board.png) To use code from the BSP, simply include a reference to `cybsp.h`. @@ -27,17 +28,18 @@ The BSP has a few hooks that allow its behavior to be configured. Some of these Components: * Device specific HAL reference (e.g.: PSOC6HAL) - This component, enabled by default, pulls in the version of the HAL that is applicable for this board. - * CYBSP_WIFI_CAPABLE - This component, disabled by default, causes the BSP to initialize the interface to an onboard wireless chip. * BSP_DESIGN_MODUS - This component, enabled by default, causes the Configurator generated code for this specific BSP to be included. This should not be used at the same time as the CUSTOM_DESIGN_MODUS component. * CUSTOM_DESIGN_MODUS - This component, disabled by default, causes the Configurator generated code from the application to be included. This assumes that the application provides configurator generated code. This should not be used at the same time as the BSP_DESIGN_MODUS component. Defines: + * CYBSP_WIFI_CAPABLE - This define, disabled by default, causes the BSP to initialize the interface to an onboard wireless chip. * CY_USING_HAL - This define, enabled by default, specifies that the HAL is intended to be used by the application. This will cause the BSP to include the applicable header file and to initialize the system level drivers. ### Clock Configuration | Clock | Source | Output Frequency | |----------|-----------|------------------| +| FLL | IMO | 100.0 MHz | | CLK_HF0 | CLK_PATH0 | 100 MHz | ### Power Configuration @@ -56,7 +58,7 @@ See the [BSP API Reference Manual][api] for the complete list of the provided in ## More information * [CY8CPROTO-063-BLE BSP API Reference Manual][api] * [CY8CPROTO-063-BLE Documentation](http://www.cypress.com/CY8CPROTO-063-BLE) -* [Cypress Semiconductor](http://www.cypress.com) +* [Cypress Semiconductor, an Infineon Technologies Company](http://www.cypress.com) * [Cypress Semiconductor GitHub](https://github.com/cypresssemiconductorco) * [ModusToolbox](https://www.cypress.com/products/modustoolbox-software-environment) diff --git a/RELEASE.md b/RELEASE.md index 93403d7..9405864 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -15,14 +15,20 @@ The CY8CPROTO-063-BLE library includes the following: * API documentation ### What Changed? +#### v1.3.0 +* Minor update for documentation & branding +* Updated design files to use latest personality files +* Initialize VDDA voltage if set in configurator +NOTE: This requires psoc6hal 1.3.0 or later #### v1.2.1 -* Add 43012/4343W/43438 component to appropriate BSPs +* Added 43012/4343W/43438 component to appropriate BSPs * Added multi-image policy for secure (064) BSPs #### v1.2.0 * Standardize version numbering for all boards in a family * Moved UDB SDIO implementation into its own library udb-sdio-whd library * Added call to setup HAL SysPM driver (requires HAL 1.2.0 or later) * Updated documentation +NOTE: This requires psoc6hal 1.2.0 or later #### v1.1.0 * Updated linker scripts and startup code for the CM0+ and CM4 cores. The files are now in core specific directories. * Minor updates to avoid potential warnings on some toolchains @@ -44,7 +50,7 @@ This version of the CY8CPROTO-063-BLE BSP was validated for compatibility with t ### More information * [CY8CPROTO-063-BLE BSP API Reference Manual][api] * [CY8CPROTO-063-BLE Documentation](http://www.cypress.com/CY8CPROTO-063-BLE) -* [Cypress Semiconductor](http://www.cypress.com) +* [Cypress Semiconductor, an Infineon Technologies Company](http://www.cypress.com) * [Cypress Semiconductor GitHub](https://github.com/cypresssemiconductorco) * [ModusToolbox](https://www.cypress.com/products/modustoolbox-software-environment) diff --git a/cybsp.c b/cybsp.c index acd73e3..4d49b35 100644 --- a/cybsp.c +++ b/cybsp.c @@ -87,6 +87,14 @@ cy_rslt_t cybsp_init(void) { result = cyhal_syspm_init(); } + +#ifdef CY_CFG_PWR_VDDA_MV + if(CY_RSLT_SUCCESS == result) + { + cyhal_syspm_set_supply_voltage(CYHAL_VOLTAGE_SUPPLY_VDDA, CY_CFG_PWR_VDDA_MV); + } +#endif + #else cy_rslt_t result = CY_RSLT_SUCCESS; #endif diff --git a/docs/html/cypress_logo.png b/docs/html/cypress_logo.png deleted file mode 100644 index ac9ba0939d1546d7840f20ee6fb550a4acaae641..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37711 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 - Logo + Logo
CY8CPROTO-063-BLE BSP
diff --git a/docs/html/group__group__bsp__macros.html b/docs/html/group__group__bsp__macros.html index 95a3a22..faeece8 100644 --- a/docs/html/group__group__bsp__macros.html +++ b/docs/html/group__group__bsp__macros.html @@ -29,7 +29,7 @@ - + diff --git a/docs/html/group__group__bsp__pin__state.html b/docs/html/group__group__bsp__pin__state.html index d573f0f..1bc9d33 100644 --- a/docs/html/group__group__bsp__pin__state.html +++ b/docs/html/group__group__bsp__pin__state.html @@ -29,7 +29,7 @@
CY8CPROTO-063-BLE BSP
- + diff --git a/docs/html/group__group__bsp__pins.html b/docs/html/group__group__bsp__pins.html index 7eca4c4..5ef1146 100644 --- a/docs/html/group__group__bsp__pins.html +++ b/docs/html/group__group__bsp__pins.html @@ -29,7 +29,7 @@
CY8CPROTO-063-BLE BSP
- + diff --git a/docs/html/group__group__bsp__pins__btn.html b/docs/html/group__group__bsp__pins__btn.html index 510efac..6bbbced 100644 --- a/docs/html/group__group__bsp__pins__btn.html +++ b/docs/html/group__group__bsp__pins__btn.html @@ -29,7 +29,7 @@
CY8CPROTO-063-BLE BSP
- + diff --git a/docs/html/group__group__bsp__pins__comm.html b/docs/html/group__group__bsp__pins__comm.html index e70af27..bd5908a 100644 --- a/docs/html/group__group__bsp__pins__comm.html +++ b/docs/html/group__group__bsp__pins__comm.html @@ -29,7 +29,7 @@
CY8CPROTO-063-BLE BSP
- + diff --git a/docs/html/group__group__bsp__pins__led.html b/docs/html/group__group__bsp__pins__led.html index fa51e42..9b5bda3 100644 --- a/docs/html/group__group__bsp__pins__led.html +++ b/docs/html/group__group__bsp__pins__led.html @@ -29,7 +29,7 @@
CY8CPROTO-063-BLE BSP
- + diff --git a/docs/html/group__group__bsp__settings.html b/docs/html/group__group__bsp__settings.html index 9532b01..04d09c1 100644 --- a/docs/html/group__group__bsp__settings.html +++ b/docs/html/group__group__bsp__settings.html @@ -29,7 +29,7 @@
CY8CPROTO-063-BLE BSP
- + diff --git a/docs/html/index.html b/docs/html/index.html index 7182773..49a6b1d 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -29,7 +29,7 @@
CY8CPROTO-063-BLE BSP
- + @@ -91,7 +91,8 @@

Overview

-

The PSoC 6 BLE Prototyping Kit (CY8CPROTO-063-BLE) is a low-cost hardware platform that enables design and debug of PSoC 6 MCUs. This kit is designed with a snap-away form-factor, allowing users to separate the KitProg (on-board programmer and debugger) from the target board and use independently.

+

The PSoC 6 BLE Prototyping Kit (CY8CPROTO-063-BLE) is a low-cost hardware platform that enables design and debug of PSoC 6 MCUs. This kit is designed with a snap-away form-factor, allowing users to separate the KitProg (on-board programmer and debugger) from the target board and use independently.

+
board.png

To use code from the BSP, simply include a reference to cybsp.h.

@@ -112,11 +113,11 @@

BSP Configuration

The BSP has a few hooks that allow its behavior to be configured. Some of these items are enabled by default while others must be explicitly enabled. Items enabled by default are specified in the CY8CPROTO-063-BLE.mk file. The items that are enabled can be changed by creating a custom BSP or by editing the application makefile.

Components:

  • Device specific HAL reference (e.g.: PSOC6HAL) - This component, enabled by default, pulls in the version of the HAL that is applicable for this board.
  • -
  • CYBSP_WIFI_CAPABLE - This component, disabled by default, causes the BSP to initialize the interface to an onboard wireless chip.
  • BSP_DESIGN_MODUS - This component, enabled by default, causes the Configurator generated code for this specific BSP to be included. This should not be used at the same time as the CUSTOM_DESIGN_MODUS component.
  • CUSTOM_DESIGN_MODUS - This component, disabled by default, causes the Configurator generated code from the application to be included. This assumes that the application provides configurator generated code. This should not be used at the same time as the BSP_DESIGN_MODUS component.

Defines:

    +
  • CYBSP_WIFI_CAPABLE - This define, disabled by default, causes the BSP to initialize the interface to an onboard wireless chip.
  • CY_USING_HAL - This define, enabled by default, specifies that the HAL is intended to be used by the application. This will cause the BSP to include the applicable header file and to initialize the system level drivers.

Clock Configuration

@@ -124,6 +125,8 @@

Clock Configuration

+ +
CY8CPROTO-063-BLE BSP
Clock Source Output Frequency
FLL IMO 100.0 MHz
CLK_HF0 CLK_PATH0 100 MHz

Power Configuration

@@ -140,7 +143,7 @@

More information

diff --git a/docs/html/logo.png b/docs/html/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c6d2b8e81cf16a6af007bd3b87c74bea412d10e8 GIT binary patch literal 40802 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 - Logo + Logo
CY8CPROTO-063-BLE BSP
@@ -91,7 +91,7 @@

Introduction

-

A Board Support Package (BSP) provides a standard interface to a board's features and capabilities. The API is consistent across Cypress kits. Other software (such as middleware or the user's application) can use the BSP to configure and control the hardware. BSPs have the following characteristics:

+

A Board Support Package (BSP) provides a standard interface to a board's features and capabilities. The API is consistent across PSoC kits. Other software (such as middleware or the user's application) can use the BSP to configure and control the hardware. BSPs have the following characteristics:

  • BSPs initialize device resources, such as clocks and power supplies to set up the device to run firmware.
  • BSPs contain linker scripts and startup code so you can customize them for your board.
  • @@ -101,12 +101,12 @@

For a complete description of what the BSP provides and how it is used within ModusToolbox, see the ModusToolbox User Guide

Quick Start with BSPs

-

This section provides a high-level view for using BSPs. You should be familiar with creating an application using both the ModusToolbox IDE and command-line environments. To use a BSP for a Cypress kit you need to perform the following steps:

    +

    This section provides a high-level view for using BSPs. You should be familiar with creating an application using both the ModusToolbox IDE and command-line environments. To use a BSP for a kit you need to perform the following steps:

    1. Get a BSP using one of the following methods:
      • Create an application with the Project Creation tool included with the ModusToolbox software installer (< ModusToolbox install>/tools_2.x/project-creator). This tool can also be launched from the Eclipse IDE for ModusToolbox. The tool fetches the BSP for the kit that you selected, and places it in the libs directory.
      • In an existing application, use the Library Manager tool to fetch the required BSP. This tool is located in < ModusToolbox install >/tools_2.x/library-manager. You can also launch it from within the ModusToolbox IDE.
      • In an existing application, create a .lib file specifying the BSP and version (commit, tag, or branch). Then run make getlibs to fetch the BSP and any associated libraries. The .lib file typically goes in the deps directory.
      • -
      • In an existing application, clone the Cypress BSP GitHub repository using the git clone command. For example: git clone [https://github.com/cypresssemiconductorco/TARGET_CY8CPROTO-062-4343W/#latest-v1.X] A BSP includes other libraries. To fetch all the libraries, use the make getlibs command from a command shell in the top directory of the application.
      • +
      • In an existing application, clone the BSP GitHub repository using the git clone command. For example: git clone [https://github.com/cypresssemiconductorco/TARGET_CY8CPROTO-062-4343W/#latest-v1.X] A BSP includes other libraries. To fetch all the libraries, use the make getlibs command from a command shell in the top directory of the application.
    2. Add #include "cybsp.h" to your main.c file.
    3. @@ -117,7 +117,7 @@

      References

diff --git a/docs/html/modules.html b/docs/html/modules.html index 9d7ae85..45be78f 100644 --- a/docs/html/modules.html +++ b/docs/html/modules.html @@ -29,7 +29,7 @@ - + diff --git a/system_psoc6.h b/system_psoc6.h index 58550fa..867f26f 100644 --- a/system_psoc6.h +++ b/system_psoc6.h @@ -1,6 +1,6 @@ /***************************************************************************//** * \file system_psoc6.h -* \version 2.70.1 +* \version 2.80 * * \brief Device system header file. * @@ -85,20 +85,20 @@ * \endcode * * Change the value of the \ref CY_CORTEX_M4_APPL_ADDR macro to the ROM ORIGIN's -* value (0x10000000) + FLASH_CM0P_SIZE value (0x2000, the size of a flash image -* of the Cortex-M0+ application should be the same value as the flash LENGTH in -* 'xx_cm0plus.ld') in the 'xx_cm4_dual.ld' file, where 'xx' is the device group. +* value (0x10000000) + FLASH_CM0P_SIZE value (0x2000, the size of a flash image +* of the Cortex-M0+ application should be the same value as the flash LENGTH in +* 'xx_cm0plus.ld') in the 'xx_cm4_dual.ld' file, where 'xx' is the device group. * Do this by either: * - Passing the following commands to the compiler:\n * \code -D CY_CORTEX_M4_APPL_ADDR=0x10002000 \endcode * or -* - Editing the \ref CY_CORTEX_M4_APPL_ADDR value in the 'system_xx.h', where +* - Editing the \ref CY_CORTEX_M4_APPL_ADDR value in the 'system_xx.h', where * 'xx' is the device family:\n * \code #define CY_CORTEX_M4_APPL_ADDR (0x10002000u) \endcode * * ARM Compiler\n * The flash and RAM sections for the CPU are defined in the linker files: -* 'xx_yy.sct', where 'xx' is the device group, and 'yy' is the target CPU; for +* 'xx_yy.sct', where 'xx' is the device group, and 'yy' is the target CPU; for * example 'cy8c6xx7_cm0plus.sct' and 'cy8c6xx7_cm4_dual.sct'. * \note If the start of the Cortex-M4 application image is changed, the value * of the of the \ref CY_CORTEX_M4_APPL_ADDR should also be changed. The @@ -135,9 +135,9 @@ * \endcode * * Change the value of the \ref CY_CORTEX_M4_APPL_ADDR macro to the FLASH_START -* value (0x10000000) + FLASH_CM0P_SIZE value (0x2000, the size of a flash image -* of the Cortex-M0+ application should be the same value as the FLASH_SIZE in the -* 'xx_cm0plus.sct') in the 'xx_cm4_dual.sct' file, where 'xx' is the device group. +* value (0x10000000) + FLASH_CM0P_SIZE value (0x2000, the size of a flash image +* of the Cortex-M0+ application should be the same value as the FLASH_SIZE in the +* 'xx_cm0plus.sct') in the 'xx_cm4_dual.sct' file, where 'xx' is the device group. * Do this by either: * - Passing the following commands to the compiler:\n * \code -D CY_CORTEX_M4_APPL_ADDR=0x10002000 \endcode @@ -175,11 +175,11 @@ * define symbol __ICFEDIT_region_IRAM1_end__ = 0x080477FF; * \endcode * -* Change the value of the \ref CY_CORTEX_M4_APPL_ADDR macro to the -* __ICFEDIT_region_IROM1_start__ value (0x10000000) + FLASH_CM0P_SIZE value -* (0x2000, the size of a flash image of the Cortex-M0+ application) in the +* Change the value of the \ref CY_CORTEX_M4_APPL_ADDR macro to the +* __ICFEDIT_region_IROM1_start__ value (0x10000000) + FLASH_CM0P_SIZE value +* (0x2000, the size of a flash image of the Cortex-M0+ application) in the * 'xx_cm4_dual.icf' file, where 'xx' is the device group. The sum result -* should be the same as (__ICFEDIT_region_IROM1_end__ + 1) value in the +* should be the same as (__ICFEDIT_region_IROM1_end__ + 1) value in the * 'xx_cm0plus.icf'. Do this by either: * - Passing the following commands to the compiler:\n * \code -D CY_CORTEX_M4_APPL_ADDR=0x10002000 \endcode @@ -212,8 +212,8 @@ * -# Editing source code files * -# Specifying via command line * -* By default, the stack size is set to 0x00001000 and the heap size is allocated -* dynamically to the whole available free memory up to stack memory and it +* By default, the stack size is set to 0x00001000 and the heap size is allocated +* dynamically to the whole available free memory up to stack memory and it * is set to the 0x00000400 (for ARM GCC and IAR compilers) as minimal value. * * \subsubsection group_system_config_heap_stack_config_gcc ARM GCC @@ -229,6 +229,19 @@ * Change the stack size by modifying the following line:\n * \code STACK_SIZE = 0x1000; \endcode * +* \note Correct operation of malloc and related functions depends on the working +* implementation of the 'sbrk' function. Newlib-nano (default C runtime library +* used by the GNU Arm Embedded toolchain) provides weak 'sbrk' implementation that +* doesn't check for heap and stack collisions during excessive memory allocations. +* To ensure the heap always remains within the range defined by __HeapBase and +* __HeapLimit linker symbols, provide a strong override for the 'sbrk' function: +* \snippet startup/snippet/main.c snippet_sbrk +* For FreeRTOS-enabled multi-threaded applications, it is sufficient to include +* clib-support library that provides newlib-compatible implementations of +* 'sbrk', '__malloc_lock' and '__malloc_unlock': +*
+* https://github.com/cypresssemiconductorco/clib-support. +* * \subsubsection group_system_config_heap_stack_config_mdk ARM Compiler * - Editing source code files\n * The stack size is defined in the linker script files: 'xx_yy.sct', @@ -321,6 +334,16 @@ * * * +* +* +* +* +* +* +* +* +* * * * diff --git a/version.xml b/version.xml index 6ecc36b..f705023 100644 --- a/version.xml +++ b/version.xml @@ -1 +1 @@ -1.2.1.14103 +1.3.0.15346
CY8CPROTO-063-BLE BSP
Reason for Change
2.80Updated linker scripts for PSoC 64 Secure MCU devices.Updated FLASH and SRAM memory area definitions in cyb0xxx linker script templates +* in accordance with the PSoC 64 Secure Boot SDK policies.
Added \ref Cy_PRA_Init() call to \ref SystemInit() Cortex-M0+ and Cortex-M4 functions for PSoC 64 Secure MCU.Updated PSoC 64 Secure MCU startup sequence to initialize the Protected Register Access driver.
2.70.1Updated documentation for the better description of the existing startup implementation.User experience enhancement.