Register Sysclk PM callback in BSP Init

pull/11367/head
Kyle Kearney 2019-08-26 14:04:02 -07:00
parent ced234607e
commit 0a1e64dd00
7 changed files with 48 additions and 8 deletions

View File

@ -37,6 +37,7 @@ cy_rslt_t cybsp_init(void)
cy_rslt_t result = CY_RSLT_SUCCESS;
init_cycfg_system();
result = cybsp_register_sysclk_pm_callback();
#ifndef __MBED__
if (CY_RSLT_SUCCESS == result)

View File

@ -33,10 +33,10 @@ extern "C" {
cy_rslt_t cybsp_init(void)
{
init_cycfg_system();
cy_rslt_t result = CY_RSLT_SUCCESS;
init_cycfg_system();
result = cybsp_register_sysclk_pm_callback();
#ifndef __MBED__
if (CY_RSLT_SUCCESS == result)

View File

@ -34,10 +34,11 @@ extern "C" {
cy_rslt_t cybsp_init(void)
{
init_cycfg_system();
cy_rslt_t result = CY_RSLT_SUCCESS;
init_cycfg_system();
result = cybsp_register_sysclk_pm_callback();
#ifndef __MBED__
if (CY_RSLT_SUCCESS == result)
{

View File

@ -33,10 +33,11 @@ extern "C" {
cy_rslt_t cybsp_init(void)
{
init_cycfg_system();
cy_rslt_t result = CY_RSLT_SUCCESS;
init_cycfg_system();
result = cybsp_register_sysclk_pm_callback();
#ifndef __MBED__
if (CY_RSLT_SUCCESS == result)
{

View File

@ -33,10 +33,11 @@ extern "C" {
cy_rslt_t cybsp_init(void)
{
init_cycfg_system();
cy_rslt_t result = CY_RSLT_SUCCESS;
init_cycfg_system();
result = cybsp_register_sysclk_pm_callback();
#ifndef __MBED__
if (CY_RSLT_SUCCESS == result)
{

View File

@ -60,6 +60,33 @@ void cybsp_btn_set_interrupt(cybsp_btn_t which, cyhal_gpio_event_t type, cyhal_g
cyhal_gpio_enable_event((cyhal_gpio_t)which, type, 7, 1);
}
/* The sysclk deep sleep callback is recommended to be the last callback that
* is executed before entry into deep sleep mode and the first one upon
* exit the deep sleep mode.
* Doing so minimizes the time spent on low power mode entry and exit.
*/
#ifndef CYBSP_SYSCLK_PM_CALLBACK_ORDER
#define CYBSP_SYSCLK_PM_CALLBACK_ORDER (255u)
#endif
cy_rslt_t cybsp_register_sysclk_pm_callback(void)
{
cy_rslt_t result = CY_RSLT_SUCCESS;
static cy_stc_syspm_callback_params_t cybsp_sysclk_pm_callback_param = {NULL, NULL};
static cy_stc_syspm_callback_t cybsp_sysclk_pm_callback = {
.callback = &Cy_SysClk_DeepSleepCallback,
.type = CY_SYSPM_DEEPSLEEP,
.callbackParams = &cybsp_sysclk_pm_callback_param,
.order = CYBSP_SYSCLK_PM_CALLBACK_ORDER
};
if (!Cy_SysPm_RegisterCallback(&cybsp_sysclk_pm_callback))
{
result = CYBSP_RSLT_ERR_SYSCLK_PM_CALLBACK;
}
return result;
}
#if defined(__cplusplus)
}
#endif

View File

@ -51,6 +51,8 @@ extern "C" {
* \{
*/
/** Failed to configure sysclk power management callback */
#define CYBSP_RSLT_ERR_SYSCLK_PM_CALLBACK (CY_RSLT_CREATE(CY_RSLT_TYPE_ERROR, CY_RSLT_MODULE_ABSTRACTION_BSP, 0))
/** \} group_abstraction_board_macros */
@ -130,6 +132,13 @@ bool cybsp_btn_get_state(cybsp_btn_t which);
*/
void cybsp_btn_set_interrupt(cybsp_btn_t which, cyhal_gpio_event_t type, cyhal_gpio_event_callback_t callback, void *callback_arg);
/**
* \brief Registers a power management callback that prepares the clock system
* for entering deep sleep mode and restore the clocks upon wakeup from deep sleep.
* \returns CY_RSLT_SUCCESS if the callback is sucessfully registered, if there is
* a problem registering the callback it returns CYBSP_RSLT_ERR_SYSCLK_PM_CALLBACK.
*/
cy_rslt_t cybsp_register_sysclk_pm_callback(void);
/** \} group_abstraction_board_functions */