=======================================================
低功耗测试说明
=======================================================

.. important::
   - 低压休眠和深度休眠的区别:

    1. 唤醒后的状态: 深度睡眠唤醒后系统将会复位,低压睡眠唤醒后系统将在挂起处继续运行。
    2. 睡眠电流功耗: 深度睡眠电流在10UA,低压睡眠电流在75uA。



1. GPIO作为唤醒源
=======================================================


1.1. 系统进入深度睡眠调用说明
--------------------------------------------------------------------

- 设置 GPIO 作为唤醒源

.. code-block:: c++
    
    PS_DEEP_CTRL_PARAM deep_sleep_param;
    deep_sleep_param.wake_up_way            = PS_DEEP_WAKEUP_GPIO;


- 2 设置 GPIO20 为唤醒管脚
 
.. code-block:: c++

    deep_sleep_param.gpio_index_map          = 0x1 << GPIO20;


- 设置 GPIO20 上升沿、下降沿唤醒方式

.. code-block:: c++

    deep_sleep_param.gpio_edge_map           = 0x1 << GPIO20;  //下降沿唤醒

    deep_sleep_param.gpio_edge_map           = 0x0 << GPIO20;  //上升沿唤醒


- 设置 GPIO21 在睡眠期间电压保持

.. code-block:: c++

     deep_sleep_param.gpio_stay_lo_map       =  0x1 << GPIO21;



- 其他参数未使用的,默认赋值0

.. code-block:: c++

    //这几个参数是GPIO32-GPIO39 的配置,BK7238 没有这些管脚,故不需要设置
    deep_sleep_param.gpio_last_index_map    = 0;
    deep_sleep_param.gpio_last_edge_map     = 0;
    deep_sleep_param.gpio_stay_hi_map       = 0;

    //这些参数是RTC 作为唤醒源的,不需要设置
    deep_sleep_param.sleep_time             = 0;
    deep_sleep_param.lpo_32k_src            = 0;

- 6 开始调用深度睡眠API,进入睡眠

.. code-block:: c++
    
    bk_enter_deep_sleep_mode(&deep_sleep_param);





1.2 系统进入低压睡眠调用说明
--------------------------------------------------------------------

- 设置 GPIO 作为唤醒源 ,并且设置睡眠模式为低压睡眠

.. code-block:: c++
    
    PS_DEEP_CTRL_PARAM deep_sleep_param;
    deep_sleep_param.wake_up_way            = 1;  //PS_DEEP_WAKEUP_GPIO;
    deep_sleep_param.sleep_mode             = 1;  //MCU_LOW_VOLTAGE_SLEEP


- 设置 GPIO20 为唤醒管脚

.. code-block:: c++

    deep_sleep_param.gpio_index_map          = 0x1 << GPIO20;   //0x1 << 20 = 0x100000


- 设置 GPIO20 上升沿、下降沿唤醒方式

.. code-block:: c++

    deep_sleep_param.gpio_edge_map           = 0x1 << GPIO20;  //0x1 << 20 = 0x100000 下降沿唤醒

    deep_sleep_param.gpio_edge_map           = 0x0 << GPIO20;  //上升沿唤醒

     
- 其他参数未使用的,默认赋值0

.. code-block:: c++

    //这几个参数是GPIO32-GPIO39 的配置,BK7238 没有这些管脚,故不需要设置
    deep_sleep_param.gpio_last_index_map    = 0;
    deep_sleep_param.gpio_last_edge_map     = 0;
    deep_sleep_param.gpio_stay_hi_map       = 0;

    deep_sleep_param.gpio_stay_lo_map       = 0;

    //这些参数是RTC 作为唤醒源的,不需要设置
    deep_sleep_param.sleep_time             = 0;
    deep_sleep_param.lpo_32k_src            = 0;

- 5 开始调用低压睡眠API,进入睡眠

.. code-block:: c++
    
    bk_wlan_instant_lowvol_sleep(&deep_sleep_param);
    
    
    
    
    
    
2. RTC作为唤醒源
=======================================================

2.1. 系统进入深度睡眠调用说明
--------------------------------------------------------------------

- 设置 RTC 作为唤醒源

.. code-block:: c++
    
    PS_DEEP_CTRL_PARAM deep_sleep_param;
    deep_sleep_param.wake_up_way            = PS_DEEP_WAKEUP_RTC;


- 设置 RTC 睡眠时间

.. code-block:: c++

    deep_sleep_param.sleep_time             = 5;     //5s
    deep_sleep_param.lpo_32k_src            = 0;     //LPO_SELECT_ROSC



- 其他参数未使用的,默认赋值0

.. code-block:: c++

    //这些参数是GPIO 作为唤醒源的,不需要设置
    deep_sleep_param.gpio_index_map         = 0;
    deep_sleep_param.gpio_index_map         = 0;
    deep_sleep_param.gpio_stay_lo_map       = 0;
    deep_sleep_param.gpio_last_index_map    = 0;
    deep_sleep_param.gpio_last_edge_map     = 0;
    deep_sleep_param.gpio_stay_hi_map       = 0;


- 开始调用深度睡眠API,进入睡眠

.. code-block:: c++
    
    bk_enter_deep_sleep_mode(&deep_sleep_param);




2.2. 系统进入低压睡眠调用说明
--------------------------------------------------------------------

- 设置 RTC 作为唤醒源,并设置为低压睡眠模式

.. code-block:: c++
    
    PS_DEEP_CTRL_PARAM deep_sleep_param;
    deep_sleep_param.wake_up_way            = PS_DEEP_WAKEUP_RTC;
    deep_sleep_param.sleep_mode             = 1;  //MCU_LOW_VOLTAGE_SLEEP


- 设置 RTC 睡眠时间

.. code-block:: c++

    deep_sleep_param.sleep_time             = 5;     //5s
    deep_sleep_param.lpo_32k_src            = 0;     //LPO_SELECT_ROSC



- 其他参数未使用的,默认赋值0

.. code-block:: c++

    //这些参数是GPIO 作为唤醒源的,不需要设置
    deep_sleep_param.gpio_index_map         = 0;
    deep_sleep_param.gpio_index_map         = 0;
    deep_sleep_param.gpio_stay_lo_map       = 0;
    deep_sleep_param.gpio_last_index_map    = 0;
    deep_sleep_param.gpio_last_edge_map     = 0;
    deep_sleep_param.gpio_stay_hi_map       = 0;




- 开始调用深度睡眠API,进入睡眠

.. code-block:: c++
    
    bk_wlan_instant_lowvol_sleep(&deep_sleep_param);