如何通过EZI2C从设备地址匹配唤醒深度睡眠下PSoC 6设备 - KBA227480
Version: **
SCB_EZI2C_PDL组件可以通过从设备地址匹配唤醒深度睡眠模式下的PSoC 6设备。为此,需要使能Enable Wakeup from Deep Sleep Mode参数。图1和图2分别展示了PSoC Creator 4.2和ModusToolbox中所需的配置。
图1. PSoC Creator 4.2中的配置
图2. ModusToolbox Device Configurator中的配置
注意:只有一个SCB模块在深度睡眠下具有唤醒功能。可以通过参考PSoC 6数据手册Pinouts部分:Multiple alternate functions table DS(Deep Sleep)栏查找具有深度睡眠唤醒功能的SCB模块。
通过以下步骤使用cy_syspm驱动在进入深度睡眠之前注册Deep Sleep回调函数。
1. 参考以下数据域定义cy_stc_syspm_callback_params_t结构体。
· void* cy_stc_syspm_callback_params_t::base -> HW实例的基地址。在API中匹配基地址为驱动的名称。
· void* cy_stc_syspm_callback_params_t::context -> 回调函数可能会用到的环境参数,若不需要,将此项定义为NULL。
2. 参考以下数据域定义cy_stc_syspm_callback_t结构体。
· Cy_SysPmCallback cy_stc_syspm_callback_t::callback -> 回调处理函数(Cy_SCB_EZI2C_DeepSleepCallback)
· cy_en_syspm_callback_type_t cy_stc_syspm_callback_t::type -> 深度睡眠枚举回调类型(CY_SYSPM_DEEPSLEEP)
· uint32_t cy_stc_syspm_callback_t::skipMode -> 回调函数执行过程中需要跳过的模式所对应的掩码。
· cy_stc_syspm_callback_params_t* cy_stc_syspm_callback_t::callbackParams -> cy_stc_syspm_callback_params_t的地址;回调函数的执行所需要的参数。
· struct cy_stc_syspm_callback* cy_stc_syspm_callback_t::prevItm -> 前一个列表项。此项定义为NULL。
· struct cy_stc_syspm_callback* cy_stc_syspm_callback_t::nextItm -> 后一个列表项。此项定义为NULL。
3. 通过Cy_SysPm_RegisterCallback (cy_stc_syspm_callback_t * handler)注册回调函数。
4. 调用Cy_SysPm_CpuEnterDeepSleep (CY_SYSPM_WAIT_FOR_INTERRUPT)进入深度睡眠。当EZI2C地址匹配时会自动唤醒PSoC 6设备。
更多结构体和API的更多信息,请参考相关PDL文档。
参考代码:
cy_stc_syspm_callback_params_t Cy_SCB_EZI2C_DeepSleepCallback_param =
{
sEzI2C_HW,
NULL
};
cy_stc_syspm_callback_t Cy_SCB_EZI2C_DeepSleepCallback_elements =
{
&Cy_SCB_EZI2C_DeepSleepCallback,
CY_SYSPM_DEEPSLEEP,
0U,
&Cy_SCB_EZI2C_DeepSleepCallback_param,
NULL,
NULL
};
int main(void)
{
if (true != Cy_SysPm_RegisterCallback(&Cy_SCB_EZI2C_DeepSleepCallback_elements))
{
/* Insert error handling */
}
if (CY_SYSPM_SUCCESS != Cy_SysPm_CpuEnterDeepSleep(CY_SYSPM_WAIT_FOR_INTERRUPT))
{
/* Insert error handling */
}
}