From 0e38b78ef9ae3ce5db0563bdcde80a028c5fc38a Mon Sep 17 00:00:00 2001
From: gitlab-runner To configure the BLE ECO clock, call Cy_BLE_EcoConfigure(). The following code shows how to configure the BLE ECO clock: The following code shows how to configure the BLE ECO clock: See the BLE chapter of the device technical reference manual (TRM). Reports the Enabled/Disabled BLE ECO status. Internal flash memory programming. The functions and other declarations used in this driver are in cy_flash.h. You can include cy_pdl.h (ModusToolbox only) to get access to all functions and declarations in the PDL. Flash memory in PSoC devices provides non-volatile storage for user firmware, user configuration data, and bulk data storage. Flash operations are implemented as system calls. System calls are executed out of SROM in the privileged mode of operation. Users have no access to read or modify the SROM code. The driver API requests the system call by acquiring the Inter-processor communication (IPC) and writing the SROM function opcode and parameters to its input registers. As a result, an NMI interrupt is invoked and the requested SROM API is executed. The operation status is returned to the driver context and a release interrupt is triggered. Flash operations are implemented as system calls. System calls are executed out of SROM in the privileged mode of operation. Users have no access to read or modify the SROM code. The driver API requests the system call by acquiring the Inter-processor communication (IPC) and writing the SROM function opcode and parameters to its input registers. As a result, an NMI interrupt is invoked and the requested SROM function is executed. The operation status is returned to the driver context and a release interrupt is triggered. Writing to flash can take up to 20 milliseconds. During this time, the device should not be reset (including XRES pin, software reset, and watchdog) or unexpected changes may be made to portions of the flash. Also, the low-voltage detect circuits should be configured to generate an interrupt instead of a reset. A Read while Write violation occurs when a flash Read operation is initiated in the same or neighboring (neighboring restriction is applicable just for the CY8C6xx6, CY8C6xx7 devices) flash sector where the flash Write, Erase, or Program operation is working. This violation may cause a HardFault exception. To avoid the Read while Write violation, the user must carefully split the Read and Write operation on flash sectors which are not neighboring, considering both cores in the multi-processor device. If the flash is divided into four equal sectors, you may edit the linker script to place the code into neighboring sectors. For example, use sectors number 0 and 1 for code and sectors 2 and 3 for data storage. A Read while Write violation occurs when a flash Read operation is initiated in the same or neighboring (neighboring restriction is applicable just for the CY8C6xx6, CY8C6xx7 devices) flash sector where the flash Write, Erase, or Program operation is working. This violation may cause a HardFault exception. To avoid the Read while Write violation, carefully split the Read and Write operation on flash sectors which are not neighboring, considering both cores in the multi-processor device. If the flash is divided into four equal sectors, you may edit the linker script to place the code into neighboring sectors. For example, use sectors number 0 and 1 for code and sectors 2 and 3 for data storage. The PSoC 6 MCU user-programmable Flash consists of: Write operations are performed on a per-sector basis and may be done as Blocking or Partially Blocking, defined as follows: Write operation may be done as Blocking or Partially Blocking, defined as follows: In this case, the entire Flash block is not available for the duration of the Write (∼16ms). Therefore, no Flash accesses (from any Bus Master) can occur during that time. CPU execution can be performed from SRAM. All pre-fetching must be disabled. Application code execution from Flash is blocked for the Flash Write duration for both cores. In this case, the entire Flash block is not available for the duration of the Write (∼16ms). Therefore, no Flash accesses (from any Bus Master) can occur during that time. CPU execution can be performed from SRAM. All pre-fetching must be disabled. Code execution from Flash is blocked for the Flash Write duration for both cores. This method has a much shorter time window during which Flash accesses are not allowed. Application code execution from Flash is blocked for only a part of Flash Write duration, for both cores. Blocking duration depends upon the API sequence used. For API sequence Cy_Flash_StartEraseRow() + Cy_Flash_StartProgram() there are four block-out regions during which the read is blocked using the software driver (PDL). See Figure 1. For API sequence Cy_Flash_StartEraseRow() + Cy_Flash_StartProgram() there are four block-out regions during which Read is blocked. See Figure 1. This allows both cores to execute an application for about 80% of Flash Write operation - see Figure 1. This capability is important for communication protocols that rely on fast response. This allows both cores to execute for about 80% of Flash Write operation - see Figure 1. This capability is important for communication protocols that rely on fast response. This function locates the region structure by the address which belongs to it. Consult the Technical Reference Manual for your device for details of the clock system. The PDL defines clock system capabilities in:
@@ -320,6 +321,11 @@
*
@@ -495,7 +498,7 @@ Reason for Change
*
*
+*
+* 2.70.1
+* Updated documentation for the better description of the existing startup implementation.
+* User experience enhancement.
+*
*
2.70
* Updated \ref SystemCoreClockUpdate() implementation - The SysClk API is reused.
* Code optimization.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx4_cm0plus.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx4_cm0plus.sct
new file mode 100644
index 0000000..a3283de
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx4_cm0plus.sct
@@ -0,0 +1,259 @@
+#! armclang -E --target=arm-arm-none-eabi -x c -mcpu=cortex-m0
+; The first line specifies a preprocessor command that the linker invokes
+; to pass a scatter file through a C preprocessor.
+
+;*******************************************************************************
+;* \file cy8c6xx4_cm0plus.sct
+;* \version 2.70.1
+;*
+;* Linker file for the ARMCC.
+;*
+;* The main purpose of the linker script is to describe how the sections in the
+;* input files should be mapped into the output file, and to control the memory
+;* layout of the output file.
+;*
+;* \note The entry point location is fixed and starts at 0x10000000. The valid
+;* application image should be placed there.
+;*
+;* \note The linker files included with the PDL template projects must be
+;* generic and handle all common use cases. Your project may not use every
+;* section defined in the linker files. In that case you may see the warnings
+;* during the build process: L6314W (no section matches pattern) and/or L6329W
+;* (pattern only matches removed unused sections). In your project, you can
+;* suppress the warning by passing the "--diag_suppress=L6314W,L6329W" option to
+;* the linker, simply comment out or remove the relevant code in the linker
+;* file.
+;*
+;*******************************************************************************
+;* \copyright
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
+;* SPDX-License-Identifier: Apache-2.0
+;*
+;* Licensed under the Apache License, Version 2.0 (the "License");
+;* you may not use this file except in compliance with the License.
+;* You may obtain a copy of the License at
+;*
+;* http://www.apache.org/licenses/LICENSE-2.0
+;*
+;* Unless required by applicable law or agreed to in writing, software
+;* distributed under the License is distributed on an "AS IS" BASIS,
+;* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+;* See the License for the specific language governing permissions and
+;* limitations under the License.
+;******************************************************************************/
+
+; The defines below describe the location and size of blocks of memory in the target.
+; Use these defines to specify the memory regions available for allocation.
+
+; The following defines control RAM and flash memory allocation for the CM0+ core.
+; You can change the memory allocation by editing the RAM and Flash defines.
+; Note that 2 KB of RAM (at the end of the SRAM) are reserved for system use.
+; Using this memory region for other purposes will lead to unexpected behavior.
+; Your changes must be aligned with the corresponding defines for the CM4 core in 'xx_cm4_dual.scat',
+; where 'xx' is the device group; for example, 'cy8c6xx7_cm4_dual.scat'.
+; RAM
+#define RAM_START 0x08000000
+#define RAM_SIZE 0x00002000
+; Flash
+#define FLASH_START 0x10000000
+#define FLASH_SIZE 0x00002000
+
+; The size of the stack section at the end of CM0+ SRAM
+#define STACK_SIZE 0x00001000
+
+; The following defines describe a 32K flash region used for EEPROM emulation.
+; This region can also be used as the general purpose flash.
+; You can assign sections to this memory region for only one of the cores.
+; Note some middleware (e.g. BLE, Emulated EEPROM) can place their data into this memory region.
+; Therefore, repurposing this memory region will prevent such middleware from operation.
+#define EM_EEPROM_START 0x14000000
+#define EM_EEPROM_SIZE 0x8000
+
+; The following defines describe device specific memory regions and must not be changed.
+; Supervisory flash: User data
+#define SFLASH_USER_DATA_START 0x16000800
+#define SFLASH_USER_DATA_SIZE 0x00000800
+
+; Supervisory flash: Normal Access Restrictions (NAR)
+#define SFLASH_NAR_START 0x16001A00
+#define SFLASH_NAR_SIZE 0x00000200
+
+; Supervisory flash: Public Key
+#define SFLASH_PUBLIC_KEY_START 0x16005A00
+#define SFLASH_PUBLIC_KEY_SIZE 0x00000C00
+
+; Supervisory flash: Table of Content # 2
+#define SFLASH_TOC_2_START 0x16007C00
+#define SFLASH_TOC_2_SIZE 0x00000200
+
+; Supervisory flash: Table of Content # 2 Copy
+#define SFLASH_RTOC_2_START 0x16007E00
+#define SFLASH_RTOC_2_SIZE 0x00000200
+
+; External memory
+#define XIP_START 0x18000000
+#define XIP_SIZE 0x08000000
+
+; eFuse
+#define EFUSE_START 0x90700000
+#define EFUSE_SIZE 0x100000
+
+
+; Cortex-M0+ application flash area
+LR_IROM1 FLASH_START FLASH_SIZE
+{
+ .cy_app_header +0
+ {
+ * (.cy_app_header)
+ }
+
+ ER_FLASH_VECTORS +0
+ {
+ * (RESET, +FIRST)
+ }
+
+ ER_FLASH_CODE +0 FIXED
+ {
+ * (InRoot$$Sections)
+ * (+RO)
+ }
+
+ ER_RAM_VECTORS RAM_START UNINIT
+ {
+ * (RESET_RAM, +FIRST)
+ }
+
+ RW_RAM_DATA +0
+ {
+ * (.cy_ramfunc)
+ * (+RW, +ZI)
+ }
+
+ ; Place variables in the section that should not be initialized during the
+ ; device startup.
+ RW_IRAM1 +0 UNINIT
+ {
+ * (.noinit)
+ }
+
+ ; Application heap area (HEAP)
+ ARM_LIB_HEAP +0 EMPTY ((RAM_START+RAM_SIZE)-AlignExpr(ImageLimit(RW_IRAM1), 8)-STACK_SIZE)
+ {
+ }
+
+ ; Stack region growing down
+ ARM_LIB_STACK (RAM_START+RAM_SIZE) EMPTY -STACK_SIZE
+ {
+ }
+}
+
+
+; Emulated EEPROM Flash area
+LR_EM_EEPROM EM_EEPROM_START EM_EEPROM_SIZE
+{
+ .cy_em_eeprom +0
+ {
+ * (.cy_em_eeprom)
+ }
+}
+
+; Supervisory flash: User data
+LR_SFLASH_USER_DATA SFLASH_USER_DATA_START SFLASH_USER_DATA_SIZE
+{
+ .cy_sflash_user_data +0
+ {
+ * (.cy_sflash_user_data)
+ }
+}
+
+; Supervisory flash: Normal Access Restrictions (NAR)
+LR_SFLASH_NAR SFLASH_NAR_START SFLASH_NAR_SIZE
+{
+ .cy_sflash_nar +0
+ {
+ * (.cy_sflash_nar)
+ }
+}
+
+; Supervisory flash: Public Key
+LR_SFLASH_PUBLIC_KEY SFLASH_PUBLIC_KEY_START SFLASH_PUBLIC_KEY_SIZE
+{
+ .cy_sflash_public_key +0
+ {
+ * (.cy_sflash_public_key)
+ }
+}
+
+; Supervisory flash: Table of Content # 2
+LR_SFLASH_TOC_2 SFLASH_TOC_2_START SFLASH_TOC_2_SIZE
+{
+ .cy_toc_part2 +0
+ {
+ * (.cy_toc_part2)
+ }
+}
+
+; Supervisory flash: Table of Content # 2 Copy
+LR_SFLASH_RTOC_2 SFLASH_RTOC_2_START SFLASH_RTOC_2_SIZE
+{
+ .cy_rtoc_part2 +0
+ {
+ * (.cy_rtoc_part2)
+ }
+}
+
+
+; Places the code in the Execute in Place (XIP) section. See the smif driver documentation for details.
+LR_EROM XIP_START XIP_SIZE
+{
+ .cy_xip +0
+ {
+ * (.cy_xip)
+ }
+}
+
+
+; eFuse
+LR_EFUSE EFUSE_START EFUSE_SIZE
+{
+ .cy_efuse +0
+ {
+ * (.cy_efuse)
+ }
+}
+
+
+; The section is used for additional metadata (silicon revision, Silicon/JTAG ID, etc.) storage.
+CYMETA 0x90500000
+{
+ .cymeta +0 { * (.cymeta) }
+}
+
+/* The following symbols used by the cymcuelftool. */
+/* Flash */
+#define __cy_memory_0_start 0x10000000
+#define __cy_memory_0_length 0x00040000
+#define __cy_memory_0_row_size 0x200
+
+/* Emulated EEPROM Flash area */
+#define __cy_memory_1_start 0x14000000
+#define __cy_memory_1_length 0x8000
+#define __cy_memory_1_row_size 0x200
+
+/* Supervisory Flash */
+#define __cy_memory_2_start 0x16000000
+#define __cy_memory_2_length 0x8000
+#define __cy_memory_2_row_size 0x200
+
+/* XIP */
+#define __cy_memory_3_start 0x18000000
+#define __cy_memory_3_length 0x08000000
+#define __cy_memory_3_row_size 0x200
+
+/* eFuse */
+#define __cy_memory_4_start 0x90700000
+#define __cy_memory_4_length 0x100000
+#define __cy_memory_4_row_size 1
+
+
+/* [] END OF FILE */
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx5_cm0plus.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx5_cm0plus.sct
index f936c20..9bc2bf5 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx5_cm0plus.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx5_cm0plus.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cy8c6xx5_cm0plus.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx6_cm0plus.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx6_cm0plus.sct
index 9bd350d..50300cf 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx6_cm0plus.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx6_cm0plus.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cy8c6xx6_cm0plus.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx7_cm0plus.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx7_cm0plus.sct
index 9e4e930..3c70be4 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx7_cm0plus.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx7_cm0plus.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cy8c6xx7_cm0plus.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx8_cm0plus.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx8_cm0plus.sct
index 11dd0da..02ec1d3 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx8_cm0plus.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xx8_cm0plus.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cy8c6xx8_cm0plus.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xxa_cm0plus.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xxa_cm0plus.sct
index 68cfabe..775bdd4 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xxa_cm0plus.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cy8c6xxa_cm0plus.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cy8c6xxa_cm0plus.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cyb06xx5_cm0plus.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cyb06xx5_cm0plus.sct
index 784c7b6..06b9e85 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cyb06xx5_cm0plus.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cyb06xx5_cm0plus.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cyb06xx5_cm0plus.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cyb06xx7_cm0plus.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cyb06xx7_cm0plus.sct
index 1b4b3ce..9ac47a0 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cyb06xx7_cm0plus.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cyb06xx7_cm0plus.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cyb06xx7_cm0plus.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cyb06xxa_cm0plus.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cyb06xxa_cm0plus.sct
index b06d119..9fb7441 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cyb06xxa_cm0plus.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/cyb06xxa_cm0plus.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cyb06xxa_cm0plus.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/startup_psoc6_04_cm0plus.s b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/startup_psoc6_04_cm0plus.s
new file mode 100644
index 0000000..0305d1e
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_ARM/startup_psoc6_04_cm0plus.s
@@ -0,0 +1,223 @@
+;/**************************************************************************//**
+; * @file startup_psoc6_04_cm0plus.s
+; * @brief CMSIS Core Device Startup File for
+; * ARMCM0plus Device Series
+; * @version V5.00
+; * @date 02. March 2016
+; ******************************************************************************/
+;/*
+; * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+; *
+; * SPDX-License-Identifier: Apache-2.0
+; *
+; * Licensed under the Apache License, Version 2.0 (the License); you may
+; * not use this file except in compliance with the License.
+; * You may obtain a copy of the License at
+; *
+; * www.apache.org/licenses/LICENSE-2.0
+; *
+; * Unless required by applicable law or agreed to in writing, software
+; * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; * See the License for the specific language governing permissions and
+; * limitations under the License.
+; */
+
+ PRESERVE8
+ THUMB
+
+; Vector Table Mapped to Address 0 at Reset
+
+ AREA RESET, DATA, READONLY
+ EXPORT __Vectors
+ EXPORT __Vectors_End
+ EXPORT __Vectors_Size
+
+ IMPORT |Image$$ARM_LIB_STACK$$ZI$$Base|
+ IMPORT |Image$$ARM_LIB_STACK$$ZI$$Length|
+
+__Vectors DCD |Image$$ARM_LIB_STACK$$ZI$$Base| + |Image$$ARM_LIB_STACK$$ZI$$Length| ; Top of Stack
+
+ DCD Reset_Handler ; Reset Handler
+
+ DCD 0x0000000D ; NMI Handler located at ROM code
+ DCD HardFault_Handler ; Hard Fault Handler
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD SVC_Handler ; SVCall Handler
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD PendSV_Handler ; PendSV Handler
+ DCD SysTick_Handler ; SysTick Handler
+
+ ; External interrupts Description
+ DCD NvicMux0_IRQHandler ; CPU User Interrupt #0
+ DCD NvicMux1_IRQHandler ; CPU User Interrupt #1
+ DCD NvicMux2_IRQHandler ; CPU User Interrupt #2
+ DCD NvicMux3_IRQHandler ; CPU User Interrupt #3
+ DCD NvicMux4_IRQHandler ; CPU User Interrupt #4
+ DCD NvicMux5_IRQHandler ; CPU User Interrupt #5
+ DCD NvicMux6_IRQHandler ; CPU User Interrupt #6
+ DCD NvicMux7_IRQHandler ; CPU User Interrupt #7
+ DCD Internal0_IRQHandler ; Internal SW Interrupt #0
+ DCD Internal1_IRQHandler ; Internal SW Interrupt #1
+ DCD Internal2_IRQHandler ; Internal SW Interrupt #2
+ DCD Internal3_IRQHandler ; Internal SW Interrupt #3
+ DCD Internal4_IRQHandler ; Internal SW Interrupt #4
+ DCD Internal5_IRQHandler ; Internal SW Interrupt #5
+ DCD Internal6_IRQHandler ; Internal SW Interrupt #6
+ DCD Internal7_IRQHandler ; Internal SW Interrupt #7
+
+__Vectors_End
+
+__Vectors_Size EQU __Vectors_End - __Vectors
+ EXPORT __ramVectors
+ AREA RESET_RAM, READWRITE, NOINIT
+__ramVectors SPACE __Vectors_Size
+
+
+ AREA |.text|, CODE, READONLY
+
+
+; Weak function for startup customization
+;
+; Note. The global resources are not yet initialized (for example global variables, peripherals, clocks)
+; because this function is executed as the first instruction in the ResetHandler.
+; The PDL is also not initialized to use the proper register offsets.
+; The user of this function is responsible for initializing the PDL and resources before using them.
+;
+Cy_OnResetUser PROC
+ EXPORT Cy_OnResetUser [WEAK]
+ BX LR
+ ENDP
+
+; Reset Handler
+Reset_Handler PROC
+ EXPORT Reset_Handler [WEAK]
+ IMPORT __main
+
+ ; Define strong function for startup customization
+ BL Cy_OnResetUser
+
+ ; Disable global interrupts
+ CPSID I
+
+ ; Copy vectors from ROM to RAM
+ LDR r1, =__Vectors
+ LDR r0, =__ramVectors
+ LDR r2, =__Vectors_Size
+Vectors_Copy
+ LDR r3, [r1]
+ STR r3, [r0]
+ ADDS r0, r0, #4
+ ADDS r1, r1, #4
+ SUBS r2, r2, #1
+ CMP r2, #0
+ BNE Vectors_Copy
+
+ ; Update Vector Table Offset Register. */
+ LDR r0, =__ramVectors
+ LDR r1, =0xE000ED08
+ STR r0, [r1]
+ dsb 0xF
+
+ LDR R0, =__main
+ BLX R0
+
+ ; Should never get here
+ B .
+
+ ENDP
+
+; Dummy Exception Handlers (infinite loops which can be modified)
+NMI_Handler PROC
+ EXPORT NMI_Handler [WEAK]
+ B .
+ ENDP
+
+Cy_SysLib_FaultHandler PROC
+ EXPORT Cy_SysLib_FaultHandler [WEAK]
+ B .
+ ENDP
+
+HardFault_Handler PROC
+ EXPORT HardFault_Handler [WEAK]
+ movs r0, #4
+ mov r1, LR
+ tst r0, r1
+ beq L_MSP
+ mrs r0, PSP
+ bl L_API_call
+L_MSP
+ mrs r0, MSP
+L_API_call
+ bl Cy_SysLib_FaultHandler
+ ENDP
+
+SVC_Handler PROC
+ EXPORT SVC_Handler [WEAK]
+ B .
+ ENDP
+PendSV_Handler PROC
+ EXPORT PendSV_Handler [WEAK]
+ B .
+ ENDP
+SysTick_Handler PROC
+ EXPORT SysTick_Handler [WEAK]
+ B .
+ ENDP
+
+Default_Handler PROC
+ EXPORT Default_Handler [WEAK]
+ EXPORT NvicMux0_IRQHandler [WEAK]
+ EXPORT NvicMux1_IRQHandler [WEAK]
+ EXPORT NvicMux2_IRQHandler [WEAK]
+ EXPORT NvicMux3_IRQHandler [WEAK]
+ EXPORT NvicMux4_IRQHandler [WEAK]
+ EXPORT NvicMux5_IRQHandler [WEAK]
+ EXPORT NvicMux6_IRQHandler [WEAK]
+ EXPORT NvicMux7_IRQHandler [WEAK]
+ EXPORT Internal0_IRQHandler [WEAK]
+ EXPORT Internal1_IRQHandler [WEAK]
+ EXPORT Internal2_IRQHandler [WEAK]
+ EXPORT Internal3_IRQHandler [WEAK]
+ EXPORT Internal4_IRQHandler [WEAK]
+ EXPORT Internal5_IRQHandler [WEAK]
+ EXPORT Internal6_IRQHandler [WEAK]
+ EXPORT Internal7_IRQHandler [WEAK]
+
+NvicMux0_IRQHandler
+NvicMux1_IRQHandler
+NvicMux2_IRQHandler
+NvicMux3_IRQHandler
+NvicMux4_IRQHandler
+NvicMux5_IRQHandler
+NvicMux6_IRQHandler
+NvicMux7_IRQHandler
+Internal0_IRQHandler
+Internal1_IRQHandler
+Internal2_IRQHandler
+Internal3_IRQHandler
+Internal4_IRQHandler
+Internal5_IRQHandler
+Internal6_IRQHandler
+Internal7_IRQHandler
+
+ B .
+ ENDP
+
+ ALIGN
+
+
+; User Initial Stack & Heap
+ IMPORT __use_two_region_memory
+
+ END
+
+
+; [] END OF FILE
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_A_Clang/startup_psoc6_04_cm0plus.S b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_A_Clang/startup_psoc6_04_cm0plus.S
new file mode 100644
index 0000000..a192309
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_A_Clang/startup_psoc6_04_cm0plus.S
@@ -0,0 +1,253 @@
+/**************************************************************************//**
+ * @file startup_psoc6_04_cm0plus.S
+ * @brief CMSIS Core Device Startup File for
+ * ARMCM0plus Device Series
+ * @version V5.00
+ * @date 02. March 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ /* Address of the NMI handler */
+ #define CY_NMI_HANLDER_ADDR 0x0000000D
+
+ /* The CPU VTOR register */
+ #define CY_CPU_VTOR_ADDR 0xE000ED08
+
+ .syntax unified
+
+ .section __STACK, __stack
+ .align 3
+#ifdef __STACK_SIZE
+ .equ Stack_Size, __STACK_SIZE
+#else
+ .equ Stack_Size, 0x00001000
+#endif
+ .globl __StackTop
+ .globl __StackLimit
+
+__StackLimit:
+ .space Stack_Size
+ .equ __StackTop, . - Stack_Size
+
+ .section __HEAP, __heap
+ .align 3
+#ifdef __HEAP_SIZE
+ .equ Heap_Size, __HEAP_SIZE
+#else
+ .equ Heap_Size, 0x00000400
+#endif
+ .globl __HeapBase
+__HeapBase:
+ .if Heap_Size
+ .space Heap_Size
+ .endif
+
+ .section __VECT, ___Vectors
+ .align 2
+ .globl ___Vectors
+___Vectors:
+ .long __StackTop /* Top of Stack */
+ .long Reset_Handler /* Reset Handler */
+ .long CY_NMI_HANLDER_ADDR /* NMI Handler */
+ .long HardFault_Handler /* Hard Fault Handler */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long SVC_Handler /* SVCall Handler */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long PendSV_Handler /* PendSV Handler */
+ .long SysTick_Handler /* SysTick Handler */
+
+ /* External interrupts Description */
+ .long NvicMux0_IRQHandler /* CPU User Interrupt #0 */
+ .long NvicMux1_IRQHandler /* CPU User Interrupt #1 */
+ .long NvicMux2_IRQHandler /* CPU User Interrupt #2 */
+ .long NvicMux3_IRQHandler /* CPU User Interrupt #3 */
+ .long NvicMux4_IRQHandler /* CPU User Interrupt #4 */
+ .long NvicMux5_IRQHandler /* CPU User Interrupt #5 */
+ .long NvicMux6_IRQHandler /* CPU User Interrupt #6 */
+ .long NvicMux7_IRQHandler /* CPU User Interrupt #7 */
+ .long Internal0_IRQHandler /* Internal SW Interrupt #0 */
+ .long Internal1_IRQHandler /* Internal SW Interrupt #1 */
+ .long Internal2_IRQHandler /* Internal SW Interrupt #2 */
+ .long Internal3_IRQHandler /* Internal SW Interrupt #3 */
+ .long Internal4_IRQHandler /* Internal SW Interrupt #4 */
+ .long Internal5_IRQHandler /* Internal SW Interrupt #5 */
+ .long Internal6_IRQHandler /* Internal SW Interrupt #6 */
+ .long Internal7_IRQHandler /* Internal SW Interrupt #7 */
+
+ .equ __VectorsSize, . - ___Vectors
+
+ .section __RAMVECTORS, ___ramVectors
+ .align 2
+ .globl ___ramVectors
+
+___ramVectors:
+ .space __VectorsSize
+
+
+ .text
+ .thumb_func
+ .align 2
+ /* Reset handler */
+ .globl Reset_Handler
+
+Reset_Handler:
+ bl Cy_OnResetUser
+ cpsid i
+
+/* Single section scheme.
+ *
+ * The ranges of copy from/to are specified by following symbols
+ * __etext: LMA of start of the section to copy from. Usually end of text
+ * __data_start__: VMA of start of the section to copy to
+ * __data_end__: VMA of end of the section to copy to
+ *
+ * All addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r0, =___ramVectors
+ ldr r1, =___Vectors
+ ldr r2, =__VectorsSize
+ bl _memcpy
+
+ ldr r0, =segment$start$__DATA
+ ldr r1, =segment$end$__TEXT
+ ldr r2, =section$start$__DATA$__zerofill
+ sub r2, r0
+ bl _memcpy
+
+ ldr r0, =section$start$__DATA$__zerofill
+ eor r1, r1
+ ldr r2, =section$end$__DATA$__zerofill
+ sub r2, r0
+ bl _memset
+
+ /* Update Vector Table Offset Register. */
+ ldr r0, =___ramVectors
+ ldr r1, =CY_CPU_VTOR_ADDR
+ str r0, [r1]
+ dsb 0xF
+
+ bl _HeapInit
+#ifndef __NO_SYSTEM_INIT
+ bl _SystemInit
+#endif
+
+ bl _main
+
+ /* Should never get here */
+ b .
+
+ .pool
+
+ .text
+ .thumb
+ .thumb_func
+ .align 2
+
+ /* Device startup customization */
+ .weak_definition Cy_OnResetUser
+ .global Cy_OnResetUser, Cy_OnResetUser
+Cy_OnResetUser:
+ bx lr
+
+ .text
+ .align 1
+ .thumb_func
+ .weak_reference Default_Handler
+
+Default_Handler:
+ b .
+
+ .text
+ .thumb_func
+ .align 2
+ .weak_definition Cy_SysLib_FaultHandler
+
+Cy_SysLib_FaultHandler:
+ b .
+
+ .text
+ .thumb_func
+ .align 2
+
+Fault_Handler:
+ /* Storing LR content for Creator call stack trace */
+ push {LR}
+ movs r0, #4
+ mov r1, LR
+ tst r0, r1
+ beq .L_MSP
+ mrs r0, PSP
+ b .L_API_call
+.L_MSP:
+ mrs r0, MSP
+.L_API_call:
+ /* Compensation of stack pointer address due to pushing 4 bytes of LR */
+ adds r0, r0, #4
+ bl Cy_SysLib_FaultHandler
+ b .
+
+.macro def_fault_Handler fault_handler_name
+ .weak_definition \fault_handler_name
+ .set \fault_handler_name, Fault_Handler
+ .endm
+
+/* Macro to define default handlers. Default handler
+ * will be weak symbol and just dead loops. They can be
+ * overwritten by other handlers */
+ .macro def_irq_handler handler_name
+ .weak_definition \handler_name
+ .set \handler_name, Default_Handler
+ .endm
+
+ def_irq_handler NMI_Handler
+
+ def_fault_Handler HardFault_Handler
+
+ def_irq_handler SVC_Handler
+ def_irq_handler PendSV_Handler
+ def_irq_handler SysTick_Handler
+
+ def_irq_handler NvicMux0_IRQHandler /* CPU User Interrupt #0 */
+ def_irq_handler NvicMux1_IRQHandler /* CPU User Interrupt #1 */
+ def_irq_handler NvicMux2_IRQHandler /* CPU User Interrupt #2 */
+ def_irq_handler NvicMux3_IRQHandler /* CPU User Interrupt #3 */
+ def_irq_handler NvicMux4_IRQHandler /* CPU User Interrupt #4 */
+ def_irq_handler NvicMux5_IRQHandler /* CPU User Interrupt #5 */
+ def_irq_handler NvicMux6_IRQHandler /* CPU User Interrupt #6 */
+ def_irq_handler NvicMux7_IRQHandler /* CPU User Interrupt #7 */
+ def_irq_handler Internal0_IRQHandler /* Internal SW Interrupt #0 */
+ def_irq_handler Internal1_IRQHandler /* Internal SW Interrupt #1 */
+ def_irq_handler Internal2_IRQHandler /* Internal SW Interrupt #2 */
+ def_irq_handler Internal3_IRQHandler /* Internal SW Interrupt #3 */
+ def_irq_handler Internal4_IRQHandler /* Internal SW Interrupt #4 */
+ def_irq_handler Internal5_IRQHandler /* Internal SW Interrupt #5 */
+ def_irq_handler Internal6_IRQHandler /* Internal SW Interrupt #6 */
+ def_irq_handler Internal7_IRQHandler /* Internal SW Interrupt #7 */
+
+ .end
+
+
+/* [] END OF FILE */
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx4_cm0plus.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx4_cm0plus.ld
new file mode 100644
index 0000000..3143c49
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx4_cm0plus.ld
@@ -0,0 +1,418 @@
+/***************************************************************************//**
+* \file cy8c6xx4_cm0plus.ld
+* \version 2.70.1
+*
+* Linker file for the GNU C compiler.
+*
+* The main purpose of the linker script is to describe how the sections in the
+* input files should be mapped into the output file, and to control the memory
+* layout of the output file.
+*
+* \note The entry point location is fixed and starts at 0x10000000. The valid
+* application image should be placed there.
+*
+* \note The linker files included with the PDL template projects must be generic
+* and handle all common use cases. Your project may not use every section
+* defined in the linker files. In that case you may see warnings during the
+* build process. In your project, you can simply comment out or remove the
+* relevant code in the linker file.
+*
+********************************************************************************
+* \copyright
+* Copyright 2016-2020 Cypress Semiconductor Corporation
+* SPDX-License-Identifier: Apache-2.0
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*******************************************************************************/
+
+OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
+SEARCH_DIR(.)
+GROUP(-lgcc -lc -lnosys)
+ENTRY(Reset_Handler)
+
+/* The size of the stack section at the end of CM0+ SRAM */
+STACK_SIZE = 0x1000;
+
+/* Force symbol to be entered in the output file as an undefined symbol. Doing
+* this may, for example, trigger linking of additional modules from standard
+* libraries. You may list several symbols for each EXTERN, and you may use
+* EXTERN multiple times. This command has the same effect as the -u command-line
+* option.
+*/
+EXTERN(Reset_Handler)
+
+/* The MEMORY section below describes the location and size of blocks of memory in the target.
+* Use this section to specify the memory regions available for allocation.
+*/
+MEMORY
+{
+ /* The ram and flash regions control RAM and flash memory allocation for the CM0+ core.
+ * You can change the memory allocation by editing the 'ram' and 'flash' regions.
+ * Note that 2 KB of RAM (at the end of the SRAM) are reserved for system use.
+ * Using this memory region for other purposes will lead to unexpected behavior.
+ * Your changes must be aligned with the corresponding memory regions for the CM4 core in 'xx_cm4_dual.ld',
+ * where 'xx' is the device group; for example, 'cy8c6xx7_cm4_dual.ld'.
+ */
+ ram (rwx) : ORIGIN = 0x08000000, LENGTH = 0x2000
+ flash (rx) : ORIGIN = 0x10000000, LENGTH = 0x2000
+
+ /* This is a 32K flash region used for EEPROM emulation. This region can also be used as the general purpose flash.
+ * You can assign sections to this memory region for only one of the cores.
+ * Note some middleware (e.g. BLE, Emulated EEPROM) can place their data into this memory region.
+ * Therefore, repurposing this memory region will prevent such middleware from operation.
+ */
+ em_eeprom (rx) : ORIGIN = 0x14000000, LENGTH = 0x8000 /* 32 KB */
+
+ /* The following regions define device specific memory regions and must not be changed. */
+ sflash_user_data (rx) : ORIGIN = 0x16000800, LENGTH = 0x800 /* Supervisory flash: User data */
+ sflash_nar (rx) : ORIGIN = 0x16001A00, LENGTH = 0x200 /* Supervisory flash: Normal Access Restrictions (NAR) */
+ sflash_public_key (rx) : ORIGIN = 0x16005A00, LENGTH = 0xC00 /* Supervisory flash: Public Key */
+ sflash_toc_2 (rx) : ORIGIN = 0x16007C00, LENGTH = 0x200 /* Supervisory flash: Table of Content # 2 */
+ sflash_rtoc_2 (rx) : ORIGIN = 0x16007E00, LENGTH = 0x200 /* Supervisory flash: Table of Content # 2 Copy */
+ xip (rx) : ORIGIN = 0x18000000, LENGTH = 0x8000000 /* 128 MB */
+ efuse (r) : ORIGIN = 0x90700000, LENGTH = 0x100000 /* 1 MB */
+}
+
+/* Library configurations */
+GROUP(libgcc.a libc.a libm.a libnosys.a)
+
+/* Linker script to place sections and symbol values. Should be used together
+ * with other linker script that defines memory regions FLASH and RAM.
+ * It references following symbols, which must be defined in code:
+ * Reset_Handler : Entry of reset handler
+ *
+ * It defines following symbols, which code can use without definition:
+ * __exidx_start
+ * __exidx_end
+ * __copy_table_start__
+ * __copy_table_end__
+ * __zero_table_start__
+ * __zero_table_end__
+ * __etext
+ * __data_start__
+ * __preinit_array_start
+ * __preinit_array_end
+ * __init_array_start
+ * __init_array_end
+ * __fini_array_start
+ * __fini_array_end
+ * __data_end__
+ * __bss_start__
+ * __bss_end__
+ * __end__
+ * end
+ * __HeapLimit
+ * __StackLimit
+ * __StackTop
+ * __stack
+ * __Vectors_End
+ * __Vectors_Size
+ */
+
+
+SECTIONS
+{
+ .cy_app_header :
+ {
+ KEEP(*(.cy_app_header))
+ } > flash
+
+ /* Cortex-M0+ application flash area */
+ .text :
+ {
+ . = ALIGN(4);
+ __Vectors = . ;
+ KEEP(*(.vectors))
+ . = ALIGN(4);
+ __Vectors_End = .;
+ __Vectors_Size = __Vectors_End - __Vectors;
+ __end__ = .;
+
+ . = ALIGN(4);
+ *(.text*)
+
+ KEEP(*(.init))
+ KEEP(*(.fini))
+
+ /* .ctors */
+ *crtbegin.o(.ctors)
+ *crtbegin?.o(.ctors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+ *(SORT(.ctors.*))
+ *(.ctors)
+
+ /* .dtors */
+ *crtbegin.o(.dtors)
+ *crtbegin?.o(.dtors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+ *(SORT(.dtors.*))
+ *(.dtors)
+
+ /* Read-only code (constants). */
+ *(.rodata .rodata.* .constdata .constdata.* .conststring .conststring.*)
+
+ KEEP(*(.eh_frame*))
+ } > flash
+
+
+ .ARM.extab :
+ {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ } > flash
+
+ __exidx_start = .;
+
+ .ARM.exidx :
+ {
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ } > flash
+ __exidx_end = .;
+
+
+ /* To copy multiple ROM to RAM sections,
+ * uncomment .copy.table section and,
+ * define __STARTUP_COPY_MULTIPLE in startup_psoc6_04_cm0plus.S */
+ .copy.table :
+ {
+ . = ALIGN(4);
+ __copy_table_start__ = .;
+
+ /* Copy interrupt vectors from flash to RAM */
+ LONG (__Vectors) /* From */
+ LONG (__ram_vectors_start__) /* To */
+ LONG (__Vectors_End - __Vectors) /* Size */
+
+ /* Copy data section to RAM */
+ LONG (__etext) /* From */
+ LONG (__data_start__) /* To */
+ LONG (__data_end__ - __data_start__) /* Size */
+
+ __copy_table_end__ = .;
+ } > flash
+
+
+ /* To clear multiple BSS sections,
+ * uncomment .zero.table section and,
+ * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_psoc6_04_cm0plus.S */
+ .zero.table :
+ {
+ . = ALIGN(4);
+ __zero_table_start__ = .;
+ LONG (__bss_start__)
+ LONG (__bss_end__ - __bss_start__)
+ __zero_table_end__ = .;
+ } > flash
+
+ __etext = . ;
+
+
+ .ramVectors (NOLOAD) : ALIGN(8)
+ {
+ __ram_vectors_start__ = .;
+ KEEP(*(.ram_vectors))
+ __ram_vectors_end__ = .;
+ } > ram
+
+
+ .data __ram_vectors_end__ : AT (__etext)
+ {
+ __data_start__ = .;
+
+ *(vtable)
+ *(.data*)
+
+ . = ALIGN(4);
+ /* preinit data */
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP(*(.preinit_array))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+
+ . = ALIGN(4);
+ /* init data */
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP(*(SORT(.init_array.*)))
+ KEEP(*(.init_array))
+ PROVIDE_HIDDEN (__init_array_end = .);
+
+ . = ALIGN(4);
+ /* finit data */
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP(*(SORT(.fini_array.*)))
+ KEEP(*(.fini_array))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+
+ KEEP(*(.jcr*))
+ . = ALIGN(4);
+
+ KEEP(*(.cy_ramfunc*))
+ . = ALIGN(4);
+
+ __data_end__ = .;
+
+ } > ram
+
+
+ /* Place variables in the section that should not be initialized during the
+ * device startup.
+ */
+ .noinit (NOLOAD) : ALIGN(8)
+ {
+ KEEP(*(.noinit))
+ } > ram
+
+
+ /* The uninitialized global or static variables are placed in this section.
+ *
+ * The NOLOAD attribute tells linker that .bss section does not consume
+ * any space in the image. The NOLOAD attribute changes the .bss type to
+ * NOBITS, and that makes linker to A) not allocate section in memory, and
+ * A) put information to clear the section with all zeros during application
+ * loading.
+ *
+ * Without the NOLOAD attribute, the .bss section might get PROGBITS type.
+ * This makes linker to A) allocate zeroed section in memory, and B) copy
+ * this section to RAM during application loading.
+ */
+ .bss (NOLOAD):
+ {
+ . = ALIGN(4);
+ __bss_start__ = .;
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } > ram
+
+
+ .heap (NOLOAD):
+ {
+ __HeapBase = .;
+ __end__ = .;
+ end = __end__;
+ KEEP(*(.heap*))
+ . = ORIGIN(ram) + LENGTH(ram) - STACK_SIZE;
+ __HeapLimit = .;
+ } > ram
+
+
+ /* .stack_dummy section doesn't contains any symbols. It is only
+ * used for linker to calculate size of stack sections, and assign
+ * values to stack symbols later */
+ .stack_dummy (NOLOAD):
+ {
+ KEEP(*(.stack*))
+ } > ram
+
+
+ /* Set stack top to end of RAM, and stack limit move down by
+ * size of stack_dummy section */
+ __StackTop = ORIGIN(ram) + LENGTH(ram);
+ __StackLimit = __StackTop - SIZEOF(.stack_dummy);
+ PROVIDE(__stack = __StackTop);
+
+ /* Check if data + heap + stack exceeds RAM limit */
+ ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
+
+
+ /* Emulated EEPROM Flash area */
+ .cy_em_eeprom :
+ {
+ KEEP(*(.cy_em_eeprom))
+ } > em_eeprom
+
+
+ /* Supervisory Flash: User data */
+ .cy_sflash_user_data :
+ {
+ KEEP(*(.cy_sflash_user_data))
+ } > sflash_user_data
+
+
+ /* Supervisory Flash: Normal Access Restrictions (NAR) */
+ .cy_sflash_nar :
+ {
+ KEEP(*(.cy_sflash_nar))
+ } > sflash_nar
+
+
+ /* Supervisory Flash: Public Key */
+ .cy_sflash_public_key :
+ {
+ KEEP(*(.cy_sflash_public_key))
+ } > sflash_public_key
+
+
+ /* Supervisory Flash: Table of Content # 2 */
+ .cy_toc_part2 :
+ {
+ KEEP(*(.cy_toc_part2))
+ } > sflash_toc_2
+
+
+ /* Supervisory Flash: Table of Content # 2 Copy */
+ .cy_rtoc_part2 :
+ {
+ KEEP(*(.cy_rtoc_part2))
+ } > sflash_rtoc_2
+
+
+ /* Places the code in the Execute in Place (XIP) section. See the smif driver
+ * documentation for details.
+ */
+ .cy_xip :
+ {
+ KEEP(*(.cy_xip))
+ } > xip
+
+
+ /* eFuse */
+ .cy_efuse :
+ {
+ KEEP(*(.cy_efuse))
+ } > efuse
+
+
+ /* These sections are used for additional metadata (silicon revision,
+ * Silicon/JTAG ID, etc.) storage.
+ */
+ .cymeta 0x90500000 : { KEEP(*(.cymeta)) } :NONE
+}
+
+
+/* The following symbols used by the cymcuelftool. */
+/* Flash */
+__cy_memory_0_start = 0x10000000;
+__cy_memory_0_length = 0x00040000;
+__cy_memory_0_row_size = 0x200;
+
+/* Emulated EEPROM Flash area */
+__cy_memory_1_start = 0x14000000;
+__cy_memory_1_length = 0x8000;
+__cy_memory_1_row_size = 0x200;
+
+/* Supervisory Flash */
+__cy_memory_2_start = 0x16000000;
+__cy_memory_2_length = 0x8000;
+__cy_memory_2_row_size = 0x200;
+
+/* XIP */
+__cy_memory_3_start = 0x18000000;
+__cy_memory_3_length = 0x08000000;
+__cy_memory_3_row_size = 0x200;
+
+/* eFuse */
+__cy_memory_4_start = 0x90700000;
+__cy_memory_4_length = 0x100000;
+__cy_memory_4_row_size = 1;
+
+/* EOF */
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx5_cm0plus.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx5_cm0plus.ld
index 8822cbc..f83351d 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx5_cm0plus.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx5_cm0plus.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cy8c6xx5_cm0plus.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx6_cm0plus.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx6_cm0plus.ld
index 26518f0..ffdf781 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx6_cm0plus.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx6_cm0plus.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cy8c6xx6_cm0plus.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm0plus.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm0plus.ld
index 93b42aa..1e40f15 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm0plus.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm0plus.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cy8c6xx7_cm0plus.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx8_cm0plus.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx8_cm0plus.ld
index fcf5c75..30683ad 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx8_cm0plus.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xx8_cm0plus.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cy8c6xx8_cm0plus.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xxa_cm0plus.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xxa_cm0plus.ld
index 1f3a5a9..7fb39e7 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xxa_cm0plus.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cy8c6xxa_cm0plus.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cy8c6xxa_cm0plus.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cyb06xx5_cm0plus.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cyb06xx5_cm0plus.ld
index da316b1..b7478cd 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cyb06xx5_cm0plus.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cyb06xx5_cm0plus.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cyb06xx5_cm0plus.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cyb06xx7_cm0plus.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cyb06xx7_cm0plus.ld
index 18233c2..20efcb1 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cyb06xx7_cm0plus.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cyb06xx7_cm0plus.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cyb06xx7_cm0plus.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cyb06xxa_cm0plus.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cyb06xxa_cm0plus.ld
index 062f5fd..14a330d 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cyb06xxa_cm0plus.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/cyb06xxa_cm0plus.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cyb06xxa_cm0plus.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/startup_psoc6_04_cm0plus.S b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/startup_psoc6_04_cm0plus.S
new file mode 100644
index 0000000..fbc1654
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_GCC_ARM/startup_psoc6_04_cm0plus.S
@@ -0,0 +1,372 @@
+/**************************************************************************//**
+ * @file startup_psoc6_04_cm0plus.S
+ * @brief CMSIS Core Device Startup File for
+ * ARMCM0plus Device Series
+ * @version V5.00
+ * @date 02. March 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ /* Address of the NMI handler */
+ #define CY_NMI_HANLDER_ADDR 0x0000000D
+
+ /* The CPU VTOR register */
+ #define CY_CPU_VTOR_ADDR 0xE000ED08
+
+ /* Copy flash vectors and data section to RAM */
+ #define __STARTUP_COPY_MULTIPLE
+
+ /* Clear single BSS section */
+ #define __STARTUP_CLEAR_BSS
+
+ .syntax unified
+ .arch armv6-m
+
+ .section .stack
+ .align 3
+#ifdef __STACK_SIZE
+ .equ Stack_Size, __STACK_SIZE
+#else
+ .equ Stack_Size, 0x00001000
+#endif
+ .globl __StackTop
+ .globl __StackLimit
+__StackLimit:
+ .space Stack_Size
+ .size __StackLimit, . - __StackLimit
+__StackTop:
+ .size __StackTop, . - __StackTop
+
+ .section .heap
+ .align 3
+#ifdef __HEAP_SIZE
+ .equ Heap_Size, __HEAP_SIZE
+#else
+ .equ Heap_Size, 0x00000400
+#endif
+ .globl __HeapBase
+ .globl __HeapLimit
+__HeapBase:
+ .if Heap_Size
+ .space Heap_Size
+ .endif
+ .size __HeapBase, . - __HeapBase
+__HeapLimit:
+ .size __HeapLimit, . - __HeapLimit
+
+ .section .vectors
+ .align 2
+ .globl __Vectors
+__Vectors:
+ .long __StackTop /* Top of Stack */
+ .long Reset_Handler /* Reset Handler */
+ .long CY_NMI_HANLDER_ADDR /* NMI Handler */
+ .long HardFault_Handler /* Hard Fault Handler */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long SVC_Handler /* SVCall Handler */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long PendSV_Handler /* PendSV Handler */
+ .long SysTick_Handler /* SysTick Handler */
+
+ /* External interrupts Description */
+ .long NvicMux0_IRQHandler /* CPU User Interrupt #0 */
+ .long NvicMux1_IRQHandler /* CPU User Interrupt #1 */
+ .long NvicMux2_IRQHandler /* CPU User Interrupt #2 */
+ .long NvicMux3_IRQHandler /* CPU User Interrupt #3 */
+ .long NvicMux4_IRQHandler /* CPU User Interrupt #4 */
+ .long NvicMux5_IRQHandler /* CPU User Interrupt #5 */
+ .long NvicMux6_IRQHandler /* CPU User Interrupt #6 */
+ .long NvicMux7_IRQHandler /* CPU User Interrupt #7 */
+ .long Internal0_IRQHandler /* Internal SW Interrupt #0 */
+ .long Internal1_IRQHandler /* Internal SW Interrupt #1 */
+ .long Internal2_IRQHandler /* Internal SW Interrupt #2 */
+ .long Internal3_IRQHandler /* Internal SW Interrupt #3 */
+ .long Internal4_IRQHandler /* Internal SW Interrupt #4 */
+ .long Internal5_IRQHandler /* Internal SW Interrupt #5 */
+ .long Internal6_IRQHandler /* Internal SW Interrupt #6 */
+ .long Internal7_IRQHandler /* Internal SW Interrupt #7 */
+
+ .size __Vectors, . - __Vectors
+ .equ __VectorsSize, . - __Vectors
+
+ .section .ram_vectors
+ .align 2
+ .globl __ramVectors
+__ramVectors:
+ .space __VectorsSize
+ .size __ramVectors, . - __ramVectors
+
+
+ .text
+ .thumb
+ .thumb_func
+ .align 2
+
+ /*
+ * Device startup customization
+ *
+ * Note. The global resources are not yet initialized (for example global variables, peripherals, clocks)
+ * because this function is executed as the first instruction in the ResetHandler.
+ * The PDL is also not initialized to use the proper register offsets.
+ * The user of this function is responsible for initializing the PDL and resources before using them.
+ */
+ .weak Cy_OnResetUser
+ .func Cy_OnResetUser, Cy_OnResetUser
+ .type Cy_OnResetUser, %function
+
+Cy_OnResetUser:
+ bx lr
+ .size Cy_OnResetUser, . - Cy_OnResetUser
+ .endfunc
+
+ /* Reset handler */
+ .weak Reset_Handler
+ .type Reset_Handler, %function
+
+Reset_Handler:
+ bl Cy_OnResetUser
+ cpsid i
+
+/* Firstly it copies data from read only memory to RAM. There are two schemes
+ * to copy. One can copy more than one sections. Another can only copy
+ * one section. The former scheme needs more instructions and read-only
+ * data to implement than the latter.
+ * Macro __STARTUP_COPY_MULTIPLE is used to choose between two schemes. */
+
+#ifdef __STARTUP_COPY_MULTIPLE
+/* Multiple sections scheme.
+ *
+ * Between symbol address __copy_table_start__ and __copy_table_end__,
+ * there are array of triplets, each of which specify:
+ * offset 0: LMA of start of a section to copy from
+ * offset 4: VMA of start of a section to copy to
+ * offset 8: size of the section to copy. Must be multiply of 4
+ *
+ * All addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r4, =__copy_table_start__
+ ldr r5, =__copy_table_end__
+
+.L_loop0:
+ cmp r4, r5
+ bge .L_loop0_done
+ ldr r1, [r4]
+ ldr r2, [r4, #4]
+ ldr r3, [r4, #8]
+
+.L_loop0_0:
+ subs r3, #4
+ blt .L_loop0_0_done
+ ldr r0, [r1, r3]
+ str r0, [r2, r3]
+ b .L_loop0_0
+
+.L_loop0_0_done:
+ adds r4, #12
+ b .L_loop0
+
+.L_loop0_done:
+#else
+/* Single section scheme.
+ *
+ * The ranges of copy from/to are specified by following symbols
+ * __etext: LMA of start of the section to copy from. Usually end of text
+ * __data_start__: VMA of start of the section to copy to
+ * __data_end__: VMA of end of the section to copy to
+ *
+ * All addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r1, =__etext
+ ldr r2, =__data_start__
+ ldr r3, =__data_end__
+
+ subs r3, r2
+ ble .L_loop1_done
+
+.L_loop1:
+ subs r3, #4
+ ldr r0, [r1,r3]
+ str r0, [r2,r3]
+ bgt .L_loop1
+
+.L_loop1_done:
+#endif /*__STARTUP_COPY_MULTIPLE */
+
+/* This part of work usually is done in C library startup code. Otherwise,
+ * define this macro to enable it in this startup.
+ *
+ * There are two schemes too. One can clear multiple BSS sections. Another
+ * can only clear one section. The former is more size expensive than the
+ * latter.
+ *
+ * Define macro __STARTUP_CLEAR_BSS_MULTIPLE to choose the former.
+ * Otherwise define macro __STARTUP_CLEAR_BSS to choose the later.
+ */
+#ifdef __STARTUP_CLEAR_BSS_MULTIPLE
+/* Multiple sections scheme.
+ *
+ * Between symbol address __copy_table_start__ and __copy_table_end__,
+ * there are array of tuples specifying:
+ * offset 0: Start of a BSS section
+ * offset 4: Size of this BSS section. Must be multiply of 4
+ */
+ ldr r3, =__zero_table_start__
+ ldr r4, =__zero_table_end__
+
+.L_loop2:
+ cmp r3, r4
+ bge .L_loop2_done
+ ldr r1, [r3]
+ ldr r2, [r3, #4]
+ movs r0, 0
+
+.L_loop2_0:
+ subs r2, #4
+ blt .L_loop2_0_done
+ str r0, [r1, r2]
+ b .L_loop2_0
+.L_loop2_0_done:
+
+ adds r3, #8
+ b .L_loop2
+.L_loop2_done:
+#elif defined (__STARTUP_CLEAR_BSS)
+/* Single BSS section scheme.
+ *
+ * The BSS section is specified by following symbols
+ * __bss_start__: start of the BSS section.
+ * __bss_end__: end of the BSS section.
+ *
+ * Both addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r1, =__bss_start__
+ ldr r2, =__bss_end__
+
+ movs r0, 0
+
+ subs r2, r1
+ ble .L_loop3_done
+
+.L_loop3:
+ subs r2, #4
+ str r0, [r1, r2]
+ bgt .L_loop3
+.L_loop3_done:
+#endif /* __STARTUP_CLEAR_BSS_MULTIPLE || __STARTUP_CLEAR_BSS */
+
+ /* Update Vector Table Offset Register. */
+ ldr r0, =__ramVectors
+ ldr r1, =CY_CPU_VTOR_ADDR
+ str r0, [r1]
+ dsb 0xF
+
+#ifndef __NO_SYSTEM_INIT
+ bl SystemInit
+#endif
+
+ bl main
+
+ /* Should never get here */
+ b .
+
+ .pool
+ .size Reset_Handler, . - Reset_Handler
+
+ .align 1
+ .thumb_func
+ .weak Default_Handler
+ .type Default_Handler, %function
+Default_Handler:
+ b .
+ .size Default_Handler, . - Default_Handler
+ .weak Cy_SysLib_FaultHandler
+ .type Cy_SysLib_FaultHandler, %function
+
+Cy_SysLib_FaultHandler:
+ b .
+ .size Cy_SysLib_FaultHandler, . - Cy_SysLib_FaultHandler
+ .type Fault_Handler, %function
+
+Fault_Handler:
+ /* Storing LR content for Creator call stack trace */
+ push {LR}
+ movs r0, #4
+ mov r1, LR
+ tst r0, r1
+ beq .L_MSP
+ mrs r0, PSP
+ b .L_API_call
+.L_MSP:
+ mrs r0, MSP
+.L_API_call:
+ /* Compensation of stack pointer address due to pushing 4 bytes of LR */
+ adds r0, r0, #4
+ bl Cy_SysLib_FaultHandler
+ b .
+ .size Fault_Handler, . - Fault_Handler
+
+.macro def_fault_Handler fault_handler_name
+ .weak \fault_handler_name
+ .set \fault_handler_name, Fault_Handler
+ .endm
+
+/* Macro to define default handlers. Default handler
+ * will be weak symbol and just dead loops. They can be
+ * overwritten by other handlers */
+ .macro def_irq_handler handler_name
+ .weak \handler_name
+ .set \handler_name, Default_Handler
+ .endm
+
+ def_irq_handler NMI_Handler
+
+ def_fault_Handler HardFault_Handler
+
+ def_irq_handler SVC_Handler
+ def_irq_handler PendSV_Handler
+ def_irq_handler SysTick_Handler
+
+ def_irq_handler NvicMux0_IRQHandler /* CPU User Interrupt #0 */
+ def_irq_handler NvicMux1_IRQHandler /* CPU User Interrupt #1 */
+ def_irq_handler NvicMux2_IRQHandler /* CPU User Interrupt #2 */
+ def_irq_handler NvicMux3_IRQHandler /* CPU User Interrupt #3 */
+ def_irq_handler NvicMux4_IRQHandler /* CPU User Interrupt #4 */
+ def_irq_handler NvicMux5_IRQHandler /* CPU User Interrupt #5 */
+ def_irq_handler NvicMux6_IRQHandler /* CPU User Interrupt #6 */
+ def_irq_handler NvicMux7_IRQHandler /* CPU User Interrupt #7 */
+ def_irq_handler Internal0_IRQHandler /* Internal SW Interrupt #0 */
+ def_irq_handler Internal1_IRQHandler /* Internal SW Interrupt #1 */
+ def_irq_handler Internal2_IRQHandler /* Internal SW Interrupt #2 */
+ def_irq_handler Internal3_IRQHandler /* Internal SW Interrupt #3 */
+ def_irq_handler Internal4_IRQHandler /* Internal SW Interrupt #4 */
+ def_irq_handler Internal5_IRQHandler /* Internal SW Interrupt #5 */
+ def_irq_handler Internal6_IRQHandler /* Internal SW Interrupt #6 */
+ def_irq_handler Internal7_IRQHandler /* Internal SW Interrupt #7 */
+
+ .end
+
+
+/* [] END OF FILE */
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx4_cm0plus.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx4_cm0plus.icf
new file mode 100644
index 0000000..2d0adf0
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx4_cm0plus.icf
@@ -0,0 +1,232 @@
+/*******************************************************************************
+* \file cy8c6xx4_cm0plus.icf
+* \version 2.70.1
+*
+* Linker file for the IAR compiler.
+*
+* The main purpose of the linker script is to describe how the sections in the
+* input files should be mapped into the output file, and to control the memory
+* layout of the output file.
+*
+* \note The entry point is fixed and starts at 0x10000000. The valid application
+* image should be placed there.
+*
+* \note The linker files included with the PDL template projects must be generic
+* and handle all common use cases. Your project may not use every section
+* defined in the linker files. In that case you may see warnings during the
+* build process. In your project, you can simply comment out or remove the
+* relevant code in the linker file.
+*
+********************************************************************************
+* \copyright
+* Copyright 2016-2020 Cypress Semiconductor Corporation
+* SPDX-License-Identifier: Apache-2.0
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*******************************************************************************/
+
+/*###ICF### Section handled by ICF editor, don't touch! ****/
+/*-Editor annotation file-*/
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_4.xml" */
+/*-Specials-*/
+define symbol __ICFEDIT_intvec_start__ = 0x00000000;
+
+/* The symbols below define the location and size of blocks of memory in the target.
+ * Use these symbols to specify the memory regions available for allocation.
+ */
+
+/* The following symbols control RAM and flash memory allocation for the CM0+ core.
+ * You can change the memory allocation by editing RAM and Flash symbols.
+ * Note that 2 KB of RAM (at the end of the SRAM) are reserved for system use.
+ * Using this memory region for other purposes will lead to unexpected behavior.
+ * Your changes must be aligned with the corresponding symbols for CM4 core in 'xx_cm4_dual.icf',
+ * where 'xx' is the device group; for example, 'cy8c6xx7_cm4_dual.icf'.
+ */
+/* RAM */
+define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x08001FFF;
+
+/* Flash */
+define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x10001FFF;
+
+/* The following symbols define a 32K flash region used for EEPROM emulation.
+ * This region can also be used as the general purpose flash.
+ * You can assign sections to this memory region for only one of the cores.
+ * Note some middleware (e.g. BLE, Emulated EEPROM) can place their data into this memory region.
+ * Therefore, repurposing this memory region will prevent such middleware from operation.
+ */
+define symbol __ICFEDIT_region_IROM2_start__ = 0x14000000;
+define symbol __ICFEDIT_region_IROM2_end__ = 0x14007FFF;
+
+/* The following symbols define device specific memory regions and must not be changed. */
+/* Supervisory FLASH - User Data */
+define symbol __ICFEDIT_region_IROM3_start__ = 0x16000800;
+define symbol __ICFEDIT_region_IROM3_end__ = 0x160007FF;
+
+/* Supervisory FLASH - Normal Access Restrictions (NAR) */
+define symbol __ICFEDIT_region_IROM4_start__ = 0x16001A00;
+define symbol __ICFEDIT_region_IROM4_end__ = 0x16001BFF;
+
+/* Supervisory FLASH - Public Key */
+define symbol __ICFEDIT_region_IROM5_start__ = 0x16005A00;
+define symbol __ICFEDIT_region_IROM5_end__ = 0x160065FF;
+
+/* Supervisory FLASH - Table of Content # 2 */
+define symbol __ICFEDIT_region_IROM6_start__ = 0x16007C00;
+define symbol __ICFEDIT_region_IROM6_end__ = 0x16007DFF;
+
+/* Supervisory FLASH - Table of Content # 2 Copy */
+define symbol __ICFEDIT_region_IROM7_start__ = 0x16007E00;
+define symbol __ICFEDIT_region_IROM7_end__ = 0x16007FFF;
+
+/* eFuse */
+define symbol __ICFEDIT_region_IROM8_start__ = 0x90700000;
+define symbol __ICFEDIT_region_IROM8_end__ = 0x907FFFFF;
+
+/* XIP */
+define symbol __ICFEDIT_region_EROM1_start__ = 0x18000000;
+define symbol __ICFEDIT_region_EROM1_end__ = 0x1FFFFFFF;
+
+define symbol __ICFEDIT_region_EROM2_start__ = 0x0;
+define symbol __ICFEDIT_region_EROM2_end__ = 0x0;
+define symbol __ICFEDIT_region_EROM3_start__ = 0x0;
+define symbol __ICFEDIT_region_EROM3_end__ = 0x0;
+
+
+define symbol __ICFEDIT_region_IRAM2_start__ = 0x0;
+define symbol __ICFEDIT_region_IRAM2_end__ = 0x0;
+define symbol __ICFEDIT_region_ERAM1_start__ = 0x0;
+define symbol __ICFEDIT_region_ERAM1_end__ = 0x0;
+define symbol __ICFEDIT_region_ERAM2_start__ = 0x0;
+define symbol __ICFEDIT_region_ERAM2_end__ = 0x0;
+define symbol __ICFEDIT_region_ERAM3_start__ = 0x0;
+define symbol __ICFEDIT_region_ERAM3_end__ = 0x0;
+/*-Sizes-*/
+if (!isdefinedsymbol(__STACK_SIZE)) {
+ define symbol __ICFEDIT_size_cstack__ = 0x1000;
+} else {
+ define symbol __ICFEDIT_size_cstack__ = __STACK_SIZE;
+}
+define symbol __ICFEDIT_size_proc_stack__ = 0x0;
+
+/* Defines the minimum heap size. The actual heap size will be expanded to the end of the stack region */
+if (!isdefinedsymbol(__HEAP_SIZE)) {
+ define symbol __ICFEDIT_size_heap__ = 0x0400;
+} else {
+ define symbol __ICFEDIT_size_heap__ = __HEAP_SIZE;
+}
+/**** End of ICF editor section. ###ICF###*/
+
+
+define memory mem with size = 4G;
+define region IROM1_region = mem:[from __ICFEDIT_region_IROM1_start__ to __ICFEDIT_region_IROM1_end__];
+define region IROM2_region = mem:[from __ICFEDIT_region_IROM2_start__ to __ICFEDIT_region_IROM2_end__];
+define region IROM3_region = mem:[from __ICFEDIT_region_IROM3_start__ to __ICFEDIT_region_IROM3_end__];
+define region IROM4_region = mem:[from __ICFEDIT_region_IROM4_start__ to __ICFEDIT_region_IROM4_end__];
+define region IROM5_region = mem:[from __ICFEDIT_region_IROM5_start__ to __ICFEDIT_region_IROM5_end__];
+define region IROM6_region = mem:[from __ICFEDIT_region_IROM6_start__ to __ICFEDIT_region_IROM6_end__];
+define region IROM7_region = mem:[from __ICFEDIT_region_IROM7_start__ to __ICFEDIT_region_IROM7_end__];
+define region IROM8_region = mem:[from __ICFEDIT_region_IROM8_start__ to __ICFEDIT_region_IROM8_end__];
+define region EROM1_region = mem:[from __ICFEDIT_region_EROM1_start__ to __ICFEDIT_region_EROM1_end__];
+define region IRAM1_region = mem:[from __ICFEDIT_region_IRAM1_start__ to __ICFEDIT_region_IRAM1_end__];
+
+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
+define block PROC_STACK with alignment = 8, size = __ICFEDIT_size_proc_stack__ { };
+define block HEAP with expanding size, alignment = 8, minimum size = __ICFEDIT_size_heap__ { };
+define block HSTACK {block HEAP, block PROC_STACK, last block CSTACK};
+define block RO {first section .intvec, readonly};
+
+/*-Initializations-*/
+initialize by copy { readwrite };
+do not initialize { section .noinit, section .intvec_ram };
+
+/*-Placement-*/
+
+/* Flash - Cortex-M0+ application */
+".cy_app_header" : place at start of IROM1_region { section .cy_app_header };
+place in IROM1_region { block RO };
+
+/* Emulated EEPROM Flash area */
+".cy_em_eeprom" : place at start of IROM2_region { section .cy_em_eeprom };
+
+/* Supervisory Flash - User Data */
+".cy_sflash_user_data" : place at start of IROM3_region { section .cy_sflash_user_data };
+
+/* Supervisory Flash - NAR */
+".cy_sflash_nar" : place at start of IROM4_region { section .cy_sflash_nar };
+
+/* Supervisory Flash - Public Key */
+".cy_sflash_public_key" : place at start of IROM5_region { section .cy_sflash_public_key };
+
+/* Supervisory Flash - TOC2 */
+".cy_toc_part2" : place at start of IROM6_region { section .cy_toc_part2 };
+
+/* Supervisory Flash - RTOC2 */
+".cy_rtoc_part2" : place at start of IROM7_region { section .cy_rtoc_part2 };
+
+/* eFuse */
+".cy_efuse" : place at start of IROM8_region { section .cy_efuse };
+
+/* Execute in Place (XIP). See the smif driver documentation for details. */
+".cy_xip" : place at start of EROM1_region { section .cy_xip };
+
+/* RAM */
+place at start of IRAM1_region { readwrite section .intvec_ram};
+place in IRAM1_region { readwrite };
+place at end of IRAM1_region { block HSTACK };
+
+/* These sections are used for additional metadata (silicon revision, Silicon/JTAG ID, etc.) storage. */
+".cymeta" : place at address mem : 0x90500000 { readonly section .cymeta };
+
+
+keep { section .cy_app_header,
+ section .cy_em_eeprom,
+ section .cy_sflash_user_data,
+ section .cy_sflash_nar,
+ section .cy_sflash_public_key,
+ section .cy_toc_part2,
+ section .cy_rtoc_part2,
+ section .cy_efuse,
+ section .cy_xip,
+ section .cymeta,
+ };
+
+
+/* The following symbols used by the cymcuelftool. */
+/* Flash */
+define exported symbol __cy_memory_0_start = 0x10000000;
+define exported symbol __cy_memory_0_length = 0x00040000;
+define exported symbol __cy_memory_0_row_size = 0x200;
+
+/* Emulated EEPROM Flash area */
+define exported symbol __cy_memory_1_start = 0x14000000;
+define exported symbol __cy_memory_1_length = 0x8000;
+define exported symbol __cy_memory_1_row_size = 0x200;
+
+/* Supervisory Flash */
+define exported symbol __cy_memory_2_start = 0x16000000;
+define exported symbol __cy_memory_2_length = 0x8000;
+define exported symbol __cy_memory_2_row_size = 0x200;
+
+/* XIP */
+define exported symbol __cy_memory_3_start = 0x18000000;
+define exported symbol __cy_memory_3_length = 0x08000000;
+define exported symbol __cy_memory_3_row_size = 0x200;
+
+/* eFuse */
+define exported symbol __cy_memory_4_start = 0x90700000;
+define exported symbol __cy_memory_4_length = 0x100000;
+define exported symbol __cy_memory_4_row_size = 1;
+
+/* EOF */
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx5_cm0plus.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx5_cm0plus.icf
index e57aae5..9859796 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx5_cm0plus.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx5_cm0plus.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cy8c6xx5_cm0plus.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -54,10 +54,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x08002000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x08001FFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10002000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x10001FFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx6_cm0plus.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx6_cm0plus.icf
index d7365c5..c353a72 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx6_cm0plus.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx6_cm0plus.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cy8c6xx6_cm0plus.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -54,10 +54,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x08002000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x08001FFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10002000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x10001FFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx7_cm0plus.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx7_cm0plus.icf
index 0179139..3934087 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx7_cm0plus.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx7_cm0plus.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cy8c6xx7_cm0plus.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -54,10 +54,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x08002000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x08001FFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10002000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x10001FFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx8_cm0plus.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx8_cm0plus.icf
index c331450..4165b94 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx8_cm0plus.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xx8_cm0plus.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cy8c6xx8_cm0plus.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -54,10 +54,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x08002000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x08001FFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10002000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x10001FFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xxa_cm0plus.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xxa_cm0plus.icf
index 9ccd5bd..47e9f70 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xxa_cm0plus.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cy8c6xxa_cm0plus.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cy8c6xxa_cm0plus.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -54,10 +54,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x08002000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x08001FFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10002000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x10001FFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cyb06xx5_cm0plus.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cyb06xx5_cm0plus.icf
index 23684ad..9220a1c 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cyb06xx5_cm0plus.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cyb06xx5_cm0plus.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cyb06xx5_cm0plus.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -52,10 +52,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x08010000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x0800FFFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10010000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x1000FFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cyb06xx7_cm0plus.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cyb06xx7_cm0plus.icf
index fa3adff..198a7c3 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cyb06xx7_cm0plus.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cyb06xx7_cm0plus.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cyb06xx7_cm0plus.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -52,10 +52,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x08010000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x0800FFFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10020000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x1001FFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cyb06xxa_cm0plus.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cyb06xxa_cm0plus.icf
index 4997407..f37758b 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cyb06xxa_cm0plus.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/cyb06xxa_cm0plus.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cyb06xxa_cm0plus.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -52,10 +52,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x08040000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x0803FFFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10040000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x1003FFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/startup_psoc6_04_cm0plus.s b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/startup_psoc6_04_cm0plus.s
new file mode 100644
index 0000000..a520420
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/TOOLCHAIN_IAR/startup_psoc6_04_cm0plus.s
@@ -0,0 +1,331 @@
+;/**************************************************************************//**
+; * @file startup_psoc6_04_cm0plus.s
+; * @brief CMSIS Core Device Startup File for
+; * ARMCM0plus Device Series
+; * @version V5.00
+; * @date 08. March 2016
+; ******************************************************************************/
+;/*
+; * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+; *
+; * SPDX-License-Identifier: Apache-2.0
+; *
+; * Licensed under the Apache License, Version 2.0 (the License); you may
+; * not use this file except in compliance with the License.
+; * You may obtain a copy of the License at
+; *
+; * www.apache.org/licenses/LICENSE-2.0
+; *
+; * Unless required by applicable law or agreed to in writing, software
+; * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; * See the License for the specific language governing permissions and
+; * limitations under the License.
+; */
+
+;
+; The modules in this file are included in the libraries, and may be replaced
+; by any user-defined modules that define the PUBLIC symbol _program_start or
+; a user defined start symbol.
+; To override the cstartup defined in the library, simply add your modified
+; version to the workbench project.
+;
+; The vector table is normally located at address 0.
+; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
+; The name "__vector_table" has special meaning for C-SPY:
+; it is where the SP start value is found, and the NVIC vector
+; table register (VTOR) is initialized to this address if != 0.
+;
+; Cortex-M version
+;
+
+ MODULE ?cstartup
+
+ ;; Forward declaration of sections.
+ SECTION CSTACK:DATA:NOROOT(3)
+ SECTION .intvec_ram:DATA:NOROOT(2)
+ SECTION .intvec:CODE:NOROOT(2)
+
+ EXTERN __iar_program_start
+ EXTERN SystemInit
+ EXTERN __iar_data_init3
+ EXTERN __iar_dynamic_initialization
+ PUBLIC __vector_table
+ PUBLIC __vector_table_0x1c
+ PUBLIC __Vectors
+ PUBLIC __Vectors_End
+ PUBLIC __Vectors_Size
+ PUBLIC __ramVectors
+
+ DATA
+
+__vector_table
+ DCD sfe(CSTACK)
+ DCD Reset_Handler
+
+ DCD 0x0000000D ; NMI_Handler is defined in ROM code
+ DCD HardFault_Handler
+ DCD 0
+ DCD 0
+ DCD 0
+__vector_table_0x1c
+ DCD 0
+ DCD 0
+ DCD 0
+ DCD 0
+ DCD SVC_Handler
+ DCD 0
+ DCD 0
+ DCD PendSV_Handler
+ DCD SysTick_Handler
+
+ ; External interrupts Description
+ DCD NvicMux0_IRQHandler ; CPU User Interrupt #0
+ DCD NvicMux1_IRQHandler ; CPU User Interrupt #1
+ DCD NvicMux2_IRQHandler ; CPU User Interrupt #2
+ DCD NvicMux3_IRQHandler ; CPU User Interrupt #3
+ DCD NvicMux4_IRQHandler ; CPU User Interrupt #4
+ DCD NvicMux5_IRQHandler ; CPU User Interrupt #5
+ DCD NvicMux6_IRQHandler ; CPU User Interrupt #6
+ DCD NvicMux7_IRQHandler ; CPU User Interrupt #7
+ DCD Internal0_IRQHandler ; Internal SW Interrupt #0
+ DCD Internal1_IRQHandler ; Internal SW Interrupt #1
+ DCD Internal2_IRQHandler ; Internal SW Interrupt #2
+ DCD Internal3_IRQHandler ; Internal SW Interrupt #3
+ DCD Internal4_IRQHandler ; Internal SW Interrupt #4
+ DCD Internal5_IRQHandler ; Internal SW Interrupt #5
+ DCD Internal6_IRQHandler ; Internal SW Interrupt #6
+ DCD Internal7_IRQHandler ; Internal SW Interrupt #7
+
+__Vectors_End
+
+__Vectors EQU __vector_table
+__Vectors_Size EQU __Vectors_End - __Vectors
+
+ SECTION .intvec_ram:DATA:REORDER:NOROOT(2)
+__ramVectors
+ DS32 __Vectors_Size
+
+
+ THUMB
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Default handlers
+;;
+ PUBWEAK Default_Handler
+ SECTION .text:CODE:REORDER:NOROOT(2)
+Default_Handler
+ B Default_Handler
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Weak function for startup customization
+;;
+;; Note. The global resources are not yet initialized (for example global variables, peripherals, clocks)
+;; because this function is executed as the first instruction in the ResetHandler.
+;; The PDL is also not initialized to use the proper register offsets.
+;; The user of this function is responsible for initializing the PDL and resources before using them.
+;;
+ PUBWEAK Cy_OnResetUser
+ SECTION .text:CODE:REORDER:NOROOT(2)
+Cy_OnResetUser
+ BX LR
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Define strong version to return zero for
+;; __iar_program_start to skip data sections
+;; initialization.
+;;
+ PUBLIC __low_level_init
+ SECTION .text:CODE:REORDER:NOROOT(2)
+__low_level_init
+ MOVS R0, #0
+ BX LR
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Default interrupt handlers.
+;;
+ THUMB
+ PUBWEAK Reset_Handler
+ SECTION .text:CODE:REORDER:NOROOT(2)
+Reset_Handler
+
+ ; Define strong function for startup customization
+ LDR R0, =Cy_OnResetUser
+ BLX R0
+
+ ; Disable global interrupts
+ CPSID I
+
+ ; Copy vectors from ROM to RAM
+ LDR r1, =__vector_table
+ LDR r0, =__ramVectors
+ LDR r2, =__Vectors_Size
+intvec_copy
+ LDR r3, [r1]
+ STR r3, [r0]
+ ADDS r0, r0, #4
+ ADDS r1, r1, #4
+ SUBS r2, r2, #1
+ CMP r2, #0
+ BNE intvec_copy
+
+ ; Update Vector Table Offset Register
+ LDR r0, =__ramVectors
+ LDR r1, =0xE000ED08
+ STR r0, [r1]
+ dsb
+
+ ; Initialize data sections
+ LDR R0, =__iar_data_init3
+ BLX R0
+
+ ; --manual_dynamic_initialization
+ BL __iar_dynamic_initialization
+
+ LDR R0, =SystemInit
+ BLX R0
+
+ LDR R0, =__iar_program_start
+ BLX R0
+
+; Should never get here
+Cy_Main_Exited
+ B Cy_Main_Exited
+
+
+ PUBWEAK NMI_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+NMI_Handler
+ B NMI_Handler
+
+
+ PUBWEAK Cy_SysLib_FaultHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+Cy_SysLib_FaultHandler
+ B Cy_SysLib_FaultHandler
+
+ PUBWEAK HardFault_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+HardFault_Handler
+ IMPORT Cy_SysLib_FaultHandler
+ movs r0, #4
+ mov r1, LR
+ tst r0, r1
+ beq L_MSP
+ mrs r0, PSP
+ b L_API_call
+L_MSP
+ mrs r0, MSP
+L_API_call
+ ; Storing LR content for Creator call stack trace
+ push {LR}
+ bl Cy_SysLib_FaultHandler
+
+
+ PUBWEAK SVC_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+SVC_Handler
+ B SVC_Handler
+
+ PUBWEAK PendSV_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+PendSV_Handler
+ B PendSV_Handler
+
+ PUBWEAK SysTick_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+SysTick_Handler
+ B SysTick_Handler
+
+
+ ; External interrupts
+ PUBWEAK NvicMux0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+NvicMux0_IRQHandler
+ B NvicMux0_IRQHandler
+
+ PUBWEAK NvicMux1_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+NvicMux1_IRQHandler
+ B NvicMux1_IRQHandler
+
+ PUBWEAK NvicMux2_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+NvicMux2_IRQHandler
+ B NvicMux2_IRQHandler
+
+ PUBWEAK NvicMux3_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+NvicMux3_IRQHandler
+ B NvicMux3_IRQHandler
+
+ PUBWEAK NvicMux4_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+NvicMux4_IRQHandler
+ B NvicMux4_IRQHandler
+
+ PUBWEAK NvicMux5_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+NvicMux5_IRQHandler
+ B NvicMux5_IRQHandler
+
+ PUBWEAK NvicMux6_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+NvicMux6_IRQHandler
+ B NvicMux6_IRQHandler
+
+ PUBWEAK NvicMux7_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+NvicMux7_IRQHandler
+ B NvicMux7_IRQHandler
+
+ PUBWEAK Internal0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+Internal0_IRQHandler
+ B Internal0_IRQHandler
+
+ PUBWEAK Internal1_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+Internal1_IRQHandler
+ B Internal1_IRQHandler
+
+ PUBWEAK Internal2_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+Internal2_IRQHandler
+ B Internal2_IRQHandler
+
+ PUBWEAK Internal3_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+Internal3_IRQHandler
+ B Internal3_IRQHandler
+
+ PUBWEAK Internal4_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+Internal4_IRQHandler
+ B Internal4_IRQHandler
+
+ PUBWEAK Internal5_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+Internal5_IRQHandler
+ B Internal5_IRQHandler
+
+ PUBWEAK Internal6_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+Internal6_IRQHandler
+ B Internal6_IRQHandler
+
+ PUBWEAK Internal7_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+Internal7_IRQHandler
+ B Internal7_IRQHandler
+
+
+ END
+
+
+; [] END OF FILE
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/system_psoc6_cm0plus.c b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/system_psoc6_cm0plus.c
index 18cc197..2e2b152 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/system_psoc6_cm0plus.c
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM0P/system_psoc6_cm0plus.c
@@ -1,12 +1,12 @@
/***************************************************************************//**
* \file system_psoc6_cm0plus.c
-* \version 2.70
+* \version 2.70.1
*
* The device system-source file.
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx4_cm4_dual.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx4_cm4_dual.sct
new file mode 100644
index 0000000..25303a7
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx4_cm4_dual.sct
@@ -0,0 +1,277 @@
+#! armclang -E --target=arm-arm-none-eabi -x c -mcpu=cortex-m4
+; The first line specifies a preprocessor command that the linker invokes
+; to pass a scatter file through a C preprocessor.
+
+;*******************************************************************************
+;* \file cy8c6xx4_cm4_dual.sct
+;* \version 2.70.1
+;*
+;* Linker file for the ARMCC.
+;*
+;* The main purpose of the linker script is to describe how the sections in the
+;* input files should be mapped into the output file, and to control the memory
+;* layout of the output file.
+;*
+;* \note The entry point location is fixed and starts at 0x10000000. The valid
+;* application image should be placed there.
+;*
+;* \note The linker files included with the PDL template projects must be
+;* generic and handle all common use cases. Your project may not use every
+;* section defined in the linker files. In that case you may see the warnings
+;* during the build process: L6314W (no section matches pattern) and/or L6329W
+;* (pattern only matches removed unused sections). In your project, you can
+;* suppress the warning by passing the "--diag_suppress=L6314W,L6329W" option to
+;* the linker, simply comment out or remove the relevant code in the linker
+;* file.
+;*
+;*******************************************************************************
+;* \copyright
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
+;* SPDX-License-Identifier: Apache-2.0
+;*
+;* Licensed under the Apache License, Version 2.0 (the "License");
+;* you may not use this file except in compliance with the License.
+;* You may obtain a copy of the License at
+;*
+;* http://www.apache.org/licenses/LICENSE-2.0
+;*
+;* Unless required by applicable law or agreed to in writing, software
+;* distributed under the License is distributed on an "AS IS" BASIS,
+;* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+;* See the License for the specific language governing permissions and
+;* limitations under the License.
+;******************************************************************************/
+
+; The defines below describe the location and size of blocks of memory in the target.
+; Use these defines to specify the memory regions available for allocation.
+
+; The following defines control RAM and flash memory allocation for the CM4 core.
+; You can change the memory allocation by editing RAM and Flash defines.
+; Note that 2 KB of RAM (at the end of the SRAM) are reserved for system use.
+; Using this memory region for other purposes will lead to unexpected behavior.
+; Your changes must be aligned with the corresponding defines for CM0+ core in 'xx_cm0plus.scat',
+; where 'xx' is the device group; for example, 'cy8c6xx7_cm0plus.scat'.
+; RAM
+#define RAM_START 0x08002000
+#define RAM_SIZE 0x0001D800
+; Flash
+#define FLASH_START 0x10000000
+#define FLASH_SIZE 0x00040000
+
+; The size of the stack section at the end of CM4 SRAM
+#define STACK_SIZE 0x00001000
+
+; By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+; More about CM0+ prebuilt images, see here:
+; https://github.com/cypresssemiconductorco/psoc6cm0p
+; The size of the Cortex-M0+ application flash image
+#define FLASH_CM0P_SIZE 0x2000
+
+; The following defines describe a 32K flash region used for EEPROM emulation.
+; This region can also be used as the general purpose flash.
+; You can assign sections to this memory region for only one of the cores.
+; Note some middleware (e.g. BLE, Emulated EEPROM) can place their data into this memory region.
+; Therefore, repurposing this memory region will prevent such middleware from operation.
+#define EM_EEPROM_START 0x14000000
+#define EM_EEPROM_SIZE 0x8000
+
+; The following defines describe device specific memory regions and must not be changed.
+; Supervisory flash: User data
+#define SFLASH_USER_DATA_START 0x16000800
+#define SFLASH_USER_DATA_SIZE 0x00000800
+
+; Supervisory flash: Normal Access Restrictions (NAR)
+#define SFLASH_NAR_START 0x16001A00
+#define SFLASH_NAR_SIZE 0x00000200
+
+; Supervisory flash: Public Key
+#define SFLASH_PUBLIC_KEY_START 0x16005A00
+#define SFLASH_PUBLIC_KEY_SIZE 0x00000C00
+
+; Supervisory flash: Table of Content # 2
+#define SFLASH_TOC_2_START 0x16007C00
+#define SFLASH_TOC_2_SIZE 0x00000200
+
+; Supervisory flash: Table of Content # 2 Copy
+#define SFLASH_RTOC_2_START 0x16007E00
+#define SFLASH_RTOC_2_SIZE 0x00000200
+
+; External memory
+#define XIP_START 0x18000000
+#define XIP_SIZE 0x08000000
+
+; eFuse
+#define EFUSE_START 0x90700000
+#define EFUSE_SIZE 0x100000
+
+
+; Cortex-M0+ application flash image area
+LR_IROM FLASH_START FLASH_CM0P_SIZE
+{
+ .cy_m0p_image +0 FLASH_CM0P_SIZE
+ {
+ * (.cy_m0p_image)
+ }
+}
+
+; Cortex-M4 application flash area
+LR_IROM1 (FLASH_START + FLASH_CM0P_SIZE) (FLASH_SIZE - FLASH_CM0P_SIZE)
+{
+ ER_FLASH_VECTORS +0
+ {
+ * (RESET, +FIRST)
+ }
+
+ ER_FLASH_CODE +0 FIXED
+ {
+ * (InRoot$$Sections)
+ * (+RO)
+ }
+
+ ER_RAM_VECTORS RAM_START UNINIT
+ {
+ * (RESET_RAM, +FIRST)
+ }
+
+ RW_RAM_DATA +0
+ {
+ * (.cy_ramfunc)
+ * (+RW, +ZI)
+ }
+
+ ; Place variables in the section that should not be initialized during the
+ ; device startup.
+ RW_IRAM1 +0 UNINIT
+ {
+ * (.noinit)
+ }
+
+ ; Application heap area (HEAP)
+ ARM_LIB_HEAP +0 EMPTY ((RAM_START+RAM_SIZE)-AlignExpr(ImageLimit(RW_IRAM1), 8)-STACK_SIZE)
+ {
+ }
+
+ ; Stack region growing down
+ ARM_LIB_STACK (RAM_START+RAM_SIZE) EMPTY -STACK_SIZE
+ {
+ }
+
+ ; Used for the digital signature of the secure application and the
+ ; Bootloader SDK application. The size of the section depends on the required
+ ; data size.
+ .cy_app_signature (FLASH_START + FLASH_SIZE - 256) 256
+ {
+ * (.cy_app_signature)
+ }
+}
+
+
+; Emulated EEPROM Flash area
+LR_EM_EEPROM EM_EEPROM_START EM_EEPROM_SIZE
+{
+ .cy_em_eeprom +0
+ {
+ * (.cy_em_eeprom)
+ }
+}
+
+; Supervisory flash: User data
+LR_SFLASH_USER_DATA SFLASH_USER_DATA_START SFLASH_USER_DATA_SIZE
+{
+ .cy_sflash_user_data +0
+ {
+ * (.cy_sflash_user_data)
+ }
+}
+
+; Supervisory flash: Normal Access Restrictions (NAR)
+LR_SFLASH_NAR SFLASH_NAR_START SFLASH_NAR_SIZE
+{
+ .cy_sflash_nar +0
+ {
+ * (.cy_sflash_nar)
+ }
+}
+
+; Supervisory flash: Public Key
+LR_SFLASH_PUBLIC_KEY SFLASH_PUBLIC_KEY_START SFLASH_PUBLIC_KEY_SIZE
+{
+ .cy_sflash_public_key +0
+ {
+ * (.cy_sflash_public_key)
+ }
+}
+
+; Supervisory flash: Table of Content # 2
+LR_SFLASH_TOC_2 SFLASH_TOC_2_START SFLASH_TOC_2_SIZE
+{
+ .cy_toc_part2 +0
+ {
+ * (.cy_toc_part2)
+ }
+}
+
+; Supervisory flash: Table of Content # 2 Copy
+LR_SFLASH_RTOC_2 SFLASH_RTOC_2_START SFLASH_RTOC_2_SIZE
+{
+ .cy_rtoc_part2 +0
+ {
+ * (.cy_rtoc_part2)
+ }
+}
+
+
+; Places the code in the Execute in Place (XIP) section. See the smif driver documentation for details.
+LR_EROM XIP_START XIP_SIZE
+{
+ .cy_xip +0
+ {
+ * (.cy_xip)
+ }
+}
+
+
+; eFuse
+LR_EFUSE EFUSE_START EFUSE_SIZE
+{
+ .cy_efuse +0
+ {
+ * (.cy_efuse)
+ }
+}
+
+
+; The section is used for additional metadata (silicon revision, Silicon/JTAG ID, etc.) storage.
+CYMETA 0x90500000
+{
+ .cymeta +0 { * (.cymeta) }
+}
+
+/* The following symbols used by the cymcuelftool. */
+/* Flash */
+#define __cy_memory_0_start 0x10000000
+#define __cy_memory_0_length 0x00040000
+#define __cy_memory_0_row_size 0x200
+
+/* Emulated EEPROM Flash area */
+#define __cy_memory_1_start 0x14000000
+#define __cy_memory_1_length 0x8000
+#define __cy_memory_1_row_size 0x200
+
+/* Supervisory Flash */
+#define __cy_memory_2_start 0x16000000
+#define __cy_memory_2_length 0x8000
+#define __cy_memory_2_row_size 0x200
+
+/* XIP */
+#define __cy_memory_3_start 0x18000000
+#define __cy_memory_3_length 0x08000000
+#define __cy_memory_3_row_size 0x200
+
+/* eFuse */
+#define __cy_memory_4_start 0x90700000
+#define __cy_memory_4_length 0x100000
+#define __cy_memory_4_row_size 1
+
+
+/* [] END OF FILE */
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx5_cm4_dual.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx5_cm4_dual.sct
index 47ed29d..4484738 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx5_cm4_dual.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx5_cm4_dual.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cy8c6xx5_cm4_dual.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
@@ -61,6 +61,9 @@
; The size of the stack section at the end of CM4 SRAM
#define STACK_SIZE 0x00001000
+; By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+; More about CM0+ prebuilt images, see here:
+; https://github.com/cypresssemiconductorco/psoc6cm0p
; The size of the Cortex-M0+ application flash image
#define FLASH_CM0P_SIZE 0x2000
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx6_cm4.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx6_cm4.sct
index f573555..a3a492c 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx6_cm4.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx6_cm4.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cy8c6xx6_cm4.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx6_cm4_dual.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx6_cm4_dual.sct
index 7bfcba9..2fec207 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx6_cm4_dual.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx6_cm4_dual.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cy8c6xx6_cm4_dual.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
@@ -61,6 +61,9 @@
; The size of the stack section at the end of CM4 SRAM
#define STACK_SIZE 0x00001000
+; By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+; More about CM0+ prebuilt images, see here:
+; https://github.com/cypresssemiconductorco/psoc6cm0p
; The size of the Cortex-M0+ application flash image
#define FLASH_CM0P_SIZE 0x2000
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx7_cm4.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx7_cm4.sct
index 3c1a00e..4792967 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx7_cm4.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx7_cm4.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cy8c6xx7_cm4.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx7_cm4_dual.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx7_cm4_dual.sct
index 5efe315..e515fb3 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx7_cm4_dual.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx7_cm4_dual.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cy8c6xx7_cm4_dual.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
@@ -61,6 +61,9 @@
; The size of the stack section at the end of CM4 SRAM
#define STACK_SIZE 0x00001000
+; By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+; More about CM0+ prebuilt images, see here:
+; https://github.com/cypresssemiconductorco/psoc6cm0p
; The size of the Cortex-M0+ application flash image
#define FLASH_CM0P_SIZE 0x2000
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx8_cm4_dual.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx8_cm4_dual.sct
index 0327a2b..93546f9 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx8_cm4_dual.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xx8_cm4_dual.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cy8c6xx8_cm4_dual.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
@@ -61,6 +61,9 @@
; The size of the stack section at the end of CM4 SRAM
#define STACK_SIZE 0x00001000
+; By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+; More about CM0+ prebuilt images, see here:
+; https://github.com/cypresssemiconductorco/psoc6cm0p
; The size of the Cortex-M0+ application flash image
#define FLASH_CM0P_SIZE 0x2000
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xxa_cm4_dual.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xxa_cm4_dual.sct
index 18abfff..b4b7402 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xxa_cm4_dual.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cy8c6xxa_cm4_dual.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cy8c6xxa_cm4_dual.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
@@ -61,6 +61,9 @@
; The size of the stack section at the end of CM4 SRAM
#define STACK_SIZE 0x00001000
+; By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+; More about CM0+ prebuilt images, see here:
+; https://github.com/cypresssemiconductorco/psoc6cm0p
; The size of the Cortex-M0+ application flash image
#define FLASH_CM0P_SIZE 0x2000
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx5_cm4.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx5_cm4.sct
index 0a61404..60ea0f9 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx5_cm4.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx5_cm4.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cyb06xx5_cm4.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx5_cm4_dual.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx5_cm4_dual.sct
index ba9834b..5ee78f3 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx5_cm4_dual.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx5_cm4_dual.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cyb06xx5_cm4_dual.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx7_cm4.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx7_cm4.sct
index d0de70c..704301d 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx7_cm4.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx7_cm4.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cyb06xx7_cm4.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx7_cm4_dual.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx7_cm4_dual.sct
index ed8c6d1..191381e 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx7_cm4_dual.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xx7_cm4_dual.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cyb06xx7_cm4_dual.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xxa_cm4.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xxa_cm4.sct
index c95e2d4..7fbbd84 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xxa_cm4.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xxa_cm4.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cyb06xxa_cm4.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xxa_cm4_dual.sct b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xxa_cm4_dual.sct
index f80d292..4e58279 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xxa_cm4_dual.sct
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/cyb06xxa_cm4_dual.sct
@@ -4,7 +4,7 @@
;*******************************************************************************
;* \file cyb06xxa_cm4_dual.sct
-;* \version 2.70
+;* \version 2.70.1
;*
;* Linker file for the ARMCC.
;*
@@ -26,7 +26,7 @@
;*
;*******************************************************************************
;* \copyright
-;* Copyright 2016-2019 Cypress Semiconductor Corporation
+;* Copyright 2016-2020 Cypress Semiconductor Corporation
;* SPDX-License-Identifier: Apache-2.0
;*
;* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/startup_psoc6_04_cm4.s b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/startup_psoc6_04_cm4.s
new file mode 100644
index 0000000..27109e5
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_ARM/startup_psoc6_04_cm4.s
@@ -0,0 +1,659 @@
+;/**************************************************************************//**
+; * @file startup_psoc6_04_cm4.s
+; * @brief CMSIS Core Device Startup File for
+; * ARMCM4 Device Series
+; * @version V5.00
+; * @date 02. March 2016
+; ******************************************************************************/
+;/*
+; * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+; *
+; * SPDX-License-Identifier: Apache-2.0
+; *
+; * Licensed under the Apache License, Version 2.0 (the License); you may
+; * not use this file except in compliance with the License.
+; * You may obtain a copy of the License at
+; *
+; * www.apache.org/licenses/LICENSE-2.0
+; *
+; * Unless required by applicable law or agreed to in writing, software
+; * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; * See the License for the specific language governing permissions and
+; * limitations under the License.
+; */
+
+ PRESERVE8
+ THUMB
+
+; Vector Table Mapped to Address 0 at Reset
+
+ AREA RESET, DATA, READONLY
+ EXPORT __Vectors
+ EXPORT __Vectors_End
+ EXPORT __Vectors_Size
+
+ IMPORT |Image$$ARM_LIB_STACK$$ZI$$Base|
+ IMPORT |Image$$ARM_LIB_STACK$$ZI$$Length|
+
+__Vectors DCD |Image$$ARM_LIB_STACK$$ZI$$Base| + |Image$$ARM_LIB_STACK$$ZI$$Length| ; Top of Stack
+
+ DCD Reset_Handler ; Reset Handler
+
+ DCD 0x0000000D ; NMI Handler located at ROM code
+ DCD HardFault_Handler ; Hard Fault Handler
+ DCD MemManage_Handler ; MPU Fault Handler
+ DCD BusFault_Handler ; Bus Fault Handler
+ DCD UsageFault_Handler ; Usage Fault Handler
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD SVC_Handler ; SVCall Handler
+ DCD DebugMon_Handler ; Debug Monitor Handler
+ DCD 0 ; Reserved
+ DCD PendSV_Handler ; PendSV Handler
+ DCD SysTick_Handler ; SysTick Handler
+
+ ; External interrupts Description
+ DCD ioss_interrupts_gpio_0_IRQHandler ; GPIO Port Interrupt #0
+ DCD 0 ; Reserved
+ DCD ioss_interrupts_gpio_2_IRQHandler ; GPIO Port Interrupt #2
+ DCD ioss_interrupts_gpio_3_IRQHandler ; GPIO Port Interrupt #3
+ DCD 0 ; Reserved
+ DCD ioss_interrupts_gpio_5_IRQHandler ; GPIO Port Interrupt #5
+ DCD ioss_interrupts_gpio_6_IRQHandler ; GPIO Port Interrupt #6
+ DCD ioss_interrupts_gpio_7_IRQHandler ; GPIO Port Interrupt #7
+ DCD ioss_interrupts_gpio_8_IRQHandler ; GPIO Port Interrupt #8
+ DCD ioss_interrupts_gpio_9_IRQHandler ; GPIO Port Interrupt #9
+ DCD ioss_interrupts_gpio_10_IRQHandler ; GPIO Port Interrupt #10
+ DCD ioss_interrupts_gpio_11_IRQHandler ; GPIO Port Interrupt #11
+ DCD ioss_interrupts_gpio_12_IRQHandler ; GPIO Port Interrupt #12
+ DCD 0 ; Reserved
+ DCD ioss_interrupts_gpio_14_IRQHandler ; GPIO Port Interrupt #14
+ DCD ioss_interrupt_gpio_IRQHandler ; GPIO All Ports
+ DCD ioss_interrupt_vdd_IRQHandler ; GPIO Supply Detect Interrupt
+ DCD lpcomp_interrupt_IRQHandler ; Low Power Comparator Interrupt
+ DCD scb_6_interrupt_IRQHandler ; Serial Communication Block #6 (DeepSleep capable)
+ DCD srss_interrupt_mcwdt_0_IRQHandler ; Multi Counter Watchdog Timer interrupt
+ DCD srss_interrupt_mcwdt_1_IRQHandler ; Multi Counter Watchdog Timer interrupt
+ DCD srss_interrupt_backup_IRQHandler ; Backup domain interrupt
+ DCD srss_interrupt_IRQHandler ; Other combined Interrupts for SRSS (LVD, WDT, CLKCAL)
+ DCD cpuss_interrupts_ipc_0_IRQHandler ; CPUSS Inter Process Communication Interrupt #0
+ DCD cpuss_interrupts_ipc_1_IRQHandler ; CPUSS Inter Process Communication Interrupt #1
+ DCD cpuss_interrupts_ipc_2_IRQHandler ; CPUSS Inter Process Communication Interrupt #2
+ DCD cpuss_interrupts_ipc_3_IRQHandler ; CPUSS Inter Process Communication Interrupt #3
+ DCD cpuss_interrupts_ipc_4_IRQHandler ; CPUSS Inter Process Communication Interrupt #4
+ DCD cpuss_interrupts_ipc_5_IRQHandler ; CPUSS Inter Process Communication Interrupt #5
+ DCD cpuss_interrupts_ipc_6_IRQHandler ; CPUSS Inter Process Communication Interrupt #6
+ DCD cpuss_interrupts_ipc_7_IRQHandler ; CPUSS Inter Process Communication Interrupt #7
+ DCD cpuss_interrupts_ipc_8_IRQHandler ; CPUSS Inter Process Communication Interrupt #8
+ DCD cpuss_interrupts_ipc_9_IRQHandler ; CPUSS Inter Process Communication Interrupt #9
+ DCD cpuss_interrupts_ipc_10_IRQHandler ; CPUSS Inter Process Communication Interrupt #10
+ DCD cpuss_interrupts_ipc_11_IRQHandler ; CPUSS Inter Process Communication Interrupt #11
+ DCD cpuss_interrupts_ipc_12_IRQHandler ; CPUSS Inter Process Communication Interrupt #12
+ DCD cpuss_interrupts_ipc_13_IRQHandler ; CPUSS Inter Process Communication Interrupt #13
+ DCD cpuss_interrupts_ipc_14_IRQHandler ; CPUSS Inter Process Communication Interrupt #14
+ DCD cpuss_interrupts_ipc_15_IRQHandler ; CPUSS Inter Process Communication Interrupt #15
+ DCD pass_interrupt_sar_0_IRQHandler ; SAR ADC0 interrupt
+ DCD pass_interrupt_sar_1_IRQHandler ; SAR ADC1 interrupt
+ DCD pass_interrupt_ctb_IRQHandler ; individual interrupt per CTB
+ DCD 0 ; Reserved
+ DCD pass_interrupt_fifo_0_IRQHandler ; PASS FIFO0
+ DCD pass_interrupt_fifo_1_IRQHandler ; PASS FIFO1
+ DCD scb_0_interrupt_IRQHandler ; Serial Communication Block #0
+ DCD scb_1_interrupt_IRQHandler ; Serial Communication Block #1
+ DCD scb_2_interrupt_IRQHandler ; Serial Communication Block #2
+ DCD 0 ; Reserved
+ DCD scb_4_interrupt_IRQHandler ; Serial Communication Block #4
+ DCD scb_5_interrupt_IRQHandler ; Serial Communication Block #5
+ DCD csd_interrupt_IRQHandler ; CSD (Capsense) interrupt
+ DCD cpuss_interrupts_dmac_0_IRQHandler ; CPUSS DMAC, Channel #0
+ DCD cpuss_interrupts_dmac_1_IRQHandler ; CPUSS DMAC, Channel #1
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD cpuss_interrupts_dw0_0_IRQHandler ; CPUSS DataWire #0, Channel #0
+ DCD cpuss_interrupts_dw0_1_IRQHandler ; CPUSS DataWire #0, Channel #1
+ DCD cpuss_interrupts_dw0_2_IRQHandler ; CPUSS DataWire #0, Channel #2
+ DCD cpuss_interrupts_dw0_3_IRQHandler ; CPUSS DataWire #0, Channel #3
+ DCD cpuss_interrupts_dw0_4_IRQHandler ; CPUSS DataWire #0, Channel #4
+ DCD cpuss_interrupts_dw0_5_IRQHandler ; CPUSS DataWire #0, Channel #5
+ DCD cpuss_interrupts_dw0_6_IRQHandler ; CPUSS DataWire #0, Channel #6
+ DCD cpuss_interrupts_dw0_7_IRQHandler ; CPUSS DataWire #0, Channel #7
+ DCD cpuss_interrupts_dw0_8_IRQHandler ; CPUSS DataWire #0, Channel #8
+ DCD cpuss_interrupts_dw0_9_IRQHandler ; CPUSS DataWire #0, Channel #9
+ DCD cpuss_interrupts_dw0_10_IRQHandler ; CPUSS DataWire #0, Channel #10
+ DCD cpuss_interrupts_dw0_11_IRQHandler ; CPUSS DataWire #0, Channel #11
+ DCD cpuss_interrupts_dw0_12_IRQHandler ; CPUSS DataWire #0, Channel #12
+ DCD cpuss_interrupts_dw0_13_IRQHandler ; CPUSS DataWire #0, Channel #13
+ DCD cpuss_interrupts_dw0_14_IRQHandler ; CPUSS DataWire #0, Channel #14
+ DCD cpuss_interrupts_dw0_15_IRQHandler ; CPUSS DataWire #0, Channel #15
+ DCD cpuss_interrupts_dw0_16_IRQHandler ; CPUSS DataWire #0, Channel #16
+ DCD cpuss_interrupts_dw0_17_IRQHandler ; CPUSS DataWire #0, Channel #17
+ DCD cpuss_interrupts_dw0_18_IRQHandler ; CPUSS DataWire #0, Channel #18
+ DCD cpuss_interrupts_dw0_19_IRQHandler ; CPUSS DataWire #0, Channel #19
+ DCD cpuss_interrupts_dw0_20_IRQHandler ; CPUSS DataWire #0, Channel #20
+ DCD cpuss_interrupts_dw0_21_IRQHandler ; CPUSS DataWire #0, Channel #21
+ DCD cpuss_interrupts_dw0_22_IRQHandler ; CPUSS DataWire #0, Channel #22
+ DCD cpuss_interrupts_dw0_23_IRQHandler ; CPUSS DataWire #0, Channel #23
+ DCD cpuss_interrupts_dw0_24_IRQHandler ; CPUSS DataWire #0, Channel #24
+ DCD cpuss_interrupts_dw0_25_IRQHandler ; CPUSS DataWire #0, Channel #25
+ DCD cpuss_interrupts_dw0_26_IRQHandler ; CPUSS DataWire #0, Channel #26
+ DCD cpuss_interrupts_dw0_27_IRQHandler ; CPUSS DataWire #0, Channel #27
+ DCD cpuss_interrupts_dw0_28_IRQHandler ; CPUSS DataWire #0, Channel #28
+ DCD cpuss_interrupts_dw1_0_IRQHandler ; CPUSS DataWire #1, Channel #0
+ DCD cpuss_interrupts_dw1_1_IRQHandler ; CPUSS DataWire #1, Channel #1
+ DCD cpuss_interrupts_dw1_2_IRQHandler ; CPUSS DataWire #1, Channel #2
+ DCD cpuss_interrupts_dw1_3_IRQHandler ; CPUSS DataWire #1, Channel #3
+ DCD cpuss_interrupts_dw1_4_IRQHandler ; CPUSS DataWire #1, Channel #4
+ DCD cpuss_interrupts_dw1_5_IRQHandler ; CPUSS DataWire #1, Channel #5
+ DCD cpuss_interrupts_dw1_6_IRQHandler ; CPUSS DataWire #1, Channel #6
+ DCD cpuss_interrupts_dw1_7_IRQHandler ; CPUSS DataWire #1, Channel #7
+ DCD cpuss_interrupts_dw1_8_IRQHandler ; CPUSS DataWire #1, Channel #8
+ DCD cpuss_interrupts_dw1_9_IRQHandler ; CPUSS DataWire #1, Channel #9
+ DCD cpuss_interrupts_dw1_10_IRQHandler ; CPUSS DataWire #1, Channel #10
+ DCD cpuss_interrupts_dw1_11_IRQHandler ; CPUSS DataWire #1, Channel #11
+ DCD cpuss_interrupts_dw1_12_IRQHandler ; CPUSS DataWire #1, Channel #12
+ DCD cpuss_interrupts_dw1_13_IRQHandler ; CPUSS DataWire #1, Channel #13
+ DCD cpuss_interrupts_dw1_14_IRQHandler ; CPUSS DataWire #1, Channel #14
+ DCD cpuss_interrupts_dw1_15_IRQHandler ; CPUSS DataWire #1, Channel #15
+ DCD cpuss_interrupts_dw1_16_IRQHandler ; CPUSS DataWire #1, Channel #16
+ DCD cpuss_interrupts_dw1_17_IRQHandler ; CPUSS DataWire #1, Channel #17
+ DCD cpuss_interrupts_dw1_18_IRQHandler ; CPUSS DataWire #1, Channel #18
+ DCD cpuss_interrupts_dw1_19_IRQHandler ; CPUSS DataWire #1, Channel #19
+ DCD cpuss_interrupts_dw1_20_IRQHandler ; CPUSS DataWire #1, Channel #20
+ DCD cpuss_interrupts_dw1_21_IRQHandler ; CPUSS DataWire #1, Channel #21
+ DCD cpuss_interrupts_dw1_22_IRQHandler ; CPUSS DataWire #1, Channel #22
+ DCD cpuss_interrupts_dw1_23_IRQHandler ; CPUSS DataWire #1, Channel #23
+ DCD cpuss_interrupts_dw1_24_IRQHandler ; CPUSS DataWire #1, Channel #24
+ DCD cpuss_interrupts_dw1_25_IRQHandler ; CPUSS DataWire #1, Channel #25
+ DCD cpuss_interrupts_dw1_26_IRQHandler ; CPUSS DataWire #1, Channel #26
+ DCD cpuss_interrupts_dw1_27_IRQHandler ; CPUSS DataWire #1, Channel #27
+ DCD cpuss_interrupts_dw1_28_IRQHandler ; CPUSS DataWire #1, Channel #28
+ DCD cpuss_interrupts_fault_0_IRQHandler ; CPUSS Fault Structure Interrupt #0
+ DCD cpuss_interrupts_fault_1_IRQHandler ; CPUSS Fault Structure Interrupt #1
+ DCD cpuss_interrupt_crypto_IRQHandler ; CRYPTO Accelerator Interrupt
+ DCD cpuss_interrupt_fm_IRQHandler ; FLASH Macro Interrupt
+ DCD cpuss_interrupts_cm4_fp_IRQHandler ; Floating Point operation fault
+ DCD cpuss_interrupts_cm0_cti_0_IRQHandler ; CM0+ CTI #0
+ DCD cpuss_interrupts_cm0_cti_1_IRQHandler ; CM0+ CTI #1
+ DCD cpuss_interrupts_cm4_cti_0_IRQHandler ; CM4 CTI #0
+ DCD cpuss_interrupts_cm4_cti_1_IRQHandler ; CM4 CTI #1
+ DCD tcpwm_0_interrupts_0_IRQHandler ; TCPWM #0, Counter #0
+ DCD tcpwm_0_interrupts_1_IRQHandler ; TCPWM #0, Counter #1
+ DCD tcpwm_0_interrupts_2_IRQHandler ; TCPWM #0, Counter #2
+ DCD tcpwm_0_interrupts_3_IRQHandler ; TCPWM #0, Counter #3
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD tcpwm_0_interrupts_256_IRQHandler ; TCPWM #0, Counter #256
+ DCD tcpwm_0_interrupts_257_IRQHandler ; TCPWM #0, Counter #257
+ DCD tcpwm_0_interrupts_258_IRQHandler ; TCPWM #0, Counter #258
+ DCD tcpwm_0_interrupts_259_IRQHandler ; TCPWM #0, Counter #259
+ DCD tcpwm_0_interrupts_260_IRQHandler ; TCPWM #0, Counter #260
+ DCD tcpwm_0_interrupts_261_IRQHandler ; TCPWM #0, Counter #261
+ DCD tcpwm_0_interrupts_262_IRQHandler ; TCPWM #0, Counter #262
+ DCD tcpwm_0_interrupts_263_IRQHandler ; TCPWM #0, Counter #263
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD pass_interrupt_dacs_IRQHandler ; Consolidated interrrupt for all DACs
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD smif_interrupt_IRQHandler ; Serial Memory Interface interrupt
+ DCD usb_interrupt_hi_IRQHandler ; USB Interrupt
+ DCD usb_interrupt_med_IRQHandler ; USB Interrupt
+ DCD usb_interrupt_lo_IRQHandler ; USB Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD canfd_0_interrupt0_IRQHandler ; Can #0, Consolidated interrupt #0
+ DCD canfd_0_interrupts0_0_IRQHandler ; CAN #0, Interrupt #0, Channel #0
+ DCD canfd_0_interrupts1_0_IRQHandler ; CAN #0, Interrupt #1, Channel #0
+ DCD cpuss_interrupts_dw1_29_IRQHandler ; CPUSS DataWire #1, Channel #29
+ DCD cpuss_interrupts_dw1_30_IRQHandler ; CPUSS DataWire #1, Channel #30
+ DCD cpuss_interrupts_dw1_31_IRQHandler ; CPUSS DataWire #1, Channel #31
+ DCD cpuss_interrupts_dw0_29_IRQHandler ; CPUSS DataWire #0, Channel #29
+
+__Vectors_End
+
+__Vectors_Size EQU __Vectors_End - __Vectors
+ EXPORT __ramVectors
+ AREA RESET_RAM, READWRITE, NOINIT
+__ramVectors SPACE __Vectors_Size
+
+
+ AREA |.text|, CODE, READONLY
+
+
+; Weak function for startup customization
+;
+; Note. The global resources are not yet initialized (for example global variables, peripherals, clocks)
+; because this function is executed as the first instruction in the ResetHandler.
+; The PDL is also not initialized to use the proper register offsets.
+; The user of this function is responsible for initializing the PDL and resources before using them.
+;
+Cy_OnResetUser PROC
+ EXPORT Cy_OnResetUser [WEAK]
+ BX LR
+ ENDP
+
+; Reset Handler
+Reset_Handler PROC
+ EXPORT Reset_Handler [WEAK]
+ IMPORT Cy_SystemInitFpuEnable
+ IMPORT __main
+
+ ; Define strong function for startup customization
+ BL Cy_OnResetUser
+
+ ; Disable global interrupts
+ CPSID I
+
+ ; Copy vectors from ROM to RAM
+ LDR r1, =__Vectors
+ LDR r0, =__ramVectors
+ LDR r2, =__Vectors_Size
+Vectors_Copy
+ LDR r3, [r1]
+ STR r3, [r0]
+ ADDS r0, r0, #4
+ ADDS r1, r1, #4
+ SUBS r2, r2, #1
+ CMP r2, #0
+ BNE Vectors_Copy
+
+ ; Update Vector Table Offset Register. */
+ LDR r0, =__ramVectors
+ LDR r1, =0xE000ED08
+ STR r0, [r1]
+ dsb 0xF
+
+ ; Enable the FPU if used
+ LDR R0, =Cy_SystemInitFpuEnable
+ BLX R0
+
+ LDR R0, =__main
+ BLX R0
+
+ ; Should never get here
+ B .
+
+ ENDP
+
+; Dummy Exception Handlers (infinite loops which can be modified)
+NMI_Handler PROC
+ EXPORT NMI_Handler [WEAK]
+ B .
+ ENDP
+
+Cy_SysLib_FaultHandler PROC
+ EXPORT Cy_SysLib_FaultHandler [WEAK]
+ B .
+ ENDP
+HardFault_Wrapper\
+ PROC
+ EXPORT HardFault_Wrapper [WEAK]
+ movs r0, #4
+ mov r1, LR
+ tst r0, r1
+ beq L_MSP
+ mrs r0, PSP
+ bl L_API_call
+L_MSP
+ mrs r0, MSP
+L_API_call
+ bl Cy_SysLib_FaultHandler
+ ENDP
+HardFault_Handler\
+ PROC
+ EXPORT HardFault_Handler [WEAK]
+ B HardFault_Wrapper
+ ENDP
+MemManage_Handler\
+ PROC
+ EXPORT MemManage_Handler [WEAK]
+ B HardFault_Wrapper
+ ENDP
+BusFault_Handler\
+ PROC
+ EXPORT BusFault_Handler [WEAK]
+ B HardFault_Wrapper
+ ENDP
+UsageFault_Handler\
+ PROC
+ EXPORT UsageFault_Handler [WEAK]
+ B HardFault_Wrapper
+ ENDP
+SVC_Handler PROC
+ EXPORT SVC_Handler [WEAK]
+ B .
+ ENDP
+DebugMon_Handler\
+ PROC
+ EXPORT DebugMon_Handler [WEAK]
+ B .
+ ENDP
+PendSV_Handler PROC
+ EXPORT PendSV_Handler [WEAK]
+ B .
+ ENDP
+SysTick_Handler PROC
+ EXPORT SysTick_Handler [WEAK]
+ B .
+ ENDP
+
+Default_Handler PROC
+ EXPORT Default_Handler [WEAK]
+ EXPORT ioss_interrupts_gpio_0_IRQHandler [WEAK]
+ EXPORT ioss_interrupts_gpio_2_IRQHandler [WEAK]
+ EXPORT ioss_interrupts_gpio_3_IRQHandler [WEAK]
+ EXPORT ioss_interrupts_gpio_5_IRQHandler [WEAK]
+ EXPORT ioss_interrupts_gpio_6_IRQHandler [WEAK]
+ EXPORT ioss_interrupts_gpio_7_IRQHandler [WEAK]
+ EXPORT ioss_interrupts_gpio_8_IRQHandler [WEAK]
+ EXPORT ioss_interrupts_gpio_9_IRQHandler [WEAK]
+ EXPORT ioss_interrupts_gpio_10_IRQHandler [WEAK]
+ EXPORT ioss_interrupts_gpio_11_IRQHandler [WEAK]
+ EXPORT ioss_interrupts_gpio_12_IRQHandler [WEAK]
+ EXPORT ioss_interrupts_gpio_14_IRQHandler [WEAK]
+ EXPORT ioss_interrupt_gpio_IRQHandler [WEAK]
+ EXPORT ioss_interrupt_vdd_IRQHandler [WEAK]
+ EXPORT lpcomp_interrupt_IRQHandler [WEAK]
+ EXPORT scb_6_interrupt_IRQHandler [WEAK]
+ EXPORT srss_interrupt_mcwdt_0_IRQHandler [WEAK]
+ EXPORT srss_interrupt_mcwdt_1_IRQHandler [WEAK]
+ EXPORT srss_interrupt_backup_IRQHandler [WEAK]
+ EXPORT srss_interrupt_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_0_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_1_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_2_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_3_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_4_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_5_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_6_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_7_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_8_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_9_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_10_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_11_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_12_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_13_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_14_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_ipc_15_IRQHandler [WEAK]
+ EXPORT pass_interrupt_sar_0_IRQHandler [WEAK]
+ EXPORT pass_interrupt_sar_1_IRQHandler [WEAK]
+ EXPORT pass_interrupt_ctb_IRQHandler [WEAK]
+ EXPORT pass_interrupt_fifo_0_IRQHandler [WEAK]
+ EXPORT pass_interrupt_fifo_1_IRQHandler [WEAK]
+ EXPORT scb_0_interrupt_IRQHandler [WEAK]
+ EXPORT scb_1_interrupt_IRQHandler [WEAK]
+ EXPORT scb_2_interrupt_IRQHandler [WEAK]
+ EXPORT scb_4_interrupt_IRQHandler [WEAK]
+ EXPORT scb_5_interrupt_IRQHandler [WEAK]
+ EXPORT csd_interrupt_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dmac_0_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dmac_1_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_0_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_1_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_2_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_3_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_4_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_5_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_6_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_7_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_8_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_9_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_10_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_11_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_12_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_13_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_14_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_15_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_16_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_17_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_18_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_19_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_20_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_21_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_22_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_23_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_24_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_25_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_26_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_27_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_28_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_0_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_1_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_2_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_3_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_4_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_5_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_6_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_7_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_8_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_9_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_10_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_11_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_12_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_13_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_14_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_15_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_16_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_17_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_18_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_19_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_20_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_21_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_22_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_23_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_24_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_25_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_26_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_27_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_28_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_fault_0_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_fault_1_IRQHandler [WEAK]
+ EXPORT cpuss_interrupt_crypto_IRQHandler [WEAK]
+ EXPORT cpuss_interrupt_fm_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_cm4_fp_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_cm0_cti_0_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_cm0_cti_1_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_cm4_cti_0_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_cm4_cti_1_IRQHandler [WEAK]
+ EXPORT tcpwm_0_interrupts_0_IRQHandler [WEAK]
+ EXPORT tcpwm_0_interrupts_1_IRQHandler [WEAK]
+ EXPORT tcpwm_0_interrupts_2_IRQHandler [WEAK]
+ EXPORT tcpwm_0_interrupts_3_IRQHandler [WEAK]
+ EXPORT tcpwm_0_interrupts_256_IRQHandler [WEAK]
+ EXPORT tcpwm_0_interrupts_257_IRQHandler [WEAK]
+ EXPORT tcpwm_0_interrupts_258_IRQHandler [WEAK]
+ EXPORT tcpwm_0_interrupts_259_IRQHandler [WEAK]
+ EXPORT tcpwm_0_interrupts_260_IRQHandler [WEAK]
+ EXPORT tcpwm_0_interrupts_261_IRQHandler [WEAK]
+ EXPORT tcpwm_0_interrupts_262_IRQHandler [WEAK]
+ EXPORT tcpwm_0_interrupts_263_IRQHandler [WEAK]
+ EXPORT pass_interrupt_dacs_IRQHandler [WEAK]
+ EXPORT smif_interrupt_IRQHandler [WEAK]
+ EXPORT usb_interrupt_hi_IRQHandler [WEAK]
+ EXPORT usb_interrupt_med_IRQHandler [WEAK]
+ EXPORT usb_interrupt_lo_IRQHandler [WEAK]
+ EXPORT canfd_0_interrupt0_IRQHandler [WEAK]
+ EXPORT canfd_0_interrupts0_0_IRQHandler [WEAK]
+ EXPORT canfd_0_interrupts1_0_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_29_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_30_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw1_31_IRQHandler [WEAK]
+ EXPORT cpuss_interrupts_dw0_29_IRQHandler [WEAK]
+
+ioss_interrupts_gpio_0_IRQHandler
+ioss_interrupts_gpio_2_IRQHandler
+ioss_interrupts_gpio_3_IRQHandler
+ioss_interrupts_gpio_5_IRQHandler
+ioss_interrupts_gpio_6_IRQHandler
+ioss_interrupts_gpio_7_IRQHandler
+ioss_interrupts_gpio_8_IRQHandler
+ioss_interrupts_gpio_9_IRQHandler
+ioss_interrupts_gpio_10_IRQHandler
+ioss_interrupts_gpio_11_IRQHandler
+ioss_interrupts_gpio_12_IRQHandler
+ioss_interrupts_gpio_14_IRQHandler
+ioss_interrupt_gpio_IRQHandler
+ioss_interrupt_vdd_IRQHandler
+lpcomp_interrupt_IRQHandler
+scb_6_interrupt_IRQHandler
+srss_interrupt_mcwdt_0_IRQHandler
+srss_interrupt_mcwdt_1_IRQHandler
+srss_interrupt_backup_IRQHandler
+srss_interrupt_IRQHandler
+cpuss_interrupts_ipc_0_IRQHandler
+cpuss_interrupts_ipc_1_IRQHandler
+cpuss_interrupts_ipc_2_IRQHandler
+cpuss_interrupts_ipc_3_IRQHandler
+cpuss_interrupts_ipc_4_IRQHandler
+cpuss_interrupts_ipc_5_IRQHandler
+cpuss_interrupts_ipc_6_IRQHandler
+cpuss_interrupts_ipc_7_IRQHandler
+cpuss_interrupts_ipc_8_IRQHandler
+cpuss_interrupts_ipc_9_IRQHandler
+cpuss_interrupts_ipc_10_IRQHandler
+cpuss_interrupts_ipc_11_IRQHandler
+cpuss_interrupts_ipc_12_IRQHandler
+cpuss_interrupts_ipc_13_IRQHandler
+cpuss_interrupts_ipc_14_IRQHandler
+cpuss_interrupts_ipc_15_IRQHandler
+pass_interrupt_sar_0_IRQHandler
+pass_interrupt_sar_1_IRQHandler
+pass_interrupt_ctb_IRQHandler
+pass_interrupt_fifo_0_IRQHandler
+pass_interrupt_fifo_1_IRQHandler
+scb_0_interrupt_IRQHandler
+scb_1_interrupt_IRQHandler
+scb_2_interrupt_IRQHandler
+scb_4_interrupt_IRQHandler
+scb_5_interrupt_IRQHandler
+csd_interrupt_IRQHandler
+cpuss_interrupts_dmac_0_IRQHandler
+cpuss_interrupts_dmac_1_IRQHandler
+cpuss_interrupts_dw0_0_IRQHandler
+cpuss_interrupts_dw0_1_IRQHandler
+cpuss_interrupts_dw0_2_IRQHandler
+cpuss_interrupts_dw0_3_IRQHandler
+cpuss_interrupts_dw0_4_IRQHandler
+cpuss_interrupts_dw0_5_IRQHandler
+cpuss_interrupts_dw0_6_IRQHandler
+cpuss_interrupts_dw0_7_IRQHandler
+cpuss_interrupts_dw0_8_IRQHandler
+cpuss_interrupts_dw0_9_IRQHandler
+cpuss_interrupts_dw0_10_IRQHandler
+cpuss_interrupts_dw0_11_IRQHandler
+cpuss_interrupts_dw0_12_IRQHandler
+cpuss_interrupts_dw0_13_IRQHandler
+cpuss_interrupts_dw0_14_IRQHandler
+cpuss_interrupts_dw0_15_IRQHandler
+cpuss_interrupts_dw0_16_IRQHandler
+cpuss_interrupts_dw0_17_IRQHandler
+cpuss_interrupts_dw0_18_IRQHandler
+cpuss_interrupts_dw0_19_IRQHandler
+cpuss_interrupts_dw0_20_IRQHandler
+cpuss_interrupts_dw0_21_IRQHandler
+cpuss_interrupts_dw0_22_IRQHandler
+cpuss_interrupts_dw0_23_IRQHandler
+cpuss_interrupts_dw0_24_IRQHandler
+cpuss_interrupts_dw0_25_IRQHandler
+cpuss_interrupts_dw0_26_IRQHandler
+cpuss_interrupts_dw0_27_IRQHandler
+cpuss_interrupts_dw0_28_IRQHandler
+cpuss_interrupts_dw1_0_IRQHandler
+cpuss_interrupts_dw1_1_IRQHandler
+cpuss_interrupts_dw1_2_IRQHandler
+cpuss_interrupts_dw1_3_IRQHandler
+cpuss_interrupts_dw1_4_IRQHandler
+cpuss_interrupts_dw1_5_IRQHandler
+cpuss_interrupts_dw1_6_IRQHandler
+cpuss_interrupts_dw1_7_IRQHandler
+cpuss_interrupts_dw1_8_IRQHandler
+cpuss_interrupts_dw1_9_IRQHandler
+cpuss_interrupts_dw1_10_IRQHandler
+cpuss_interrupts_dw1_11_IRQHandler
+cpuss_interrupts_dw1_12_IRQHandler
+cpuss_interrupts_dw1_13_IRQHandler
+cpuss_interrupts_dw1_14_IRQHandler
+cpuss_interrupts_dw1_15_IRQHandler
+cpuss_interrupts_dw1_16_IRQHandler
+cpuss_interrupts_dw1_17_IRQHandler
+cpuss_interrupts_dw1_18_IRQHandler
+cpuss_interrupts_dw1_19_IRQHandler
+cpuss_interrupts_dw1_20_IRQHandler
+cpuss_interrupts_dw1_21_IRQHandler
+cpuss_interrupts_dw1_22_IRQHandler
+cpuss_interrupts_dw1_23_IRQHandler
+cpuss_interrupts_dw1_24_IRQHandler
+cpuss_interrupts_dw1_25_IRQHandler
+cpuss_interrupts_dw1_26_IRQHandler
+cpuss_interrupts_dw1_27_IRQHandler
+cpuss_interrupts_dw1_28_IRQHandler
+cpuss_interrupts_fault_0_IRQHandler
+cpuss_interrupts_fault_1_IRQHandler
+cpuss_interrupt_crypto_IRQHandler
+cpuss_interrupt_fm_IRQHandler
+cpuss_interrupts_cm4_fp_IRQHandler
+cpuss_interrupts_cm0_cti_0_IRQHandler
+cpuss_interrupts_cm0_cti_1_IRQHandler
+cpuss_interrupts_cm4_cti_0_IRQHandler
+cpuss_interrupts_cm4_cti_1_IRQHandler
+tcpwm_0_interrupts_0_IRQHandler
+tcpwm_0_interrupts_1_IRQHandler
+tcpwm_0_interrupts_2_IRQHandler
+tcpwm_0_interrupts_3_IRQHandler
+tcpwm_0_interrupts_256_IRQHandler
+tcpwm_0_interrupts_257_IRQHandler
+tcpwm_0_interrupts_258_IRQHandler
+tcpwm_0_interrupts_259_IRQHandler
+tcpwm_0_interrupts_260_IRQHandler
+tcpwm_0_interrupts_261_IRQHandler
+tcpwm_0_interrupts_262_IRQHandler
+tcpwm_0_interrupts_263_IRQHandler
+pass_interrupt_dacs_IRQHandler
+smif_interrupt_IRQHandler
+usb_interrupt_hi_IRQHandler
+usb_interrupt_med_IRQHandler
+usb_interrupt_lo_IRQHandler
+canfd_0_interrupt0_IRQHandler
+canfd_0_interrupts0_0_IRQHandler
+canfd_0_interrupts1_0_IRQHandler
+cpuss_interrupts_dw1_29_IRQHandler
+cpuss_interrupts_dw1_30_IRQHandler
+cpuss_interrupts_dw1_31_IRQHandler
+cpuss_interrupts_dw0_29_IRQHandler
+
+ B .
+ ENDP
+
+ ALIGN
+
+
+; User Initial Stack & Heap
+ IMPORT __use_two_region_memory
+
+ END
+
+
+; [] END OF FILE
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx4_cm4_dual.mk b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx4_cm4_dual.mk
new file mode 100644
index 0000000..fef261f
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx4_cm4_dual.mk
@@ -0,0 +1,89 @@
+################################################################################
+# \file cy8c6xx4_cm4_dual.mk
+# \version 2.70.1
+#
+# \brief
+# Specifies the starting address and the size of the segments in the output
+# file.
+#
+# \note The section definitions in this file are generic and handle all common
+# use cases.
+#
+################################################################################
+# \copyright
+# Copyright 2018-2020 Cypress Semiconductor Corporation
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+################################################################################
+
+### CM0P ###
+export HEAP_SIZE_CM0P := 0x400
+export VECT_BASE_CM0P := 0x10000000
+export RAM_VECT_BASE_CM0P := 0x08000000
+export VECT_SIZE_CM0P := 0x00000080
+export TEXT_BASE_CM0P := 0x10000080
+export TEXT_SIZE_CM0P := 0x00002000
+export RAM_BASE_CM0P := 0x08000080
+export RAM_SIZE_CM0P := 0x00002000
+export CYMETA_BASE_CM0P := 0x90500000
+export STACK_SIZE_CM0P := 0x2000
+
+STACK_ADDRESS_TOP_CM0P := $(shell printf "0x%x" $$(($(RAM_VECT_BASE_CM0P) + $(RAM_SIZE_CM0P))))
+STACK_ADDRESS_BOTTOM_CM0P := $(shell printf "0x%x" $$(($(STACK_ADDRESS_TOP_CM0P) - $(STACK_SIZE_CM0P))))
+TOOLCHAIN_VECT_BASE_CM0 := $(VECT_BASE_CM0P)
+
+SECTIONS_CM0P := \
+ -segaddr __VECT $(VECT_BASE_CM0P) \
+ -segaddr __TEXT $(TEXT_BASE_CM0P) \
+ -segaddr __DATA $(RAM_BASE_CM0P) \
+ -segaddr __RAMVECTORS $(RAM_VECT_BASE_CM0P) \
+ -segaddr __CYMETA $(CYMETA_BASE_CM0P) \
+ -segaddr __STACK $(STACK_ADDRESS_TOP_CM0P)
+
+### CM4 ###
+export HEAP_SIZE_CM4 := 0x400
+export VECT_BASE_CM4 := 0x10002000
+export RAM_VECT_BASE_CM4 := 0x08002000
+export VECT_SIZE_CM4 := 0x000002FC
+export TEXT_BASE_CM4 := 0x100022FC
+export TEXT_SIZE_CM4 := 0x0003E000
+export RAM_BASE_CM4 := 0x080022FC
+export RAM_SIZE_CM4 := 0x0001D800
+export CYMETA_BASE_CM4 := 0x90500000
+export STACK_SIZE_CM4 := 0x2000
+STACK_ADDRESS_TOP_CM4 := $(shell printf "0x%x" $$(($(RAM_VECT_BASE_CM4) + $(RAM_SIZE_CM4))))
+STACK_ADDRESS_BOTTOM_CM4 := $(shell printf "0x%x" $$(($(STACK_ADDRESS_TOP_CM4) - $(STACK_SIZE_CM4))))
+TOOLCHAIN_VECT_BASE_CM4 := $(VECT_BASE_CM4)
+
+SECTIONS_CM4 := \
+ -segaddr __CY_M0P_IMAGE $(VECT_BASE_CM0P) \
+ -segaddr __VECT $(VECT_BASE_CM4) \
+ -segaddr __TEXT $(TEXT_BASE_CM4) \
+ -segaddr __DATA $(RAM_BASE_CM4) \
+ -segaddr __RAMVECTORS $(RAM_VECT_BASE_CM4) \
+ -segaddr __CYMETA $(CYMETA_BASE_CM4) \
+ -segaddr __STACK $(STACK_ADDRESS_TOP_CM4)
+
+# Pass section addresses to the linker
+ifeq ($(CORE),CM4)
+LDFLAGS += \
+ -segalign 4 \
+ $(SECTIONS_CM4)
+else ifeq ($(CORE),CM0P)
+LDFLAGS += \
+ -segalign 4 \
+ $(SECTIONS_CM0P)
+endif
+
+# EOF
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx5_cm4_dual.mk b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx5_cm4_dual.mk
index 3d54b9f..21ce6bc 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx5_cm4_dual.mk
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx5_cm4_dual.mk
@@ -1,6 +1,6 @@
################################################################################
# \file cy8c6xx5_cm4_dual.mk
-# \version 2.70
+# \version 2.70.1
#
# \brief
# Specifies the starting address and the size of the segments in the output
@@ -11,7 +11,7 @@
#
################################################################################
# \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2020 Cypress Semiconductor Corporation
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx6_cm4.mk b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx6_cm4.mk
index fe29c43..c7ec81c 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx6_cm4.mk
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx6_cm4.mk
@@ -1,6 +1,6 @@
################################################################################
# \file cy8c6xx6_cm4.mk
-# \version 2.70
+# \version 2.70.1
#
# \brief
# Specifies the starting address and the size of the segments in the output
@@ -11,7 +11,7 @@
#
################################################################################
# \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2020 Cypress Semiconductor Corporation
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx6_cm4_dual.mk b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx6_cm4_dual.mk
index 5c158bc..6596ec1 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx6_cm4_dual.mk
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx6_cm4_dual.mk
@@ -1,6 +1,6 @@
################################################################################
# \file cy8c6xx6_cm4_dual.mk
-# \version 2.70
+# \version 2.70.1
#
# \brief
# Specifies the starting address and the size of the segments in the output
@@ -11,7 +11,7 @@
#
################################################################################
# \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2020 Cypress Semiconductor Corporation
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx7_cm4.mk b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx7_cm4.mk
index 8fa9337..f01d8ba 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx7_cm4.mk
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx7_cm4.mk
@@ -1,6 +1,6 @@
################################################################################
# \file cy8c6xx7_cm4.mk
-# \version 2.70
+# \version 2.70.1
#
# \brief
# Specifies the starting address and the size of the segments in the output
@@ -11,7 +11,7 @@
#
################################################################################
# \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2020 Cypress Semiconductor Corporation
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx7_cm4_dual.mk b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx7_cm4_dual.mk
index 495c6ce..20b0085 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx7_cm4_dual.mk
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx7_cm4_dual.mk
@@ -1,6 +1,6 @@
################################################################################
# \file cy8c6xx7_cm4_dual.mk
-# \version 2.70
+# \version 2.70.1
#
# \brief
# Specifies the starting address and the size of the segments in the output
@@ -11,7 +11,7 @@
#
################################################################################
# \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2020 Cypress Semiconductor Corporation
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx8_cm4_dual.mk b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx8_cm4_dual.mk
index 598c856..65cebd4 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx8_cm4_dual.mk
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xx8_cm4_dual.mk
@@ -1,6 +1,6 @@
################################################################################
# \file cy8c6xx8_cm4_dual.mk
-# \version 2.70
+# \version 2.70.1
#
# \brief
# Specifies the starting address and the size of the segments in the output
@@ -11,7 +11,7 @@
#
################################################################################
# \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2020 Cypress Semiconductor Corporation
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xxa_cm4_dual.mk b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xxa_cm4_dual.mk
index 9fff442..0be43ea 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xxa_cm4_dual.mk
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/cy8c6xxa_cm4_dual.mk
@@ -1,6 +1,6 @@
################################################################################
# \file cy8c6xxa_cm4_dual.mk
-# \version 2.70
+# \version 2.70.1
#
# \brief
# Specifies the starting address and the size of the segments in the output
@@ -11,7 +11,7 @@
#
################################################################################
# \copyright
-# Copyright 2018-2019 Cypress Semiconductor Corporation
+# Copyright 2018-2020 Cypress Semiconductor Corporation
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/startup_psoc6_04_cm4.S b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/startup_psoc6_04_cm4.S
new file mode 100644
index 0000000..86f1f24
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_A_Clang/startup_psoc6_04_cm4.S
@@ -0,0 +1,543 @@
+/**************************************************************************//**
+ * @file startup_psoc6_04_cm4.S
+ * @brief CMSIS Core Device Startup File for
+ * ARMCM4 Device Series
+ * @version V5.00
+ * @date 02. March 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ /* Address of the NMI handler */
+ #define CY_NMI_HANLDER_ADDR 0x0000000D
+
+ /* The CPU VTOR register */
+ #define CY_CPU_VTOR_ADDR 0xE000ED08
+
+ .syntax unified
+ .section __STACK , __stack
+ .align 3
+
+#ifdef __STACK_SIZE
+ .equ Stack_Size, __STACK_SIZE
+#else
+ .equ Stack_Size, 0x00001000
+#endif
+ .globl __StackTop
+ .globl __StackLimit
+
+__StackLimit:
+ .space Stack_Size
+ .equ __StackTop, . - Stack_Size
+
+ .section __HEAP, __heap
+ .align 3
+#ifdef __HEAP_SIZE
+ .equ Heap_Size, __HEAP_SIZE
+#else
+ .equ Heap_Size, 0x00000400
+#endif
+ .globl __HeapBase
+__HeapBase:
+ .if Heap_Size
+ .space Heap_Size
+ .endif
+
+ .section __VECT, ___Vectors
+ .align 2
+ .globl ___Vectors
+___Vectors:
+ .long __StackTop /* Top of Stack */
+ .long Reset_Handler /* Reset Handler */
+ .long CY_NMI_HANLDER_ADDR /* NMI Handler */
+ .long HardFault_Handler /* Hard Fault Handler */
+ .long MemManage_Handler /* MPU Fault Handler */
+ .long BusFault_Handler /* Bus Fault Handler */
+ .long UsageFault_Handler /* Usage Fault Handler */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long SVC_Handler /* SVCall Handler */
+ .long DebugMon_Handler /* Debug Monitor Handler */
+ .long 0 /* Reserved */
+ .long PendSV_Handler /* PendSV Handler */
+ .long SysTick_Handler /* SysTick Handler */
+
+ /* External interrupts Description */
+ .long ioss_interrupts_gpio_0_IRQHandler /* GPIO Port Interrupt #0 */
+ .long 0 /* Reserved */
+ .long ioss_interrupts_gpio_2_IRQHandler /* GPIO Port Interrupt #2 */
+ .long ioss_interrupts_gpio_3_IRQHandler /* GPIO Port Interrupt #3 */
+ .long 0 /* Reserved */
+ .long ioss_interrupts_gpio_5_IRQHandler /* GPIO Port Interrupt #5 */
+ .long ioss_interrupts_gpio_6_IRQHandler /* GPIO Port Interrupt #6 */
+ .long ioss_interrupts_gpio_7_IRQHandler /* GPIO Port Interrupt #7 */
+ .long ioss_interrupts_gpio_8_IRQHandler /* GPIO Port Interrupt #8 */
+ .long ioss_interrupts_gpio_9_IRQHandler /* GPIO Port Interrupt #9 */
+ .long ioss_interrupts_gpio_10_IRQHandler /* GPIO Port Interrupt #10 */
+ .long ioss_interrupts_gpio_11_IRQHandler /* GPIO Port Interrupt #11 */
+ .long ioss_interrupts_gpio_12_IRQHandler /* GPIO Port Interrupt #12 */
+ .long 0 /* Reserved */
+ .long ioss_interrupts_gpio_14_IRQHandler /* GPIO Port Interrupt #14 */
+ .long ioss_interrupt_gpio_IRQHandler /* GPIO All Ports */
+ .long ioss_interrupt_vdd_IRQHandler /* GPIO Supply Detect Interrupt */
+ .long lpcomp_interrupt_IRQHandler /* Low Power Comparator Interrupt */
+ .long scb_6_interrupt_IRQHandler /* Serial Communication Block #6 (DeepSleep capable) */
+ .long srss_interrupt_mcwdt_0_IRQHandler /* Multi Counter Watchdog Timer interrupt */
+ .long srss_interrupt_mcwdt_1_IRQHandler /* Multi Counter Watchdog Timer interrupt */
+ .long srss_interrupt_backup_IRQHandler /* Backup domain interrupt */
+ .long srss_interrupt_IRQHandler /* Other combined Interrupts for SRSS (LVD, WDT, CLKCAL) */
+ .long cpuss_interrupts_ipc_0_IRQHandler /* CPUSS Inter Process Communication Interrupt #0 */
+ .long cpuss_interrupts_ipc_1_IRQHandler /* CPUSS Inter Process Communication Interrupt #1 */
+ .long cpuss_interrupts_ipc_2_IRQHandler /* CPUSS Inter Process Communication Interrupt #2 */
+ .long cpuss_interrupts_ipc_3_IRQHandler /* CPUSS Inter Process Communication Interrupt #3 */
+ .long cpuss_interrupts_ipc_4_IRQHandler /* CPUSS Inter Process Communication Interrupt #4 */
+ .long cpuss_interrupts_ipc_5_IRQHandler /* CPUSS Inter Process Communication Interrupt #5 */
+ .long cpuss_interrupts_ipc_6_IRQHandler /* CPUSS Inter Process Communication Interrupt #6 */
+ .long cpuss_interrupts_ipc_7_IRQHandler /* CPUSS Inter Process Communication Interrupt #7 */
+ .long cpuss_interrupts_ipc_8_IRQHandler /* CPUSS Inter Process Communication Interrupt #8 */
+ .long cpuss_interrupts_ipc_9_IRQHandler /* CPUSS Inter Process Communication Interrupt #9 */
+ .long cpuss_interrupts_ipc_10_IRQHandler /* CPUSS Inter Process Communication Interrupt #10 */
+ .long cpuss_interrupts_ipc_11_IRQHandler /* CPUSS Inter Process Communication Interrupt #11 */
+ .long cpuss_interrupts_ipc_12_IRQHandler /* CPUSS Inter Process Communication Interrupt #12 */
+ .long cpuss_interrupts_ipc_13_IRQHandler /* CPUSS Inter Process Communication Interrupt #13 */
+ .long cpuss_interrupts_ipc_14_IRQHandler /* CPUSS Inter Process Communication Interrupt #14 */
+ .long cpuss_interrupts_ipc_15_IRQHandler /* CPUSS Inter Process Communication Interrupt #15 */
+ .long pass_interrupt_sar_0_IRQHandler /* SAR ADC0 interrupt */
+ .long pass_interrupt_sar_1_IRQHandler /* SAR ADC1 interrupt */
+ .long pass_interrupt_ctb_IRQHandler /* individual interrupt per CTB */
+ .long 0 /* Reserved */
+ .long pass_interrupt_fifo_0_IRQHandler /* PASS FIFO0 */
+ .long pass_interrupt_fifo_1_IRQHandler /* PASS FIFO1 */
+ .long scb_0_interrupt_IRQHandler /* Serial Communication Block #0 */
+ .long scb_1_interrupt_IRQHandler /* Serial Communication Block #1 */
+ .long scb_2_interrupt_IRQHandler /* Serial Communication Block #2 */
+ .long 0 /* Reserved */
+ .long scb_4_interrupt_IRQHandler /* Serial Communication Block #4 */
+ .long scb_5_interrupt_IRQHandler /* Serial Communication Block #5 */
+ .long csd_interrupt_IRQHandler /* CSD (Capsense) interrupt */
+ .long cpuss_interrupts_dmac_0_IRQHandler /* CPUSS DMAC, Channel #0 */
+ .long cpuss_interrupts_dmac_1_IRQHandler /* CPUSS DMAC, Channel #1 */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long cpuss_interrupts_dw0_0_IRQHandler /* CPUSS DataWire #0, Channel #0 */
+ .long cpuss_interrupts_dw0_1_IRQHandler /* CPUSS DataWire #0, Channel #1 */
+ .long cpuss_interrupts_dw0_2_IRQHandler /* CPUSS DataWire #0, Channel #2 */
+ .long cpuss_interrupts_dw0_3_IRQHandler /* CPUSS DataWire #0, Channel #3 */
+ .long cpuss_interrupts_dw0_4_IRQHandler /* CPUSS DataWire #0, Channel #4 */
+ .long cpuss_interrupts_dw0_5_IRQHandler /* CPUSS DataWire #0, Channel #5 */
+ .long cpuss_interrupts_dw0_6_IRQHandler /* CPUSS DataWire #0, Channel #6 */
+ .long cpuss_interrupts_dw0_7_IRQHandler /* CPUSS DataWire #0, Channel #7 */
+ .long cpuss_interrupts_dw0_8_IRQHandler /* CPUSS DataWire #0, Channel #8 */
+ .long cpuss_interrupts_dw0_9_IRQHandler /* CPUSS DataWire #0, Channel #9 */
+ .long cpuss_interrupts_dw0_10_IRQHandler /* CPUSS DataWire #0, Channel #10 */
+ .long cpuss_interrupts_dw0_11_IRQHandler /* CPUSS DataWire #0, Channel #11 */
+ .long cpuss_interrupts_dw0_12_IRQHandler /* CPUSS DataWire #0, Channel #12 */
+ .long cpuss_interrupts_dw0_13_IRQHandler /* CPUSS DataWire #0, Channel #13 */
+ .long cpuss_interrupts_dw0_14_IRQHandler /* CPUSS DataWire #0, Channel #14 */
+ .long cpuss_interrupts_dw0_15_IRQHandler /* CPUSS DataWire #0, Channel #15 */
+ .long cpuss_interrupts_dw0_16_IRQHandler /* CPUSS DataWire #0, Channel #16 */
+ .long cpuss_interrupts_dw0_17_IRQHandler /* CPUSS DataWire #0, Channel #17 */
+ .long cpuss_interrupts_dw0_18_IRQHandler /* CPUSS DataWire #0, Channel #18 */
+ .long cpuss_interrupts_dw0_19_IRQHandler /* CPUSS DataWire #0, Channel #19 */
+ .long cpuss_interrupts_dw0_20_IRQHandler /* CPUSS DataWire #0, Channel #20 */
+ .long cpuss_interrupts_dw0_21_IRQHandler /* CPUSS DataWire #0, Channel #21 */
+ .long cpuss_interrupts_dw0_22_IRQHandler /* CPUSS DataWire #0, Channel #22 */
+ .long cpuss_interrupts_dw0_23_IRQHandler /* CPUSS DataWire #0, Channel #23 */
+ .long cpuss_interrupts_dw0_24_IRQHandler /* CPUSS DataWire #0, Channel #24 */
+ .long cpuss_interrupts_dw0_25_IRQHandler /* CPUSS DataWire #0, Channel #25 */
+ .long cpuss_interrupts_dw0_26_IRQHandler /* CPUSS DataWire #0, Channel #26 */
+ .long cpuss_interrupts_dw0_27_IRQHandler /* CPUSS DataWire #0, Channel #27 */
+ .long cpuss_interrupts_dw0_28_IRQHandler /* CPUSS DataWire #0, Channel #28 */
+ .long cpuss_interrupts_dw1_0_IRQHandler /* CPUSS DataWire #1, Channel #0 */
+ .long cpuss_interrupts_dw1_1_IRQHandler /* CPUSS DataWire #1, Channel #1 */
+ .long cpuss_interrupts_dw1_2_IRQHandler /* CPUSS DataWire #1, Channel #2 */
+ .long cpuss_interrupts_dw1_3_IRQHandler /* CPUSS DataWire #1, Channel #3 */
+ .long cpuss_interrupts_dw1_4_IRQHandler /* CPUSS DataWire #1, Channel #4 */
+ .long cpuss_interrupts_dw1_5_IRQHandler /* CPUSS DataWire #1, Channel #5 */
+ .long cpuss_interrupts_dw1_6_IRQHandler /* CPUSS DataWire #1, Channel #6 */
+ .long cpuss_interrupts_dw1_7_IRQHandler /* CPUSS DataWire #1, Channel #7 */
+ .long cpuss_interrupts_dw1_8_IRQHandler /* CPUSS DataWire #1, Channel #8 */
+ .long cpuss_interrupts_dw1_9_IRQHandler /* CPUSS DataWire #1, Channel #9 */
+ .long cpuss_interrupts_dw1_10_IRQHandler /* CPUSS DataWire #1, Channel #10 */
+ .long cpuss_interrupts_dw1_11_IRQHandler /* CPUSS DataWire #1, Channel #11 */
+ .long cpuss_interrupts_dw1_12_IRQHandler /* CPUSS DataWire #1, Channel #12 */
+ .long cpuss_interrupts_dw1_13_IRQHandler /* CPUSS DataWire #1, Channel #13 */
+ .long cpuss_interrupts_dw1_14_IRQHandler /* CPUSS DataWire #1, Channel #14 */
+ .long cpuss_interrupts_dw1_15_IRQHandler /* CPUSS DataWire #1, Channel #15 */
+ .long cpuss_interrupts_dw1_16_IRQHandler /* CPUSS DataWire #1, Channel #16 */
+ .long cpuss_interrupts_dw1_17_IRQHandler /* CPUSS DataWire #1, Channel #17 */
+ .long cpuss_interrupts_dw1_18_IRQHandler /* CPUSS DataWire #1, Channel #18 */
+ .long cpuss_interrupts_dw1_19_IRQHandler /* CPUSS DataWire #1, Channel #19 */
+ .long cpuss_interrupts_dw1_20_IRQHandler /* CPUSS DataWire #1, Channel #20 */
+ .long cpuss_interrupts_dw1_21_IRQHandler /* CPUSS DataWire #1, Channel #21 */
+ .long cpuss_interrupts_dw1_22_IRQHandler /* CPUSS DataWire #1, Channel #22 */
+ .long cpuss_interrupts_dw1_23_IRQHandler /* CPUSS DataWire #1, Channel #23 */
+ .long cpuss_interrupts_dw1_24_IRQHandler /* CPUSS DataWire #1, Channel #24 */
+ .long cpuss_interrupts_dw1_25_IRQHandler /* CPUSS DataWire #1, Channel #25 */
+ .long cpuss_interrupts_dw1_26_IRQHandler /* CPUSS DataWire #1, Channel #26 */
+ .long cpuss_interrupts_dw1_27_IRQHandler /* CPUSS DataWire #1, Channel #27 */
+ .long cpuss_interrupts_dw1_28_IRQHandler /* CPUSS DataWire #1, Channel #28 */
+ .long cpuss_interrupts_fault_0_IRQHandler /* CPUSS Fault Structure Interrupt #0 */
+ .long cpuss_interrupts_fault_1_IRQHandler /* CPUSS Fault Structure Interrupt #1 */
+ .long cpuss_interrupt_crypto_IRQHandler /* CRYPTO Accelerator Interrupt */
+ .long cpuss_interrupt_fm_IRQHandler /* FLASH Macro Interrupt */
+ .long cpuss_interrupts_cm4_fp_IRQHandler /* Floating Point operation fault */
+ .long cpuss_interrupts_cm0_cti_0_IRQHandler /* CM0+ CTI #0 */
+ .long cpuss_interrupts_cm0_cti_1_IRQHandler /* CM0+ CTI #1 */
+ .long cpuss_interrupts_cm4_cti_0_IRQHandler /* CM4 CTI #0 */
+ .long cpuss_interrupts_cm4_cti_1_IRQHandler /* CM4 CTI #1 */
+ .long tcpwm_0_interrupts_0_IRQHandler /* TCPWM #0, Counter #0 */
+ .long tcpwm_0_interrupts_1_IRQHandler /* TCPWM #0, Counter #1 */
+ .long tcpwm_0_interrupts_2_IRQHandler /* TCPWM #0, Counter #2 */
+ .long tcpwm_0_interrupts_3_IRQHandler /* TCPWM #0, Counter #3 */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long tcpwm_0_interrupts_256_IRQHandler /* TCPWM #0, Counter #256 */
+ .long tcpwm_0_interrupts_257_IRQHandler /* TCPWM #0, Counter #257 */
+ .long tcpwm_0_interrupts_258_IRQHandler /* TCPWM #0, Counter #258 */
+ .long tcpwm_0_interrupts_259_IRQHandler /* TCPWM #0, Counter #259 */
+ .long tcpwm_0_interrupts_260_IRQHandler /* TCPWM #0, Counter #260 */
+ .long tcpwm_0_interrupts_261_IRQHandler /* TCPWM #0, Counter #261 */
+ .long tcpwm_0_interrupts_262_IRQHandler /* TCPWM #0, Counter #262 */
+ .long tcpwm_0_interrupts_263_IRQHandler /* TCPWM #0, Counter #263 */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long pass_interrupt_dacs_IRQHandler /* Consolidated interrrupt for all DACs */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long smif_interrupt_IRQHandler /* Serial Memory Interface interrupt */
+ .long usb_interrupt_hi_IRQHandler /* USB Interrupt */
+ .long usb_interrupt_med_IRQHandler /* USB Interrupt */
+ .long usb_interrupt_lo_IRQHandler /* USB Interrupt */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long canfd_0_interrupt0_IRQHandler /* Can #0, Consolidated interrupt #0 */
+ .long canfd_0_interrupts0_0_IRQHandler /* CAN #0, Interrupt #0, Channel #0 */
+ .long canfd_0_interrupts1_0_IRQHandler /* CAN #0, Interrupt #1, Channel #0 */
+ .long cpuss_interrupts_dw1_29_IRQHandler /* CPUSS DataWire #1, Channel #29 */
+ .long cpuss_interrupts_dw1_30_IRQHandler /* CPUSS DataWire #1, Channel #30 */
+ .long cpuss_interrupts_dw1_31_IRQHandler /* CPUSS DataWire #1, Channel #31 */
+ .long cpuss_interrupts_dw0_29_IRQHandler /* CPUSS DataWire #0, Channel #29 */
+
+ .equ __VectorsSize, . - ___Vectors
+
+ .section __RAMVECTORS, ___ramVectors
+ .align 2
+ .globl ___ramVectors
+
+___ramVectors:
+ .space __VectorsSize
+
+
+ .text
+ .thumb_func
+ .align 2
+ /* Reset handler */
+ .globl Reset_Handler
+
+Reset_Handler:
+ bl Cy_OnResetUser
+ cpsid i
+
+/* Single section scheme.
+ *
+ * The ranges of copy from/to are specified by following symbols
+ * __etext: LMA of start of the section to copy from. Usually end of text
+ * __data_start__: VMA of start of the section to copy to
+ * __data_end__: VMA of end of the section to copy to
+ *
+ * All addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r0, =___ramVectors
+ ldr r1, =___Vectors
+ ldr r2, =__VectorsSize
+ bl _memcpy
+
+ ldr r0, =segment$start$__DATA
+ ldr r1, =segment$end$__TEXT
+ ldr r2, =section$start$__DATA$__zerofill
+ sub r2, r0
+ bl _memcpy
+
+ ldr r0, =section$start$__DATA$__zerofill
+ eor r1, r1
+ ldr r2, =section$end$__DATA$__zerofill
+ sub r2, r0
+ bl _memset
+
+ /* Update Vector Table Offset Register. */
+ ldr r0, =___ramVectors
+ ldr r1, =CY_CPU_VTOR_ADDR
+ str r0, [r1]
+ dsb 0xF
+
+ /* Enable the FPU if used */
+ bl _Cy_SystemInitFpuEnable
+
+ bl _HeapInit
+#ifndef __NO_SYSTEM_INIT
+ bl _SystemInit
+#endif
+
+ bl _main
+
+ /* Should never get here */
+ b .
+
+ .pool
+
+ .text
+ .thumb
+ .thumb_func
+ .align 2
+
+ /* Device startup customization */
+ .weak_definition Cy_OnResetUser
+ .global Cy_OnResetUser, Cy_OnResetUser
+Cy_OnResetUser:
+ bx lr
+
+ .text
+ .align 1
+ .thumb_func
+ .weak_reference Default_Handler
+
+Default_Handler:
+ b .
+
+ .text
+ .thumb_func
+ .align 2
+ .weak_definition Cy_SysLib_FaultHandler
+
+Cy_SysLib_FaultHandler:
+ b .
+
+ .text
+ .thumb_func
+ .align 2
+
+Fault_Handler:
+ /* Storing LR content for Creator call stack trace */
+ push {LR}
+ movs r0, #4
+ mov r1, LR
+ tst r0, r1
+ beq .L_MSP
+ mrs r0, PSP
+ b .L_API_call
+.L_MSP:
+ mrs r0, MSP
+.L_API_call:
+ /* Compensation of stack pointer address due to pushing 4 bytes of LR */
+ adds r0, r0, #4
+ bl Cy_SysLib_FaultHandler
+ b .
+
+.macro def_fault_Handler fault_handler_name
+ .weak_definition \fault_handler_name
+ .set \fault_handler_name, Fault_Handler
+ .endm
+
+/* Macro to define default handlers. Default handler
+ * will be weak symbol and just dead loops. They can be
+ * overwritten by other handlers */
+ .macro def_irq_handler handler_name
+ .weak_definition \handler_name
+ .set \handler_name, Default_Handler
+ .endm
+
+ def_irq_handler NMI_Handler
+
+ def_fault_Handler HardFault_Handler
+ def_fault_Handler MemManage_Handler
+ def_fault_Handler BusFault_Handler
+ def_fault_Handler UsageFault_Handler
+
+ def_irq_handler SVC_Handler
+ def_irq_handler DebugMon_Handler
+ def_irq_handler PendSV_Handler
+ def_irq_handler SysTick_Handler
+
+ def_irq_handler ioss_interrupts_gpio_0_IRQHandler /* GPIO Port Interrupt #0 */
+ def_irq_handler ioss_interrupts_gpio_2_IRQHandler /* GPIO Port Interrupt #2 */
+ def_irq_handler ioss_interrupts_gpio_3_IRQHandler /* GPIO Port Interrupt #3 */
+ def_irq_handler ioss_interrupts_gpio_5_IRQHandler /* GPIO Port Interrupt #5 */
+ def_irq_handler ioss_interrupts_gpio_6_IRQHandler /* GPIO Port Interrupt #6 */
+ def_irq_handler ioss_interrupts_gpio_7_IRQHandler /* GPIO Port Interrupt #7 */
+ def_irq_handler ioss_interrupts_gpio_8_IRQHandler /* GPIO Port Interrupt #8 */
+ def_irq_handler ioss_interrupts_gpio_9_IRQHandler /* GPIO Port Interrupt #9 */
+ def_irq_handler ioss_interrupts_gpio_10_IRQHandler /* GPIO Port Interrupt #10 */
+ def_irq_handler ioss_interrupts_gpio_11_IRQHandler /* GPIO Port Interrupt #11 */
+ def_irq_handler ioss_interrupts_gpio_12_IRQHandler /* GPIO Port Interrupt #12 */
+ def_irq_handler ioss_interrupts_gpio_14_IRQHandler /* GPIO Port Interrupt #14 */
+ def_irq_handler ioss_interrupt_gpio_IRQHandler /* GPIO All Ports */
+ def_irq_handler ioss_interrupt_vdd_IRQHandler /* GPIO Supply Detect Interrupt */
+ def_irq_handler lpcomp_interrupt_IRQHandler /* Low Power Comparator Interrupt */
+ def_irq_handler scb_6_interrupt_IRQHandler /* Serial Communication Block #6 (DeepSleep capable) */
+ def_irq_handler srss_interrupt_mcwdt_0_IRQHandler /* Multi Counter Watchdog Timer interrupt */
+ def_irq_handler srss_interrupt_mcwdt_1_IRQHandler /* Multi Counter Watchdog Timer interrupt */
+ def_irq_handler srss_interrupt_backup_IRQHandler /* Backup domain interrupt */
+ def_irq_handler srss_interrupt_IRQHandler /* Other combined Interrupts for SRSS (LVD, WDT, CLKCAL) */
+ def_irq_handler cpuss_interrupts_ipc_0_IRQHandler /* CPUSS Inter Process Communication Interrupt #0 */
+ def_irq_handler cpuss_interrupts_ipc_1_IRQHandler /* CPUSS Inter Process Communication Interrupt #1 */
+ def_irq_handler cpuss_interrupts_ipc_2_IRQHandler /* CPUSS Inter Process Communication Interrupt #2 */
+ def_irq_handler cpuss_interrupts_ipc_3_IRQHandler /* CPUSS Inter Process Communication Interrupt #3 */
+ def_irq_handler cpuss_interrupts_ipc_4_IRQHandler /* CPUSS Inter Process Communication Interrupt #4 */
+ def_irq_handler cpuss_interrupts_ipc_5_IRQHandler /* CPUSS Inter Process Communication Interrupt #5 */
+ def_irq_handler cpuss_interrupts_ipc_6_IRQHandler /* CPUSS Inter Process Communication Interrupt #6 */
+ def_irq_handler cpuss_interrupts_ipc_7_IRQHandler /* CPUSS Inter Process Communication Interrupt #7 */
+ def_irq_handler cpuss_interrupts_ipc_8_IRQHandler /* CPUSS Inter Process Communication Interrupt #8 */
+ def_irq_handler cpuss_interrupts_ipc_9_IRQHandler /* CPUSS Inter Process Communication Interrupt #9 */
+ def_irq_handler cpuss_interrupts_ipc_10_IRQHandler /* CPUSS Inter Process Communication Interrupt #10 */
+ def_irq_handler cpuss_interrupts_ipc_11_IRQHandler /* CPUSS Inter Process Communication Interrupt #11 */
+ def_irq_handler cpuss_interrupts_ipc_12_IRQHandler /* CPUSS Inter Process Communication Interrupt #12 */
+ def_irq_handler cpuss_interrupts_ipc_13_IRQHandler /* CPUSS Inter Process Communication Interrupt #13 */
+ def_irq_handler cpuss_interrupts_ipc_14_IRQHandler /* CPUSS Inter Process Communication Interrupt #14 */
+ def_irq_handler cpuss_interrupts_ipc_15_IRQHandler /* CPUSS Inter Process Communication Interrupt #15 */
+ def_irq_handler pass_interrupt_sar_0_IRQHandler /* SAR ADC0 interrupt */
+ def_irq_handler pass_interrupt_sar_1_IRQHandler /* SAR ADC1 interrupt */
+ def_irq_handler pass_interrupt_ctb_IRQHandler /* individual interrupt per CTB */
+ def_irq_handler pass_interrupt_fifo_0_IRQHandler /* PASS FIFO0 */
+ def_irq_handler pass_interrupt_fifo_1_IRQHandler /* PASS FIFO1 */
+ def_irq_handler scb_0_interrupt_IRQHandler /* Serial Communication Block #0 */
+ def_irq_handler scb_1_interrupt_IRQHandler /* Serial Communication Block #1 */
+ def_irq_handler scb_2_interrupt_IRQHandler /* Serial Communication Block #2 */
+ def_irq_handler scb_4_interrupt_IRQHandler /* Serial Communication Block #4 */
+ def_irq_handler scb_5_interrupt_IRQHandler /* Serial Communication Block #5 */
+ def_irq_handler csd_interrupt_IRQHandler /* CSD (Capsense) interrupt */
+ def_irq_handler cpuss_interrupts_dmac_0_IRQHandler /* CPUSS DMAC, Channel #0 */
+ def_irq_handler cpuss_interrupts_dmac_1_IRQHandler /* CPUSS DMAC, Channel #1 */
+ def_irq_handler cpuss_interrupts_dw0_0_IRQHandler /* CPUSS DataWire #0, Channel #0 */
+ def_irq_handler cpuss_interrupts_dw0_1_IRQHandler /* CPUSS DataWire #0, Channel #1 */
+ def_irq_handler cpuss_interrupts_dw0_2_IRQHandler /* CPUSS DataWire #0, Channel #2 */
+ def_irq_handler cpuss_interrupts_dw0_3_IRQHandler /* CPUSS DataWire #0, Channel #3 */
+ def_irq_handler cpuss_interrupts_dw0_4_IRQHandler /* CPUSS DataWire #0, Channel #4 */
+ def_irq_handler cpuss_interrupts_dw0_5_IRQHandler /* CPUSS DataWire #0, Channel #5 */
+ def_irq_handler cpuss_interrupts_dw0_6_IRQHandler /* CPUSS DataWire #0, Channel #6 */
+ def_irq_handler cpuss_interrupts_dw0_7_IRQHandler /* CPUSS DataWire #0, Channel #7 */
+ def_irq_handler cpuss_interrupts_dw0_8_IRQHandler /* CPUSS DataWire #0, Channel #8 */
+ def_irq_handler cpuss_interrupts_dw0_9_IRQHandler /* CPUSS DataWire #0, Channel #9 */
+ def_irq_handler cpuss_interrupts_dw0_10_IRQHandler /* CPUSS DataWire #0, Channel #10 */
+ def_irq_handler cpuss_interrupts_dw0_11_IRQHandler /* CPUSS DataWire #0, Channel #11 */
+ def_irq_handler cpuss_interrupts_dw0_12_IRQHandler /* CPUSS DataWire #0, Channel #12 */
+ def_irq_handler cpuss_interrupts_dw0_13_IRQHandler /* CPUSS DataWire #0, Channel #13 */
+ def_irq_handler cpuss_interrupts_dw0_14_IRQHandler /* CPUSS DataWire #0, Channel #14 */
+ def_irq_handler cpuss_interrupts_dw0_15_IRQHandler /* CPUSS DataWire #0, Channel #15 */
+ def_irq_handler cpuss_interrupts_dw0_16_IRQHandler /* CPUSS DataWire #0, Channel #16 */
+ def_irq_handler cpuss_interrupts_dw0_17_IRQHandler /* CPUSS DataWire #0, Channel #17 */
+ def_irq_handler cpuss_interrupts_dw0_18_IRQHandler /* CPUSS DataWire #0, Channel #18 */
+ def_irq_handler cpuss_interrupts_dw0_19_IRQHandler /* CPUSS DataWire #0, Channel #19 */
+ def_irq_handler cpuss_interrupts_dw0_20_IRQHandler /* CPUSS DataWire #0, Channel #20 */
+ def_irq_handler cpuss_interrupts_dw0_21_IRQHandler /* CPUSS DataWire #0, Channel #21 */
+ def_irq_handler cpuss_interrupts_dw0_22_IRQHandler /* CPUSS DataWire #0, Channel #22 */
+ def_irq_handler cpuss_interrupts_dw0_23_IRQHandler /* CPUSS DataWire #0, Channel #23 */
+ def_irq_handler cpuss_interrupts_dw0_24_IRQHandler /* CPUSS DataWire #0, Channel #24 */
+ def_irq_handler cpuss_interrupts_dw0_25_IRQHandler /* CPUSS DataWire #0, Channel #25 */
+ def_irq_handler cpuss_interrupts_dw0_26_IRQHandler /* CPUSS DataWire #0, Channel #26 */
+ def_irq_handler cpuss_interrupts_dw0_27_IRQHandler /* CPUSS DataWire #0, Channel #27 */
+ def_irq_handler cpuss_interrupts_dw0_28_IRQHandler /* CPUSS DataWire #0, Channel #28 */
+ def_irq_handler cpuss_interrupts_dw1_0_IRQHandler /* CPUSS DataWire #1, Channel #0 */
+ def_irq_handler cpuss_interrupts_dw1_1_IRQHandler /* CPUSS DataWire #1, Channel #1 */
+ def_irq_handler cpuss_interrupts_dw1_2_IRQHandler /* CPUSS DataWire #1, Channel #2 */
+ def_irq_handler cpuss_interrupts_dw1_3_IRQHandler /* CPUSS DataWire #1, Channel #3 */
+ def_irq_handler cpuss_interrupts_dw1_4_IRQHandler /* CPUSS DataWire #1, Channel #4 */
+ def_irq_handler cpuss_interrupts_dw1_5_IRQHandler /* CPUSS DataWire #1, Channel #5 */
+ def_irq_handler cpuss_interrupts_dw1_6_IRQHandler /* CPUSS DataWire #1, Channel #6 */
+ def_irq_handler cpuss_interrupts_dw1_7_IRQHandler /* CPUSS DataWire #1, Channel #7 */
+ def_irq_handler cpuss_interrupts_dw1_8_IRQHandler /* CPUSS DataWire #1, Channel #8 */
+ def_irq_handler cpuss_interrupts_dw1_9_IRQHandler /* CPUSS DataWire #1, Channel #9 */
+ def_irq_handler cpuss_interrupts_dw1_10_IRQHandler /* CPUSS DataWire #1, Channel #10 */
+ def_irq_handler cpuss_interrupts_dw1_11_IRQHandler /* CPUSS DataWire #1, Channel #11 */
+ def_irq_handler cpuss_interrupts_dw1_12_IRQHandler /* CPUSS DataWire #1, Channel #12 */
+ def_irq_handler cpuss_interrupts_dw1_13_IRQHandler /* CPUSS DataWire #1, Channel #13 */
+ def_irq_handler cpuss_interrupts_dw1_14_IRQHandler /* CPUSS DataWire #1, Channel #14 */
+ def_irq_handler cpuss_interrupts_dw1_15_IRQHandler /* CPUSS DataWire #1, Channel #15 */
+ def_irq_handler cpuss_interrupts_dw1_16_IRQHandler /* CPUSS DataWire #1, Channel #16 */
+ def_irq_handler cpuss_interrupts_dw1_17_IRQHandler /* CPUSS DataWire #1, Channel #17 */
+ def_irq_handler cpuss_interrupts_dw1_18_IRQHandler /* CPUSS DataWire #1, Channel #18 */
+ def_irq_handler cpuss_interrupts_dw1_19_IRQHandler /* CPUSS DataWire #1, Channel #19 */
+ def_irq_handler cpuss_interrupts_dw1_20_IRQHandler /* CPUSS DataWire #1, Channel #20 */
+ def_irq_handler cpuss_interrupts_dw1_21_IRQHandler /* CPUSS DataWire #1, Channel #21 */
+ def_irq_handler cpuss_interrupts_dw1_22_IRQHandler /* CPUSS DataWire #1, Channel #22 */
+ def_irq_handler cpuss_interrupts_dw1_23_IRQHandler /* CPUSS DataWire #1, Channel #23 */
+ def_irq_handler cpuss_interrupts_dw1_24_IRQHandler /* CPUSS DataWire #1, Channel #24 */
+ def_irq_handler cpuss_interrupts_dw1_25_IRQHandler /* CPUSS DataWire #1, Channel #25 */
+ def_irq_handler cpuss_interrupts_dw1_26_IRQHandler /* CPUSS DataWire #1, Channel #26 */
+ def_irq_handler cpuss_interrupts_dw1_27_IRQHandler /* CPUSS DataWire #1, Channel #27 */
+ def_irq_handler cpuss_interrupts_dw1_28_IRQHandler /* CPUSS DataWire #1, Channel #28 */
+ def_irq_handler cpuss_interrupts_fault_0_IRQHandler /* CPUSS Fault Structure Interrupt #0 */
+ def_irq_handler cpuss_interrupts_fault_1_IRQHandler /* CPUSS Fault Structure Interrupt #1 */
+ def_irq_handler cpuss_interrupt_crypto_IRQHandler /* CRYPTO Accelerator Interrupt */
+ def_irq_handler cpuss_interrupt_fm_IRQHandler /* FLASH Macro Interrupt */
+ def_irq_handler cpuss_interrupts_cm4_fp_IRQHandler /* Floating Point operation fault */
+ def_irq_handler cpuss_interrupts_cm0_cti_0_IRQHandler /* CM0+ CTI #0 */
+ def_irq_handler cpuss_interrupts_cm0_cti_1_IRQHandler /* CM0+ CTI #1 */
+ def_irq_handler cpuss_interrupts_cm4_cti_0_IRQHandler /* CM4 CTI #0 */
+ def_irq_handler cpuss_interrupts_cm4_cti_1_IRQHandler /* CM4 CTI #1 */
+ def_irq_handler tcpwm_0_interrupts_0_IRQHandler /* TCPWM #0, Counter #0 */
+ def_irq_handler tcpwm_0_interrupts_1_IRQHandler /* TCPWM #0, Counter #1 */
+ def_irq_handler tcpwm_0_interrupts_2_IRQHandler /* TCPWM #0, Counter #2 */
+ def_irq_handler tcpwm_0_interrupts_3_IRQHandler /* TCPWM #0, Counter #3 */
+ def_irq_handler tcpwm_0_interrupts_256_IRQHandler /* TCPWM #0, Counter #256 */
+ def_irq_handler tcpwm_0_interrupts_257_IRQHandler /* TCPWM #0, Counter #257 */
+ def_irq_handler tcpwm_0_interrupts_258_IRQHandler /* TCPWM #0, Counter #258 */
+ def_irq_handler tcpwm_0_interrupts_259_IRQHandler /* TCPWM #0, Counter #259 */
+ def_irq_handler tcpwm_0_interrupts_260_IRQHandler /* TCPWM #0, Counter #260 */
+ def_irq_handler tcpwm_0_interrupts_261_IRQHandler /* TCPWM #0, Counter #261 */
+ def_irq_handler tcpwm_0_interrupts_262_IRQHandler /* TCPWM #0, Counter #262 */
+ def_irq_handler tcpwm_0_interrupts_263_IRQHandler /* TCPWM #0, Counter #263 */
+ def_irq_handler pass_interrupt_dacs_IRQHandler /* Consolidated interrrupt for all DACs */
+ def_irq_handler smif_interrupt_IRQHandler /* Serial Memory Interface interrupt */
+ def_irq_handler usb_interrupt_hi_IRQHandler /* USB Interrupt */
+ def_irq_handler usb_interrupt_med_IRQHandler /* USB Interrupt */
+ def_irq_handler usb_interrupt_lo_IRQHandler /* USB Interrupt */
+ def_irq_handler canfd_0_interrupt0_IRQHandler /* Can #0, Consolidated interrupt #0 */
+ def_irq_handler canfd_0_interrupts0_0_IRQHandler /* CAN #0, Interrupt #0, Channel #0 */
+ def_irq_handler canfd_0_interrupts1_0_IRQHandler /* CAN #0, Interrupt #1, Channel #0 */
+ def_irq_handler cpuss_interrupts_dw1_29_IRQHandler /* CPUSS DataWire #1, Channel #29 */
+ def_irq_handler cpuss_interrupts_dw1_30_IRQHandler /* CPUSS DataWire #1, Channel #30 */
+ def_irq_handler cpuss_interrupts_dw1_31_IRQHandler /* CPUSS DataWire #1, Channel #31 */
+ def_irq_handler cpuss_interrupts_dw0_29_IRQHandler /* CPUSS DataWire #0, Channel #29 */
+
+ .end
+
+
+/* [] END OF FILE */
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx4_cm4_dual.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx4_cm4_dual.ld
new file mode 100644
index 0000000..2bf3299
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx4_cm4_dual.ld
@@ -0,0 +1,440 @@
+/***************************************************************************//**
+* \file cy8c6xx4_cm4_dual.ld
+* \version 2.70.1
+*
+* Linker file for the GNU C compiler.
+*
+* The main purpose of the linker script is to describe how the sections in the
+* input files should be mapped into the output file, and to control the memory
+* layout of the output file.
+*
+* \note The entry point location is fixed and starts at 0x10000000. The valid
+* application image should be placed there.
+*
+* \note The linker files included with the PDL template projects must be generic
+* and handle all common use cases. Your project may not use every section
+* defined in the linker files. In that case you may see warnings during the
+* build process. In your project, you can simply comment out or remove the
+* relevant code in the linker file.
+*
+********************************************************************************
+* \copyright
+* Copyright 2016-2020 Cypress Semiconductor Corporation
+* SPDX-License-Identifier: Apache-2.0
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*******************************************************************************/
+
+OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
+SEARCH_DIR(.)
+GROUP(-lgcc -lc -lnosys)
+ENTRY(Reset_Handler)
+
+/* The size of the stack section at the end of CM4 SRAM */
+STACK_SIZE = 0x1000;
+
+/* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+* More about CM0+ prebuilt images, see here:
+* https://github.com/cypresssemiconductorco/psoc6cm0p
+*/
+/* The size of the Cortex-M0+ application image at the start of FLASH */
+FLASH_CM0P_SIZE = 0x2000;
+
+/* Force symbol to be entered in the output file as an undefined symbol. Doing
+* this may, for example, trigger linking of additional modules from standard
+* libraries. You may list several symbols for each EXTERN, and you may use
+* EXTERN multiple times. This command has the same effect as the -u command-line
+* option.
+*/
+EXTERN(Reset_Handler)
+
+/* The MEMORY section below describes the location and size of blocks of memory in the target.
+* Use this section to specify the memory regions available for allocation.
+*/
+MEMORY
+{
+ /* The ram and flash regions control RAM and flash memory allocation for the CM4 core.
+ * You can change the memory allocation by editing the 'ram' and 'flash' regions.
+ * Note that 2 KB of RAM (at the end of the SRAM) are reserved for system use.
+ * Using this memory region for other purposes will lead to unexpected behavior.
+ * Your changes must be aligned with the corresponding memory regions for CM0+ core in 'xx_cm0plus.ld',
+ * where 'xx' is the device group; for example, 'cy8c6xx7_cm0plus.ld'.
+ */
+ ram (rwx) : ORIGIN = 0x08002000, LENGTH = 0x1D800
+ flash (rx) : ORIGIN = 0x10000000, LENGTH = 0x40000
+
+ /* This is a 32K flash region used for EEPROM emulation. This region can also be used as the general purpose flash.
+ * You can assign sections to this memory region for only one of the cores.
+ * Note some middleware (e.g. BLE, Emulated EEPROM) can place their data into this memory region.
+ * Therefore, repurposing this memory region will prevent such middleware from operation.
+ */
+ em_eeprom (rx) : ORIGIN = 0x14000000, LENGTH = 0x8000 /* 32 KB */
+
+ /* The following regions define device specific memory regions and must not be changed. */
+ sflash_user_data (rx) : ORIGIN = 0x16000800, LENGTH = 0x800 /* Supervisory flash: User data */
+ sflash_nar (rx) : ORIGIN = 0x16001A00, LENGTH = 0x200 /* Supervisory flash: Normal Access Restrictions (NAR) */
+ sflash_public_key (rx) : ORIGIN = 0x16005A00, LENGTH = 0xC00 /* Supervisory flash: Public Key */
+ sflash_toc_2 (rx) : ORIGIN = 0x16007C00, LENGTH = 0x200 /* Supervisory flash: Table of Content # 2 */
+ sflash_rtoc_2 (rx) : ORIGIN = 0x16007E00, LENGTH = 0x200 /* Supervisory flash: Table of Content # 2 Copy */
+ xip (rx) : ORIGIN = 0x18000000, LENGTH = 0x8000000 /* 128 MB */
+ efuse (r) : ORIGIN = 0x90700000, LENGTH = 0x100000 /* 1 MB */
+}
+
+/* Library configurations */
+GROUP(libgcc.a libc.a libm.a libnosys.a)
+
+/* Linker script to place sections and symbol values. Should be used together
+ * with other linker script that defines memory regions FLASH and RAM.
+ * It references following symbols, which must be defined in code:
+ * Reset_Handler : Entry of reset handler
+ *
+ * It defines following symbols, which code can use without definition:
+ * __exidx_start
+ * __exidx_end
+ * __copy_table_start__
+ * __copy_table_end__
+ * __zero_table_start__
+ * __zero_table_end__
+ * __etext
+ * __data_start__
+ * __preinit_array_start
+ * __preinit_array_end
+ * __init_array_start
+ * __init_array_end
+ * __fini_array_start
+ * __fini_array_end
+ * __data_end__
+ * __bss_start__
+ * __bss_end__
+ * __end__
+ * end
+ * __HeapLimit
+ * __StackLimit
+ * __StackTop
+ * __stack
+ * __Vectors_End
+ * __Vectors_Size
+ */
+
+
+SECTIONS
+{
+ /* Cortex-M0+ application flash image area */
+ .cy_m0p_image ORIGIN(flash) :
+ {
+ . = ALIGN(4);
+ __cy_m0p_code_start = . ;
+ KEEP(*(.cy_m0p_image))
+ __cy_m0p_code_end = . ;
+ } > flash
+
+ /* Check if .cy_m0p_image size exceeds FLASH_CM0P_SIZE */
+ ASSERT(__cy_m0p_code_end <= ORIGIN(flash) + FLASH_CM0P_SIZE, "CM0+ flash image overflows with CM4, increase FLASH_CM0P_SIZE")
+
+ /* Cortex-M4 application flash area */
+ .text ORIGIN(flash) + FLASH_CM0P_SIZE :
+ {
+ . = ALIGN(4);
+ __Vectors = . ;
+ KEEP(*(.vectors))
+ . = ALIGN(4);
+ __Vectors_End = .;
+ __Vectors_Size = __Vectors_End - __Vectors;
+ __end__ = .;
+
+ . = ALIGN(4);
+ *(.text*)
+
+ KEEP(*(.init))
+ KEEP(*(.fini))
+
+ /* .ctors */
+ *crtbegin.o(.ctors)
+ *crtbegin?.o(.ctors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+ *(SORT(.ctors.*))
+ *(.ctors)
+
+ /* .dtors */
+ *crtbegin.o(.dtors)
+ *crtbegin?.o(.dtors)
+ *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+ *(SORT(.dtors.*))
+ *(.dtors)
+
+ /* Read-only code (constants). */
+ *(.rodata .rodata.* .constdata .constdata.* .conststring .conststring.*)
+
+ KEEP(*(.eh_frame*))
+ } > flash
+
+
+ .ARM.extab :
+ {
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ } > flash
+
+ __exidx_start = .;
+
+ .ARM.exidx :
+ {
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+ } > flash
+ __exidx_end = .;
+
+
+ /* To copy multiple ROM to RAM sections,
+ * uncomment .copy.table section and,
+ * define __STARTUP_COPY_MULTIPLE in startup_psoc6_04_cm4.S */
+ .copy.table :
+ {
+ . = ALIGN(4);
+ __copy_table_start__ = .;
+
+ /* Copy interrupt vectors from flash to RAM */
+ LONG (__Vectors) /* From */
+ LONG (__ram_vectors_start__) /* To */
+ LONG (__Vectors_End - __Vectors) /* Size */
+
+ /* Copy data section to RAM */
+ LONG (__etext) /* From */
+ LONG (__data_start__) /* To */
+ LONG (__data_end__ - __data_start__) /* Size */
+
+ __copy_table_end__ = .;
+ } > flash
+
+
+ /* To clear multiple BSS sections,
+ * uncomment .zero.table section and,
+ * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_psoc6_04_cm4.S */
+ .zero.table :
+ {
+ . = ALIGN(4);
+ __zero_table_start__ = .;
+ LONG (__bss_start__)
+ LONG (__bss_end__ - __bss_start__)
+ __zero_table_end__ = .;
+ } > flash
+
+ __etext = . ;
+
+
+ .ramVectors (NOLOAD) : ALIGN(8)
+ {
+ __ram_vectors_start__ = .;
+ KEEP(*(.ram_vectors))
+ __ram_vectors_end__ = .;
+ } > ram
+
+
+ .data __ram_vectors_end__ : AT (__etext)
+ {
+ __data_start__ = .;
+
+ *(vtable)
+ *(.data*)
+
+ . = ALIGN(4);
+ /* preinit data */
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP(*(.preinit_array))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+
+ . = ALIGN(4);
+ /* init data */
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP(*(SORT(.init_array.*)))
+ KEEP(*(.init_array))
+ PROVIDE_HIDDEN (__init_array_end = .);
+
+ . = ALIGN(4);
+ /* finit data */
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP(*(SORT(.fini_array.*)))
+ KEEP(*(.fini_array))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+
+ KEEP(*(.jcr*))
+ . = ALIGN(4);
+
+ KEEP(*(.cy_ramfunc*))
+ . = ALIGN(4);
+
+ __data_end__ = .;
+
+ } > ram
+
+
+ /* Place variables in the section that should not be initialized during the
+ * device startup.
+ */
+ .noinit (NOLOAD) : ALIGN(8)
+ {
+ KEEP(*(.noinit))
+ } > ram
+
+
+ /* The uninitialized global or static variables are placed in this section.
+ *
+ * The NOLOAD attribute tells linker that .bss section does not consume
+ * any space in the image. The NOLOAD attribute changes the .bss type to
+ * NOBITS, and that makes linker to A) not allocate section in memory, and
+ * A) put information to clear the section with all zeros during application
+ * loading.
+ *
+ * Without the NOLOAD attribute, the .bss section might get PROGBITS type.
+ * This makes linker to A) allocate zeroed section in memory, and B) copy
+ * this section to RAM during application loading.
+ */
+ .bss (NOLOAD):
+ {
+ . = ALIGN(4);
+ __bss_start__ = .;
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ } > ram
+
+
+ .heap (NOLOAD):
+ {
+ __HeapBase = .;
+ __end__ = .;
+ end = __end__;
+ KEEP(*(.heap*))
+ . = ORIGIN(ram) + LENGTH(ram) - STACK_SIZE;
+ __HeapLimit = .;
+ } > ram
+
+
+ /* .stack_dummy section doesn't contains any symbols. It is only
+ * used for linker to calculate size of stack sections, and assign
+ * values to stack symbols later */
+ .stack_dummy (NOLOAD):
+ {
+ KEEP(*(.stack*))
+ } > ram
+
+
+ /* Set stack top to end of RAM, and stack limit move down by
+ * size of stack_dummy section */
+ __StackTop = ORIGIN(ram) + LENGTH(ram);
+ __StackLimit = __StackTop - SIZEOF(.stack_dummy);
+ PROVIDE(__stack = __StackTop);
+
+ /* Check if data + heap + stack exceeds RAM limit */
+ ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
+
+
+ /* Used for the digital signature of the secure application and the Bootloader SDK application.
+ * The size of the section depends on the required data size. */
+ .cy_app_signature ORIGIN(flash) + LENGTH(flash) - 256 :
+ {
+ KEEP(*(.cy_app_signature))
+ } > flash
+
+
+ /* Emulated EEPROM Flash area */
+ .cy_em_eeprom :
+ {
+ KEEP(*(.cy_em_eeprom))
+ } > em_eeprom
+
+
+ /* Supervisory Flash: User data */
+ .cy_sflash_user_data :
+ {
+ KEEP(*(.cy_sflash_user_data))
+ } > sflash_user_data
+
+
+ /* Supervisory Flash: Normal Access Restrictions (NAR) */
+ .cy_sflash_nar :
+ {
+ KEEP(*(.cy_sflash_nar))
+ } > sflash_nar
+
+
+ /* Supervisory Flash: Public Key */
+ .cy_sflash_public_key :
+ {
+ KEEP(*(.cy_sflash_public_key))
+ } > sflash_public_key
+
+
+ /* Supervisory Flash: Table of Content # 2 */
+ .cy_toc_part2 :
+ {
+ KEEP(*(.cy_toc_part2))
+ } > sflash_toc_2
+
+
+ /* Supervisory Flash: Table of Content # 2 Copy */
+ .cy_rtoc_part2 :
+ {
+ KEEP(*(.cy_rtoc_part2))
+ } > sflash_rtoc_2
+
+
+ /* Places the code in the Execute in Place (XIP) section. See the smif driver
+ * documentation for details.
+ */
+ .cy_xip :
+ {
+ KEEP(*(.cy_xip))
+ } > xip
+
+
+ /* eFuse */
+ .cy_efuse :
+ {
+ KEEP(*(.cy_efuse))
+ } > efuse
+
+
+ /* These sections are used for additional metadata (silicon revision,
+ * Silicon/JTAG ID, etc.) storage.
+ */
+ .cymeta 0x90500000 : { KEEP(*(.cymeta)) } :NONE
+}
+
+
+/* The following symbols used by the cymcuelftool. */
+/* Flash */
+__cy_memory_0_start = 0x10000000;
+__cy_memory_0_length = 0x00040000;
+__cy_memory_0_row_size = 0x200;
+
+/* Emulated EEPROM Flash area */
+__cy_memory_1_start = 0x14000000;
+__cy_memory_1_length = 0x8000;
+__cy_memory_1_row_size = 0x200;
+
+/* Supervisory Flash */
+__cy_memory_2_start = 0x16000000;
+__cy_memory_2_length = 0x8000;
+__cy_memory_2_row_size = 0x200;
+
+/* XIP */
+__cy_memory_3_start = 0x18000000;
+__cy_memory_3_length = 0x08000000;
+__cy_memory_3_row_size = 0x200;
+
+/* eFuse */
+__cy_memory_4_start = 0x90700000;
+__cy_memory_4_length = 0x100000;
+__cy_memory_4_row_size = 1;
+
+/* EOF */
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx5_cm4_dual.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx5_cm4_dual.ld
index 7b9ea66..9070b72 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx5_cm4_dual.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx5_cm4_dual.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cy8c6xx5_cm4_dual.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -43,6 +43,10 @@ ENTRY(Reset_Handler)
/* The size of the stack section at the end of CM4 SRAM */
STACK_SIZE = 0x1000;
+/* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+* More about CM0+ prebuilt images, see here:
+* https://github.com/cypresssemiconductorco/psoc6cm0p
+*/
/* The size of the Cortex-M0+ application image at the start of FLASH */
FLASH_CM0P_SIZE = 0x2000;
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx6_cm4.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx6_cm4.ld
index 1e41911..2efe8e2 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx6_cm4.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx6_cm4.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cy8c6xx6_cm4.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx6_cm4_dual.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx6_cm4_dual.ld
index 01382f8..95360f5 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx6_cm4_dual.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx6_cm4_dual.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cy8c6xx6_cm4_dual.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -43,6 +43,10 @@ ENTRY(Reset_Handler)
/* The size of the stack section at the end of CM4 SRAM */
STACK_SIZE = 0x1000;
+/* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+* More about CM0+ prebuilt images, see here:
+* https://github.com/cypresssemiconductorco/psoc6cm0p
+*/
/* The size of the Cortex-M0+ application image at the start of FLASH */
FLASH_CM0P_SIZE = 0x2000;
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm4.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm4.ld
index 825375f..a3f4455 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm4.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm4.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cy8c6xx7_cm4.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm4_dual.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm4_dual.ld
index 2d23d29..39b4f82 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm4_dual.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx7_cm4_dual.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cy8c6xx7_cm4_dual.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -43,6 +43,10 @@ ENTRY(Reset_Handler)
/* The size of the stack section at the end of CM4 SRAM */
STACK_SIZE = 0x1000;
+/* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+* More about CM0+ prebuilt images, see here:
+* https://github.com/cypresssemiconductorco/psoc6cm0p
+*/
/* The size of the Cortex-M0+ application image at the start of FLASH */
FLASH_CM0P_SIZE = 0x2000;
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx8_cm4_dual.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx8_cm4_dual.ld
index bb27662..6d7c416 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx8_cm4_dual.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xx8_cm4_dual.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cy8c6xx8_cm4_dual.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -43,6 +43,10 @@ ENTRY(Reset_Handler)
/* The size of the stack section at the end of CM4 SRAM */
STACK_SIZE = 0x1000;
+/* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+* More about CM0+ prebuilt images, see here:
+* https://github.com/cypresssemiconductorco/psoc6cm0p
+*/
/* The size of the Cortex-M0+ application image at the start of FLASH */
FLASH_CM0P_SIZE = 0x2000;
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xxa_cm4_dual.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xxa_cm4_dual.ld
index ec70309..962ff9d 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xxa_cm4_dual.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cy8c6xxa_cm4_dual.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cy8c6xxa_cm4_dual.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -43,6 +43,10 @@ ENTRY(Reset_Handler)
/* The size of the stack section at the end of CM4 SRAM */
STACK_SIZE = 0x1000;
+/* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+* More about CM0+ prebuilt images, see here:
+* https://github.com/cypresssemiconductorco/psoc6cm0p
+*/
/* The size of the Cortex-M0+ application image at the start of FLASH */
FLASH_CM0P_SIZE = 0x2000;
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx5_cm4.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx5_cm4.ld
index 8979753..e4b014f 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx5_cm4.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx5_cm4.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cyb06xx5_cm4.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx5_cm4_dual.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx5_cm4_dual.ld
index 594c705..0131584 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx5_cm4_dual.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx5_cm4_dual.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cyb06xx5_cm4_dual.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx7_cm4.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx7_cm4.ld
index 0726ab2..a23e73a 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx7_cm4.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx7_cm4.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cyb06xx7_cm4.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx7_cm4_dual.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx7_cm4_dual.ld
index c2e2db4..2c786df 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx7_cm4_dual.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xx7_cm4_dual.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cyb06xx7_cm4_dual.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xxa_cm4.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xxa_cm4.ld
index 6f35751..890c460 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xxa_cm4.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xxa_cm4.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cyb06xxa_cm4.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xxa_cm4_dual.ld b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xxa_cm4_dual.ld
index 926961d..c11e3bb 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xxa_cm4_dual.ld
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/cyb06xxa_cm4_dual.ld
@@ -1,6 +1,6 @@
/***************************************************************************//**
* \file cyb06xxa_cm4_dual.ld
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the GNU C compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/startup_psoc6_04_cm4.S b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/startup_psoc6_04_cm4.S
new file mode 100644
index 0000000..b9d1083
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_GCC_ARM/startup_psoc6_04_cm4.S
@@ -0,0 +1,676 @@
+/**************************************************************************//**
+ * @file startup_psoc6_04_cm4.S
+ * @brief CMSIS Core Device Startup File for
+ * ARMCM4 Device Series
+ * @version V5.00
+ * @date 02. March 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ /* Address of the NMI handler */
+ #define CY_NMI_HANLDER_ADDR 0x0000000D
+
+ /* The CPU VTOR register */
+ #define CY_CPU_VTOR_ADDR 0xE000ED08
+
+ /* Copy flash vectors and data section to RAM */
+ #define __STARTUP_COPY_MULTIPLE
+
+ /* Clear single BSS section */
+ #define __STARTUP_CLEAR_BSS
+
+ .syntax unified
+ .arch armv7-m
+
+ .section .stack
+ .align 3
+#ifdef __STACK_SIZE
+ .equ Stack_Size, __STACK_SIZE
+#else
+ .equ Stack_Size, 0x00001000
+#endif
+ .globl __StackTop
+ .globl __StackLimit
+__StackLimit:
+ .space Stack_Size
+ .size __StackLimit, . - __StackLimit
+__StackTop:
+ .size __StackTop, . - __StackTop
+
+ .section .heap
+ .align 3
+#ifdef __HEAP_SIZE
+ .equ Heap_Size, __HEAP_SIZE
+#else
+ .equ Heap_Size, 0x00000400
+#endif
+ .globl __HeapBase
+ .globl __HeapLimit
+__HeapBase:
+ .if Heap_Size
+ .space Heap_Size
+ .endif
+ .size __HeapBase, . - __HeapBase
+__HeapLimit:
+ .size __HeapLimit, . - __HeapLimit
+
+ .section .vectors
+ .align 2
+ .globl __Vectors
+__Vectors:
+ .long __StackTop /* Top of Stack */
+ .long Reset_Handler /* Reset Handler */
+ .long CY_NMI_HANLDER_ADDR /* NMI Handler */
+ .long HardFault_Handler /* Hard Fault Handler */
+ .long MemManage_Handler /* MPU Fault Handler */
+ .long BusFault_Handler /* Bus Fault Handler */
+ .long UsageFault_Handler /* Usage Fault Handler */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long SVC_Handler /* SVCall Handler */
+ .long DebugMon_Handler /* Debug Monitor Handler */
+ .long 0 /* Reserved */
+ .long PendSV_Handler /* PendSV Handler */
+ .long SysTick_Handler /* SysTick Handler */
+
+ /* External interrupts Description */
+ .long ioss_interrupts_gpio_0_IRQHandler /* GPIO Port Interrupt #0 */
+ .long 0 /* Reserved */
+ .long ioss_interrupts_gpio_2_IRQHandler /* GPIO Port Interrupt #2 */
+ .long ioss_interrupts_gpio_3_IRQHandler /* GPIO Port Interrupt #3 */
+ .long 0 /* Reserved */
+ .long ioss_interrupts_gpio_5_IRQHandler /* GPIO Port Interrupt #5 */
+ .long ioss_interrupts_gpio_6_IRQHandler /* GPIO Port Interrupt #6 */
+ .long ioss_interrupts_gpio_7_IRQHandler /* GPIO Port Interrupt #7 */
+ .long ioss_interrupts_gpio_8_IRQHandler /* GPIO Port Interrupt #8 */
+ .long ioss_interrupts_gpio_9_IRQHandler /* GPIO Port Interrupt #9 */
+ .long ioss_interrupts_gpio_10_IRQHandler /* GPIO Port Interrupt #10 */
+ .long ioss_interrupts_gpio_11_IRQHandler /* GPIO Port Interrupt #11 */
+ .long ioss_interrupts_gpio_12_IRQHandler /* GPIO Port Interrupt #12 */
+ .long 0 /* Reserved */
+ .long ioss_interrupts_gpio_14_IRQHandler /* GPIO Port Interrupt #14 */
+ .long ioss_interrupt_gpio_IRQHandler /* GPIO All Ports */
+ .long ioss_interrupt_vdd_IRQHandler /* GPIO Supply Detect Interrupt */
+ .long lpcomp_interrupt_IRQHandler /* Low Power Comparator Interrupt */
+ .long scb_6_interrupt_IRQHandler /* Serial Communication Block #6 (DeepSleep capable) */
+ .long srss_interrupt_mcwdt_0_IRQHandler /* Multi Counter Watchdog Timer interrupt */
+ .long srss_interrupt_mcwdt_1_IRQHandler /* Multi Counter Watchdog Timer interrupt */
+ .long srss_interrupt_backup_IRQHandler /* Backup domain interrupt */
+ .long srss_interrupt_IRQHandler /* Other combined Interrupts for SRSS (LVD, WDT, CLKCAL) */
+ .long cpuss_interrupts_ipc_0_IRQHandler /* CPUSS Inter Process Communication Interrupt #0 */
+ .long cpuss_interrupts_ipc_1_IRQHandler /* CPUSS Inter Process Communication Interrupt #1 */
+ .long cpuss_interrupts_ipc_2_IRQHandler /* CPUSS Inter Process Communication Interrupt #2 */
+ .long cpuss_interrupts_ipc_3_IRQHandler /* CPUSS Inter Process Communication Interrupt #3 */
+ .long cpuss_interrupts_ipc_4_IRQHandler /* CPUSS Inter Process Communication Interrupt #4 */
+ .long cpuss_interrupts_ipc_5_IRQHandler /* CPUSS Inter Process Communication Interrupt #5 */
+ .long cpuss_interrupts_ipc_6_IRQHandler /* CPUSS Inter Process Communication Interrupt #6 */
+ .long cpuss_interrupts_ipc_7_IRQHandler /* CPUSS Inter Process Communication Interrupt #7 */
+ .long cpuss_interrupts_ipc_8_IRQHandler /* CPUSS Inter Process Communication Interrupt #8 */
+ .long cpuss_interrupts_ipc_9_IRQHandler /* CPUSS Inter Process Communication Interrupt #9 */
+ .long cpuss_interrupts_ipc_10_IRQHandler /* CPUSS Inter Process Communication Interrupt #10 */
+ .long cpuss_interrupts_ipc_11_IRQHandler /* CPUSS Inter Process Communication Interrupt #11 */
+ .long cpuss_interrupts_ipc_12_IRQHandler /* CPUSS Inter Process Communication Interrupt #12 */
+ .long cpuss_interrupts_ipc_13_IRQHandler /* CPUSS Inter Process Communication Interrupt #13 */
+ .long cpuss_interrupts_ipc_14_IRQHandler /* CPUSS Inter Process Communication Interrupt #14 */
+ .long cpuss_interrupts_ipc_15_IRQHandler /* CPUSS Inter Process Communication Interrupt #15 */
+ .long pass_interrupt_sar_0_IRQHandler /* SAR ADC0 interrupt */
+ .long pass_interrupt_sar_1_IRQHandler /* SAR ADC1 interrupt */
+ .long pass_interrupt_ctb_IRQHandler /* individual interrupt per CTB */
+ .long 0 /* Reserved */
+ .long pass_interrupt_fifo_0_IRQHandler /* PASS FIFO0 */
+ .long pass_interrupt_fifo_1_IRQHandler /* PASS FIFO1 */
+ .long scb_0_interrupt_IRQHandler /* Serial Communication Block #0 */
+ .long scb_1_interrupt_IRQHandler /* Serial Communication Block #1 */
+ .long scb_2_interrupt_IRQHandler /* Serial Communication Block #2 */
+ .long 0 /* Reserved */
+ .long scb_4_interrupt_IRQHandler /* Serial Communication Block #4 */
+ .long scb_5_interrupt_IRQHandler /* Serial Communication Block #5 */
+ .long csd_interrupt_IRQHandler /* CSD (Capsense) interrupt */
+ .long cpuss_interrupts_dmac_0_IRQHandler /* CPUSS DMAC, Channel #0 */
+ .long cpuss_interrupts_dmac_1_IRQHandler /* CPUSS DMAC, Channel #1 */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long cpuss_interrupts_dw0_0_IRQHandler /* CPUSS DataWire #0, Channel #0 */
+ .long cpuss_interrupts_dw0_1_IRQHandler /* CPUSS DataWire #0, Channel #1 */
+ .long cpuss_interrupts_dw0_2_IRQHandler /* CPUSS DataWire #0, Channel #2 */
+ .long cpuss_interrupts_dw0_3_IRQHandler /* CPUSS DataWire #0, Channel #3 */
+ .long cpuss_interrupts_dw0_4_IRQHandler /* CPUSS DataWire #0, Channel #4 */
+ .long cpuss_interrupts_dw0_5_IRQHandler /* CPUSS DataWire #0, Channel #5 */
+ .long cpuss_interrupts_dw0_6_IRQHandler /* CPUSS DataWire #0, Channel #6 */
+ .long cpuss_interrupts_dw0_7_IRQHandler /* CPUSS DataWire #0, Channel #7 */
+ .long cpuss_interrupts_dw0_8_IRQHandler /* CPUSS DataWire #0, Channel #8 */
+ .long cpuss_interrupts_dw0_9_IRQHandler /* CPUSS DataWire #0, Channel #9 */
+ .long cpuss_interrupts_dw0_10_IRQHandler /* CPUSS DataWire #0, Channel #10 */
+ .long cpuss_interrupts_dw0_11_IRQHandler /* CPUSS DataWire #0, Channel #11 */
+ .long cpuss_interrupts_dw0_12_IRQHandler /* CPUSS DataWire #0, Channel #12 */
+ .long cpuss_interrupts_dw0_13_IRQHandler /* CPUSS DataWire #0, Channel #13 */
+ .long cpuss_interrupts_dw0_14_IRQHandler /* CPUSS DataWire #0, Channel #14 */
+ .long cpuss_interrupts_dw0_15_IRQHandler /* CPUSS DataWire #0, Channel #15 */
+ .long cpuss_interrupts_dw0_16_IRQHandler /* CPUSS DataWire #0, Channel #16 */
+ .long cpuss_interrupts_dw0_17_IRQHandler /* CPUSS DataWire #0, Channel #17 */
+ .long cpuss_interrupts_dw0_18_IRQHandler /* CPUSS DataWire #0, Channel #18 */
+ .long cpuss_interrupts_dw0_19_IRQHandler /* CPUSS DataWire #0, Channel #19 */
+ .long cpuss_interrupts_dw0_20_IRQHandler /* CPUSS DataWire #0, Channel #20 */
+ .long cpuss_interrupts_dw0_21_IRQHandler /* CPUSS DataWire #0, Channel #21 */
+ .long cpuss_interrupts_dw0_22_IRQHandler /* CPUSS DataWire #0, Channel #22 */
+ .long cpuss_interrupts_dw0_23_IRQHandler /* CPUSS DataWire #0, Channel #23 */
+ .long cpuss_interrupts_dw0_24_IRQHandler /* CPUSS DataWire #0, Channel #24 */
+ .long cpuss_interrupts_dw0_25_IRQHandler /* CPUSS DataWire #0, Channel #25 */
+ .long cpuss_interrupts_dw0_26_IRQHandler /* CPUSS DataWire #0, Channel #26 */
+ .long cpuss_interrupts_dw0_27_IRQHandler /* CPUSS DataWire #0, Channel #27 */
+ .long cpuss_interrupts_dw0_28_IRQHandler /* CPUSS DataWire #0, Channel #28 */
+ .long cpuss_interrupts_dw1_0_IRQHandler /* CPUSS DataWire #1, Channel #0 */
+ .long cpuss_interrupts_dw1_1_IRQHandler /* CPUSS DataWire #1, Channel #1 */
+ .long cpuss_interrupts_dw1_2_IRQHandler /* CPUSS DataWire #1, Channel #2 */
+ .long cpuss_interrupts_dw1_3_IRQHandler /* CPUSS DataWire #1, Channel #3 */
+ .long cpuss_interrupts_dw1_4_IRQHandler /* CPUSS DataWire #1, Channel #4 */
+ .long cpuss_interrupts_dw1_5_IRQHandler /* CPUSS DataWire #1, Channel #5 */
+ .long cpuss_interrupts_dw1_6_IRQHandler /* CPUSS DataWire #1, Channel #6 */
+ .long cpuss_interrupts_dw1_7_IRQHandler /* CPUSS DataWire #1, Channel #7 */
+ .long cpuss_interrupts_dw1_8_IRQHandler /* CPUSS DataWire #1, Channel #8 */
+ .long cpuss_interrupts_dw1_9_IRQHandler /* CPUSS DataWire #1, Channel #9 */
+ .long cpuss_interrupts_dw1_10_IRQHandler /* CPUSS DataWire #1, Channel #10 */
+ .long cpuss_interrupts_dw1_11_IRQHandler /* CPUSS DataWire #1, Channel #11 */
+ .long cpuss_interrupts_dw1_12_IRQHandler /* CPUSS DataWire #1, Channel #12 */
+ .long cpuss_interrupts_dw1_13_IRQHandler /* CPUSS DataWire #1, Channel #13 */
+ .long cpuss_interrupts_dw1_14_IRQHandler /* CPUSS DataWire #1, Channel #14 */
+ .long cpuss_interrupts_dw1_15_IRQHandler /* CPUSS DataWire #1, Channel #15 */
+ .long cpuss_interrupts_dw1_16_IRQHandler /* CPUSS DataWire #1, Channel #16 */
+ .long cpuss_interrupts_dw1_17_IRQHandler /* CPUSS DataWire #1, Channel #17 */
+ .long cpuss_interrupts_dw1_18_IRQHandler /* CPUSS DataWire #1, Channel #18 */
+ .long cpuss_interrupts_dw1_19_IRQHandler /* CPUSS DataWire #1, Channel #19 */
+ .long cpuss_interrupts_dw1_20_IRQHandler /* CPUSS DataWire #1, Channel #20 */
+ .long cpuss_interrupts_dw1_21_IRQHandler /* CPUSS DataWire #1, Channel #21 */
+ .long cpuss_interrupts_dw1_22_IRQHandler /* CPUSS DataWire #1, Channel #22 */
+ .long cpuss_interrupts_dw1_23_IRQHandler /* CPUSS DataWire #1, Channel #23 */
+ .long cpuss_interrupts_dw1_24_IRQHandler /* CPUSS DataWire #1, Channel #24 */
+ .long cpuss_interrupts_dw1_25_IRQHandler /* CPUSS DataWire #1, Channel #25 */
+ .long cpuss_interrupts_dw1_26_IRQHandler /* CPUSS DataWire #1, Channel #26 */
+ .long cpuss_interrupts_dw1_27_IRQHandler /* CPUSS DataWire #1, Channel #27 */
+ .long cpuss_interrupts_dw1_28_IRQHandler /* CPUSS DataWire #1, Channel #28 */
+ .long cpuss_interrupts_fault_0_IRQHandler /* CPUSS Fault Structure Interrupt #0 */
+ .long cpuss_interrupts_fault_1_IRQHandler /* CPUSS Fault Structure Interrupt #1 */
+ .long cpuss_interrupt_crypto_IRQHandler /* CRYPTO Accelerator Interrupt */
+ .long cpuss_interrupt_fm_IRQHandler /* FLASH Macro Interrupt */
+ .long cpuss_interrupts_cm4_fp_IRQHandler /* Floating Point operation fault */
+ .long cpuss_interrupts_cm0_cti_0_IRQHandler /* CM0+ CTI #0 */
+ .long cpuss_interrupts_cm0_cti_1_IRQHandler /* CM0+ CTI #1 */
+ .long cpuss_interrupts_cm4_cti_0_IRQHandler /* CM4 CTI #0 */
+ .long cpuss_interrupts_cm4_cti_1_IRQHandler /* CM4 CTI #1 */
+ .long tcpwm_0_interrupts_0_IRQHandler /* TCPWM #0, Counter #0 */
+ .long tcpwm_0_interrupts_1_IRQHandler /* TCPWM #0, Counter #1 */
+ .long tcpwm_0_interrupts_2_IRQHandler /* TCPWM #0, Counter #2 */
+ .long tcpwm_0_interrupts_3_IRQHandler /* TCPWM #0, Counter #3 */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long tcpwm_0_interrupts_256_IRQHandler /* TCPWM #0, Counter #256 */
+ .long tcpwm_0_interrupts_257_IRQHandler /* TCPWM #0, Counter #257 */
+ .long tcpwm_0_interrupts_258_IRQHandler /* TCPWM #0, Counter #258 */
+ .long tcpwm_0_interrupts_259_IRQHandler /* TCPWM #0, Counter #259 */
+ .long tcpwm_0_interrupts_260_IRQHandler /* TCPWM #0, Counter #260 */
+ .long tcpwm_0_interrupts_261_IRQHandler /* TCPWM #0, Counter #261 */
+ .long tcpwm_0_interrupts_262_IRQHandler /* TCPWM #0, Counter #262 */
+ .long tcpwm_0_interrupts_263_IRQHandler /* TCPWM #0, Counter #263 */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long pass_interrupt_dacs_IRQHandler /* Consolidated interrrupt for all DACs */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long smif_interrupt_IRQHandler /* Serial Memory Interface interrupt */
+ .long usb_interrupt_hi_IRQHandler /* USB Interrupt */
+ .long usb_interrupt_med_IRQHandler /* USB Interrupt */
+ .long usb_interrupt_lo_IRQHandler /* USB Interrupt */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long 0 /* Reserved */
+ .long canfd_0_interrupt0_IRQHandler /* Can #0, Consolidated interrupt #0 */
+ .long canfd_0_interrupts0_0_IRQHandler /* CAN #0, Interrupt #0, Channel #0 */
+ .long canfd_0_interrupts1_0_IRQHandler /* CAN #0, Interrupt #1, Channel #0 */
+ .long cpuss_interrupts_dw1_29_IRQHandler /* CPUSS DataWire #1, Channel #29 */
+ .long cpuss_interrupts_dw1_30_IRQHandler /* CPUSS DataWire #1, Channel #30 */
+ .long cpuss_interrupts_dw1_31_IRQHandler /* CPUSS DataWire #1, Channel #31 */
+ .long cpuss_interrupts_dw0_29_IRQHandler /* CPUSS DataWire #0, Channel #29 */
+
+
+ .size __Vectors, . - __Vectors
+ .equ __VectorsSize, . - __Vectors
+
+ .section .ram_vectors
+ .align 2
+ .globl __ramVectors
+__ramVectors:
+ .space __VectorsSize
+ .size __ramVectors, . - __ramVectors
+
+
+ .text
+ .thumb
+ .thumb_func
+ .align 2
+
+ /*
+ * Device startup customization
+ *
+ * Note. The global resources are not yet initialized (for example global variables, peripherals, clocks)
+ * because this function is executed as the first instruction in the ResetHandler.
+ * The PDL is also not initialized to use the proper register offsets.
+ * The user of this function is responsible for initializing the PDL and resources before using them.
+ */
+ .weak Cy_OnResetUser
+ .func Cy_OnResetUser, Cy_OnResetUser
+ .type Cy_OnResetUser, %function
+
+Cy_OnResetUser:
+ bx lr
+ .size Cy_OnResetUser, . - Cy_OnResetUser
+ .endfunc
+
+ /* OS-specific low-level initialization */
+ .weak cy_toolchain_init
+ .func cy_toolchain_init, cy_toolchain_init
+ .type cy_toolchain_init, %function
+
+cy_toolchain_init:
+ bx lr
+ .size cy_toolchain_init, . - cy_toolchain_init
+ .endfunc
+
+ /* Reset handler */
+ .weak Reset_Handler
+ .type Reset_Handler, %function
+
+Reset_Handler:
+ bl Cy_OnResetUser
+ cpsid i
+
+/* Firstly it copies data from read only memory to RAM. There are two schemes
+ * to copy. One can copy more than one sections. Another can only copy
+ * one section. The former scheme needs more instructions and read-only
+ * data to implement than the latter.
+ * Macro __STARTUP_COPY_MULTIPLE is used to choose between two schemes. */
+
+#ifdef __STARTUP_COPY_MULTIPLE
+/* Multiple sections scheme.
+ *
+ * Between symbol address __copy_table_start__ and __copy_table_end__,
+ * there are array of triplets, each of which specify:
+ * offset 0: LMA of start of a section to copy from
+ * offset 4: VMA of start of a section to copy to
+ * offset 8: size of the section to copy. Must be multiply of 4
+ *
+ * All addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r4, =__copy_table_start__
+ ldr r5, =__copy_table_end__
+
+.L_loop0:
+ cmp r4, r5
+ bge .L_loop0_done
+ ldr r1, [r4]
+ ldr r2, [r4, #4]
+ ldr r3, [r4, #8]
+
+.L_loop0_0:
+ subs r3, #4
+ ittt ge
+ ldrge r0, [r1, r3]
+ strge r0, [r2, r3]
+ bge .L_loop0_0
+
+ adds r4, #12
+ b .L_loop0
+
+.L_loop0_done:
+#else
+/* Single section scheme.
+ *
+ * The ranges of copy from/to are specified by following symbols
+ * __etext: LMA of start of the section to copy from. Usually end of text
+ * __data_start__: VMA of start of the section to copy to
+ * __data_end__: VMA of end of the section to copy to
+ *
+ * All addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r1, =__etext
+ ldr r2, =__data_start__
+ ldr r3, =__data_end__
+
+.L_loop1:
+ cmp r2, r3
+ ittt lt
+ ldrlt r0, [r1], #4
+ strlt r0, [r2], #4
+ blt .L_loop1
+#endif /*__STARTUP_COPY_MULTIPLE */
+
+/* This part of work usually is done in C library startup code. Otherwise,
+ * define this macro to enable it in this startup.
+ *
+ * There are two schemes too. One can clear multiple BSS sections. Another
+ * can only clear one section. The former is more size expensive than the
+ * latter.
+ *
+ * Define macro __STARTUP_CLEAR_BSS_MULTIPLE to choose the former.
+ * Otherwise define macro __STARTUP_CLEAR_BSS to choose the later.
+ */
+#ifdef __STARTUP_CLEAR_BSS_MULTIPLE
+/* Multiple sections scheme.
+ *
+ * Between symbol address __copy_table_start__ and __copy_table_end__,
+ * there are array of tuples specifying:
+ * offset 0: Start of a BSS section
+ * offset 4: Size of this BSS section. Must be multiply of 4
+ */
+ ldr r3, =__zero_table_start__
+ ldr r4, =__zero_table_end__
+
+.L_loop2:
+ cmp r3, r4
+ bge .L_loop2_done
+ ldr r1, [r3]
+ ldr r2, [r3, #4]
+ movs r0, 0
+
+.L_loop2_0:
+ subs r2, #4
+ itt ge
+ strge r0, [r1, r2]
+ bge .L_loop2_0
+
+ adds r3, #8
+ b .L_loop2
+.L_loop2_done:
+#elif defined (__STARTUP_CLEAR_BSS)
+/* Single BSS section scheme.
+ *
+ * The BSS section is specified by following symbols
+ * __bss_start__: start of the BSS section.
+ * __bss_end__: end of the BSS section.
+ *
+ * Both addresses must be aligned to 4 bytes boundary.
+ */
+ ldr r1, =__bss_start__
+ ldr r2, =__bss_end__
+
+ movs r0, 0
+.L_loop3:
+ cmp r1, r2
+ itt lt
+ strlt r0, [r1], #4
+ blt .L_loop3
+#endif /* __STARTUP_CLEAR_BSS_MULTIPLE || __STARTUP_CLEAR_BSS */
+
+ /* Update Vector Table Offset Register. */
+ ldr r0, =__ramVectors
+ ldr r1, =CY_CPU_VTOR_ADDR
+ str r0, [r1]
+ dsb 0xF
+
+ /* Enable the FPU if used */
+ bl Cy_SystemInitFpuEnable
+
+#ifndef __NO_SYSTEM_INIT
+ bl SystemInit
+#endif
+
+ /* OS-specific low-level initialization */
+ bl cy_toolchain_init
+
+ /* Call C/C++ static constructors */
+ bl __libc_init_array
+
+ /* Execute main application */
+ bl main
+
+ /* Call C/C++ static destructors */
+ bl __libc_fini_array
+
+ /* Should never get here */
+ b .
+
+ .pool
+ .size Reset_Handler, . - Reset_Handler
+
+ .align 1
+ .thumb_func
+ .weak Default_Handler
+ .type Default_Handler, %function
+
+Default_Handler:
+ b .
+ .size Default_Handler, . - Default_Handler
+
+
+ .weak Cy_SysLib_FaultHandler
+ .type Cy_SysLib_FaultHandler, %function
+
+Cy_SysLib_FaultHandler:
+ b .
+ .size Cy_SysLib_FaultHandler, . - Cy_SysLib_FaultHandler
+ .type Fault_Handler, %function
+
+Fault_Handler:
+ /* Storing LR content for Creator call stack trace */
+ push {LR}
+ movs r0, #4
+ mov r1, LR
+ tst r0, r1
+ beq .L_MSP
+ mrs r0, PSP
+ b .L_API_call
+.L_MSP:
+ mrs r0, MSP
+.L_API_call:
+ /* Compensation of stack pointer address due to pushing 4 bytes of LR */
+ adds r0, r0, #4
+ bl Cy_SysLib_FaultHandler
+ b .
+ .size Fault_Handler, . - Fault_Handler
+
+.macro def_fault_Handler fault_handler_name
+ .weak \fault_handler_name
+ .set \fault_handler_name, Fault_Handler
+ .endm
+
+/* Macro to define default handlers. Default handler
+ * will be weak symbol and just dead loops. They can be
+ * overwritten by other handlers */
+ .macro def_irq_handler handler_name
+ .weak \handler_name
+ .set \handler_name, Default_Handler
+ .endm
+
+ def_irq_handler NMI_Handler
+
+ def_fault_Handler HardFault_Handler
+ def_fault_Handler MemManage_Handler
+ def_fault_Handler BusFault_Handler
+ def_fault_Handler UsageFault_Handler
+
+ def_irq_handler SVC_Handler
+ def_irq_handler DebugMon_Handler
+ def_irq_handler PendSV_Handler
+ def_irq_handler SysTick_Handler
+
+ def_irq_handler ioss_interrupts_gpio_0_IRQHandler /* GPIO Port Interrupt #0 */
+ def_irq_handler ioss_interrupts_gpio_2_IRQHandler /* GPIO Port Interrupt #2 */
+ def_irq_handler ioss_interrupts_gpio_3_IRQHandler /* GPIO Port Interrupt #3 */
+ def_irq_handler ioss_interrupts_gpio_5_IRQHandler /* GPIO Port Interrupt #5 */
+ def_irq_handler ioss_interrupts_gpio_6_IRQHandler /* GPIO Port Interrupt #6 */
+ def_irq_handler ioss_interrupts_gpio_7_IRQHandler /* GPIO Port Interrupt #7 */
+ def_irq_handler ioss_interrupts_gpio_8_IRQHandler /* GPIO Port Interrupt #8 */
+ def_irq_handler ioss_interrupts_gpio_9_IRQHandler /* GPIO Port Interrupt #9 */
+ def_irq_handler ioss_interrupts_gpio_10_IRQHandler /* GPIO Port Interrupt #10 */
+ def_irq_handler ioss_interrupts_gpio_11_IRQHandler /* GPIO Port Interrupt #11 */
+ def_irq_handler ioss_interrupts_gpio_12_IRQHandler /* GPIO Port Interrupt #12 */
+ def_irq_handler ioss_interrupts_gpio_14_IRQHandler /* GPIO Port Interrupt #14 */
+ def_irq_handler ioss_interrupt_gpio_IRQHandler /* GPIO All Ports */
+ def_irq_handler ioss_interrupt_vdd_IRQHandler /* GPIO Supply Detect Interrupt */
+ def_irq_handler lpcomp_interrupt_IRQHandler /* Low Power Comparator Interrupt */
+ def_irq_handler scb_6_interrupt_IRQHandler /* Serial Communication Block #6 (DeepSleep capable) */
+ def_irq_handler srss_interrupt_mcwdt_0_IRQHandler /* Multi Counter Watchdog Timer interrupt */
+ def_irq_handler srss_interrupt_mcwdt_1_IRQHandler /* Multi Counter Watchdog Timer interrupt */
+ def_irq_handler srss_interrupt_backup_IRQHandler /* Backup domain interrupt */
+ def_irq_handler srss_interrupt_IRQHandler /* Other combined Interrupts for SRSS (LVD, WDT, CLKCAL) */
+ def_irq_handler cpuss_interrupts_ipc_0_IRQHandler /* CPUSS Inter Process Communication Interrupt #0 */
+ def_irq_handler cpuss_interrupts_ipc_1_IRQHandler /* CPUSS Inter Process Communication Interrupt #1 */
+ def_irq_handler cpuss_interrupts_ipc_2_IRQHandler /* CPUSS Inter Process Communication Interrupt #2 */
+ def_irq_handler cpuss_interrupts_ipc_3_IRQHandler /* CPUSS Inter Process Communication Interrupt #3 */
+ def_irq_handler cpuss_interrupts_ipc_4_IRQHandler /* CPUSS Inter Process Communication Interrupt #4 */
+ def_irq_handler cpuss_interrupts_ipc_5_IRQHandler /* CPUSS Inter Process Communication Interrupt #5 */
+ def_irq_handler cpuss_interrupts_ipc_6_IRQHandler /* CPUSS Inter Process Communication Interrupt #6 */
+ def_irq_handler cpuss_interrupts_ipc_7_IRQHandler /* CPUSS Inter Process Communication Interrupt #7 */
+ def_irq_handler cpuss_interrupts_ipc_8_IRQHandler /* CPUSS Inter Process Communication Interrupt #8 */
+ def_irq_handler cpuss_interrupts_ipc_9_IRQHandler /* CPUSS Inter Process Communication Interrupt #9 */
+ def_irq_handler cpuss_interrupts_ipc_10_IRQHandler /* CPUSS Inter Process Communication Interrupt #10 */
+ def_irq_handler cpuss_interrupts_ipc_11_IRQHandler /* CPUSS Inter Process Communication Interrupt #11 */
+ def_irq_handler cpuss_interrupts_ipc_12_IRQHandler /* CPUSS Inter Process Communication Interrupt #12 */
+ def_irq_handler cpuss_interrupts_ipc_13_IRQHandler /* CPUSS Inter Process Communication Interrupt #13 */
+ def_irq_handler cpuss_interrupts_ipc_14_IRQHandler /* CPUSS Inter Process Communication Interrupt #14 */
+ def_irq_handler cpuss_interrupts_ipc_15_IRQHandler /* CPUSS Inter Process Communication Interrupt #15 */
+ def_irq_handler pass_interrupt_sar_0_IRQHandler /* SAR ADC0 interrupt */
+ def_irq_handler pass_interrupt_sar_1_IRQHandler /* SAR ADC1 interrupt */
+ def_irq_handler pass_interrupt_ctb_IRQHandler /* individual interrupt per CTB */
+ def_irq_handler pass_interrupt_fifo_0_IRQHandler /* PASS FIFO0 */
+ def_irq_handler pass_interrupt_fifo_1_IRQHandler /* PASS FIFO1 */
+ def_irq_handler scb_0_interrupt_IRQHandler /* Serial Communication Block #0 */
+ def_irq_handler scb_1_interrupt_IRQHandler /* Serial Communication Block #1 */
+ def_irq_handler scb_2_interrupt_IRQHandler /* Serial Communication Block #2 */
+ def_irq_handler scb_4_interrupt_IRQHandler /* Serial Communication Block #4 */
+ def_irq_handler scb_5_interrupt_IRQHandler /* Serial Communication Block #5 */
+ def_irq_handler csd_interrupt_IRQHandler /* CSD (Capsense) interrupt */
+ def_irq_handler cpuss_interrupts_dmac_0_IRQHandler /* CPUSS DMAC, Channel #0 */
+ def_irq_handler cpuss_interrupts_dmac_1_IRQHandler /* CPUSS DMAC, Channel #1 */
+ def_irq_handler cpuss_interrupts_dw0_0_IRQHandler /* CPUSS DataWire #0, Channel #0 */
+ def_irq_handler cpuss_interrupts_dw0_1_IRQHandler /* CPUSS DataWire #0, Channel #1 */
+ def_irq_handler cpuss_interrupts_dw0_2_IRQHandler /* CPUSS DataWire #0, Channel #2 */
+ def_irq_handler cpuss_interrupts_dw0_3_IRQHandler /* CPUSS DataWire #0, Channel #3 */
+ def_irq_handler cpuss_interrupts_dw0_4_IRQHandler /* CPUSS DataWire #0, Channel #4 */
+ def_irq_handler cpuss_interrupts_dw0_5_IRQHandler /* CPUSS DataWire #0, Channel #5 */
+ def_irq_handler cpuss_interrupts_dw0_6_IRQHandler /* CPUSS DataWire #0, Channel #6 */
+ def_irq_handler cpuss_interrupts_dw0_7_IRQHandler /* CPUSS DataWire #0, Channel #7 */
+ def_irq_handler cpuss_interrupts_dw0_8_IRQHandler /* CPUSS DataWire #0, Channel #8 */
+ def_irq_handler cpuss_interrupts_dw0_9_IRQHandler /* CPUSS DataWire #0, Channel #9 */
+ def_irq_handler cpuss_interrupts_dw0_10_IRQHandler /* CPUSS DataWire #0, Channel #10 */
+ def_irq_handler cpuss_interrupts_dw0_11_IRQHandler /* CPUSS DataWire #0, Channel #11 */
+ def_irq_handler cpuss_interrupts_dw0_12_IRQHandler /* CPUSS DataWire #0, Channel #12 */
+ def_irq_handler cpuss_interrupts_dw0_13_IRQHandler /* CPUSS DataWire #0, Channel #13 */
+ def_irq_handler cpuss_interrupts_dw0_14_IRQHandler /* CPUSS DataWire #0, Channel #14 */
+ def_irq_handler cpuss_interrupts_dw0_15_IRQHandler /* CPUSS DataWire #0, Channel #15 */
+ def_irq_handler cpuss_interrupts_dw0_16_IRQHandler /* CPUSS DataWire #0, Channel #16 */
+ def_irq_handler cpuss_interrupts_dw0_17_IRQHandler /* CPUSS DataWire #0, Channel #17 */
+ def_irq_handler cpuss_interrupts_dw0_18_IRQHandler /* CPUSS DataWire #0, Channel #18 */
+ def_irq_handler cpuss_interrupts_dw0_19_IRQHandler /* CPUSS DataWire #0, Channel #19 */
+ def_irq_handler cpuss_interrupts_dw0_20_IRQHandler /* CPUSS DataWire #0, Channel #20 */
+ def_irq_handler cpuss_interrupts_dw0_21_IRQHandler /* CPUSS DataWire #0, Channel #21 */
+ def_irq_handler cpuss_interrupts_dw0_22_IRQHandler /* CPUSS DataWire #0, Channel #22 */
+ def_irq_handler cpuss_interrupts_dw0_23_IRQHandler /* CPUSS DataWire #0, Channel #23 */
+ def_irq_handler cpuss_interrupts_dw0_24_IRQHandler /* CPUSS DataWire #0, Channel #24 */
+ def_irq_handler cpuss_interrupts_dw0_25_IRQHandler /* CPUSS DataWire #0, Channel #25 */
+ def_irq_handler cpuss_interrupts_dw0_26_IRQHandler /* CPUSS DataWire #0, Channel #26 */
+ def_irq_handler cpuss_interrupts_dw0_27_IRQHandler /* CPUSS DataWire #0, Channel #27 */
+ def_irq_handler cpuss_interrupts_dw0_28_IRQHandler /* CPUSS DataWire #0, Channel #28 */
+ def_irq_handler cpuss_interrupts_dw1_0_IRQHandler /* CPUSS DataWire #1, Channel #0 */
+ def_irq_handler cpuss_interrupts_dw1_1_IRQHandler /* CPUSS DataWire #1, Channel #1 */
+ def_irq_handler cpuss_interrupts_dw1_2_IRQHandler /* CPUSS DataWire #1, Channel #2 */
+ def_irq_handler cpuss_interrupts_dw1_3_IRQHandler /* CPUSS DataWire #1, Channel #3 */
+ def_irq_handler cpuss_interrupts_dw1_4_IRQHandler /* CPUSS DataWire #1, Channel #4 */
+ def_irq_handler cpuss_interrupts_dw1_5_IRQHandler /* CPUSS DataWire #1, Channel #5 */
+ def_irq_handler cpuss_interrupts_dw1_6_IRQHandler /* CPUSS DataWire #1, Channel #6 */
+ def_irq_handler cpuss_interrupts_dw1_7_IRQHandler /* CPUSS DataWire #1, Channel #7 */
+ def_irq_handler cpuss_interrupts_dw1_8_IRQHandler /* CPUSS DataWire #1, Channel #8 */
+ def_irq_handler cpuss_interrupts_dw1_9_IRQHandler /* CPUSS DataWire #1, Channel #9 */
+ def_irq_handler cpuss_interrupts_dw1_10_IRQHandler /* CPUSS DataWire #1, Channel #10 */
+ def_irq_handler cpuss_interrupts_dw1_11_IRQHandler /* CPUSS DataWire #1, Channel #11 */
+ def_irq_handler cpuss_interrupts_dw1_12_IRQHandler /* CPUSS DataWire #1, Channel #12 */
+ def_irq_handler cpuss_interrupts_dw1_13_IRQHandler /* CPUSS DataWire #1, Channel #13 */
+ def_irq_handler cpuss_interrupts_dw1_14_IRQHandler /* CPUSS DataWire #1, Channel #14 */
+ def_irq_handler cpuss_interrupts_dw1_15_IRQHandler /* CPUSS DataWire #1, Channel #15 */
+ def_irq_handler cpuss_interrupts_dw1_16_IRQHandler /* CPUSS DataWire #1, Channel #16 */
+ def_irq_handler cpuss_interrupts_dw1_17_IRQHandler /* CPUSS DataWire #1, Channel #17 */
+ def_irq_handler cpuss_interrupts_dw1_18_IRQHandler /* CPUSS DataWire #1, Channel #18 */
+ def_irq_handler cpuss_interrupts_dw1_19_IRQHandler /* CPUSS DataWire #1, Channel #19 */
+ def_irq_handler cpuss_interrupts_dw1_20_IRQHandler /* CPUSS DataWire #1, Channel #20 */
+ def_irq_handler cpuss_interrupts_dw1_21_IRQHandler /* CPUSS DataWire #1, Channel #21 */
+ def_irq_handler cpuss_interrupts_dw1_22_IRQHandler /* CPUSS DataWire #1, Channel #22 */
+ def_irq_handler cpuss_interrupts_dw1_23_IRQHandler /* CPUSS DataWire #1, Channel #23 */
+ def_irq_handler cpuss_interrupts_dw1_24_IRQHandler /* CPUSS DataWire #1, Channel #24 */
+ def_irq_handler cpuss_interrupts_dw1_25_IRQHandler /* CPUSS DataWire #1, Channel #25 */
+ def_irq_handler cpuss_interrupts_dw1_26_IRQHandler /* CPUSS DataWire #1, Channel #26 */
+ def_irq_handler cpuss_interrupts_dw1_27_IRQHandler /* CPUSS DataWire #1, Channel #27 */
+ def_irq_handler cpuss_interrupts_dw1_28_IRQHandler /* CPUSS DataWire #1, Channel #28 */
+ def_irq_handler cpuss_interrupts_fault_0_IRQHandler /* CPUSS Fault Structure Interrupt #0 */
+ def_irq_handler cpuss_interrupts_fault_1_IRQHandler /* CPUSS Fault Structure Interrupt #1 */
+ def_irq_handler cpuss_interrupt_crypto_IRQHandler /* CRYPTO Accelerator Interrupt */
+ def_irq_handler cpuss_interrupt_fm_IRQHandler /* FLASH Macro Interrupt */
+ def_irq_handler cpuss_interrupts_cm4_fp_IRQHandler /* Floating Point operation fault */
+ def_irq_handler cpuss_interrupts_cm0_cti_0_IRQHandler /* CM0+ CTI #0 */
+ def_irq_handler cpuss_interrupts_cm0_cti_1_IRQHandler /* CM0+ CTI #1 */
+ def_irq_handler cpuss_interrupts_cm4_cti_0_IRQHandler /* CM4 CTI #0 */
+ def_irq_handler cpuss_interrupts_cm4_cti_1_IRQHandler /* CM4 CTI #1 */
+ def_irq_handler tcpwm_0_interrupts_0_IRQHandler /* TCPWM #0, Counter #0 */
+ def_irq_handler tcpwm_0_interrupts_1_IRQHandler /* TCPWM #0, Counter #1 */
+ def_irq_handler tcpwm_0_interrupts_2_IRQHandler /* TCPWM #0, Counter #2 */
+ def_irq_handler tcpwm_0_interrupts_3_IRQHandler /* TCPWM #0, Counter #3 */
+ def_irq_handler tcpwm_0_interrupts_256_IRQHandler /* TCPWM #0, Counter #256 */
+ def_irq_handler tcpwm_0_interrupts_257_IRQHandler /* TCPWM #0, Counter #257 */
+ def_irq_handler tcpwm_0_interrupts_258_IRQHandler /* TCPWM #0, Counter #258 */
+ def_irq_handler tcpwm_0_interrupts_259_IRQHandler /* TCPWM #0, Counter #259 */
+ def_irq_handler tcpwm_0_interrupts_260_IRQHandler /* TCPWM #0, Counter #260 */
+ def_irq_handler tcpwm_0_interrupts_261_IRQHandler /* TCPWM #0, Counter #261 */
+ def_irq_handler tcpwm_0_interrupts_262_IRQHandler /* TCPWM #0, Counter #262 */
+ def_irq_handler tcpwm_0_interrupts_263_IRQHandler /* TCPWM #0, Counter #263 */
+ def_irq_handler pass_interrupt_dacs_IRQHandler /* Consolidated interrrupt for all DACs */
+ def_irq_handler smif_interrupt_IRQHandler /* Serial Memory Interface interrupt */
+ def_irq_handler usb_interrupt_hi_IRQHandler /* USB Interrupt */
+ def_irq_handler usb_interrupt_med_IRQHandler /* USB Interrupt */
+ def_irq_handler usb_interrupt_lo_IRQHandler /* USB Interrupt */
+ def_irq_handler canfd_0_interrupt0_IRQHandler /* Can #0, Consolidated interrupt #0 */
+ def_irq_handler canfd_0_interrupts0_0_IRQHandler /* CAN #0, Interrupt #0, Channel #0 */
+ def_irq_handler canfd_0_interrupts1_0_IRQHandler /* CAN #0, Interrupt #1, Channel #0 */
+ def_irq_handler cpuss_interrupts_dw1_29_IRQHandler /* CPUSS DataWire #1, Channel #29 */
+ def_irq_handler cpuss_interrupts_dw1_30_IRQHandler /* CPUSS DataWire #1, Channel #30 */
+ def_irq_handler cpuss_interrupts_dw1_31_IRQHandler /* CPUSS DataWire #1, Channel #31 */
+ def_irq_handler cpuss_interrupts_dw0_29_IRQHandler /* CPUSS DataWire #0, Channel #29 */
+
+ .end
+
+
+/* [] END OF FILE */
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx4_cm4_dual.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx4_cm4_dual.icf
new file mode 100644
index 0000000..344a5d0
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx4_cm4_dual.icf
@@ -0,0 +1,245 @@
+/*******************************************************************************
+* \file cy8c6xx4_cm4_dual.icf
+* \version 2.70.1
+*
+* Linker file for the IAR compiler.
+*
+* The main purpose of the linker script is to describe how the sections in the
+* input files should be mapped into the output file, and to control the memory
+* layout of the output file.
+*
+* \note The entry point is fixed and starts at 0x10000000. The valid application
+* image should be placed there.
+*
+* \note The linker files included with the PDL template projects must be generic
+* and handle all common use cases. Your project may not use every section
+* defined in the linker files. In that case you may see warnings during the
+* build process. In your project, you can simply comment out or remove the
+* relevant code in the linker file.
+*
+********************************************************************************
+* \copyright
+* Copyright 2016-2020 Cypress Semiconductor Corporation
+* SPDX-License-Identifier: Apache-2.0
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*******************************************************************************/
+
+/*###ICF### Section handled by ICF editor, don't touch! ****/
+/*-Editor annotation file-*/
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_4.xml" */
+/*-Specials-*/
+define symbol __ICFEDIT_intvec_start__ = 0x00000000;
+
+/* The symbols below define the location and size of blocks of memory in the target.
+ * Use these symbols to specify the memory regions available for allocation.
+ */
+
+/* The following symbols control RAM and flash memory allocation for the CM4 core.
+ * You can change the memory allocation by editing RAM and Flash symbols.
+ * Note that 2 KB of RAM (at the end of the SRAM) are reserved for system use.
+ * Using this memory region for other purposes will lead to unexpected behavior.
+ * Your changes must be aligned with the corresponding symbols for CM0+ core in 'xx_cm0plus.icf',
+ * where 'xx' is the device group; for example, 'cy8c6xx7_cm0plus.icf'.
+ */
+/* RAM */
+define symbol __ICFEDIT_region_IRAM1_start__ = 0x08002000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x0801F7FF;
+
+/* Flash */
+define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x1003FFFF;
+
+/* The following symbols define a 32K flash region used for EEPROM emulation.
+ * This region can also be used as the general purpose flash.
+ * You can assign sections to this memory region for only one of the cores.
+ * Note some middleware (e.g. BLE, Emulated EEPROM) can place their data into this memory region.
+ * Therefore, repurposing this memory region will prevent such middleware from operation.
+ */
+define symbol __ICFEDIT_region_IROM2_start__ = 0x14000000;
+define symbol __ICFEDIT_region_IROM2_end__ = 0x14007FFF;
+
+/* The following symbols define device specific memory regions and must not be changed. */
+/* Supervisory FLASH - User Data */
+define symbol __ICFEDIT_region_IROM3_start__ = 0x16000800;
+define symbol __ICFEDIT_region_IROM3_end__ = 0x160007FF;
+
+/* Supervisory FLASH - Normal Access Restrictions (NAR) */
+define symbol __ICFEDIT_region_IROM4_start__ = 0x16001A00;
+define symbol __ICFEDIT_region_IROM4_end__ = 0x16001BFF;
+
+/* Supervisory FLASH - Public Key */
+define symbol __ICFEDIT_region_IROM5_start__ = 0x16005A00;
+define symbol __ICFEDIT_region_IROM5_end__ = 0x160065FF;
+
+/* Supervisory FLASH - Table of Content # 2 */
+define symbol __ICFEDIT_region_IROM6_start__ = 0x16007C00;
+define symbol __ICFEDIT_region_IROM6_end__ = 0x16007DFF;
+
+/* Supervisory FLASH - Table of Content # 2 Copy */
+define symbol __ICFEDIT_region_IROM7_start__ = 0x16007E00;
+define symbol __ICFEDIT_region_IROM7_end__ = 0x16007FFF;
+
+/* eFuse */
+define symbol __ICFEDIT_region_IROM8_start__ = 0x90700000;
+define symbol __ICFEDIT_region_IROM8_end__ = 0x907FFFFF;
+
+/* XIP */
+define symbol __ICFEDIT_region_EROM1_start__ = 0x18000000;
+define symbol __ICFEDIT_region_EROM1_end__ = 0x1FFFFFFF;
+
+define symbol __ICFEDIT_region_EROM2_start__ = 0x0;
+define symbol __ICFEDIT_region_EROM2_end__ = 0x0;
+define symbol __ICFEDIT_region_EROM3_start__ = 0x0;
+define symbol __ICFEDIT_region_EROM3_end__ = 0x0;
+
+
+define symbol __ICFEDIT_region_IRAM2_start__ = 0x0;
+define symbol __ICFEDIT_region_IRAM2_end__ = 0x0;
+define symbol __ICFEDIT_region_ERAM1_start__ = 0x0;
+define symbol __ICFEDIT_region_ERAM1_end__ = 0x0;
+define symbol __ICFEDIT_region_ERAM2_start__ = 0x0;
+define symbol __ICFEDIT_region_ERAM2_end__ = 0x0;
+define symbol __ICFEDIT_region_ERAM3_start__ = 0x0;
+define symbol __ICFEDIT_region_ERAM3_end__ = 0x0;
+/*-Sizes-*/
+if (!isdefinedsymbol(__STACK_SIZE)) {
+ define symbol __ICFEDIT_size_cstack__ = 0x1000;
+} else {
+ define symbol __ICFEDIT_size_cstack__ = __STACK_SIZE;
+}
+define symbol __ICFEDIT_size_proc_stack__ = 0x0;
+
+/* Defines the minimum heap size. The actual heap size will be expanded to the end of the stack region */
+if (!isdefinedsymbol(__HEAP_SIZE)) {
+ define symbol __ICFEDIT_size_heap__ = 0x0400;
+} else {
+ define symbol __ICFEDIT_size_heap__ = __HEAP_SIZE;
+}
+/**** End of ICF editor section. ###ICF###*/
+
+/* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+ * More about CM0+ prebuilt images, see here:
+ * https://github.com/cypresssemiconductorco/psoc6cm0p
+ */
+/* The size of the Cortex-M0+ application image */
+define symbol FLASH_CM0P_SIZE = 0x2000;
+
+define memory mem with size = 4G;
+define region IROM1_region = mem:[from __ICFEDIT_region_IROM1_start__ to __ICFEDIT_region_IROM1_end__];
+define region IROM2_region = mem:[from __ICFEDIT_region_IROM2_start__ to __ICFEDIT_region_IROM2_end__];
+define region IROM3_region = mem:[from __ICFEDIT_region_IROM3_start__ to __ICFEDIT_region_IROM3_end__];
+define region IROM4_region = mem:[from __ICFEDIT_region_IROM4_start__ to __ICFEDIT_region_IROM4_end__];
+define region IROM5_region = mem:[from __ICFEDIT_region_IROM5_start__ to __ICFEDIT_region_IROM5_end__];
+define region IROM6_region = mem:[from __ICFEDIT_region_IROM6_start__ to __ICFEDIT_region_IROM6_end__];
+define region IROM7_region = mem:[from __ICFEDIT_region_IROM7_start__ to __ICFEDIT_region_IROM7_end__];
+define region IROM8_region = mem:[from __ICFEDIT_region_IROM8_start__ to __ICFEDIT_region_IROM8_end__];
+define region EROM1_region = mem:[from __ICFEDIT_region_EROM1_start__ to __ICFEDIT_region_EROM1_end__];
+define region IRAM1_region = mem:[from __ICFEDIT_region_IRAM1_start__ to __ICFEDIT_region_IRAM1_end__];
+
+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
+define block PROC_STACK with alignment = 8, size = __ICFEDIT_size_proc_stack__ { };
+define block HEAP with expanding size, alignment = 8, minimum size = __ICFEDIT_size_heap__ { };
+define block HSTACK {block HEAP, block PROC_STACK, last block CSTACK};
+define block CM0P_RO with size = FLASH_CM0P_SIZE { readonly section .cy_m0p_image };
+define block RO {first section .intvec, readonly};
+
+/*-Initializations-*/
+initialize by copy { readwrite };
+do not initialize { section .noinit, section .intvec_ram };
+
+/*-Placement-*/
+
+/* Flash - Cortex-M0+ application image */
+place at start of IROM1_region { block CM0P_RO };
+
+/* Flash - Cortex-M4 application */
+place in IROM1_region { block RO };
+
+/* Used for the digital signature of the secure application and the Bootloader SDK application. */
+".cy_app_signature" : place at address (__ICFEDIT_region_IROM1_end__ - 0x200) { section .cy_app_signature };
+
+/* Emulated EEPROM Flash area */
+".cy_em_eeprom" : place at start of IROM2_region { section .cy_em_eeprom };
+
+/* Supervisory Flash - User Data */
+".cy_sflash_user_data" : place at start of IROM3_region { section .cy_sflash_user_data };
+
+/* Supervisory Flash - NAR */
+".cy_sflash_nar" : place at start of IROM4_region { section .cy_sflash_nar };
+
+/* Supervisory Flash - Public Key */
+".cy_sflash_public_key" : place at start of IROM5_region { section .cy_sflash_public_key };
+
+/* Supervisory Flash - TOC2 */
+".cy_toc_part2" : place at start of IROM6_region { section .cy_toc_part2 };
+
+/* Supervisory Flash - RTOC2 */
+".cy_rtoc_part2" : place at start of IROM7_region { section .cy_rtoc_part2 };
+
+/* eFuse */
+".cy_efuse" : place at start of IROM8_region { section .cy_efuse };
+
+/* Execute in Place (XIP). See the smif driver documentation for details. */
+".cy_xip" : place at start of EROM1_region { section .cy_xip };
+
+/* RAM */
+place at start of IRAM1_region { readwrite section .intvec_ram};
+place in IRAM1_region { readwrite };
+place at end of IRAM1_region { block HSTACK };
+
+/* These sections are used for additional metadata (silicon revision, Silicon/JTAG ID, etc.) storage. */
+".cymeta" : place at address mem : 0x90500000 { readonly section .cymeta };
+
+
+keep { section .cy_m0p_image,
+ section .cy_app_signature,
+ section .cy_em_eeprom,
+ section .cy_sflash_user_data,
+ section .cy_sflash_nar,
+ section .cy_sflash_public_key,
+ section .cy_toc_part2,
+ section .cy_rtoc_part2,
+ section .cy_efuse,
+ section .cy_xip,
+ section .cymeta,
+ };
+
+
+/* The following symbols used by the cymcuelftool. */
+/* Flash */
+define exported symbol __cy_memory_0_start = 0x10000000;
+define exported symbol __cy_memory_0_length = 0x00040000;
+define exported symbol __cy_memory_0_row_size = 0x200;
+
+/* Emulated EEPROM Flash area */
+define exported symbol __cy_memory_1_start = 0x14000000;
+define exported symbol __cy_memory_1_length = 0x8000;
+define exported symbol __cy_memory_1_row_size = 0x200;
+
+/* Supervisory Flash */
+define exported symbol __cy_memory_2_start = 0x16000000;
+define exported symbol __cy_memory_2_length = 0x8000;
+define exported symbol __cy_memory_2_row_size = 0x200;
+
+/* XIP */
+define exported symbol __cy_memory_3_start = 0x18000000;
+define exported symbol __cy_memory_3_length = 0x08000000;
+define exported symbol __cy_memory_3_row_size = 0x200;
+
+/* eFuse */
+define exported symbol __cy_memory_4_start = 0x90700000;
+define exported symbol __cy_memory_4_length = 0x100000;
+define exported symbol __cy_memory_4_row_size = 1;
+
+/* EOF */
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx5_cm4_dual.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx5_cm4_dual.icf
index def0b36..728c0fb 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx5_cm4_dual.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx5_cm4_dual.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cy8c6xx5_cm4_dual.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -54,10 +54,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08002000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x0803F800;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x0803F7FF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10080000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x1007FFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
@@ -127,6 +128,10 @@ if (!isdefinedsymbol(__HEAP_SIZE)) {
}
/**** End of ICF editor section. ###ICF###*/
+/* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+ * More about CM0+ prebuilt images, see here:
+ * https://github.com/cypresssemiconductorco/psoc6cm0p
+ */
/* The size of the Cortex-M0+ application image */
define symbol FLASH_CM0P_SIZE = 0x2000;
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx6_cm4.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx6_cm4.icf
index e433e16..f479e7c 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx6_cm4.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx6_cm4.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cy8c6xx6_cm4.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -49,10 +49,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x0801F780;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x0801F77F;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10080000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x1007FFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx6_cm4_dual.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx6_cm4_dual.icf
index 60fd088..2ba8c87 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx6_cm4_dual.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx6_cm4_dual.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cy8c6xx6_cm4_dual.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -54,10 +54,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08002000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x0801F800;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x0801F7FF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10080000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x1007FFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
@@ -127,6 +128,10 @@ if (!isdefinedsymbol(__HEAP_SIZE)) {
}
/**** End of ICF editor section. ###ICF###*/
+/* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+ * More about CM0+ prebuilt images, see here:
+ * https://github.com/cypresssemiconductorco/psoc6cm0p
+ */
/* The size of the Cortex-M0+ application image */
define symbol FLASH_CM0P_SIZE = 0x2000;
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx7_cm4.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx7_cm4.icf
index 2f95bf9..4af89d8 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx7_cm4.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx7_cm4.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cy8c6xx7_cm4.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -49,10 +49,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x08047780;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x0804777F;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10100000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x100FFFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx7_cm4_dual.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx7_cm4_dual.icf
index 227f659..bb93cf4 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx7_cm4_dual.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx7_cm4_dual.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cy8c6xx7_cm4_dual.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -54,10 +54,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08002000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x08047800;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x080477FF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10100000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x100FFFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
@@ -127,6 +128,10 @@ if (!isdefinedsymbol(__HEAP_SIZE)) {
}
/**** End of ICF editor section. ###ICF###*/
+/* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+ * More about CM0+ prebuilt images, see here:
+ * https://github.com/cypresssemiconductorco/psoc6cm0p
+ */
/* The size of the Cortex-M0+ application image */
define symbol FLASH_CM0P_SIZE = 0x2000;
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx8_cm4_dual.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx8_cm4_dual.icf
index 438512c..9a4a27d 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx8_cm4_dual.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xx8_cm4_dual.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cy8c6xx8_cm4_dual.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -54,10 +54,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08002000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x0807F800;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x0807F7FF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10100000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x100FFFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
@@ -127,6 +128,10 @@ if (!isdefinedsymbol(__HEAP_SIZE)) {
}
/**** End of ICF editor section. ###ICF###*/
+/* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+ * More about CM0+ prebuilt images, see here:
+ * https://github.com/cypresssemiconductorco/psoc6cm0p
+ */
/* The size of the Cortex-M0+ application image */
define symbol FLASH_CM0P_SIZE = 0x2000;
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xxa_cm4_dual.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xxa_cm4_dual.icf
index 52177fa..46bb06d 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xxa_cm4_dual.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cy8c6xxa_cm4_dual.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cy8c6xxa_cm4_dual.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -54,10 +54,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08002000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x080FF800;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x080FF7FF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10200000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x101FFFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
@@ -127,6 +128,10 @@ if (!isdefinedsymbol(__HEAP_SIZE)) {
}
/**** End of ICF editor section. ###ICF###*/
+/* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+ * More about CM0+ prebuilt images, see here:
+ * https://github.com/cypresssemiconductorco/psoc6cm0p
+ */
/* The size of the Cortex-M0+ application image */
define symbol FLASH_CM0P_SIZE = 0x2000;
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx5_cm4.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx5_cm4.icf
index 4205e23..625281d 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx5_cm4.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx5_cm4.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cyb06xx5_cm4.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -46,10 +46,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x0802A000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x08029FFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10060000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x1005FFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx5_cm4_dual.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx5_cm4_dual.icf
index 3954305..a86e63b 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx5_cm4_dual.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx5_cm4_dual.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cyb06xx5_cm4_dual.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -52,10 +52,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08010000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x0802A000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x08029FFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10010000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10030000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x1002FFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx7_cm4.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx7_cm4.icf
index 3e7e32e..d7d385e 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx7_cm4.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx7_cm4.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cyb06xx7_cm4.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -46,10 +46,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x0802A000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x08029FFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x100D0000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x100CFFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx7_cm4_dual.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx7_cm4_dual.icf
index b19511f..17db8d6 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx7_cm4_dual.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xx7_cm4_dual.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cyb06xx7_cm4_dual.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -52,10 +52,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08010000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x0802A000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x08029FFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10020000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x10060000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x1005FFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xxa_cm4.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xxa_cm4.icf
index 7c69a32..972b2f4 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xxa_cm4.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xxa_cm4.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cyb06xxa_cm4.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -46,10 +46,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x080EA000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x080E9FFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x101D0000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x101CFFFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xxa_cm4_dual.icf b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xxa_cm4_dual.icf
index fef329b..5c1aa41 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xxa_cm4_dual.icf
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/cyb06xxa_cm4_dual.icf
@@ -1,6 +1,6 @@
-/***************************************************************************//**
+/*******************************************************************************
* \file cyb06xxa_cm4_dual.icf
-* \version 2.70
+* \version 2.70.1
*
* Linker file for the IAR compiler.
*
@@ -19,7 +19,7 @@
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -52,10 +52,11 @@ define symbol __ICFEDIT_intvec_start__ = 0x00000000;
*/
/* RAM */
define symbol __ICFEDIT_region_IRAM1_start__ = 0x08040000;
-define symbol __ICFEDIT_region_IRAM1_end__ = 0x080EA000;
+define symbol __ICFEDIT_region_IRAM1_end__ = 0x080E9FFF;
+
/* Flash */
define symbol __ICFEDIT_region_IROM1_start__ = 0x10040000;
-define symbol __ICFEDIT_region_IROM1_end__ = 0x100E8000;
+define symbol __ICFEDIT_region_IROM1_end__ = 0x100E7FFF;
/* The following symbols define a 32K flash region used for EEPROM emulation.
* This region can also be used as the general purpose flash.
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/startup_psoc6_04_cm4.s b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/startup_psoc6_04_cm4.s
new file mode 100644
index 0000000..4d3f7f6
--- /dev/null
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/TOOLCHAIN_IAR/startup_psoc6_04_cm4.s
@@ -0,0 +1,1147 @@
+;/**************************************************************************//**
+; * @file startup_psoc6_04_cm4.s
+; * @brief CMSIS Core Device Startup File for
+; * ARMCM4 Device Series
+; * @version V5.00
+; * @date 08. March 2016
+; ******************************************************************************/
+;/*
+; * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+; *
+; * SPDX-License-Identifier: Apache-2.0
+; *
+; * Licensed under the Apache License, Version 2.0 (the License); you may
+; * not use this file except in compliance with the License.
+; * You may obtain a copy of the License at
+; *
+; * www.apache.org/licenses/LICENSE-2.0
+; *
+; * Unless required by applicable law or agreed to in writing, software
+; * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; * See the License for the specific language governing permissions and
+; * limitations under the License.
+; */
+
+;
+; The modules in this file are included in the libraries, and may be replaced
+; by any user-defined modules that define the PUBLIC symbol _program_start or
+; a user defined start symbol.
+; To override the cstartup defined in the library, simply add your modified
+; version to the workbench project.
+;
+; The vector table is normally located at address 0.
+; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
+; The name "__vector_table" has special meaning for C-SPY:
+; it is where the SP start value is found, and the NVIC vector
+; table register (VTOR) is initialized to this address if != 0.
+;
+; Cortex-M version
+;
+
+ MODULE ?cstartup
+
+ ;; Forward declaration of sections.
+ SECTION CSTACK:DATA:NOROOT(3)
+ SECTION .intvec_ram:DATA:NOROOT(2)
+ SECTION .intvec:CODE:NOROOT(2)
+
+ EXTERN __iar_program_start
+ EXTERN SystemInit
+ EXTERN Cy_SystemInitFpuEnable
+ EXTERN __iar_data_init3
+ EXTERN __iar_dynamic_initialization
+ PUBLIC __vector_table
+ PUBLIC __vector_table_0x1c
+ PUBLIC __Vectors
+ PUBLIC __Vectors_End
+ PUBLIC __Vectors_Size
+ PUBLIC __ramVectors
+
+ DATA
+
+__vector_table
+ DCD sfe(CSTACK)
+ DCD Reset_Handler
+
+ DCD 0x0000000D ; NMI_Handler is defined in ROM code
+ DCD HardFault_Handler
+ DCD MemManage_Handler
+ DCD BusFault_Handler
+ DCD UsageFault_Handler
+__vector_table_0x1c
+ DCD 0
+ DCD 0
+ DCD 0
+ DCD 0
+ DCD SVC_Handler
+ DCD DebugMon_Handler
+ DCD 0
+ DCD PendSV_Handler
+ DCD SysTick_Handler
+
+ ; External interrupts Description
+ DCD ioss_interrupts_gpio_0_IRQHandler ; GPIO Port Interrupt #0
+ DCD 0 ; Reserved
+ DCD ioss_interrupts_gpio_2_IRQHandler ; GPIO Port Interrupt #2
+ DCD ioss_interrupts_gpio_3_IRQHandler ; GPIO Port Interrupt #3
+ DCD 0 ; Reserved
+ DCD ioss_interrupts_gpio_5_IRQHandler ; GPIO Port Interrupt #5
+ DCD ioss_interrupts_gpio_6_IRQHandler ; GPIO Port Interrupt #6
+ DCD ioss_interrupts_gpio_7_IRQHandler ; GPIO Port Interrupt #7
+ DCD ioss_interrupts_gpio_8_IRQHandler ; GPIO Port Interrupt #8
+ DCD ioss_interrupts_gpio_9_IRQHandler ; GPIO Port Interrupt #9
+ DCD ioss_interrupts_gpio_10_IRQHandler ; GPIO Port Interrupt #10
+ DCD ioss_interrupts_gpio_11_IRQHandler ; GPIO Port Interrupt #11
+ DCD ioss_interrupts_gpio_12_IRQHandler ; GPIO Port Interrupt #12
+ DCD 0 ; Reserved
+ DCD ioss_interrupts_gpio_14_IRQHandler ; GPIO Port Interrupt #14
+ DCD ioss_interrupt_gpio_IRQHandler ; GPIO All Ports
+ DCD ioss_interrupt_vdd_IRQHandler ; GPIO Supply Detect Interrupt
+ DCD lpcomp_interrupt_IRQHandler ; Low Power Comparator Interrupt
+ DCD scb_6_interrupt_IRQHandler ; Serial Communication Block #6 (DeepSleep capable)
+ DCD srss_interrupt_mcwdt_0_IRQHandler ; Multi Counter Watchdog Timer interrupt
+ DCD srss_interrupt_mcwdt_1_IRQHandler ; Multi Counter Watchdog Timer interrupt
+ DCD srss_interrupt_backup_IRQHandler ; Backup domain interrupt
+ DCD srss_interrupt_IRQHandler ; Other combined Interrupts for SRSS (LVD, WDT, CLKCAL)
+ DCD cpuss_interrupts_ipc_0_IRQHandler ; CPUSS Inter Process Communication Interrupt #0
+ DCD cpuss_interrupts_ipc_1_IRQHandler ; CPUSS Inter Process Communication Interrupt #1
+ DCD cpuss_interrupts_ipc_2_IRQHandler ; CPUSS Inter Process Communication Interrupt #2
+ DCD cpuss_interrupts_ipc_3_IRQHandler ; CPUSS Inter Process Communication Interrupt #3
+ DCD cpuss_interrupts_ipc_4_IRQHandler ; CPUSS Inter Process Communication Interrupt #4
+ DCD cpuss_interrupts_ipc_5_IRQHandler ; CPUSS Inter Process Communication Interrupt #5
+ DCD cpuss_interrupts_ipc_6_IRQHandler ; CPUSS Inter Process Communication Interrupt #6
+ DCD cpuss_interrupts_ipc_7_IRQHandler ; CPUSS Inter Process Communication Interrupt #7
+ DCD cpuss_interrupts_ipc_8_IRQHandler ; CPUSS Inter Process Communication Interrupt #8
+ DCD cpuss_interrupts_ipc_9_IRQHandler ; CPUSS Inter Process Communication Interrupt #9
+ DCD cpuss_interrupts_ipc_10_IRQHandler ; CPUSS Inter Process Communication Interrupt #10
+ DCD cpuss_interrupts_ipc_11_IRQHandler ; CPUSS Inter Process Communication Interrupt #11
+ DCD cpuss_interrupts_ipc_12_IRQHandler ; CPUSS Inter Process Communication Interrupt #12
+ DCD cpuss_interrupts_ipc_13_IRQHandler ; CPUSS Inter Process Communication Interrupt #13
+ DCD cpuss_interrupts_ipc_14_IRQHandler ; CPUSS Inter Process Communication Interrupt #14
+ DCD cpuss_interrupts_ipc_15_IRQHandler ; CPUSS Inter Process Communication Interrupt #15
+ DCD pass_interrupt_sar_0_IRQHandler ; SAR ADC0 interrupt
+ DCD pass_interrupt_sar_1_IRQHandler ; SAR ADC1 interrupt
+ DCD pass_interrupt_ctb_IRQHandler ; individual interrupt per CTB
+ DCD 0 ; Reserved
+ DCD pass_interrupt_fifo_0_IRQHandler ; PASS FIFO0
+ DCD pass_interrupt_fifo_1_IRQHandler ; PASS FIFO1
+ DCD scb_0_interrupt_IRQHandler ; Serial Communication Block #0
+ DCD scb_1_interrupt_IRQHandler ; Serial Communication Block #1
+ DCD scb_2_interrupt_IRQHandler ; Serial Communication Block #2
+ DCD 0 ; Reserved
+ DCD scb_4_interrupt_IRQHandler ; Serial Communication Block #4
+ DCD scb_5_interrupt_IRQHandler ; Serial Communication Block #5
+ DCD csd_interrupt_IRQHandler ; CSD (Capsense) interrupt
+ DCD cpuss_interrupts_dmac_0_IRQHandler ; CPUSS DMAC, Channel #0
+ DCD cpuss_interrupts_dmac_1_IRQHandler ; CPUSS DMAC, Channel #1
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD cpuss_interrupts_dw0_0_IRQHandler ; CPUSS DataWire #0, Channel #0
+ DCD cpuss_interrupts_dw0_1_IRQHandler ; CPUSS DataWire #0, Channel #1
+ DCD cpuss_interrupts_dw0_2_IRQHandler ; CPUSS DataWire #0, Channel #2
+ DCD cpuss_interrupts_dw0_3_IRQHandler ; CPUSS DataWire #0, Channel #3
+ DCD cpuss_interrupts_dw0_4_IRQHandler ; CPUSS DataWire #0, Channel #4
+ DCD cpuss_interrupts_dw0_5_IRQHandler ; CPUSS DataWire #0, Channel #5
+ DCD cpuss_interrupts_dw0_6_IRQHandler ; CPUSS DataWire #0, Channel #6
+ DCD cpuss_interrupts_dw0_7_IRQHandler ; CPUSS DataWire #0, Channel #7
+ DCD cpuss_interrupts_dw0_8_IRQHandler ; CPUSS DataWire #0, Channel #8
+ DCD cpuss_interrupts_dw0_9_IRQHandler ; CPUSS DataWire #0, Channel #9
+ DCD cpuss_interrupts_dw0_10_IRQHandler ; CPUSS DataWire #0, Channel #10
+ DCD cpuss_interrupts_dw0_11_IRQHandler ; CPUSS DataWire #0, Channel #11
+ DCD cpuss_interrupts_dw0_12_IRQHandler ; CPUSS DataWire #0, Channel #12
+ DCD cpuss_interrupts_dw0_13_IRQHandler ; CPUSS DataWire #0, Channel #13
+ DCD cpuss_interrupts_dw0_14_IRQHandler ; CPUSS DataWire #0, Channel #14
+ DCD cpuss_interrupts_dw0_15_IRQHandler ; CPUSS DataWire #0, Channel #15
+ DCD cpuss_interrupts_dw0_16_IRQHandler ; CPUSS DataWire #0, Channel #16
+ DCD cpuss_interrupts_dw0_17_IRQHandler ; CPUSS DataWire #0, Channel #17
+ DCD cpuss_interrupts_dw0_18_IRQHandler ; CPUSS DataWire #0, Channel #18
+ DCD cpuss_interrupts_dw0_19_IRQHandler ; CPUSS DataWire #0, Channel #19
+ DCD cpuss_interrupts_dw0_20_IRQHandler ; CPUSS DataWire #0, Channel #20
+ DCD cpuss_interrupts_dw0_21_IRQHandler ; CPUSS DataWire #0, Channel #21
+ DCD cpuss_interrupts_dw0_22_IRQHandler ; CPUSS DataWire #0, Channel #22
+ DCD cpuss_interrupts_dw0_23_IRQHandler ; CPUSS DataWire #0, Channel #23
+ DCD cpuss_interrupts_dw0_24_IRQHandler ; CPUSS DataWire #0, Channel #24
+ DCD cpuss_interrupts_dw0_25_IRQHandler ; CPUSS DataWire #0, Channel #25
+ DCD cpuss_interrupts_dw0_26_IRQHandler ; CPUSS DataWire #0, Channel #26
+ DCD cpuss_interrupts_dw0_27_IRQHandler ; CPUSS DataWire #0, Channel #27
+ DCD cpuss_interrupts_dw0_28_IRQHandler ; CPUSS DataWire #0, Channel #28
+ DCD cpuss_interrupts_dw1_0_IRQHandler ; CPUSS DataWire #1, Channel #0
+ DCD cpuss_interrupts_dw1_1_IRQHandler ; CPUSS DataWire #1, Channel #1
+ DCD cpuss_interrupts_dw1_2_IRQHandler ; CPUSS DataWire #1, Channel #2
+ DCD cpuss_interrupts_dw1_3_IRQHandler ; CPUSS DataWire #1, Channel #3
+ DCD cpuss_interrupts_dw1_4_IRQHandler ; CPUSS DataWire #1, Channel #4
+ DCD cpuss_interrupts_dw1_5_IRQHandler ; CPUSS DataWire #1, Channel #5
+ DCD cpuss_interrupts_dw1_6_IRQHandler ; CPUSS DataWire #1, Channel #6
+ DCD cpuss_interrupts_dw1_7_IRQHandler ; CPUSS DataWire #1, Channel #7
+ DCD cpuss_interrupts_dw1_8_IRQHandler ; CPUSS DataWire #1, Channel #8
+ DCD cpuss_interrupts_dw1_9_IRQHandler ; CPUSS DataWire #1, Channel #9
+ DCD cpuss_interrupts_dw1_10_IRQHandler ; CPUSS DataWire #1, Channel #10
+ DCD cpuss_interrupts_dw1_11_IRQHandler ; CPUSS DataWire #1, Channel #11
+ DCD cpuss_interrupts_dw1_12_IRQHandler ; CPUSS DataWire #1, Channel #12
+ DCD cpuss_interrupts_dw1_13_IRQHandler ; CPUSS DataWire #1, Channel #13
+ DCD cpuss_interrupts_dw1_14_IRQHandler ; CPUSS DataWire #1, Channel #14
+ DCD cpuss_interrupts_dw1_15_IRQHandler ; CPUSS DataWire #1, Channel #15
+ DCD cpuss_interrupts_dw1_16_IRQHandler ; CPUSS DataWire #1, Channel #16
+ DCD cpuss_interrupts_dw1_17_IRQHandler ; CPUSS DataWire #1, Channel #17
+ DCD cpuss_interrupts_dw1_18_IRQHandler ; CPUSS DataWire #1, Channel #18
+ DCD cpuss_interrupts_dw1_19_IRQHandler ; CPUSS DataWire #1, Channel #19
+ DCD cpuss_interrupts_dw1_20_IRQHandler ; CPUSS DataWire #1, Channel #20
+ DCD cpuss_interrupts_dw1_21_IRQHandler ; CPUSS DataWire #1, Channel #21
+ DCD cpuss_interrupts_dw1_22_IRQHandler ; CPUSS DataWire #1, Channel #22
+ DCD cpuss_interrupts_dw1_23_IRQHandler ; CPUSS DataWire #1, Channel #23
+ DCD cpuss_interrupts_dw1_24_IRQHandler ; CPUSS DataWire #1, Channel #24
+ DCD cpuss_interrupts_dw1_25_IRQHandler ; CPUSS DataWire #1, Channel #25
+ DCD cpuss_interrupts_dw1_26_IRQHandler ; CPUSS DataWire #1, Channel #26
+ DCD cpuss_interrupts_dw1_27_IRQHandler ; CPUSS DataWire #1, Channel #27
+ DCD cpuss_interrupts_dw1_28_IRQHandler ; CPUSS DataWire #1, Channel #28
+ DCD cpuss_interrupts_fault_0_IRQHandler ; CPUSS Fault Structure Interrupt #0
+ DCD cpuss_interrupts_fault_1_IRQHandler ; CPUSS Fault Structure Interrupt #1
+ DCD cpuss_interrupt_crypto_IRQHandler ; CRYPTO Accelerator Interrupt
+ DCD cpuss_interrupt_fm_IRQHandler ; FLASH Macro Interrupt
+ DCD cpuss_interrupts_cm4_fp_IRQHandler ; Floating Point operation fault
+ DCD cpuss_interrupts_cm0_cti_0_IRQHandler ; CM0+ CTI #0
+ DCD cpuss_interrupts_cm0_cti_1_IRQHandler ; CM0+ CTI #1
+ DCD cpuss_interrupts_cm4_cti_0_IRQHandler ; CM4 CTI #0
+ DCD cpuss_interrupts_cm4_cti_1_IRQHandler ; CM4 CTI #1
+ DCD tcpwm_0_interrupts_0_IRQHandler ; TCPWM #0, Counter #0
+ DCD tcpwm_0_interrupts_1_IRQHandler ; TCPWM #0, Counter #1
+ DCD tcpwm_0_interrupts_2_IRQHandler ; TCPWM #0, Counter #2
+ DCD tcpwm_0_interrupts_3_IRQHandler ; TCPWM #0, Counter #3
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD tcpwm_0_interrupts_256_IRQHandler ; TCPWM #0, Counter #256
+ DCD tcpwm_0_interrupts_257_IRQHandler ; TCPWM #0, Counter #257
+ DCD tcpwm_0_interrupts_258_IRQHandler ; TCPWM #0, Counter #258
+ DCD tcpwm_0_interrupts_259_IRQHandler ; TCPWM #0, Counter #259
+ DCD tcpwm_0_interrupts_260_IRQHandler ; TCPWM #0, Counter #260
+ DCD tcpwm_0_interrupts_261_IRQHandler ; TCPWM #0, Counter #261
+ DCD tcpwm_0_interrupts_262_IRQHandler ; TCPWM #0, Counter #262
+ DCD tcpwm_0_interrupts_263_IRQHandler ; TCPWM #0, Counter #263
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD pass_interrupt_dacs_IRQHandler ; Consolidated interrrupt for all DACs
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD smif_interrupt_IRQHandler ; Serial Memory Interface interrupt
+ DCD usb_interrupt_hi_IRQHandler ; USB Interrupt
+ DCD usb_interrupt_med_IRQHandler ; USB Interrupt
+ DCD usb_interrupt_lo_IRQHandler ; USB Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD canfd_0_interrupt0_IRQHandler ; Can #0, Consolidated interrupt #0
+ DCD canfd_0_interrupts0_0_IRQHandler ; CAN #0, Interrupt #0, Channel #0
+ DCD canfd_0_interrupts1_0_IRQHandler ; CAN #0, Interrupt #1, Channel #0
+ DCD cpuss_interrupts_dw1_29_IRQHandler ; CPUSS DataWire #1, Channel #29
+ DCD cpuss_interrupts_dw1_30_IRQHandler ; CPUSS DataWire #1, Channel #30
+ DCD cpuss_interrupts_dw1_31_IRQHandler ; CPUSS DataWire #1, Channel #31
+ DCD cpuss_interrupts_dw0_29_IRQHandler ; CPUSS DataWire #0, Channel #29
+
+__Vectors_End
+
+__Vectors EQU __vector_table
+__Vectors_Size EQU __Vectors_End - __Vectors
+
+ SECTION .intvec_ram:DATA:REORDER:NOROOT(2)
+__ramVectors
+ DS32 __Vectors_Size
+
+
+ THUMB
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Default handlers
+;;
+ PUBWEAK Default_Handler
+ SECTION .text:CODE:REORDER:NOROOT(2)
+Default_Handler
+ B Default_Handler
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Weak function for startup customization
+;;
+;; Note. The global resources are not yet initialized (for example global variables, peripherals, clocks)
+;; because this function is executed as the first instruction in the ResetHandler.
+;; The PDL is also not initialized to use the proper register offsets.
+;; The user of this function is responsible for initializing the PDL and resources before using them.
+;;
+ PUBWEAK Cy_OnResetUser
+ SECTION .text:CODE:REORDER:NOROOT(2)
+Cy_OnResetUser
+ BX LR
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Weak function for OS-specific customization
+;;
+ PUBWEAK cy_toolchain_init
+ SECTION .text:CODE:REORDER:NOROOT(2)
+cy_toolchain_init
+ BX LR
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Define strong version to return zero for
+;; __iar_program_start to skip data sections
+;; initialization.
+;;
+ PUBLIC __low_level_init
+ SECTION .text:CODE:REORDER:NOROOT(2)
+__low_level_init
+ MOVS R0, #0
+ BX LR
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Default interrupt handlers.
+;;
+ PUBWEAK Reset_Handler
+ SECTION .text:CODE:REORDER:NOROOT(2)
+Reset_Handler
+
+ ; Define strong function for startup customization
+ LDR R0, =Cy_OnResetUser
+ BLX R0
+
+ ; Disable global interrupts
+ CPSID I
+
+ ; Copy vectors from ROM to RAM
+ LDR r1, =__vector_table
+ LDR r0, =__ramVectors
+ LDR r2, =__Vectors_Size
+intvec_copy
+ LDR r3, [r1]
+ STR r3, [r0]
+ ADDS r0, r0, #4
+ ADDS r1, r1, #4
+ SUBS r2, r2, #1
+ CMP r2, #0
+ BNE intvec_copy
+
+ ; Update Vector Table Offset Register
+ LDR r0, =__ramVectors
+ LDR r1, =0xE000ED08
+ STR r0, [r1]
+ dsb
+
+ ; Initialize data sections
+ LDR R0, =__iar_data_init3
+ BLX R0
+
+ ; OS-specific low-level initialization
+ LDR R0, =cy_toolchain_init
+ BLX R0
+
+ ; --manual_dynamic_initialization
+ BL __iar_dynamic_initialization
+
+ LDR R0, =SystemInit
+ BLX R0
+
+ LDR R0, =__iar_program_start
+ BLX R0
+
+; Should never get here
+Cy_Main_Exited
+ B Cy_Main_Exited
+
+
+ PUBWEAK NMI_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+NMI_Handler
+ B NMI_Handler
+
+
+ PUBWEAK Cy_SysLib_FaultHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+Cy_SysLib_FaultHandler
+ B Cy_SysLib_FaultHandler
+
+ PUBWEAK HardFault_Wrapper
+ SECTION .text:CODE:REORDER:NOROOT(1)
+HardFault_Wrapper
+ IMPORT Cy_SysLib_FaultHandler
+ movs r0, #4
+ mov r1, LR
+ tst r0, r1
+ beq L_MSP
+ mrs r0, PSP
+ b L_API_call
+L_MSP
+ mrs r0, MSP
+L_API_call
+ ; Storing LR content for Creator call stack trace
+ push {LR}
+ bl Cy_SysLib_FaultHandler
+
+ PUBWEAK HardFault_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+HardFault_Handler
+ B HardFault_Wrapper
+
+ PUBWEAK MemManage_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+MemManage_Handler
+ B HardFault_Wrapper
+
+ PUBWEAK BusFault_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+BusFault_Handler
+ B HardFault_Wrapper
+
+ PUBWEAK UsageFault_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+UsageFault_Handler
+ B HardFault_Wrapper
+
+ PUBWEAK SVC_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+SVC_Handler
+ B SVC_Handler
+
+ PUBWEAK DebugMon_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+DebugMon_Handler
+ B DebugMon_Handler
+
+ PUBWEAK PendSV_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+PendSV_Handler
+ B PendSV_Handler
+
+ PUBWEAK SysTick_Handler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+SysTick_Handler
+ B SysTick_Handler
+
+
+ ; External interrupts
+ PUBWEAK ioss_interrupts_gpio_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupts_gpio_0_IRQHandler
+ B ioss_interrupts_gpio_0_IRQHandler
+
+ PUBWEAK ioss_interrupts_gpio_2_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupts_gpio_2_IRQHandler
+ B ioss_interrupts_gpio_2_IRQHandler
+
+ PUBWEAK ioss_interrupts_gpio_3_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupts_gpio_3_IRQHandler
+ B ioss_interrupts_gpio_3_IRQHandler
+
+ PUBWEAK ioss_interrupts_gpio_5_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupts_gpio_5_IRQHandler
+ B ioss_interrupts_gpio_5_IRQHandler
+
+ PUBWEAK ioss_interrupts_gpio_6_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupts_gpio_6_IRQHandler
+ B ioss_interrupts_gpio_6_IRQHandler
+
+ PUBWEAK ioss_interrupts_gpio_7_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupts_gpio_7_IRQHandler
+ B ioss_interrupts_gpio_7_IRQHandler
+
+ PUBWEAK ioss_interrupts_gpio_8_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupts_gpio_8_IRQHandler
+ B ioss_interrupts_gpio_8_IRQHandler
+
+ PUBWEAK ioss_interrupts_gpio_9_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupts_gpio_9_IRQHandler
+ B ioss_interrupts_gpio_9_IRQHandler
+
+ PUBWEAK ioss_interrupts_gpio_10_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupts_gpio_10_IRQHandler
+ B ioss_interrupts_gpio_10_IRQHandler
+
+ PUBWEAK ioss_interrupts_gpio_11_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupts_gpio_11_IRQHandler
+ B ioss_interrupts_gpio_11_IRQHandler
+
+ PUBWEAK ioss_interrupts_gpio_12_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupts_gpio_12_IRQHandler
+ B ioss_interrupts_gpio_12_IRQHandler
+
+ PUBWEAK ioss_interrupts_gpio_14_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupts_gpio_14_IRQHandler
+ B ioss_interrupts_gpio_14_IRQHandler
+
+ PUBWEAK ioss_interrupt_gpio_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupt_gpio_IRQHandler
+ B ioss_interrupt_gpio_IRQHandler
+
+ PUBWEAK ioss_interrupt_vdd_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+ioss_interrupt_vdd_IRQHandler
+ B ioss_interrupt_vdd_IRQHandler
+
+ PUBWEAK lpcomp_interrupt_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+lpcomp_interrupt_IRQHandler
+ B lpcomp_interrupt_IRQHandler
+
+ PUBWEAK scb_6_interrupt_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+scb_6_interrupt_IRQHandler
+ B scb_6_interrupt_IRQHandler
+
+ PUBWEAK srss_interrupt_mcwdt_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+srss_interrupt_mcwdt_0_IRQHandler
+ B srss_interrupt_mcwdt_0_IRQHandler
+
+ PUBWEAK srss_interrupt_mcwdt_1_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+srss_interrupt_mcwdt_1_IRQHandler
+ B srss_interrupt_mcwdt_1_IRQHandler
+
+ PUBWEAK srss_interrupt_backup_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+srss_interrupt_backup_IRQHandler
+ B srss_interrupt_backup_IRQHandler
+
+ PUBWEAK srss_interrupt_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+srss_interrupt_IRQHandler
+ B srss_interrupt_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_0_IRQHandler
+ B cpuss_interrupts_ipc_0_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_1_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_1_IRQHandler
+ B cpuss_interrupts_ipc_1_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_2_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_2_IRQHandler
+ B cpuss_interrupts_ipc_2_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_3_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_3_IRQHandler
+ B cpuss_interrupts_ipc_3_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_4_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_4_IRQHandler
+ B cpuss_interrupts_ipc_4_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_5_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_5_IRQHandler
+ B cpuss_interrupts_ipc_5_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_6_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_6_IRQHandler
+ B cpuss_interrupts_ipc_6_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_7_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_7_IRQHandler
+ B cpuss_interrupts_ipc_7_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_8_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_8_IRQHandler
+ B cpuss_interrupts_ipc_8_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_9_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_9_IRQHandler
+ B cpuss_interrupts_ipc_9_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_10_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_10_IRQHandler
+ B cpuss_interrupts_ipc_10_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_11_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_11_IRQHandler
+ B cpuss_interrupts_ipc_11_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_12_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_12_IRQHandler
+ B cpuss_interrupts_ipc_12_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_13_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_13_IRQHandler
+ B cpuss_interrupts_ipc_13_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_14_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_14_IRQHandler
+ B cpuss_interrupts_ipc_14_IRQHandler
+
+ PUBWEAK cpuss_interrupts_ipc_15_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_ipc_15_IRQHandler
+ B cpuss_interrupts_ipc_15_IRQHandler
+
+ PUBWEAK pass_interrupt_sar_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+pass_interrupt_sar_0_IRQHandler
+ B pass_interrupt_sar_0_IRQHandler
+
+ PUBWEAK pass_interrupt_sar_1_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+pass_interrupt_sar_1_IRQHandler
+ B pass_interrupt_sar_1_IRQHandler
+
+ PUBWEAK pass_interrupt_ctb_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+pass_interrupt_ctb_IRQHandler
+ B pass_interrupt_ctb_IRQHandler
+
+ PUBWEAK pass_interrupt_fifo_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+pass_interrupt_fifo_0_IRQHandler
+ B pass_interrupt_fifo_0_IRQHandler
+
+ PUBWEAK pass_interrupt_fifo_1_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+pass_interrupt_fifo_1_IRQHandler
+ B pass_interrupt_fifo_1_IRQHandler
+
+ PUBWEAK scb_0_interrupt_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+scb_0_interrupt_IRQHandler
+ B scb_0_interrupt_IRQHandler
+
+ PUBWEAK scb_1_interrupt_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+scb_1_interrupt_IRQHandler
+ B scb_1_interrupt_IRQHandler
+
+ PUBWEAK scb_2_interrupt_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+scb_2_interrupt_IRQHandler
+ B scb_2_interrupt_IRQHandler
+
+ PUBWEAK scb_4_interrupt_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+scb_4_interrupt_IRQHandler
+ B scb_4_interrupt_IRQHandler
+
+ PUBWEAK scb_5_interrupt_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+scb_5_interrupt_IRQHandler
+ B scb_5_interrupt_IRQHandler
+
+ PUBWEAK csd_interrupt_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+csd_interrupt_IRQHandler
+ B csd_interrupt_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dmac_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dmac_0_IRQHandler
+ B cpuss_interrupts_dmac_0_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dmac_1_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dmac_1_IRQHandler
+ B cpuss_interrupts_dmac_1_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_0_IRQHandler
+ B cpuss_interrupts_dw0_0_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_1_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_1_IRQHandler
+ B cpuss_interrupts_dw0_1_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_2_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_2_IRQHandler
+ B cpuss_interrupts_dw0_2_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_3_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_3_IRQHandler
+ B cpuss_interrupts_dw0_3_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_4_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_4_IRQHandler
+ B cpuss_interrupts_dw0_4_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_5_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_5_IRQHandler
+ B cpuss_interrupts_dw0_5_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_6_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_6_IRQHandler
+ B cpuss_interrupts_dw0_6_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_7_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_7_IRQHandler
+ B cpuss_interrupts_dw0_7_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_8_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_8_IRQHandler
+ B cpuss_interrupts_dw0_8_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_9_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_9_IRQHandler
+ B cpuss_interrupts_dw0_9_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_10_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_10_IRQHandler
+ B cpuss_interrupts_dw0_10_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_11_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_11_IRQHandler
+ B cpuss_interrupts_dw0_11_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_12_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_12_IRQHandler
+ B cpuss_interrupts_dw0_12_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_13_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_13_IRQHandler
+ B cpuss_interrupts_dw0_13_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_14_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_14_IRQHandler
+ B cpuss_interrupts_dw0_14_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_15_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_15_IRQHandler
+ B cpuss_interrupts_dw0_15_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_16_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_16_IRQHandler
+ B cpuss_interrupts_dw0_16_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_17_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_17_IRQHandler
+ B cpuss_interrupts_dw0_17_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_18_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_18_IRQHandler
+ B cpuss_interrupts_dw0_18_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_19_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_19_IRQHandler
+ B cpuss_interrupts_dw0_19_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_20_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_20_IRQHandler
+ B cpuss_interrupts_dw0_20_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_21_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_21_IRQHandler
+ B cpuss_interrupts_dw0_21_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_22_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_22_IRQHandler
+ B cpuss_interrupts_dw0_22_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_23_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_23_IRQHandler
+ B cpuss_interrupts_dw0_23_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_24_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_24_IRQHandler
+ B cpuss_interrupts_dw0_24_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_25_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_25_IRQHandler
+ B cpuss_interrupts_dw0_25_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_26_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_26_IRQHandler
+ B cpuss_interrupts_dw0_26_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_27_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_27_IRQHandler
+ B cpuss_interrupts_dw0_27_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_28_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_28_IRQHandler
+ B cpuss_interrupts_dw0_28_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_0_IRQHandler
+ B cpuss_interrupts_dw1_0_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_1_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_1_IRQHandler
+ B cpuss_interrupts_dw1_1_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_2_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_2_IRQHandler
+ B cpuss_interrupts_dw1_2_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_3_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_3_IRQHandler
+ B cpuss_interrupts_dw1_3_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_4_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_4_IRQHandler
+ B cpuss_interrupts_dw1_4_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_5_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_5_IRQHandler
+ B cpuss_interrupts_dw1_5_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_6_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_6_IRQHandler
+ B cpuss_interrupts_dw1_6_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_7_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_7_IRQHandler
+ B cpuss_interrupts_dw1_7_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_8_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_8_IRQHandler
+ B cpuss_interrupts_dw1_8_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_9_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_9_IRQHandler
+ B cpuss_interrupts_dw1_9_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_10_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_10_IRQHandler
+ B cpuss_interrupts_dw1_10_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_11_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_11_IRQHandler
+ B cpuss_interrupts_dw1_11_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_12_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_12_IRQHandler
+ B cpuss_interrupts_dw1_12_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_13_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_13_IRQHandler
+ B cpuss_interrupts_dw1_13_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_14_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_14_IRQHandler
+ B cpuss_interrupts_dw1_14_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_15_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_15_IRQHandler
+ B cpuss_interrupts_dw1_15_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_16_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_16_IRQHandler
+ B cpuss_interrupts_dw1_16_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_17_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_17_IRQHandler
+ B cpuss_interrupts_dw1_17_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_18_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_18_IRQHandler
+ B cpuss_interrupts_dw1_18_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_19_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_19_IRQHandler
+ B cpuss_interrupts_dw1_19_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_20_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_20_IRQHandler
+ B cpuss_interrupts_dw1_20_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_21_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_21_IRQHandler
+ B cpuss_interrupts_dw1_21_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_22_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_22_IRQHandler
+ B cpuss_interrupts_dw1_22_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_23_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_23_IRQHandler
+ B cpuss_interrupts_dw1_23_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_24_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_24_IRQHandler
+ B cpuss_interrupts_dw1_24_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_25_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_25_IRQHandler
+ B cpuss_interrupts_dw1_25_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_26_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_26_IRQHandler
+ B cpuss_interrupts_dw1_26_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_27_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_27_IRQHandler
+ B cpuss_interrupts_dw1_27_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_28_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_28_IRQHandler
+ B cpuss_interrupts_dw1_28_IRQHandler
+
+ PUBWEAK cpuss_interrupts_fault_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_fault_0_IRQHandler
+ B cpuss_interrupts_fault_0_IRQHandler
+
+ PUBWEAK cpuss_interrupts_fault_1_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_fault_1_IRQHandler
+ B cpuss_interrupts_fault_1_IRQHandler
+
+ PUBWEAK cpuss_interrupt_crypto_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupt_crypto_IRQHandler
+ B cpuss_interrupt_crypto_IRQHandler
+
+ PUBWEAK cpuss_interrupt_fm_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupt_fm_IRQHandler
+ B cpuss_interrupt_fm_IRQHandler
+
+ PUBWEAK cpuss_interrupts_cm4_fp_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_cm4_fp_IRQHandler
+ B cpuss_interrupts_cm4_fp_IRQHandler
+
+ PUBWEAK cpuss_interrupts_cm0_cti_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_cm0_cti_0_IRQHandler
+ B cpuss_interrupts_cm0_cti_0_IRQHandler
+
+ PUBWEAK cpuss_interrupts_cm0_cti_1_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_cm0_cti_1_IRQHandler
+ B cpuss_interrupts_cm0_cti_1_IRQHandler
+
+ PUBWEAK cpuss_interrupts_cm4_cti_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_cm4_cti_0_IRQHandler
+ B cpuss_interrupts_cm4_cti_0_IRQHandler
+
+ PUBWEAK cpuss_interrupts_cm4_cti_1_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_cm4_cti_1_IRQHandler
+ B cpuss_interrupts_cm4_cti_1_IRQHandler
+
+ PUBWEAK tcpwm_0_interrupts_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+tcpwm_0_interrupts_0_IRQHandler
+ B tcpwm_0_interrupts_0_IRQHandler
+
+ PUBWEAK tcpwm_0_interrupts_1_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+tcpwm_0_interrupts_1_IRQHandler
+ B tcpwm_0_interrupts_1_IRQHandler
+
+ PUBWEAK tcpwm_0_interrupts_2_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+tcpwm_0_interrupts_2_IRQHandler
+ B tcpwm_0_interrupts_2_IRQHandler
+
+ PUBWEAK tcpwm_0_interrupts_3_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+tcpwm_0_interrupts_3_IRQHandler
+ B tcpwm_0_interrupts_3_IRQHandler
+
+ PUBWEAK tcpwm_0_interrupts_256_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+tcpwm_0_interrupts_256_IRQHandler
+ B tcpwm_0_interrupts_256_IRQHandler
+
+ PUBWEAK tcpwm_0_interrupts_257_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+tcpwm_0_interrupts_257_IRQHandler
+ B tcpwm_0_interrupts_257_IRQHandler
+
+ PUBWEAK tcpwm_0_interrupts_258_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+tcpwm_0_interrupts_258_IRQHandler
+ B tcpwm_0_interrupts_258_IRQHandler
+
+ PUBWEAK tcpwm_0_interrupts_259_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+tcpwm_0_interrupts_259_IRQHandler
+ B tcpwm_0_interrupts_259_IRQHandler
+
+ PUBWEAK tcpwm_0_interrupts_260_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+tcpwm_0_interrupts_260_IRQHandler
+ B tcpwm_0_interrupts_260_IRQHandler
+
+ PUBWEAK tcpwm_0_interrupts_261_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+tcpwm_0_interrupts_261_IRQHandler
+ B tcpwm_0_interrupts_261_IRQHandler
+
+ PUBWEAK tcpwm_0_interrupts_262_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+tcpwm_0_interrupts_262_IRQHandler
+ B tcpwm_0_interrupts_262_IRQHandler
+
+ PUBWEAK tcpwm_0_interrupts_263_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+tcpwm_0_interrupts_263_IRQHandler
+ B tcpwm_0_interrupts_263_IRQHandler
+
+ PUBWEAK pass_interrupt_dacs_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+pass_interrupt_dacs_IRQHandler
+ B pass_interrupt_dacs_IRQHandler
+
+ PUBWEAK smif_interrupt_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+smif_interrupt_IRQHandler
+ B smif_interrupt_IRQHandler
+
+ PUBWEAK usb_interrupt_hi_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+usb_interrupt_hi_IRQHandler
+ B usb_interrupt_hi_IRQHandler
+
+ PUBWEAK usb_interrupt_med_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+usb_interrupt_med_IRQHandler
+ B usb_interrupt_med_IRQHandler
+
+ PUBWEAK usb_interrupt_lo_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+usb_interrupt_lo_IRQHandler
+ B usb_interrupt_lo_IRQHandler
+
+ PUBWEAK canfd_0_interrupt0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+canfd_0_interrupt0_IRQHandler
+ B canfd_0_interrupt0_IRQHandler
+
+ PUBWEAK canfd_0_interrupts0_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+canfd_0_interrupts0_0_IRQHandler
+ B canfd_0_interrupts0_0_IRQHandler
+
+ PUBWEAK canfd_0_interrupts1_0_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+canfd_0_interrupts1_0_IRQHandler
+ B canfd_0_interrupts1_0_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_29_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_29_IRQHandler
+ B cpuss_interrupts_dw1_29_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_30_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_30_IRQHandler
+ B cpuss_interrupts_dw1_30_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw1_31_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw1_31_IRQHandler
+ B cpuss_interrupts_dw1_31_IRQHandler
+
+ PUBWEAK cpuss_interrupts_dw0_29_IRQHandler
+ SECTION .text:CODE:REORDER:NOROOT(1)
+cpuss_interrupts_dw0_29_IRQHandler
+ B cpuss_interrupts_dw0_29_IRQHandler
+
+
+ END
+
+
+; [] END OF FILE
diff --git a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/system_psoc6_cm4.c b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/system_psoc6_cm4.c
index 7800d6b..7e634e2 100644
--- a/devices/templates/COMPONENT_MTB/COMPONENT_CM4/system_psoc6_cm4.c
+++ b/devices/templates/COMPONENT_MTB/COMPONENT_CM4/system_psoc6_cm4.c
@@ -1,12 +1,12 @@
/***************************************************************************//**
* \file system_psoc6_cm4.c
-* \version 2.70
+* \version 2.70.1
*
* The device system-source file.
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
diff --git a/devices/templates/COMPONENT_MTB/system_psoc6.h b/devices/templates/COMPONENT_MTB/system_psoc6.h
index 9af8a90..58550fa 100644
--- a/devices/templates/COMPONENT_MTB/system_psoc6.h
+++ b/devices/templates/COMPONENT_MTB/system_psoc6.h
@@ -1,12 +1,12 @@
/***************************************************************************//**
* \file system_psoc6.h
-* \version 2.70
+* \version 2.70.1
*
* \brief Device system header file.
*
********************************************************************************
* \copyright
-* Copyright 2016-2019 Cypress Semiconductor Corporation
+* Copyright 2016-2020 Cypress Semiconductor Corporation
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -36,7 +36,6 @@
* * \ref group_system_config_single_core_device_initialization
* - \ref group_system_config_device_memory_definition
* - \ref group_system_config_heap_stack_config
-* - \ref group_system_config_merge_apps
* - \ref group_system_config_default_handlers
* - \ref group_system_config_device_vector_table
* - \ref group_system_config_cm4_functions
@@ -56,44 +55,58 @@
* warnings in your project, you can simply comment out or remove the relevant
* code in the linker file.
*
+* \note For the PSoC 64 Secure MCUs devices, refer to the following page:
+* https://www.cypress.com/documentation/software-and-drivers/psoc-64-secure-mcu-secure-boot-sdk-user-guide
+*
+*
* ARM GCC\n
* The flash and RAM sections for the CPU are defined in the linker files:
* 'xx_yy.ld', where 'xx' is the device group, and 'yy' is the target CPU; for example,
* 'cy8c6xx7_cm0plus.ld' and 'cy8c6xx7_cm4_dual.ld'.
* \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
+* of the \ref CY_CORTEX_M4_APPL_ADDR should also be changed. The
* \ref CY_CORTEX_M4_APPL_ADDR macro should be used as the parameter for the
* Cy_SysEnableCM4() function call.
+* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+* More about CM0+ prebuilt images, see here:
+* https://github.com/cypresssemiconductorco/psoc6cm0p
*
* Change the flash and RAM sizes by editing the macros value in the
* linker files for both CPUs:
* - 'xx_cm0plus.ld', where 'xx' is the device group:
* \code
-* flash (rx) : ORIGIN = 0x10000000, LENGTH = 0x00080000
-* ram (rwx) : ORIGIN = 0x08000000, LENGTH = 0x00024000
+* flash (rx) : ORIGIN = 0x10000000, LENGTH = 0x2000
+* ram (rwx) : ORIGIN = 0x08000000, LENGTH = 0x2000
* \endcode
* - 'xx_cm4_dual.ld', where 'xx' is the device group:
* \code
-* flash (rx) : ORIGIN = 0x10080000, LENGTH = 0x00080000
-* ram (rwx) : ORIGIN = 0x08024000, LENGTH = 0x00023800
+* flash (rx) : ORIGIN = 0x10000000, LENGTH = 0x100000
+* ram (rwx) : ORIGIN = 0x08002000, LENGTH = 0x45800
* \endcode
*
-* Change the value of the \ref CY_CORTEX_M4_APPL_ADDR macro to the rom ORIGIN's
-* value in the 'xx_cm4_dual.ld' file, where 'xx' is the device group. Do this
-* by either:
+* 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.
+* Do this by either:
* - Passing the following commands to the compiler:\n
-* \code -D CY_CORTEX_M4_APPL_ADDR=0x10080000 \endcode
-* - Editing the \ref CY_CORTEX_M4_APPL_ADDR value in the 'system_xx.h', where 'xx' is device family:\n
-* \code #define CY_CORTEX_M4_APPL_ADDR (0x10080000u) \endcode
+* \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
+* 'xx' is the device family:\n
+* \code #define CY_CORTEX_M4_APPL_ADDR (0x10002000u) \endcode
*
-* ARM MDK\n
+* ARM Compiler\n
* The flash and RAM sections for the CPU are defined in the linker files:
-* 'xx_yy.scat', where 'xx' is the device group, and 'yy' is the target CPU; for example,
-* 'cy8c6xx7_cm0plus.scat' and 'cy8c6xx7_cm4_dual.scat'.
+* '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
* \ref CY_CORTEX_M4_APPL_ADDR macro should be used as the parameter for the \ref
* Cy_SysEnableCM4() function call.
+* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+* More about CM0+ prebuilt images, see here:
+* https://github.com/cypresssemiconductorco/psoc6cm0p
*
* \note The linker files provided with the PDL are generic and handle all common
* use cases. Your project may not use every section defined in the linker files.
@@ -106,29 +119,32 @@
*
* Change the flash and RAM sizes by editing the macros value in the
* linker files for both CPUs:
-* - 'xx_cm0plus.scat', where 'xx' is the device group:
+* - 'xx_cm0plus.sct', where 'xx' is the device group:
* \code
* #define FLASH_START 0x10000000
-* #define FLASH_SIZE 0x00080000
+* #define FLASH_SIZE 0x00002000
* #define RAM_START 0x08000000
-* #define RAM_SIZE 0x00024000
+* #define RAM_SIZE 0x00002000
* \endcode
-* - 'xx_cm4_dual.scat', where 'xx' is the device group:
+* - 'xx_cm4_dual.sct', where 'xx' is the device group:
* \code
-* #define FLASH_START 0x10080000
-* #define FLASH_SIZE 0x00080000
-* #define RAM_START 0x08024000
-* #define RAM_SIZE 0x00023800
+* #define FLASH_START 0x10000000
+* #define FLASH_SIZE 0x00100000
+* #define RAM_START 0x08002000
+* #define RAM_SIZE 0x00045800
* \endcode
*
* Change the value of the \ref CY_CORTEX_M4_APPL_ADDR macro to the FLASH_START
-* value in the 'xx_cm4_dual.scat' file,
-* where 'xx' is the device group. Do this by either:
+* 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=0x10080000 \endcode
+* \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
-* 'xx' is device family:\n
-* \code #define CY_CORTEX_M4_APPL_ADDR (0x10080000u) \endcode
+* 'xx' is the device family:\n
+* \code #define CY_CORTEX_M4_APPL_ADDR (0x10002000u) \endcode
*
* IAR\n
* The flash and RAM sections for the CPU are defined in the linker files:
@@ -138,32 +154,39 @@
* of the of the \ref CY_CORTEX_M4_APPL_ADDR should also be changed. The
* \ref CY_CORTEX_M4_APPL_ADDR macro should be used as the parameter for the \ref
* Cy_SysEnableCM4() function call.
+* By default, the COMPONENT_CM0P_SLEEP prebuilt image is used for the CM0p core.
+* More about CM0+ prebuilt images, see here:
+* https://github.com/cypresssemiconductorco/psoc6cm0p
*
* Change the flash and RAM sizes by editing the macros value in the
* linker files for both CPUs:
* - 'xx_cm0plus.icf', where 'xx' is the device group:
* \code
* define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
-* define symbol __ICFEDIT_region_IROM1_end__ = 0x10080000;
+* define symbol __ICFEDIT_region_IROM1_end__ = 0x10001FFF;
* define symbol __ICFEDIT_region_IRAM1_start__ = 0x08000000;
-* define symbol __ICFEDIT_region_IRAM1_end__ = 0x08024000;
+* define symbol __ICFEDIT_region_IRAM1_end__ = 0x08001FFF;
* \endcode
* - 'xx_cm4_dual.icf', where 'xx' is the device group:
* \code
-* define symbol __ICFEDIT_region_IROM1_start__ = 0x10080000;
-* define symbol __ICFEDIT_region_IROM1_end__ = 0x10100000;
-* define symbol __ICFEDIT_region_IRAM1_start__ = 0x08024000;
-* define symbol __ICFEDIT_region_IRAM1_end__ = 0x08047800;
+* define symbol __ICFEDIT_region_IROM1_start__ = 0x10000000;
+* define symbol __ICFEDIT_region_IROM1_end__ = 0x100FFFFF;
+* define symbol __ICFEDIT_region_IRAM1_start__ = 0x08002000;
+* 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 in the 'xx_cm4_dual.icf' file, where 'xx'
-* is the device group. Do this by either:
+* 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
+* 'xx_cm0plus.icf'. Do this by either:
* - Passing the following commands to the compiler:\n
-* \code -D CY_CORTEX_M4_APPL_ADDR=0x10080000 \endcode
+* \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
-* 'xx' is device family:\n
-* \code #define CY_CORTEX_M4_APPL_ADDR (0x10080000u) \endcode
+* 'xx' is the device family:\n
+* \code #define CY_CORTEX_M4_APPL_ADDR (0x10002000u) \endcode
*
* \subsection group_system_config_device_initialization Device Initialization
* After a power-on-reset (POR), the boot process is handled by the boot code
@@ -189,7 +212,9 @@
* -# Editing source code files
* -# Specifying via command line
*
-* By default, the stack size is set to 0x00001000 and the heap size is set to 0x00000400.
+* 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
* - Editing source code files\n
@@ -198,28 +223,23 @@
* Change the heap and stack sizes by modifying the following lines:\n
* \code .equ Stack_Size, 0x00001000 \endcode
* \code .equ Heap_Size, 0x00000400 \endcode
+* Also, the stack size is defined in the linker script files: 'xx_yy.ld',
+* where 'xx' is the device family, and 'yy' is the target CPU; for example,
+* cy8c6xx7_cm0plus.ld and cy8c6xx7_cm4_dual.ld.
+* Change the stack size by modifying the following line:\n
+* \code STACK_SIZE = 0x1000; \endcode
*
-* - Specifying via command line\n
-* Change the heap and stack sizes passing the following commands to the compiler:\n
-* \code -D __STACK_SIZE=0x000000400 \endcode
-* \code -D __HEAP_SIZE=0x000000100 \endcode
-*
-* \subsubsection group_system_config_heap_stack_config_mdk ARM MDK
+* \subsubsection group_system_config_heap_stack_config_mdk ARM Compiler
* - Editing source code files\n
-* The heap and stack sizes are defined in the assembler startup files
-* (e.g. startup_psoc6_01_cm0plus.s and startup_psoc6_01_cm4.s).
-* Change the heap and stack sizes by modifying the following lines:\n
-* \code Stack_Size EQU 0x00001000 \endcode
-* \code Heap_Size EQU 0x00000400 \endcode
-*
-* - Specifying via command line\n
-* Change the heap and stack sizes passing the following commands to the assembler:\n
-* \code "--predefine=___STACK_SIZE SETA 0x000000400" \endcode
-* \code "--predefine=__HEAP_SIZE SETA 0x000000100" \endcode
+* The stack size is defined in the linker script files: 'xx_yy.sct',
+* where 'xx' is the device family, and 'yy' is the target CPU; for example,
+* cy8c6xx7_cm0plus.sct and cy8c6xx7_cm4_dual.sct.
+* Change the stack size by modifying the following line:\n
+* \code STACK_SIZE = 0x1000; \endcode
*
* \subsubsection group_system_config_heap_stack_config_iar IAR
* - Editing source code files\n
-* The heap and stack sizes are defined in the linker scatter files: 'xx_yy.icf',
+* The heap and stack sizes are defined in the linker script files: 'xx_yy.icf',
* where 'xx' is the device family, and 'yy' is the target CPU; for example,
* cy8c6xx7_cm0plus.icf and cy8c6xx7_cm4_dual.icf.
* Change the heap and stack sizes by modifying the following lines:\n
@@ -232,21 +252,6 @@
* \code --define_symbol __STACK_SIZE=0x000000400 \endcode
* \code --define_symbol __HEAP_SIZE=0x000000100 \endcode
*
-* \subsection group_system_config_merge_apps Merging CM0+ and CM4 Executables
-* The CM0+ project and linker script build the CM0+ application image. Similarly,
-* the CM4 linker script builds the CM4 application image. Each specifies
-* locations, sizes, and contents of sections in memory. See
-* \ref group_system_config_device_memory_definition for the symbols and default
-* values.
-*
-* The cymcuelftool is invoked by a post-build command. The precise project
-* setting is IDE-specific.
-*
-* The cymcuelftool combines the two executables. The tool examines the
-* executables to ensure that memory regions either do not overlap, or contain
-* identical bytes (shared). If there are no problems, it creates a new ELF file
-* with the merged image, without changing any of the addresses or data.
-*
* \subsection group_system_config_default_handlers Default Interrupt Handlers Definition
* The default interrupt handler functions are defined as weak functions to a dummy
* handler in the startup file. The naming convention for the interrupt handler names
@@ -273,10 +278,10 @@
* The vector table address (and the vector table itself) are defined in the
* assembler startup files (e.g. startup_psoc6_01_cm0plus.S and startup_psoc6_01_cm4.S).
* The code in these files copies the vector table from Flash to RAM.
-* \subsubsection group_system_config_device_vector_table_mdk ARM MDK
-* The linker script file is 'xx_yy.scat', where 'xx' is the device family,
-* and 'yy' is the target CPU; for example, cy8c6xx7_cm0plus.scat and
-* cy8c6xx7_cm4_dual.scat. The linker script specifies that the vector table
+* \subsubsection group_system_config_device_vector_table_mdk ARM Compiler
+* The linker script file is 'xx_yy.sct', where 'xx' is the device family,
+* and 'yy' is the target CPU; for example, cy8c6xx7_cm0plus.sct and
+* cy8c6xx7_cm4_dual.sct. The linker script specifies that the vector table
* (RESET_RAM) shall be first in the RAM section.\n
* RESET_RAM represents the vector table. It is defined in the assembler startup
* files (e.g. startup_psoc6_01_cm0plus.s and startup_psoc6_01_cm4.s).
@@ -291,10 +296,6 @@
* assembler startup files (e.g. startup_psoc6_01_cm0plus.s and startup_psoc6_01_cm4.s).
* The code in these files copies the vector table from Flash to RAM.
*
-* \section group_system_config_more_information More Information
-* Refer to the PDL User Guide for the
-* more details.
-*
* \section group_system_config_MISRA MISRA Compliance
*
*
@@ -320,6 +321,11 @@
*
Reason for Change
*
*
+*
+* 2.70.1
+* Updated documentation for the better description of the existing startup implementation.
+* User experience enhancement.
+*
* 2.70
* Updated \ref SystemCoreClockUpdate() implementation - The SysClk API is reused.
* Code optimization.
diff --git a/docs/pdl_api_reference_manual/html/annotated.html b/docs/pdl_api_reference_manual/html/annotated.html
index 27c7101..ecb863e 100644
--- a/docs/pdl_api_reference_manual/html/annotated.html
+++ b/docs/pdl_api_reference_manual/html/annotated.html
@@ -206,87 +206,88 @@
Ccy_stc_smif_block_config_t This SMIF memory configuration structure is used to store the memory configuration for the memory mode of operation Ccy_stc_smif_config_t The SMIF configuration structure
- Ccy_stc_smif_context_t The SMIF internal context data
- Ccy_stc_smif_mem_cmd_t This command structure is used to store the Read/Write command configuration
- Ccy_stc_smif_mem_config_t This SMIF memory configuration structure is used to store the memory configuration for the memory mode of operation
- Ccy_stc_smif_mem_device_cfg_t This configuration structure of the SMIF memory device is used to store device-specific parameters
- Ccy_stc_smpu_cfg_t Configuration structure for SMPU struct initialization
- Ccy_stc_sysanalog_config_t Structure to configure the entire AREF block
- Ccy_stc_sysint_t Initialization configuration structure for a single interrupt channel
- Ccy_stc_syspm_backup_regs_t This internal structure stores non-retained registers in the system Deep Sleep power mode
- Ccy_stc_syspm_callback_params_t The structure contains syspm callback parameters
- Ccy_stc_syspm_callback_t Structure with syspm callback configuration elements
- Ccy_stc_tcpwm_counter_config_t Counter Timer configuration structure
- Ccy_stc_tcpwm_pwm_config_t PWM configuration structure
- Ccy_stc_tcpwm_quaddec_config_t Quadrature Decoder configuration structure
- Ccy_stc_usb_dev_ep_config_t Data Endpoint Configuration Structure
- Ccy_stc_usbfs_dev_drv_config_t Driver Configuration Structure
- Ccy_stc_usbfs_dev_drv_context_t USBFS Device context structure
- Ccy_stc_usbfs_dev_drv_dma_config_t DMA Channel Configuration Structure CCySCB_Type The struct type definition for the hardware register set contained in the block.
+
+ Ccy_stc_smif_hybrid_region_info_t This structure specifies data used for memory with hybrid sectors
+ Ccy_stc_smif_mem_cmd_t This command structure is used to store the Read/Write command configuration
+ Ccy_stc_smif_mem_config_t This SMIF memory configuration structure is used to store the memory configuration for the memory mode of operation
+ Ccy_stc_smif_mem_device_cfg_t This configuration structure of the SMIF memory device is used to store device-specific parameters
+ Ccy_stc_smpu_cfg_t Configuration structure for SMPU struct initialization
+ Ccy_stc_sysanalog_config_t Structure to configure the entire AREF block
+ Ccy_stc_sysint_t Initialization configuration structure for a single interrupt channel
+ Ccy_stc_syspm_backup_regs_t This internal structure stores non-retained registers in the system Deep Sleep power mode
+ Ccy_stc_syspm_callback_params_t The structure contains syspm callback parameters
+ Ccy_stc_syspm_callback_t Structure with syspm callback configuration elements
+ Ccy_stc_tcpwm_counter_config_t Counter Timer configuration structure
+ Ccy_stc_tcpwm_pwm_config_t PWM configuration structure
+ Ccy_stc_tcpwm_quaddec_config_t Quadrature Decoder configuration structure
+ Ccy_stc_usb_dev_ep_config_t Data Endpoint Configuration Structure
+ Ccy_stc_usbfs_dev_drv_config_t Driver Configuration Structure
+ Ccy_stc_usbfs_dev_drv_context_t USBFS Device context structure
+ Ccy_stc_usbfs_dev_drv_dma_config_t DMA Channel Configuration Structure
- CCySCB_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CDW_Type The struct type definition for the hardware register set contained in the block.
+
- CDW_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CGPIO_PRT_Type The struct type definition for the hardware register set contained in the block.
+
- CGPIO_PRT_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CI2S_Type The struct type definition for the hardware register set contained in the block.
+
- CI2S_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CIPC_STRUCT_Type The struct type definition for the hardware register set contained in the block.
+
- CIPC_STRUCT_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CLPCOMP_Type The struct type definition for the hardware register set contained in the block.
+
- CLPCOMP_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CMCWDT_STRUCT_Type The struct type definition for the hardware register set contained in the block.
+
- CMCWDT_STRUCT_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CPDM_Type The struct type definition for the hardware register set contained in the block.
+
- CPDM_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CPERI_GR_PPU_RG_Type The struct type definition for the hardware register set contained in the block.
+
- CPERI_GR_PPU_RG_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CPERI_GR_PPU_SL_Type The struct type definition for the hardware register set contained in the block.
+
- CPERI_GR_PPU_SL_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CPERI_PPU_GR_Type The struct type definition for the hardware register set contained in the block.
+
- CPERI_PPU_GR_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CPERI_PPU_PR_Type The struct type definition for the hardware register set contained in the block.
+
- CPERI_PPU_PR_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CPROT_MPU_MPU_STRUCT_Type The struct type definition for the hardware register set contained in the block.
+
- CPROT_MPU_MPU_STRUCT_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CPROT_SMPU_SMPU_STRUCT_Type The struct type definition for the hardware register set contained in the block.
+
- CPROT_SMPU_SMPU_STRUCT_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CSAR_Type The struct type definition for the hardware register set contained in the block.
+
- CSAR_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CSMIF_Type The struct type definition for the hardware register set contained in the block.
+
- CSMIF_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions. CTCPWM_Type The struct type definition for the hardware register set contained in the block.
+
diff --git a/docs/pdl_api_reference_manual/html/classes.html b/docs/pdl_api_reference_manual/html/classes.html
index 2d85a25..4a9a8a9 100644
--- a/docs/pdl_api_reference_manual/html/classes.html
+++ b/docs/pdl_api_reference_manual/html/classes.html
@@ -87,49 +87,47 @@
CTCPWM_Type The struct type definition for the hardware register set contained in the block.
The address of a variable of this type can be used as the base hardware address for register access. A device may support more than one instance of a peripheral block.
Refer to a device-specific header file, e.g. <PDL_DIR>/devices/include/cy8c637bzi_bld74.h for the list of block instances available on that device.
Refer to the device TRM for the block register descriptions.- e -
: cy_stc_ipc_pipe_ep_config_t
- h -
- r -
- s -
- e -
- h -
- r -
- s -
Configuration Considerations
+
More Information
@@ -112,6 +112,8 @@
Version Changes Reason of Change
+
+3.40 A new API function Cy_BLE_EcoIsEnabled() is added. API enhancement.
3.30 Updated the Cy_BLE_EcoConfigure() to reuse the Cy_SysClk_ClkPeriGetFrequency(). API enhancement.
diff --git a/docs/pdl_api_reference_manual/html/group__group__ble__clk__functions.html b/docs/pdl_api_reference_manual/html/group__group__ble__clk__functions.html
index a492720..3193ef4 100644
--- a/docs/pdl_api_reference_manual/html/group__group__ble__clk__functions.html
+++ b/docs/pdl_api_reference_manual/html/group__group__ble__clk__functions.html
@@ -96,6 +96,9 @@
3.20 Updated the Cy_BLE_EcoConfigure(): it stores the ECO frequency for possible frequency calculation by the Cy_SysClk_ClkHfGetFrequency(). API enhancement. void Cy_BLE_EcoReset (void) This API resets and disables the BLE ECO clock. More...
+
+__STATIC_INLINE bool Cy_BLE_EcoIsEnabled (void)
+ Reports the Enabled/Disabled BLE ECO status. More... Function Documentation
@@ -183,7 +186,7 @@
@@ -208,6 +211,27 @@ ◆ Cy_BLE_EcoIsEnabled()
+
+
+
+
+
+ __STATIC_INLINE bool Cy_BLE_EcoIsEnabled
+ (
+ void
+ )
+
+
+
Driver major version.
+#define
-#define CY_BLE_CLK_DRV_VERSION_MINOR (20) CY_BLE_CLK_DRV_VERSION_MINOR (40) Driver minor version.
diff --git a/docs/pdl_api_reference_manual/html/group__group__canfd.html b/docs/pdl_api_reference_manual/html/group__group__canfd.html
index d21a890..ccd3c5d 100644
--- a/docs/pdl_api_reference_manual/html/group__group__canfd.html
+++ b/docs/pdl_api_reference_manual/html/group__group__canfd.html
@@ -159,6 +159,8 @@
Version Changes Reason for Change
+
+1.10 Updated of the Cy_CANFD_Init() functions Allow initing CANFD with 0 number of SID/XID filters
1.0.1 Updated description of the Cy_CANFD_Init() and Cy_CANFD_DeInit() functions Documentation update and clarification
diff --git a/docs/pdl_api_reference_manual/html/group__group__canfd__macros.html b/docs/pdl_api_reference_manual/html/group__group__canfd__macros.html
index a4fd8a6..1e6921a 100644
--- a/docs/pdl_api_reference_manual/html/group__group__canfd__macros.html
+++ b/docs/pdl_api_reference_manual/html/group__group__canfd__macros.html
@@ -116,7 +116,7 @@
1.0 Initial version Driver major version.
+#define
-#define CY_CANFD_DRV_VERSION_MINOR 0U CY_CANFD_DRV_VERSION_MINOR 10U Driver minor version.
diff --git a/docs/pdl_api_reference_manual/html/group__group__efuse.html b/docs/pdl_api_reference_manual/html/group__group__efuse.html
index e403022..1dce9af 100644
--- a/docs/pdl_api_reference_manual/html/group__group__efuse.html
+++ b/docs/pdl_api_reference_manual/html/group__group__efuse.html
@@ -115,6 +115,8 @@
Version Changes Reason for Change
+
+1.10.2 Fix driver header path. Folder structure changed.
1.10.1 Added header guard CY_IP_MXEFUSE. To enable the PDL compilation with wounded out IP blocks.
diff --git a/docs/pdl_api_reference_manual/html/group__group__efuse__functions.html b/docs/pdl_api_reference_manual/html/group__group__efuse__functions.html
index 75aaf69..b1a0bbc 100644
--- a/docs/pdl_api_reference_manual/html/group__group__efuse__functions.html
+++ b/docs/pdl_api_reference_manual/html/group__group__efuse__functions.html
@@ -141,7 +141,7 @@ 1.10 Flattened the organization of the driver source code into the single source directory and the single include directory. Driver library directory-structure simplification.
@@ -192,7 +192,7 @@ bitVal The pointer to the location to store the bit value.
diff --git a/docs/pdl_api_reference_manual/html/group__group__flash.html b/docs/pdl_api_reference_manual/html/group__group__flash.html
index 43c7886..3d1e0b8 100644
--- a/docs/pdl_api_reference_manual/html/group__group__flash.html
+++ b/docs/pdl_api_reference_manual/html/group__group__flash.html
@@ -90,34 +90,34 @@
byteVal The pointer to the location to store eFuse data.
Configuration Considerations
Introduction:
-
-
Blocking:
-
Constraints for Blocking Flash operations:
+
call Cy_SysEnableCM4(CY_CORTEX_M4_APPL_ADDR). Note: If desired user may put CM4 core in Deep Sleep any time after calling Cy_SysEnableCM4().
+
call Cy_SysDisableCM4(). Note: In this state Debug mode is not supported.
Partially Blocking:
-
D The end of the Program operation 0.13ms + 1000 SlowClk cycles
base Holds the base address of the SMIF block registers.
- memDevice The device to which the command is sent.
+ context The internal SMIF context data. context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure.
base Holds the base address of the SMIF block registers.
- memDevice The device to which the command is sent.
+ context The internal SMIF context data. context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure. memDevice
The device to which the command is sent.
status The status register value returned by the external memory.
- command The command required to read the status/configuration register.
+ context The internal SMIF context data.
@@ -563,7 +566,7 @@ context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure. memDevice
The device to which the command is sent.
status The status to write into the status register.
- command The command to write into the status/configuration register.
+ context The internal SMIF context data. cy_stc_smif_context_t
@@ -615,7 +618,7 @@ context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure.
base Holds the base address of the SMIF block registers.
- memDevice The device to which the command is sent
+ context The internal SMIF context data. cy_stc_smif_context_t
@@ -674,7 +677,7 @@ context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure. base
Holds the base address of the SMIF block registers.
memDevice The device to which the command is sent.
- sectorAddr The sector address to erase.
+ context The internal SMIF context data. cy_stc_smif_context_t
@@ -754,7 +757,7 @@ context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure. writeBuff
The pointer to the data to program. If this pointer is a NULL, then the function does not enable the interrupt. This use case is typically used when the FIFO is handled outside the interrupt and is managed in either a polling-based code or a DMA. The user would handle the FIFO management in a DMA or a polling-based code. If the user provides a NULL pointer in this function and does not handle the FIFO transaction, this could either stall or timeout the operation Cy_SMIF_TransmitData().
size The size of data to program. The user must ensure that the data size does not exceed the page size.
- cmdCompleteCb The callback function to call after the transfer completion. NULL interpreted as no callback.
+ context The internal SMIF context data.
@@ -835,7 +838,7 @@ context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure. readBuff
The pointer to the variable where the read data is stored. If this pointer is a NULL, then the function does not enable the interrupt. This use case is typically used when the FIFO is handled outside the interrupt and is managed in either a polling-based code or a DMA. The user would handle the FIFO management in a DMA or a polling-based code. If the user provides a NULL pointer in this function and does not handle the FIFO transaction, this could either stall or timeout the operation Cy_SMIF_TransmitData().
size The size of data to read.
- cmdCompleteCb The callback function to call after the transfer completion. NULL interpreted as no callback.
+ context The internal SMIF context data.
@@ -914,7 +917,7 @@ context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure. device
The device structure instance declared by the user. This is where the detected parameters are stored and returned.
slaveSelect The slave select line for the device.
- dataSelect The data line selection options for a slave device.
+ context Internal SMIF context data.
@@ -973,7 +976,7 @@ context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure. base
Holds the base address of the SMIF block registers.
memConfig The memory device configuration.
- timeoutUs The timeout value in microseconds to apply while polling the memory.
+ context Passes a configuration structure that contains the transfer parameters of the SMIF block.
@@ -1027,7 +1030,7 @@ context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure. base
Holds the base address of the SMIF block registers.
memConfig The memory device configuration.
- isQuadEnabled This parameter is updated to indicate whether quad mode is enabled (true) or not (false). The value is valid only when the function returns CY_SMIF_SUCCESS.
+ context Passes a configuration structure that contains the transfer parameters of the SMIF block.
@@ -1081,7 +1084,7 @@ context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure. base
Holds the base address of the SMIF block registers.
memConfig The memory device configuration.
- timeoutUs The timeout value in microseconds to apply while polling the memory.
+ context Passes a configuration structure that contains the transfer parameters of the SMIF block.
@@ -1149,7 +1152,7 @@ context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure. address
The address to read data from.
rxBuffer The buffer for storing the read data.
- length The size of data to read.
+ context Passes a configuration structure that contains the transfer parameters of the SMIF block.
@@ -1217,7 +1220,7 @@ context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure. address
The address to write data at.
txBuffer The buffer holding the data to write in the external memory.
- length The size of data to write.
+ context Passes a configuration structure that contains the transfer parameters of the SMIF block.
@@ -1278,11 +1281,13 @@ context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure. memConfig
The memory device configuration.
address The address of the block to be erased.
- length The size of data to erase.
+ context Passes a configuration structure that contains the transfer parameters of the SMIF block. context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure.
+
+The length should be equal to the sum of all erased sectors.
@@ -1325,13 +1330,65 @@
base Holds the base address of the SMIF block registers.
- memConfig The memory device configuration.
+ context Passes a configuration structure that contains the transfer parameters of the SMIF block. context This is the pointer to the context structure cy_stc_smif_context_t allocated by the user. The structure is used during the SMIF operation for internal configuration and data retention. The user must not modify anything in this structure.
+
+
+
+◆ Cy_SMIF_MemLocateHybridRegion()
+
+
+
+
+
+ cy_en_smif_status_t Cy_SMIF_MemLocateHybridRegion
+ (
+ cy_stc_smif_mem_config_t const *
+ memDevice,
+
+
+
+
+ cy_stc_smif_hybrid_region_info_t **
+ regionInfo,
+
+
+
+
+ uint32_t
+ address
+
+
+
+ )
+
+
+
+
+
+
+ memDevice The memory device configuration.
+ regionInfo Places a hybrid region configuration structure that contains the region specific parameters. See cy_stc_smif_hybrid_region_info_t for reference.
+ address The address for which a region is searched.
+
+
-devices<family>/<series>/include<series>_config.h. (E.g. devices/psoc6/include/psoc6_01_config.h). User-configurable clock speeds are defined in the file system_<series>.h.
As an illustration of the clocking system, the following diagram shows the PSoC 63 series clock tree. The actual tree may vary depending on the device series. Consult the Technical Reference Manual for your device for details.
In the BLE-enabled PSoC6 devices, the BLE ECO (BLE ECO Clock) clock is connected to the system Alternative High-Frequency Clock input.
++API Reference | |
Functions | |
+Functions | |
__STATIC_INLINE uint32_t | Cy_SysClk_AltHfGetFrequency (void) |
Reports the frequency of the Alternative High-Frequency Clock. More... | |
__STATIC_INLINE uint32_t Cy_SysClk_AltHfGetFrequency | +( | +void | +) | ++ |
Reports the frequency of the Alternative High-Frequency Clock.
+__STATIC_INLINE bool Cy_SysClk_ClkHfIsEnabled | +( | +uint32_t | +clkHf | ) | ++ |
Reports the Enabled/Disabled status of clkHf.
+clkHf | Selects which clkHf to check. |
__STATIC_INLINE bool Cy_SysClk_ClkPumpIsEnabled | +( | +void | +) | ++ |
Reports the Enabled/Disabled status of the ClkPump.
+Disables the pump clock (clk_pump).
-__STATIC_INLINE uint32_t Cy_SysClk_ClkPumpGetFrequency | +( | +void | +) | ++ |
Reports the frequency of the pump clock (clk_pump).
+__STATIC_INLINE bool Cy_SysClk_ClkTimerIsEnabled | +( | +void | +) | ++ |
Reports the Enabled/Disabled status of the Timer.
+Disables the timer clock (clk_timer).
-uint32_t Cy_SysClk_ClkTimerGetFrequency | +( | +void | +) | ++ |
Reports the frequency of the timer clock (clk_timer).
+uint32_t Cy_SysClk_EcoGetFrequency | +( | +void | +) | ++ |
Returns the frequency of the external crystal oscillator (ECO).
+uint32_t Cy_SysClk_ExtClkGetFrequency | +( | +void | +) | ++ |
Returns the frequency of the External Clock Source (EXTCLK) from the internal storage.
+__STATIC_INLINE bool Cy_SysClk_IloIsEnabled | +( | +void | +) | ++ |
Reports the Enabled/Disabled status of the ILO.
+Disables the MFO.
-Enables the CLK_MF.
-Disables the CLK_MF.
-Some clock paths such as path 0 and path 1 have additional resources that can be utilized to provide a higher frequency clock. For example, path 0 source clock can be used as the reference clock for the FLL and path 1 source clock can be used as the reference clock for the PLL.
diff --git a/docs/pdl_api_reference_manual/html/group__group__sysclk__path__src__funcs.html b/docs/pdl_api_reference_manual/html/group__group__sysclk__path__src__funcs.html index eef9863..ca71674 100644 --- a/docs/pdl_api_reference_manual/html/group__group__sysclk__path__src__funcs.html +++ b/docs/pdl_api_reference_manual/html/group__group__sysclk__path__src__funcs.html @@ -96,6 +96,12 @@uint32_t Cy_SysClk_ClkPathMuxGetFrequency | +( | +uint32_t | +clkPath | ) | ++ |
Returns the output frequency of the clock path mux.
+uint32_t Cy_SysClk_ClkPathGetFrequency | +( | +uint32_t | +clkPath | ) | ++ |
Returns the output frequency of the clock path mux.
+__STATIC_INLINE bool Cy_SysClk_PiloIsEnabled | +( | +void | +) | ++ |
Reports the Enabled/Disabled status of the PILO.
+Disables the PILO.
-Reports the current PILO trim bits value.
-Disables the WCO.
-The flash and RAM allocation for each CPU is defined by the linker scripts. For dual-core devices, the physical flash and RAM memory is shared between the CPU cores. 2 KB of RAM (allocated at the end of RAM) are reserved for system use. For Single-Core devices the system reserves additional 80 bytes of RAM. Using the reserved memory area for other purposes will lead to unexpected behavior.
-ARM GCC
- The flash and RAM sections for the CPU are defined in the linker files: 'xx_yy.ld', where 'xx' is the device group, and 'yy' is the target CPU; for example, 'cy8c6xx7_cm0plus.ld' and 'cy8c6xx7_cm4_dual.ld'.
Change the flash and RAM sizes by editing the macros value in the linker files for both CPUs:
Change the value of the CY_CORTEX_M4_APPL_ADDR macro to the rom ORIGIN's value in the 'xx_cm4_dual.ld' file, where 'xx' is the device group. Do this by either:
Change the value of the 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. Do this by either:
ARM MDK
- The flash and RAM sections for the CPU are defined in the linker files: 'xx_yy.scat', where 'xx' is the device group, and 'yy' is the target CPU; for example, 'cy8c6xx7_cm0plus.scat' and 'cy8c6xx7_cm4_dual.scat'.
ARM Compiler
+ 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 example 'cy8c6xx7_cm0plus.sct' and 'cy8c6xx7_cm4_dual.sct'.
Change the flash and RAM sizes by editing the macros value in the linker files for both CPUs:
Change the value of the CY_CORTEX_M4_APPL_ADDR macro to the FLASH_START value in the 'xx_cm4_dual.scat' file, where 'xx' is the device group. Do this by either:
Change the value of the 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. Do this by either:
IAR
- The flash and RAM sections for the CPU are defined in the linker files: 'xx_yy.icf', where 'xx' is the device group, and 'yy' is the target CPU; for example, 'cy8c6xx7_cm0plus.icf' and 'cy8c6xx7_cm4_dual.icf'.
Change the flash and RAM sizes by editing the macros value in the linker files for both CPUs:
Change the value of the CY_CORTEX_M4_APPL_ADDR macro to the ICFEDIT_region_IROM1_start value in the 'xx_cm4_dual.icf' file, where 'xx' is the device group. Do this by either:
Change the value of the 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 'xx_cm0plus.icf'. Do this by either:
By default, the stack size is set to 0x00001000 and the heap size is set to 0x00000400.
+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.
The CM0+ project and linker script build the CM0+ application image. Similarly, the CM4 linker script builds the CM4 application image. Each specifies locations, sizes, and contents of sections in memory. See Device Memory Definition for the symbols and default values.
-The cymcuelftool is invoked by a post-build command. The precise project setting is IDE-specific.
-The cymcuelftool combines the two executables. The tool examines the executables to ensure that memory regions either do not overlap, or contain identical bytes (shared). If there are no problems, it creates a new ELF file with the merged image, without changing any of the addresses or data.
The default interrupt handler functions are defined as weak functions to a dummy handler in the startup file. The naming convention for the interrupt handler names is <interrupt_name>_IRQHandler. A default interrupt handler can be overwritten in user code by defining the handler function using the same name. For example:
To:
Size:
The vector table address (and the vector table itself) are defined in the assembler startup files (e.g. startup_psoc6_01_cm0plus.S and startup_psoc6_01_cm4.S). The code in these files copies the vector table from Flash to RAM.
The linker script file is 'xx_yy.scat', where 'xx' is the device family, and 'yy' is the target CPU; for example, cy8c6xx7_cm0plus.scat and cy8c6xx7_cm4_dual.scat. The linker script specifies that the vector table (RESET_RAM) shall be first in the RAM section.
+ARM Compiler
+
The linker script file is 'xx_yy.sct', where 'xx' is the device family, and 'yy' is the target CPU; for example, cy8c6xx7_cm0plus.sct and cy8c6xx7_cm4_dual.sct. The linker script specifies that the vector table (RESET_RAM) shall be first in the RAM section.
RESET_RAM represents the vector table. It is defined in the assembler startup files (e.g. startup_psoc6_01_cm0plus.s and startup_psoc6_01_cm4.s). The code in these files copies the vector table from Flash to RAM.
The linker script file is 'xx_yy.icf', where 'xx' is the device family, and 'yy' is the target CPU; for example, cy8c6xx7_cm0plus.icf and cy8c6xx7_cm4_dual.icf. This file defines the .intvec_ram section and its location.
The vector table address (and the vector table itself) are defined in the assembler startup files (e.g. startup_psoc6_01_cm0plus.s and startup_psoc6_01_cm4.s). The code in these files copies the vector table from Flash to RAM.
-Refer to the PDL User Guide for the more details.
Version | Changes | Reason for Change |
---|---|---|
2.70.1 | Updated documentation for the better description of the existing startup implementation. | User experience enhancement. |
2.70 | Updated SystemCoreClockUpdate() implementation - The SysClk API is reused. | Code optimization. |
Updated SystemInit() implementation - The IPC7 structure is initialized for both cores. | Provided support for SysPM driver updates. | |
►SysInt (System Interrupt) | The SysInt driver provides an API to configure the device peripheral interrupts |
+Data Fields | |
+uint32_t | regionAddress |
This specifies the address where a region starts. | |
+uint32_t | sectorsCount |
This specifies the number of sectors in the region. | |
+uint32_t | eraseCmd |
This specifies the region specific erase instruction. | |
+uint32_t | eraseSize |
This specifies the size of one sector. | |
+uint32_t | eraseTime |
Max time for sector erase type 1 cycle time in ms. | |
Version | Changes | Reason of Change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.40 | +*A new API function \ref Cy_BLE_EcoIsEnabled() is added. | +*API enhancement. | +*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3.30 | *Updated the \ref Cy_BLE_EcoConfigure() to reuse the \ref Cy_SysClk_ClkPeriGetFrequency(). | *API enhancement. | @@ -127,7 +132,7 @@ extern "C" { #define CY_BLE_CLK_DRV_VERSION_MAJOR (3) /** Driver minor version */ -#define CY_BLE_CLK_DRV_VERSION_MINOR (20) +#define CY_BLE_CLK_DRV_VERSION_MINOR (40) /** Driver ID */ #define CY_BLE_CLK_ID (0x05UL << 18U) @@ -272,10 +277,28 @@ typedef struct * \{ */ cy_en_ble_eco_status_t Cy_BLE_EcoConfigure(cy_en_ble_eco_freq_t freq, - cy_en_ble_eco_sys_clk_div_t sysClkDiv, - uint32_t cLoad, uint32_t xtalStartUpTime, - cy_en_ble_eco_voltage_reg_t voltageReg); + cy_en_ble_eco_sys_clk_div_t sysClkDiv, + uint32_t cLoad, + uint32_t xtalStartUpTime, + cy_en_ble_eco_voltage_reg_t voltageReg); void Cy_BLE_EcoReset(void); +__STATIC_INLINE bool Cy_BLE_EcoIsEnabled(void); + + +/******************************************************************************* +* Function Name: Cy_BLE_EcoIsEnabled +****************************************************************************//** +* +* Reports the Enabled/Disabled BLE ECO status. +* +* \return Boolean status of BLE ECO: true - Enabled, false - Disabled. +* +*******************************************************************************/ +__STATIC_INLINE bool Cy_BLE_EcoIsEnabled(void) +{ + return (((BLE_BLESS_MT_CFG & BLE_BLESS_MT_CFG_ENABLE_BLERD_Msk) != 0u) && + ((BLE_BLESS_MT_STATUS & BLE_BLESS_MT_STATUS_BLESS_STATE_Msk) != 0u)); +} /** \} */ /** \cond INTERNAL */ diff --git a/drivers/include/cy_canfd.h b/drivers/include/cy_canfd.h index 09dd411..d551291 100644 --- a/drivers/include/cy_canfd.h +++ b/drivers/include/cy_canfd.h @@ -1,13 +1,13 @@ /***************************************************************************//** * \file cy_canfd.h -* \version 1.0.1 +* \version 1.10 * * This file provides constants and parameter values for * the CAN FD driver. * ******************************************************************************** * \copyright -* Copyright 2019 Cypress Semiconductor Corporation +* Copyright 2019-2020 Cypress Semiconductor Corporation * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -217,6 +217,11 @@ *
Version | Changes | Reason for Change | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1.10 | +*Updated of the \ref Cy_CANFD_Init() functions | +*Allow initing CANFD with 0 number of SID/XID filters | +*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.0.1 | *Updated description of the \ref Cy_CANFD_Init() and \ref Cy_CANFD_DeInit() functions | *Documentation update and clarification | @@ -266,7 +271,7 @@ extern "C" { #define CY_CANFD_DRV_VERSION_MAJOR 1U /** Driver minor version */ -#define CY_CANFD_DRV_VERSION_MINOR 0U +#define CY_CANFD_DRV_VERSION_MINOR 10U /** CAN FD driver ID */ #define CY_CANFD_ID CY_PDL_DRV_ID (0x45U) diff --git a/drivers/include/cy_device.h b/drivers/include/cy_device.h index 1f2060b..d438e51 100644 --- a/drivers/include/cy_device.h +++ b/drivers/include/cy_device.h @@ -7,7 +7,7 @@ * ******************************************************************************** * \copyright -* Copyright 2018-2019 Cypress Semiconductor Corporation +* Copyright 2018-2020 Cypress Semiconductor Corporation * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -200,6 +200,7 @@ typedef struct extern const cy_stc_device_t cy_deviceIpBlockCfgPSoC6_01; extern const cy_stc_device_t cy_deviceIpBlockCfgPSoC6_02; extern const cy_stc_device_t cy_deviceIpBlockCfgPSoC6_03; +extern const cy_stc_device_t cy_deviceIpBlockCfgPSoC6_04; extern const cy_stc_device_t * cy_device; @@ -1084,26 +1085,26 @@ void Cy_PDL_Init(const cy_stc_device_t * device); * BLE *******************************************************************************/ -#define BLE_RCB_INTR (((BLE_V1_Type *) BLE)->RCB.INTR) -#define BLE_RCB_TX_FIFO_WR (((BLE_V1_Type *) BLE)->RCB.TX_FIFO_WR) -#define BLE_RCB_RX_FIFO_RD (((BLE_V1_Type *) BLE)->RCB.RX_FIFO_RD) -#define BLE_RCB_CTRL (((BLE_V1_Type *) BLE)->RCB.CTRL) -#define BLE_RCB_RCBLL_CTRL (((BLE_V1_Type *) BLE)->RCB.RCBLL.CTRL) -#define BLE_BLESS_XTAL_CLK_DIV_CONFIG (((BLE_V1_Type *) BLE)->BLESS.XTAL_CLK_DIV_CONFIG) -#define BLE_BLESS_MT_CFG (((BLE_V1_Type *) BLE)->BLESS.MT_CFG) -#define BLE_BLESS_MT_STATUS (((BLE_V1_Type *) BLE)->BLESS.MT_STATUS) -#define BLE_BLESS_MT_DELAY_CFG (((BLE_V1_Type *) BLE)->BLESS.MT_DELAY_CFG) -#define BLE_BLESS_MT_DELAY_CFG2 (((BLE_V1_Type *) BLE)->BLESS.MT_DELAY_CFG2) -#define BLE_BLESS_MT_DELAY_CFG3 (((BLE_V1_Type *) BLE)->BLESS.MT_DELAY_CFG3) -#define BLE_BLESS_MT_VIO_CTRL (((BLE_V1_Type *) BLE)->BLESS.MT_VIO_CTRL) -#define BLE_BLESS_LL_CLK_EN (((BLE_V1_Type *) BLE)->BLESS.LL_CLK_EN) -#define BLE_BLESS_MISC_EN_CTRL (((BLE_V1_Type *) BLE)->BLESS.MISC_EN_CTRL) -#define BLE_BLESS_INTR_STAT (((BLE_V1_Type *) BLE)->BLESS.INTR_STAT) -#define BLE_BLELL_EVENT_INTR (((BLE_V1_Type *) BLE)->BLELL.EVENT_INTR) -#define BLE_BLELL_CONN_INTR (((BLE_V1_Type *) BLE)->BLELL.CONN_INTR) -#define BLE_BLELL_CONN_EXT_INTR (((BLE_V1_Type *) BLE)->BLELL.CONN_EXT_INTR) -#define BLE_BLELL_SCAN_INTR (((BLE_V1_Type *) BLE)->BLELL.SCAN_INTR) -#define BLE_BLELL_ADV_INTR (((BLE_V1_Type *) BLE)->BLELL.ADV_INTR) +#define BLE_RCB_INTR (((BLE_V1_Type *) BLE_BASE)->RCB.INTR) +#define BLE_RCB_TX_FIFO_WR (((BLE_V1_Type *) BLE_BASE)->RCB.TX_FIFO_WR) +#define BLE_RCB_RX_FIFO_RD (((BLE_V1_Type *) BLE_BASE)->RCB.RX_FIFO_RD) +#define BLE_RCB_CTRL (((BLE_V1_Type *) BLE_BASE)->RCB.CTRL) +#define BLE_RCB_RCBLL_CTRL (((BLE_V1_Type *) BLE_BASE)->RCB.RCBLL.CTRL) +#define BLE_BLESS_XTAL_CLK_DIV_CONFIG (((BLE_V1_Type *) BLE_BASE)->BLESS.XTAL_CLK_DIV_CONFIG) +#define BLE_BLESS_MT_CFG (((BLE_V1_Type *) BLE_BASE)->BLESS.MT_CFG) +#define BLE_BLESS_MT_STATUS (((BLE_V1_Type *) BLE_BASE)->BLESS.MT_STATUS) +#define BLE_BLESS_MT_DELAY_CFG (((BLE_V1_Type *) BLE_BASE)->BLESS.MT_DELAY_CFG) +#define BLE_BLESS_MT_DELAY_CFG2 (((BLE_V1_Type *) BLE_BASE)->BLESS.MT_DELAY_CFG2) +#define BLE_BLESS_MT_DELAY_CFG3 (((BLE_V1_Type *) BLE_BASE)->BLESS.MT_DELAY_CFG3) +#define BLE_BLESS_MT_VIO_CTRL (((BLE_V1_Type *) BLE_BASE)->BLESS.MT_VIO_CTRL) +#define BLE_BLESS_LL_CLK_EN (((BLE_V1_Type *) BLE_BASE)->BLESS.LL_CLK_EN) +#define BLE_BLESS_MISC_EN_CTRL (((BLE_V1_Type *) BLE_BASE)->BLESS.MISC_EN_CTRL) +#define BLE_BLESS_INTR_STAT (((BLE_V1_Type *) BLE_BASE)->BLESS.INTR_STAT) +#define BLE_BLELL_EVENT_INTR (((BLE_V1_Type *) BLE_BASE)->BLELL.EVENT_INTR) +#define BLE_BLELL_CONN_INTR (((BLE_V1_Type *) BLE_BASE)->BLELL.CONN_INTR) +#define BLE_BLELL_CONN_EXT_INTR (((BLE_V1_Type *) BLE_BASE)->BLELL.CONN_EXT_INTR) +#define BLE_BLELL_SCAN_INTR (((BLE_V1_Type *) BLE_BASE)->BLELL.SCAN_INTR) +#define BLE_BLELL_ADV_INTR (((BLE_V1_Type *) BLE_BASE)->BLELL.ADV_INTR) /******************************************************************************* diff --git a/drivers/include/cy_efuse.h b/drivers/include/cy_efuse.h index cb14d9c..caa6a62 100644 --- a/drivers/include/cy_efuse.h +++ b/drivers/include/cy_efuse.h @@ -1,6 +1,6 @@ /***************************************************************************//** * \file cy_efuse.h -* \version 1.10.1 +* \version 1.10.2 * * Provides the API declarations of the eFuse driver. * @@ -85,6 +85,11 @@ *
Version | Changes | Reason for Change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1.10.2 | +*Fix driver header path. | +*Folder structure changed. | +*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.10.1 | *Added header guard CY_IP_MXEFUSE. | *To enable the PDL compilation with wounded out IP blocks. | diff --git a/drivers/include/cy_flash.h b/drivers/include/cy_flash.h index f39679c..582734b 100644 --- a/drivers/include/cy_flash.h +++ b/drivers/include/cy_flash.h @@ -1,12 +1,12 @@ /***************************************************************************//** * \file cy_flash.h -* \version 3.30.3 +* \version 3.30.4 * * Provides the API declarations of the Flash driver. * ******************************************************************************** * \copyright -* Copyright 2016-2019 Cypress Semiconductor Corporation +* Copyright 2016-2020 Cypress Semiconductor Corporation * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -42,8 +42,8 @@ * or modify the SROM code. The driver API requests the system call by acquiring * the Inter-processor communication (IPC) and writing the SROM function opcode * and parameters to its input registers. As a result, an NMI interrupt is invoked -* and the requested SROM API is executed. The operation status is returned to the -* driver context and a release interrupt is triggered. +* and the requested SROM function is executed. The operation status is returned +* to the driver context and a release interrupt is triggered. * * Writing to flash can take up to 20 milliseconds. During this time, * the device should not be reset (including XRES pin, software reset, and @@ -55,7 +55,7 @@ * in the same or neighboring (neighboring restriction is applicable just for the * CY8C6xx6, CY8C6xx7 devices) flash sector where the flash Write, Erase, or * Program operation is working. This violation may cause a HardFault exception. -* To avoid the Read while Write violation, the user must carefully split the +* To avoid the Read while Write violation, carefully split the * Read and Write operation on flash sectors which are not neighboring, * considering both cores in the multi-processor device. If the flash is divided * into four equal sectors, you may edit the linker script to place the code @@ -66,18 +66,18 @@ * * \subsection group_flash_config_intro Introduction: * The PSoC 6 MCU user-programmable Flash consists of: -* - User Flash sectors (from 4 to 8) - 256KB each. -* - EEPROM emulation sector - 32KB. +* - Application flash memory (from 2 to 8 sectors) - 128KB/256KB each. +* - EE emulation flash memory - 32KB. * -* Write operations are performed on a per-sector basis and may be done as -* Blocking or Partially Blocking, defined as follows: +* Write operation may be done as Blocking or Partially Blocking, +* defined as follows: * * \subsection group_flash_config_blocking Blocking: * In this case, the entire Flash block is not available for the duration of the * Write (∼16ms). Therefore, no Flash accesses (from any Bus Master) can * occur during that time. CPU execution can be performed from SRAM. All -* pre-fetching must be disabled. Application code execution from Flash is -* blocked for the Flash Write duration for both cores. +* pre-fetching must be disabled. Code execution from Flash is blocked for the +* Flash Write duration for both cores. * * \subsection group_flash_config_block_const Constraints for Blocking Flash operations: * -# During write to flash, the device should not be reset (including XRES pin, @@ -85,16 +85,16 @@ * of the flash. * -# The low-voltage detect circuits should be configured to generate an * interrupt instead of a reset. -* -# Flash write operation is allowed only in one of the following CM4 states: +* -# Flash rite operation is allowed only in one of the following CM4 states: * -# CM4 is Active and initialized:
Version | Changes | Reason for Change | |||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3.30.4 | +*Improved documentation. | +*User experience enhancement. | +*|||||||||||||||||||||||||||||||||||||||||||||||||||||
3.30.3 | *Updated documentation to limit devices with the restrictions. Improved calculation of the CY_FLASH_DELAY_CORRECTIVE macro. | *User experience enhancement. | diff --git a/drivers/include/cy_prot.h b/drivers/include/cy_prot.h index c51985c..b4ba383 100644 --- a/drivers/include/cy_prot.h +++ b/drivers/include/cy_prot.h @@ -1,13 +1,13 @@ /***************************************************************************//** * \file cy_prot.h -* \version 1.30.1 +* \version 1.30.2 * * \brief * Provides an API declaration of the Protection Unit driver * ******************************************************************************** * \copyright -* Copyright 2016-2019 Cypress Semiconductor Corporation +* Copyright 2016-2020 Cypress Semiconductor Corporation * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -390,6 +390,12 @@ *
Version | Changes | Reason for Change | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1.30.2 | +*Clarified the description of the next API functions: \ref Cy_Prot_ConfigPpuProgMasterAtt,\n +* \ref Cy_Prot_ConfigPpuProgSlaveAtt, \ref Cy_Prot_ConfigPpuFixedMasterAtt, \ref Cy_Prot_ConfigPpuFixedSlaveAtt. | +*API enhancement based on usability feedback. | +*||||||||||||||||||||||||||||||||||||||||||||
1.30.1 | *Snippet updated. | *Old snippet outdated. | diff --git a/drivers/include/cy_rtc.h b/drivers/include/cy_rtc.h index 36cac15..f8b90ae 100644 --- a/drivers/include/cy_rtc.h +++ b/drivers/include/cy_rtc.h @@ -1,13 +1,13 @@ /***************************************************************************//** * \file cy_rtc.h -* \version 2.20.1 +* \version 2.30 * * This file provides constants and parameter values for the APIs for the * Real-Time Clock (RTC). * ******************************************************************************** * \copyright -* Copyright 2016-2019 Cypress Semiconductor Corporation +* Copyright 2016-2020 Cypress Semiconductor Corporation * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -228,6 +228,18 @@ *
Version | Changes | Reason for Change | |||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2.30 | +*+* * Corrected the Cy_RTC_GetDstStatus() and Cy_RTC_SetNextDstTime() +* documentation. +* * Fixed the Cy_RTC_GetDstStatus() behaviour in the 'an hour before/after the DST stop event' period. +* | +*+* * Collateral Review: user experience enhancement. +* * Bug fix. +* | +*|||||||||||||||||||||||||||||||||||
2.20.1 | *Modified header guard CY_IP_MXS40SRSS_RTC. | *To enable the PDL compilation with wounded out IP blocks. | @@ -326,7 +338,7 @@ extern "C" { #define CY_RTC_DRV_VERSION_MAJOR 2 /** Driver minor version */ -#define CY_RTC_DRV_VERSION_MINOR 20 +#define CY_RTC_DRV_VERSION_MINOR 30 /** \} group_rtc_macros */ /******************************************************************************* @@ -548,8 +560,6 @@ cy_en_rtc_status_t Cy_RTC_SetAlarmDateAndTimeDirect(uint32_t sec, uint32_t min, * \{ */ cy_en_rtc_status_t Cy_RTC_EnableDstTime(cy_stc_rtc_dst_t const *dstTime, cy_stc_rtc_config_t const *timeDate); -cy_en_rtc_status_t Cy_RTC_SetNextDstTime(cy_stc_rtc_dst_format_t const *nextDst); -bool Cy_RTC_GetDstStatus(cy_stc_rtc_dst_t const *dstTime, cy_stc_rtc_config_t const *timeDate); /** \} group_rtc_dst_functions */ /** @@ -594,6 +604,9 @@ __STATIC_INLINE bool Cy_RTC_IsExternalResetOccurred(void); __STATIC_INLINE void Cy_RTC_SyncToRtcAhbDateAndTime(uint32_t timeBcd, uint32_t dateBcd); __STATIC_INLINE void Cy_RTC_SyncToRtcAhbAlarm(uint32_t alarmTimeBcd, uint32_t alarmDateBcd, cy_en_rtc_alarm_t alarmIndex); + +cy_en_rtc_status_t Cy_RTC_SetNextDstTime(cy_stc_rtc_dst_format_t const *nextDst); +bool Cy_RTC_GetDstStatus(cy_stc_rtc_dst_t const *dstTime, cy_stc_rtc_config_t const *timeDate); /** \} group_rtc_low_level_functions */ /** \} group_rtc_functions */ diff --git a/drivers/include/cy_smif.h b/drivers/include/cy_smif.h index c109bac..606d820 100644 --- a/drivers/include/cy_smif.h +++ b/drivers/include/cy_smif.h @@ -1,6 +1,6 @@ /***************************************************************************//** * \file cy_smif.h -* \version 1.40.1 +* \version 1.50 * * Provides an API declaration of the Cypress SMIF driver. * @@ -214,6 +214,15 @@ *
Version | Changes | Reason for Change | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1.50 | +*Added a new function: \ref Cy_SMIF_MemLocateHybridRegion.\n +* Added a new structure \ref cy_stc_smif_hybrid_region_info_t.\n +* Updated the \ref Cy_SMIF_MemEraseSector and \ref Cy_SMIF_MemCmdSectorErase functions.\n +* Updated the \ref Cy_SMIF_MemSfdpDetect function. \n +* Updated the \ref cy_stc_smif_mem_device_cfg_t structure. | +*Support for memories with hybrid regions. | +*||||||||||||||||||||||||||
1.40.1 | *The \ref Cy_SMIF_MemInit is changed. | *Corrected a false assertion during initialization in SFDP mode. | @@ -450,7 +459,7 @@ extern "C" { #define CY_SMIF_DRV_VERSION_MAJOR 1 /** The driver minor version */ -#define CY_SMIF_DRV_VERSION_MINOR 40 +#define CY_SMIF_DRV_VERSION_MINOR 50 /** One microsecond timeout for Cy_SMIF_TimeoutRun() */ #define CY_SMIF_WAIT_1_UNIT (1U) @@ -679,6 +688,8 @@ typedef enum CY_SMIF_NO_QE_BIT = CY_SMIF_ID |CY_PDL_STATUS_ERROR | 0x03U, CY_SMIF_BAD_PARAM = CY_SMIF_ID |CY_PDL_STATUS_ERROR | 0x04U, /**< The SMIF API received the wrong parameter */ CY_SMIF_NO_SFDP_SUPPORT = CY_SMIF_ID |CY_PDL_STATUS_ERROR | 0x05U, /**< The external memory does not support SFDP (JESD216B). */ + CY_SMIF_NOT_HYBRID_MEM = CY_SMIF_ID |CY_PDL_STATUS_ERROR | 0x06U, /**< The external memory is not hybrid */ + CY_SMIF_SFDP_CORRUPTED_TABLE = CY_SMIF_ID |CY_PDL_STATUS_ERROR | 0x07U, /**< The SFDP table is corrupted */ /** Failed to initialize the slave select 0 external memory by auto detection (SFDP). */ CY_SMIF_SFDP_SS0_FAILED = CY_SMIF_ID |CY_PDL_STATUS_ERROR | ((uint32_t)CY_SMIF_SFDP_FAIL << CY_SMIF_SFDP_FAIL_SS0_POS), diff --git a/drivers/include/cy_smif_memslot.h b/drivers/include/cy_smif_memslot.h index b4f1d27..69341a2 100644 --- a/drivers/include/cy_smif_memslot.h +++ b/drivers/include/cy_smif_memslot.h @@ -1,6 +1,6 @@ /***************************************************************************//** * \file cy_smif_memslot.h -* \version 1.40.1 +* \version 1.50 * * \brief * This file provides the constants and parameter values for the memory-level @@ -201,11 +201,24 @@ extern "C" { #define CY_SMIF_SFDP_BFPT_BYTE_23 (0x23U) /**< The byte 0x23 of the JEDEC Basic Flash Parameter Table */ #define CY_SMIF_SFDP_BFPT_BYTE_28 (0x28U) /**< The byte 0x28 of the JEDEC Basic Flash Parameter Table */ #define CY_SMIF_SFDP_BFPT_BYTE_3A (0x3AU) /**< The byte 0x3A of the JEDEC Basic Flash Parameter Table */ +#define CY_SMIF_SFDP_BFPT_BYTE_3C (0x3CU) /**< The byte 0x3C of the JEDEC Basic Flash Parameter Table */ #define CY_SMIF_SFDP_BFPT_ERASE_BYTE (36U) /**< The byte 36 of the JEDEC Basic Flash Parameter Table */ #define CY_SMIF_JEDEC_BFPT_10TH_DWORD (9U) /**< Offset to JEDEC Basic Flash Parameter Table: 10th DWORD */ #define CY_SMIF_JEDEC_BFPT_11TH_DWORD (10U) /**< Offset to JEDEC Basic Flash Parameter Table: 11th DWORD */ + +#define CY_SMIF_SFDP_SECTOR_MAP_CMD_OFFSET (1UL) /**< The offset for the detection command instruction in the Sector Map command descriptor */ +#define CY_SMIF_SFDP_SECTOR_MAP_ADDR_CODE_OFFSET (2UL) /**< The offset for the detection command address length in the Sector Map command descriptor */ +#define CY_SMIF_SFDP_SECTOR_MAP_REG_MSK_OFFSET (3UL) /**< The offset for the read data mask in the Sector Map command descriptor */ +#define CY_SMIF_SFDP_SECTOR_MAP_REG_ADDR_OFFSET (4UL) /**< The offset for the detection command address in the Sector Map command descriptor */ +#define CY_SMIF_SFDP_SECTOR_MAP_REGION_COUNT_OFFSET (2UL) /**< The offset for the regions count in the Sector Map descriptor */ +#define CY_SMIF_SFDP_SECTOR_MAP_CONFIG_ID_OFFSET (2UL) /**< The offset for the configuration ID in the Sector Map descriptor */ +#define CY_SMIF_SFDP_SECTOR_MAP_SUPPORTED_ET_MASK (0xFU) /**< The mask for the supported erase type code in the Sector Map descriptor */ +#define CY_SMIF_SFDP_SECTOR_MAP_ADDR_BYTES_Msk (0xC0UL) /**< The mask for the configuration detection command address bytes in the Sector Map descriptor */ +#define CY_SMIF_SFDP_SECTOR_MAP_ADDR_BYTES_Pos (6UL) /**< The position of the configuration detection command address bytes in the Sector Map descriptor */ + + /* ---------------------------- 1st DWORD ---------------------------- */ #define CY_SMIF_SFDP_FAST_READ_1_1_4_Pos (6UL) /**< The SFDP 1-1-4 fast read support (Bit 6) */ #define CY_SMIF_SFDP_FAST_READ_1_1_4_Msk (0x40UL) /**< The SFDP 1-1-4 fast read support (Bitfield-Mask: 0x01) */ @@ -268,6 +281,14 @@ extern "C" { #define CY_SMIF_SFDP_QE_REQUIREMENTS_Pos (4UL) /**< The SFDP quad enable requirements field (Bit 4) */ #define CY_SMIF_SFDP_QE_REQUIREMENTS_Msk (0x70UL) /**< The SFDP quad enable requirements field (Bitfield-Mask: 0x07) */ + +/* ---------------------------- 16th DWORD --------------------------- */ +#define CY_SMIF_SFDP_ENTER_4_BYTE_METHOD_B7 (1U) /**< Issue 0xB7 instruction */ +#define CY_SMIF_SFDP_ENTER_4_BYTE_METHOD_WR_EN_B7 (2U) /**< Issue write enable instruction followed with 0xB7 */ +#define CY_SMIF_SFDP_ENTER_4_BYTE_METHOD_ALWAYS_4_BYTE (0x40U) /**< Memory always operates in 4-byte mode */ +#define CY_SMIF_SFDP_ENTER_4_BYTE_METHOD_B7_CMD (0xB7U) /**< The instruction required to enter 4-byte addressing mode */ + + /** \cond INTERNAL */ /******************************************************************************* * These are legacy constants and API. They are left here just @@ -327,6 +348,16 @@ typedef struct cy_en_smif_txfr_width_t dataWidth; /**< The width of the data transfer */ } cy_stc_smif_mem_cmd_t; +/** This structure specifies data used for memory with hybrid sectors */ +typedef struct +{ + uint32_t regionAddress; /**< This specifies the address where a region starts */ + uint32_t sectorsCount; /**< This specifies the number of sectors in the region */ + uint32_t eraseCmd; /**< This specifies the region specific erase instruction*/ + uint32_t eraseSize; /**< This specifies the size of one sector */ + uint32_t eraseTime; /**< Max time for sector erase type 1 cycle time in ms*/ +} cy_stc_smif_hybrid_region_info_t; + /** * @@ -337,31 +368,33 @@ typedef struct */ typedef struct { - uint32_t numOfAddrBytes; /**< This specifies the number of address bytes used by the - * memory slave device, valid values 1-4 */ - uint32_t memSize; /**< The memory size: For densities of 2 gigabits or less - the size in bytes; - * For densities 4 gigabits and above - bit-31 is set to 1b to define that - * this memory is 4 gigabits and above; and other 30:0 bits define N where - * the density is computed as 2^N bytes. - * For example, 0x80000021 corresponds to 2^30 = 1 gigabyte. - */ - cy_stc_smif_mem_cmd_t* readCmd; /**< This specifies the Read command */ - cy_stc_smif_mem_cmd_t* writeEnCmd; /**< This specifies the Write Enable command */ - cy_stc_smif_mem_cmd_t* writeDisCmd; /**< This specifies the Write Disable command */ - cy_stc_smif_mem_cmd_t* eraseCmd; /**< This specifies the Erase command */ - uint32_t eraseSize; /**< This specifies the sector size of each Erase */ - cy_stc_smif_mem_cmd_t* chipEraseCmd; /**< This specifies the Chip Erase command */ - cy_stc_smif_mem_cmd_t* programCmd; /**< This specifies the Program command */ - uint32_t programSize; /**< This specifies the page size for programming */ - cy_stc_smif_mem_cmd_t* readStsRegWipCmd; /**< This specifies the command to read the WIP-containing status register */ - cy_stc_smif_mem_cmd_t* readStsRegQeCmd; /**< This specifies the command to read the QE-containing status register */ - cy_stc_smif_mem_cmd_t* writeStsRegQeCmd; /**< This specifies the command to write into the QE-containing status register */ - cy_stc_smif_mem_cmd_t* readSfdpCmd; /**< This specifies the read SFDP command */ - uint32_t stsRegBusyMask; /**< The Busy mask for the status registers */ - uint32_t stsRegQuadEnableMask; /**< The QE mask for the status registers */ - uint32_t eraseTime; /**< Max time for erase type 1 cycle time in ms */ - uint32_t chipEraseTime; /**< Max time for chip erase cycle time in ms */ - uint32_t programTime; /**< Max time for page program cycle time in us */ + uint32_t numOfAddrBytes; /**< This specifies the number of address bytes used by the + * memory slave device, valid values 1-4 */ + uint32_t memSize; /**< The memory size: For densities of 2 gigabits or less - the size in bytes; + * For densities 4 gigabits and above - bit-31 is set to 1b to define that + * this memory is 4 gigabits and above; and other 30:0 bits define N where + * the density is computed as 2^N bytes. + * For example, 0x80000021 corresponds to 2^30 = 1 gigabyte. + */ + cy_stc_smif_mem_cmd_t* readCmd; /**< This specifies the Read command */ + cy_stc_smif_mem_cmd_t* writeEnCmd; /**< This specifies the Write Enable command */ + cy_stc_smif_mem_cmd_t* writeDisCmd; /**< This specifies the Write Disable command */ + cy_stc_smif_mem_cmd_t* eraseCmd; /**< This specifies the Erase command */ + uint32_t eraseSize; /**< This specifies the sector size of each Erase */ + cy_stc_smif_mem_cmd_t* chipEraseCmd; /**< This specifies the Chip Erase command */ + cy_stc_smif_mem_cmd_t* programCmd; /**< This specifies the Program command */ + uint32_t programSize; /**< This specifies the page size for programming */ + cy_stc_smif_mem_cmd_t* readStsRegWipCmd; /**< This specifies the command to read the WIP-containing status register */ + cy_stc_smif_mem_cmd_t* readStsRegQeCmd; /**< This specifies the command to read the QE-containing status register */ + cy_stc_smif_mem_cmd_t* writeStsRegQeCmd; /**< This specifies the command to write into the QE-containing status register */ + cy_stc_smif_mem_cmd_t* readSfdpCmd; /**< This specifies the read SFDP command */ + uint32_t stsRegBusyMask; /**< The Busy mask for the status registers */ + uint32_t stsRegQuadEnableMask; /**< The QE mask for the status registers */ + uint32_t eraseTime; /**< Max time for erase type 1 cycle time in ms */ + uint32_t chipEraseTime; /**< Max time for chip erase cycle time in ms */ + uint32_t programTime; /**< Max time for page program cycle time in us */ + uint32_t hybridRegionCount; /**< This specifies the number of regions for memory with hybrid sectors */ + cy_stc_smif_hybrid_region_info_t** hybridRegionInfo; /**< This specifies data for memory with hybrid sectors */ } cy_stc_smif_mem_device_cfg_t; @@ -490,7 +523,8 @@ cy_en_smif_status_t Cy_SMIF_MemEraseSector(SMIF_Type *base, cy_stc_smif_mem_conf cy_stc_smif_context_t const *context); cy_en_smif_status_t Cy_SMIF_MemEraseChip(SMIF_Type *base, cy_stc_smif_mem_config_t const *memConfig, cy_stc_smif_context_t const *context); - +cy_en_smif_status_t Cy_SMIF_MemLocateHybridRegion(cy_stc_smif_mem_config_t const *memDevice, + cy_stc_smif_hybrid_region_info_t** regionInfo, uint32_t address); /** \} group_smif_mem_slot_functions */ diff --git a/drivers/include/cy_sysclk.h b/drivers/include/cy_sysclk.h index f492640..9123dbc 100644 --- a/drivers/include/cy_sysclk.h +++ b/drivers/include/cy_sysclk.h @@ -1,12 +1,12 @@ /***************************************************************************//** * \file cy_sysclk.h -* \version 1.50 +* \version 1.60 * * Provides an API declaration of the sysclk driver. * ******************************************************************************** * \copyright -* Copyright 2016-2019 Cypress Semiconductor Corporation +* Copyright 2016-2020 Cypress Semiconductor Corporation * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -43,8 +43,8 @@ * clock system. * * The PDL defines clock system capabilities in:\n -* devices\
Version | Changes | Reason for Change | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1.60 | +*Added the following functions: \ref Cy_SysClk_ExtClkGetFrequency, \ref Cy_SysClk_EcoGetFrequency,\n +* \ref Cy_SysClk_ClkPathMuxGetFrequency, \ref Cy_SysClk_ClkPathGetFrequency, \ref Cy_SysClk_IloIsEnabled.\n +* \ref Cy_SysClk_PiloIsEnabled, \ref Cy_SysClk_AltHfGetFrequency, \ref Cy_SysClk_ClkHfIsEnabled,\n +* \ref Cy_SysClk_ClkTimerIsEnabled, \ref Cy_SysClk_ClkTimerGetFrequency, \ref Cy_SysClk_ClkPumpIsEnabled and\n +* \ref Cy_SysClk_ClkPumpGetFrequency. | +*API enhancement. | +*|||||||||||||||||
1.50 | *\ref Cy_SysClk_ClkHfGetFrequency is updated to reuse the \ref cy_BleEcoClockFreqHz global system variable. | *API enhancement. | @@ -277,7 +286,7 @@ * - IMO: 8 MHz Internal Main Oscillator (Default) * - EXTCLK: External clock (signal brought in through dedicated pins) * - ECO: External Crystal Oscillator (requires external crystal on dedicated pins) -* - ALTHF: Select on-chip signals (e.g. BLE ECO) +* - ALTHF: Select on-chip signals (e.g. \ref group_ble_clk) * - Digital Signal (DSI): Digital signal from a UDB source * * Some clock paths such as path 0 and path 1 have additional resources @@ -559,6 +568,13 @@ * ![](sysclk_slow.png) * * \defgroup group_sysclk_clk_slow_funcs Functions +* \} + * \defgroup group_sysclk_alt_hf Alternative High-Frequency Clock +* \{ +* In the BLE-enabled PSoC6 devices, the \ref group_ble_clk clock is +* connected to the system Alternative High-Frequency Clock input. +* +* \defgroup group_sysclk_alt_hf_funcs Functions * \} * \defgroup group_sysclk_clk_lf Low-Frequency Clock * \{ @@ -642,7 +658,7 @@ extern "C" { /** Driver major version */ #define CY_SYSCLK_DRV_VERSION_MAJOR 1 /** Driver minor version */ -#define CY_SYSCLK_DRV_VERSION_MINOR 40 +#define CY_SYSCLK_DRV_VERSION_MINOR 60 /** Sysclk driver identifier */ #define CY_SYSCLK_ID CY_PDL_DRV_ID(0x12U) @@ -685,6 +701,7 @@ typedef enum * \{ */ void Cy_SysClk_ExtClkSetFrequency(uint32_t freq); +uint32_t Cy_SysClk_ExtClkGetFrequency(void); /** \} group_sysclk_ext_funcs */ /* ========================================================================== */ @@ -719,6 +736,7 @@ void Cy_SysClk_ExtClkSetFrequency(uint32_t freq); */ cy_en_sysclk_status_t Cy_SysClk_EcoConfigure(uint32_t freq, uint32_t cLoad, uint32_t esr, uint32_t driveLevel); cy_en_sysclk_status_t Cy_SysClk_EcoEnable(uint32_t timeoutus); +uint32_t Cy_SysClk_EcoGetFrequency(void); __STATIC_INLINE void Cy_SysClk_EcoDisable(void); __STATIC_INLINE uint32_t Cy_SysClk_EcoGetStatus(void); @@ -802,6 +820,8 @@ typedef enum */ cy_en_sysclk_status_t Cy_SysClk_ClkPathSetSource(uint32_t clkPath, cy_en_clkpath_in_sources_t source); cy_en_clkpath_in_sources_t Cy_SysClk_ClkPathGetSource(uint32_t clkPath); +uint32_t Cy_SysClk_ClkPathMuxGetFrequency(uint32_t clkPath); +uint32_t Cy_SysClk_ClkPathGetFrequency(uint32_t clkPath); /** \} group_sysclk_path_src_funcs */ @@ -1121,9 +1141,11 @@ __STATIC_INLINE cy_en_sysclk_status_t Cy_SysClk_PllDisable(uint32_t clkPath) * \{ */ __STATIC_INLINE void Cy_SysClk_IloEnable(void); +__STATIC_INLINE bool Cy_SysClk_IloIsEnabled(void); __STATIC_INLINE cy_en_sysclk_status_t Cy_SysClk_IloDisable(void); __STATIC_INLINE void Cy_SysClk_IloHibernateOn(bool on); + /******************************************************************************* * Function Name: Cy_SysClk_IloEnable ****************************************************************************//** @@ -1142,6 +1164,24 @@ __STATIC_INLINE void Cy_SysClk_IloEnable(void) } +/******************************************************************************* +* Function Name: Cy_SysClk_IloIsEnabled +****************************************************************************//** +* +* Reports the Enabled/Disabled status of the ILO. +* +* \return Boolean status of ILO: true - Enabled, false - Disabled. +* +* \funcusage +* \snippet sysclk/snippet/main.c snippet_Cy_SysClk_IloDisable +* +*******************************************************************************/ +__STATIC_INLINE bool Cy_SysClk_IloIsEnabled(void) +{ + return (_FLD2BOOL(SRSS_CLK_ILO_CONFIG_ENABLE, SRSS_CLK_ILO_CONFIG)); +} + + /******************************************************************************* * Function Name: Cy_SysClk_IloDisable ****************************************************************************//** @@ -1204,6 +1244,7 @@ __STATIC_INLINE void Cy_SysClk_IloHibernateOn(bool on) * \{ */ __STATIC_INLINE void Cy_SysClk_PiloEnable(void); +__STATIC_INLINE bool Cy_SysClk_PiloIsEnabled(void); __STATIC_INLINE void Cy_SysClk_PiloDisable(void); __STATIC_INLINE void Cy_SysClk_PiloSetTrim(uint32_t trimVal); __STATIC_INLINE uint32_t Cy_SysClk_PiloGetTrim(void); @@ -1223,7 +1264,7 @@ __STATIC_INLINE uint32_t Cy_SysClk_PiloGetTrim(void); *******************************************************************************/ __STATIC_INLINE void Cy_SysClk_PiloEnable(void) { - SRSS_CLK_PILO_CONFIG |= _VAL2FLD(SRSS_CLK_PILO_CONFIG_PILO_EN, 1U); /* 1 = enable */ + SRSS_CLK_PILO_CONFIG |= SRSS_CLK_PILO_CONFIG_PILO_EN_Msk; /* 1 = enable */ Cy_SysLib_Delay(1U/*msec*/); /* release the reset and enable clock output */ SRSS_CLK_PILO_CONFIG |= SRSS_CLK_PILO_CONFIG_PILO_RESET_N_Msk | @@ -1231,6 +1272,24 @@ __STATIC_INLINE void Cy_SysClk_PiloEnable(void) } +/******************************************************************************* +* Function Name: Cy_SysClk_PiloIsEnabled +****************************************************************************//** +* +* Reports the Enabled/Disabled status of the PILO. +* +* \return Boolean status of PILO: true - Enabled, false - Disabled. +* +* \funcusage +* \snippet sysclk/snippet/main.c snippet_Cy_SysClk_PiloDisable +* +*******************************************************************************/ +__STATIC_INLINE bool Cy_SysClk_PiloIsEnabled(void) +{ + return (_FLD2BOOL(SRSS_CLK_PILO_CONFIG_PILO_CLK_EN, SRSS_CLK_PILO_CONFIG)); +} + + /******************************************************************************* * Function Name: Cy_SysClk_PiloDisable ****************************************************************************//** @@ -1275,7 +1334,7 @@ __STATIC_INLINE void Cy_SysClk_PiloSetTrim(uint32_t trimVal) * Reports the current PILO trim bits value. * * \funcusage -* Refer to the Cy_SysClk_PiloSetTrim() function usage. +* \snippet sysclk/snippet/main.c snippet_Cy_SysClk_PiloSetTrim * *******************************************************************************/ __STATIC_INLINE uint32_t Cy_SysClk_PiloGetTrim(void) @@ -1285,6 +1344,53 @@ __STATIC_INLINE uint32_t Cy_SysClk_PiloGetTrim(void) /** \} group_sysclk_pilo_funcs */ +/* ========================================================================== */ +/* ========================== ALTHF SECTION =========================== */ +/* ========================================================================== */ +/** +* \addtogroup group_sysclk_alt_hf_funcs +* \{ +*/ +__STATIC_INLINE uint32_t Cy_SysClk_AltHfGetFrequency(void); + + +/******************************************************************************* +* Function Name: Cy_SysClk_AltHfGetFrequency +****************************************************************************//** +* +* Reports the frequency of the Alternative High-Frequency Clock +* +* \funcusage +* \snippet bleclk/snippet/main.c BLE ECO clock API: Cy_BLE_EcoConfigure() +* +*******************************************************************************/ +__STATIC_INLINE uint32_t Cy_SysClk_AltHfGetFrequency(void) +{ + #if defined(CY_IP_MXBLESS) + return (cy_BleEcoClockFreqHz); + #else /* CY_IP_MXBLESS */ + return (0UL); + #endif /* CY_IP_MXBLESS */ +} +/** \} group_sysclk_alt_hf_funcs */ + + +/* ========================================================================== */ +/* ========================== ALTLF SECTION =========================== */ +/* ========================================================================== */ +/** \cond For future usage */ +__STATIC_INLINE uint32_t Cy_SysClk_AltLfGetFrequency(void) +{ + return (0UL); +} + +__STATIC_INLINE bool Cy_SysClk_AltLfIsEnabled(void) +{ + return (false); +} +/** \endcond */ + + /* ========================================================================== */ /* ==================== CLOCK MEASUREMENT SECTION ===================== */ /* ========================================================================== */ @@ -1845,6 +1951,7 @@ typedef struct * \{ */ __STATIC_INLINE cy_en_sysclk_status_t Cy_SysClk_ClkHfEnable(uint32_t clkHf); +__STATIC_INLINE bool Cy_SysClk_ClkHfIsEnabled(uint32_t clkHf); __STATIC_INLINE cy_en_sysclk_status_t Cy_SysClk_ClkHfDisable(uint32_t clkHf); __STATIC_INLINE cy_en_sysclk_status_t Cy_SysClk_ClkHfSetSource(uint32_t clkHf, cy_en_clkhf_in_sources_t source); __STATIC_INLINE cy_en_clkhf_in_sources_t Cy_SysClk_ClkHfGetSource(uint32_t clkHf); @@ -1879,6 +1986,31 @@ __STATIC_INLINE cy_en_sysclk_status_t Cy_SysClk_ClkHfEnable(uint32_t clkHf) } +/******************************************************************************* +* Function Name: Cy_SysClk_ClkHfIsEnabled +****************************************************************************//** +* +* Reports the Enabled/Disabled status of clkHf. +* +* \param clkHf Selects which clkHf to check. +* +* \return Boolean status of clkHf: true - Enabled, false - Disabled. +* +* \funcusage +* \snippet sysclk/snippet/main.c snippet_Cy_SysClk_ClkHfDisable +* +*******************************************************************************/ +__STATIC_INLINE bool Cy_SysClk_ClkHfIsEnabled(uint32_t clkHf) +{ + bool retVal = false; + if (clkHf < CY_SRSS_NUM_HFROOT) + { + retVal = _FLD2BOOL(SRSS_CLK_ROOT_SELECT_ENABLE, SRSS_CLK_ROOT_SELECT[clkHf]); + } + return (retVal); +} + + /******************************************************************************* * Function Name: Cy_SysClk_ClkHfDisable ****************************************************************************//** @@ -2853,7 +2985,9 @@ __STATIC_INLINE cy_en_clktimer_in_sources_t Cy_SysClk_ClkTimerGetSource(void); __STATIC_INLINE void Cy_SysClk_ClkTimerSetDivider(uint8_t divider); __STATIC_INLINE uint8_t Cy_SysClk_ClkTimerGetDivider(void); __STATIC_INLINE void Cy_SysClk_ClkTimerEnable(void); +__STATIC_INLINE bool Cy_SysClk_ClkTimerIsEnabled(void); __STATIC_INLINE void Cy_SysClk_ClkTimerDisable(void); + uint32_t Cy_SysClk_ClkTimerGetFrequency(void); /******************************************************************************* * Function Name: Cy_SysClk_ClkTimerSetSource @@ -2953,6 +3087,24 @@ __STATIC_INLINE void Cy_SysClk_ClkTimerEnable(void) } +/******************************************************************************* +* Function Name: Cy_SysClk_ClkTimerIsEnabled +****************************************************************************//** +* +* Reports the Enabled/Disabled status of the Timer. +* +* \return Boolean status of Timer: true - Enabled, false - Disabled. +* +* \funcusage +* \snippet sysclk/snippet/main.c snippet_Cy_SysClk_ClkTimerDisable +* +*******************************************************************************/ +__STATIC_INLINE bool Cy_SysClk_ClkTimerIsEnabled(void) +{ + return (_FLD2BOOL(SRSS_CLK_TIMER_CTL_ENABLE, SRSS_CLK_TIMER_CTL)); +} + + /******************************************************************************* * Function Name: Cy_SysClk_ClkTimerDisable ****************************************************************************//** @@ -2984,22 +3136,22 @@ __STATIC_INLINE void Cy_SysClk_ClkTimerDisable(void) */ typedef enum { - CY_SYSCLK_PUMP_IN_CLKPATH0, /**< Pump clock input is clock path 0 */ - CY_SYSCLK_PUMP_IN_CLKPATH1, /**< Pump clock input is clock path 1 */ - CY_SYSCLK_PUMP_IN_CLKPATH2, /**< Pump clock input is clock path 2 */ - CY_SYSCLK_PUMP_IN_CLKPATH3, /**< Pump clock input is clock path 3 */ - CY_SYSCLK_PUMP_IN_CLKPATH4, /**< Pump clock input is clock path 4 */ - CY_SYSCLK_PUMP_IN_CLKPATH5, /**< Pump clock input is clock path 5 */ - CY_SYSCLK_PUMP_IN_CLKPATH6, /**< Pump clock input is clock path 6 */ - CY_SYSCLK_PUMP_IN_CLKPATH7, /**< Pump clock input is clock path 7 */ - CY_SYSCLK_PUMP_IN_CLKPATH8, /**< Pump clock input is clock path 8 */ - CY_SYSCLK_PUMP_IN_CLKPATH9, /**< Pump clock input is clock path 9 */ - CY_SYSCLK_PUMP_IN_CLKPATH10, /**< Pump clock input is clock path 10 */ - CY_SYSCLK_PUMP_IN_CLKPATH11, /**< Pump clock input is clock path 11 */ - CY_SYSCLK_PUMP_IN_CLKPATH12, /**< Pump clock input is clock path 12 */ - CY_SYSCLK_PUMP_IN_CLKPATH13, /**< Pump clock input is clock path 13 */ - CY_SYSCLK_PUMP_IN_CLKPATH14, /**< Pump clock input is clock path 14 */ - CY_SYSCLK_PUMP_IN_CLKPATH15 /**< Pump clock input is clock path 15 */ + CY_SYSCLK_PUMP_IN_CLKPATH0 = 0UL, /**< Pump clock input is clock path 0 */ + CY_SYSCLK_PUMP_IN_CLKPATH1 = 1UL, /**< Pump clock input is clock path 1 */ + CY_SYSCLK_PUMP_IN_CLKPATH2 = 2UL, /**< Pump clock input is clock path 2 */ + CY_SYSCLK_PUMP_IN_CLKPATH3 = 3UL, /**< Pump clock input is clock path 3 */ + CY_SYSCLK_PUMP_IN_CLKPATH4 = 4UL, /**< Pump clock input is clock path 4 */ + CY_SYSCLK_PUMP_IN_CLKPATH5 = 5UL, /**< Pump clock input is clock path 5 */ + CY_SYSCLK_PUMP_IN_CLKPATH6 = 6UL, /**< Pump clock input is clock path 6 */ + CY_SYSCLK_PUMP_IN_CLKPATH7 = 7UL, /**< Pump clock input is clock path 7 */ + CY_SYSCLK_PUMP_IN_CLKPATH8 = 8UL, /**< Pump clock input is clock path 8 */ + CY_SYSCLK_PUMP_IN_CLKPATH9 = 9UL, /**< Pump clock input is clock path 9 */ + CY_SYSCLK_PUMP_IN_CLKPATH10 = 10UL, /**< Pump clock input is clock path 10 */ + CY_SYSCLK_PUMP_IN_CLKPATH11 = 11UL, /**< Pump clock input is clock path 11 */ + CY_SYSCLK_PUMP_IN_CLKPATH12 = 12UL, /**< Pump clock input is clock path 12 */ + CY_SYSCLK_PUMP_IN_CLKPATH13 = 13UL, /**< Pump clock input is clock path 13 */ + CY_SYSCLK_PUMP_IN_CLKPATH14 = 14UL, /**< Pump clock input is clock path 14 */ + CY_SYSCLK_PUMP_IN_CLKPATH15 = 15UL /**< Pump clock input is clock path 15 */ } cy_en_clkpump_in_sources_t; @@ -3035,7 +3187,9 @@ __STATIC_INLINE cy_en_clkpump_in_sources_t Cy_SysClk_ClkPumpGetSource(void); __STATIC_INLINE void Cy_SysClk_ClkPumpSetDivider(cy_en_clkpump_divide_t divider); __STATIC_INLINE cy_en_clkpump_divide_t Cy_SysClk_ClkPumpGetDivider(void); __STATIC_INLINE void Cy_SysClk_ClkPumpEnable(void); +__STATIC_INLINE bool Cy_SysClk_ClkPumpIsEnabled(void); __STATIC_INLINE void Cy_SysClk_ClkPumpDisable(void); +__STATIC_INLINE uint32_t Cy_SysClk_ClkPumpGetFrequency(void); /******************************************************************************* @@ -3136,6 +3290,24 @@ __STATIC_INLINE void Cy_SysClk_ClkPumpEnable(void) } +/******************************************************************************* +* Function Name: Cy_SysClk_ClkPumpIsEnabled +****************************************************************************//** +* +* Reports the Enabled/Disabled status of the ClkPump. +* +* \return Boolean status of ClkPump: true - Enabled, false - Disabled. +* +* \funcusage +* \snippet sysclk/snippet/main.c snippet_Cy_SysClk_ClkPumpDisable +* +*******************************************************************************/ +__STATIC_INLINE bool Cy_SysClk_ClkPumpIsEnabled(void) +{ + return (_FLD2BOOL(SRSS_CLK_SELECT_PUMP_ENABLE, SRSS_CLK_SELECT)); +} + + /******************************************************************************* * Function Name: Cy_SysClk_ClkPumpDisable ****************************************************************************//** @@ -3150,6 +3322,26 @@ __STATIC_INLINE void Cy_SysClk_ClkPumpDisable(void) { SRSS_CLK_SELECT &= ~SRSS_CLK_SELECT_PUMP_ENABLE_Msk; } + + +/******************************************************************************* +* Function Name: Cy_SysClk_ClkPumpGetFrequency +****************************************************************************//** +* +* Reports the frequency of the pump clock (clk_pump). +* \note If the the pump clock is not enabled - a zero frequency is reported. +* +* \funcusage +* \snippet sysclk/snippet/main.c snippet_Cy_SysClk_ClkPumpEnable +* +*******************************************************************************/ +__STATIC_INLINE uint32_t Cy_SysClk_ClkPumpGetFrequency(void) +{ + /* Divide the input frequency down and return the result */ + return (Cy_SysClk_ClkPumpIsEnabled() ? + (Cy_SysClk_ClkPathGetFrequency((uint32_t)Cy_SysClk_ClkPumpGetSource()) / + (1UL << (uint32_t)Cy_SysClk_ClkPumpGetDivider())) : 0UL); +} /** \} group_sysclk_clk_pump_funcs */ diff --git a/drivers/include/cy_syslib.h b/drivers/include/cy_syslib.h index 0d77778..2cc5353 100644 --- a/drivers/include/cy_syslib.h +++ b/drivers/include/cy_syslib.h @@ -1,12 +1,12 @@ /***************************************************************************//** * \file cy_syslib.h -* \version 2.50 +* \version 2.50.1 * * Provides an API declaration of the SysLib driver. * ******************************************************************************** * \copyright -* Copyright 2016-2019 Cypress Semiconductor Corporation +* Copyright 2016-2020 Cypress Semiconductor Corporation * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -139,6 +139,11 @@ *
Version | Changes | Reason for Change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
2.50.1 | +*Used the core library defines for the message codes forming. +* | Improve PDL code base. | +*||||||||
2.50 | *Moved following macros to the core library:
* CY_LO8,CY_HI8,CY_LO16,CY_HI16,CY_SWAP_ENDIAN16,CY_SWAP_ENDIAN32,
@@ -250,6 +255,7 @@
#include
|