diff options
-rw-r--r-- | platform/ext/psoc64.cmake | 6 | ||||
-rw-r--r-- | platform/ext/target/cypress/psoc64/plat_test.c | 92 |
2 files changed, 98 insertions, 0 deletions
diff --git a/platform/ext/psoc64.cmake b/platform/ext/psoc64.cmake index 0ea469464e..b99933238e 100644 --- a/platform/ext/psoc64.cmake +++ b/platform/ext/psoc64.cmake @@ -185,6 +185,12 @@ elseif(BUILD_TARGET_CFG) embedded_include_directories(PATH "${PLATFORM_DIR}/common" ABSOLUTE) endif() +if (NOT DEFINED BUILD_PLAT_TEST) + message(FATAL_ERROR "Configuration variable BUILD_PLAT_TEST (true|false) is undefined!") +elseif(BUILD_PLAT_TEST) + list(APPEND ALL_SRC_C "${PLATFORM_DIR}/target/cypress/psoc64/plat_test.c") +endif() + if (NOT DEFINED BUILD_TARGET_HARDWARE_KEYS) message(FATAL_ERROR "Configuration variable BUILD_TARGET_HARDWARE_KEYS (true|false) is undefined!") elseif(BUILD_TARGET_HARDWARE_KEYS) diff --git a/platform/ext/target/cypress/psoc64/plat_test.c b/platform/ext/target/cypress/psoc64/plat_test.c new file mode 100644 index 0000000000..868206a121 --- /dev/null +++ b/platform/ext/target/cypress/psoc64/plat_test.c @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2019, Arm Limited. All rights reserved. + * Copyright (c) 2019-2020, Cypress Semiconductor Corporation. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#include <stdbool.h> +#include <stdint.h> +#include "cy_tcpwm_counter.h" +#include "device_definition.h" +#include "tfm_plat_defs.h" +#include "tfm_plat_test.h" + +void tfm_plat_test_secure_timer_start(void) +{ + cy_en_tcpwm_status_t rc; + + if (!CY_TCPWM0_TIMER0_DEV_S.is_initialized) { + Cy_TCPWM_Counter_Disable( + CY_TCPWM0_TIMER0_DEV_S.tcpwm_base, + CY_TCPWM0_TIMER0_DEV_S.tcpwm_counter_num + ); + + CY_TCPWM0_TIMER0_DEV_S.tcpwm_config->period = TIMER0_MATCH; + CY_TCPWM0_TIMER0_DEV_S.tcpwm_config->compare0 = TIMER0_MATCH; + rc = Cy_TCPWM_Counter_Init(CY_TCPWM0_TIMER0_DEV_S.tcpwm_base, + CY_TCPWM0_TIMER0_DEV_S.tcpwm_counter_num, + CY_TCPWM0_TIMER0_DEV_S.tcpwm_config); + if (rc == CY_TCPWM_SUCCESS) { + CY_TCPWM0_TIMER0_DEV_S.is_initialized = true; + } else { + return; + } + } + Cy_TCPWM_Counter_Enable( + CY_TCPWM0_TIMER0_DEV_S.tcpwm_base, + CY_TCPWM0_TIMER0_DEV_S.tcpwm_counter_num + ); + Cy_TCPWM_TriggerStart( + CY_TCPWM0_TIMER0_DEV_S.tcpwm_base, + (1UL << CY_TCPWM0_TIMER0_DEV_S.tcpwm_counter_num) + ); +} + +void tfm_plat_test_secure_timer_stop(void) +{ + Cy_TCPWM_Counter_Disable( + CY_TCPWM0_TIMER0_DEV_S.tcpwm_base, + CY_TCPWM0_TIMER0_DEV_S.tcpwm_counter_num + ); +} + +void tfm_plat_test_non_secure_timer_start(void) +{ + cy_en_tcpwm_status_t rc; + + if (!CY_TCPWM0_TIMER1_DEV_NS.is_initialized) { + Cy_TCPWM_Counter_Disable( + CY_TCPWM0_TIMER1_DEV_NS.tcpwm_base, + CY_TCPWM0_TIMER1_DEV_NS.tcpwm_counter_num + ); + + CY_TCPWM0_TIMER1_DEV_NS.tcpwm_config->period = TIMER1_MATCH; + CY_TCPWM0_TIMER1_DEV_NS.tcpwm_config->compare0 = TIMER1_MATCH; + rc = Cy_TCPWM_Counter_Init(CY_TCPWM0_TIMER1_DEV_NS.tcpwm_base, + CY_TCPWM0_TIMER1_DEV_NS.tcpwm_counter_num, + CY_TCPWM0_TIMER1_DEV_NS.tcpwm_config); + if (rc == CY_TCPWM_SUCCESS) { + CY_TCPWM0_TIMER1_DEV_NS.is_initialized = true; + } else { + return; + } + } + Cy_TCPWM_Counter_Enable( + CY_TCPWM0_TIMER1_DEV_NS.tcpwm_base, + CY_TCPWM0_TIMER1_DEV_NS.tcpwm_counter_num + ); + Cy_TCPWM_TriggerStart( + CY_TCPWM0_TIMER1_DEV_NS.tcpwm_base, + (1UL << CY_TCPWM0_TIMER1_DEV_NS.tcpwm_counter_num) + ); +} + +void tfm_plat_test_non_secure_timer_stop(void) +{ + Cy_TCPWM_Counter_Disable( + CY_TCPWM0_TIMER1_DEV_NS.tcpwm_base, + CY_TCPWM0_TIMER1_DEV_NS.tcpwm_counter_num + ); +} |