设置GPIO作为唤醒源,系统进入深度睡眠和低压睡眠说明

设置GPIO作为唤醒源,系统进入深度睡眠调用函数和调用顺序说明

    1. bk_gpio_register_wakeup_source(GPIO_18,GPIO_INT_TYPE_FALLING_EDGE);

    1. 设置唤醒的GPIO id : GPIO18

    2. 设置GPIO唤醒模式:

GPIO_INT_TYPE_FALLING_EDGE: 下降延唤醒;
GPIO_INT_TYPE_RISING_EDGE: 上升延唤醒;
GPIO_INT_TYPE_LOW_LEVEL: 低电平唤醒;
GPIO_INT_TYPE_HIGH_LEVEL: 高电平唤醒;
    1. bk_pm_wakeup_source_set(PM_WAKEUP_SOURCE_INT_GPIO, NULL);

    向系统中设置GPIO方式作为唤醒源;

    1. bk_pm_sleep_mode_set(PM_MODE_DEEP_SLEEP);

    设置睡眠模式,进入深度睡眠

    (系统从深度睡眠唤醒后,可以通过调用 - bk_gpio_get_wakeup_gpio_id() - 函数接口获取当前时哪个GPIO ID唤醒系统)

设置GPIO作为唤醒源,系统进入超深度睡眠调用函数和调用顺序说明

    1. bk_gpio_ana_register_wakeup_source(GPIO_12,GPIO_INT_TYPE_HIGH_LEVEL);

    1. 设置唤醒的GPIO id: GPIO12

    (与深度睡眠不同,超深度睡眠只支持GPIO0~15作为唤醒源,且可同时作唤醒源的GPIO个数为2个)

    1. 设置GPIO唤醒模式:

    GPIO_INT_TYPE_LOW_LEVEL: 低电平唤醒;

    GPIO_INT_TYPE_HIGH_LEVEL: 高电平唤醒;

    (超深度睡眠只支持两种唤醒模式,且同时作唤醒源的两个GPIO的唤醒模式需一致)

    1. bk_pm_sleep_mode_set(PM_MODE_SUPER_DEEP_SLEEP);

    设置睡眠模式,进入超深度睡眠

    (系统从超深度睡眠唤醒后,同样可以通过调用 - bk_gpio_get_wakeup_gpio_id() - 函数接口获取当前时哪个GPIO ID唤醒系统)

设置GPIO作为唤醒源,系统进入低压睡眠调用函数和调用顺序说明

    1. bk_gpio_register_wakeup_source(GPIO_18,GPIO_INT_TYPE_FALLING_EDGE);

    a.设置唤醒的GPIO id:GPIO18;

    b.设置GPIO唤醒模式:

    GPIO_INT_TYPE_FALLING_EDGE: 下降延唤醒;

    GPIO_INT_TYPE_RISING_EDGE: 上升延唤醒;

    GPIO_INT_TYPE_LOW_LEVEL: 低电平唤醒;

    GPIO_INT_TYPE_HIGH_LEVEL: 低电平唤醒;

    1. bk_pm_wakeup_source_set(PM_WAKEUP_SOURCE_INT_GPIO, NULL);

    向系统中设置GPIO方式作为唤醒源;

    1. bk_pm_sleep_mode_set(PM_MODE_LOW_VOLTAGE);

    设置睡眠模式,进入低压睡眠。(备注:当前系统默认设置为低压睡眠,只需要满足投的票,就可以进入低压睡眠)

    1. bk_pm_module_vote_sleep_ctrl(PM_SLEEP_MODULE_NAME_APP,0x1,0x0);

    向系统中投应用程序的票。

GPIO 在进入低压睡眠或软件重启过程中保持状态

    1. 打开WDT 不可屏蔽中断宏定义CONFIG_NMI_WDT_EN(在deconfig文件中配置,CONFIG_NMI_WDT_EN=y)

    1. 修改文件aon_pm_hal.c,将AON_PMU_REG2_WDT_RST_DEVS 改为0x1F3(约在Line:198), 关闭GPIO和WDT 寄存器重启功能。

      reboot 不进行掉电。

    1. 初始化GPIO驱动也不掉电,增加跳过保持输出的GPIO 代码,修改文件gpio_hal.c 约Line:325

      例如 GPIO20 保持输出:if(default_map[i].gpio_id == GPIO_20) continue;

备注:

    1. BT和WIFI的票,BT和WIFI模块内部进入睡眠后自己投上,SDK内部做好,应用程序不用关注

    1. 当系统中BT或WIFI模块没有上电时,系统会自动给这两个模块投上sleep的票。

    1. 当系统开启音频,视频,LCD,CPU1,CPU2后,进入低压睡眠前需要把音频,视频,LCD,CPU1,CPU2先关闭,再进入睡眠。

[English]