Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions targets/TARGET_Cypress/TARGET_PSOC6/cy_mbed_post_init.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* mbed Microcontroller Library
* Copyright (c) 2019, Arm Limited and affiliates.
* 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.
*/

#ifndef CY_MBED_POST_INIT_H
#define CY_MBED_POST_INIT_H

#include "mbed_toolchain.h"

#ifdef __cplusplus
extern "C" {
#endif

/*******************************************************************************
* Function Name: cy_mbed_post_bsp_init_hook
****************************************************************************//**
*
* Function that is called immediately after cybsp_init finishes executing
* Applications can override this definition if they need to reserve resources
* early in the startup process so that later stages won't try and use them.
* For example, a timer instance might be reserved so that the us_ticker won't
* try to allocate it.
*
*******************************************************************************/
void cy_mbed_post_bsp_init_hook(void);

#ifdef __cplusplus
}
#endif

#endif /* CY_MBED_POST_INIT_H */
17 changes: 13 additions & 4 deletions targets/TARGET_Cypress/TARGET_PSOC6/cy_sleep_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,30 @@

#include "cmsis.h"
#include "device.h"
#include "cy_syspm.h"
#include "cyhal_syspm.h"
#include "cy_us_ticker.h"

#if DEVICE_SLEEP

void hal_sleep(void)
{
Cy_SysPm_CpuEnterSleep(CY_SYSPM_WAIT_FOR_INTERRUPT);
cyhal_syspm_sleep();
}

void hal_deepsleep(void)
{
#if DEVICE_LPTICKER
Cy_SysPm_CpuEnterDeepSleep(CY_SYSPM_WAIT_FOR_INTERRUPT);
// A running timer will block DeepSleep, which would normally be
// good because we don't want the timer to accidentally
// lose counts. We don't care about that for us_ticker
// (If we're requesting deepsleep the upper layers already determined
// that they are okay with that), so explicitly stop the us_ticker
// timer before we go to sleep and start it back up afterwards.
cy_us_ticker_stop();
cyhal_syspm_deepsleep();
cy_us_ticker_start();
#else
Cy_SysPm_CpuEnterSleep(CY_SYSPM_WAIT_FOR_INTERRUPT);
cyhal_syspm_sleep();
#endif /* DEVICE_LPTICKER */
}

Expand Down
37 changes: 37 additions & 0 deletions targets/TARGET_Cypress/TARGET_PSOC6/cy_us_ticker.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* mbed Microcontroller Library
* Copyright (c) 2017-2018 Future Electronics
* Copyright (c) 2019, Arm Limited and affiliates.
* 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.
*/

#ifndef MBED_CY_US_TICKER_H
#define MBED_CY_US_TICKER_H

#ifdef __cplusplus
extern "C" {
#endif

/** Starts the us_ticker. */
void cy_us_ticker_start();

/** Stops the us_ticker. */
void cy_us_ticker_stop();

#ifdef __cplusplus
}
#endif

#endif // MBED_CY_US_TICKER_H
11 changes: 11 additions & 0 deletions targets/TARGET_Cypress/TARGET_PSOC6/cy_us_ticker_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "cmsis.h"
#include "us_ticker_api.h"
#include "mbed_error.h"
#include "cy_us_ticker.h"
#include "cyhal_timer.h"
#include "cy_tcpwm_counter.h"

Expand Down Expand Up @@ -51,6 +52,16 @@ static void cy_us_ticker_irq_handler(MBED_UNUSED void *arg, MBED_UNUSED cyhal_ti
us_ticker_irq_handler();
}

void cy_us_ticker_start()
{
cyhal_timer_start(&cy_us_timer);
}

void cy_us_ticker_stop()
{
cyhal_timer_stop(&cy_us_timer);
}

void us_ticker_init(void)
{
if (!cy_us_ticker_initialized) {
Expand Down
8 changes: 8 additions & 0 deletions targets/TARGET_Cypress/TARGET_PSOC6/mbed_overrides.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "cycfg.h"
#include "cyhal_hwmgr.h"
#include "cybsp.h"
#include "cy_mbed_post_init.h"
#include "mbed_power_mgmt.h"
#if MBED_CONF_RTOS_PRESENT
#include "rtos_idle.h"
Expand Down Expand Up @@ -49,6 +50,11 @@ static void active_idle_hook(void)
}
#endif

MBED_WEAK void cy_mbed_post_bsp_init_hook(void)
{
/* By default, do nothing */
}

/*******************************************************************************
* Function Name: mbed_sdk_init
****************************************************************************//**
Expand All @@ -71,6 +77,8 @@ void mbed_sdk_init(void)
/* Set up the device based on configurator selections */
cybsp_init();

cy_mbed_post_bsp_init_hook();

#if CY_CPU_CORTEX_M0P
/* Enable global interrupts */
__enable_irq();
Expand Down