mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-02-02 18:22:23 +08:00
Add pm driver for F472 and add lVD unlock in board_init
This commit is contained in:
parent
ed3222c2f8
commit
0800db1400
@ -15,7 +15,7 @@
|
||||
|
||||
/* unlock/lock peripheral */
|
||||
#define EXAMPLE_PERIPH_WE (LL_PERIPH_GPIO | LL_PERIPH_EFM | LL_PERIPH_FCG | \
|
||||
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM)
|
||||
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM | LL_PERIPH_LVD)
|
||||
#define EXAMPLE_PERIPH_WP (LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_SRAM)
|
||||
|
||||
/** System Base Configuration
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
/* unlock/lock peripheral */
|
||||
#define EXAMPLE_PERIPH_WE (LL_PERIPH_GPIO | LL_PERIPH_EFM | LL_PERIPH_FCG | \
|
||||
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM)
|
||||
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM | LL_PERIPH_LVD)
|
||||
#define EXAMPLE_PERIPH_WP (LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_SRAM)
|
||||
|
||||
/** System Base Configuration
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
/* unlock/lock peripheral */
|
||||
#define EXAMPLE_PERIPH_WE (LL_PERIPH_GPIO | LL_PERIPH_EFM | LL_PERIPH_FCG | \
|
||||
LL_PERIPH_PWC_CLK_RMU)
|
||||
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM | LL_PERIPH_LVD)
|
||||
#define EXAMPLE_PERIPH_WP (LL_PERIPH_EFM | LL_PERIPH_FCG)
|
||||
|
||||
/** System Base Configuration
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
/* unlock/lock peripheral */
|
||||
#define EXAMPLE_PERIPH_WE (LL_PERIPH_GPIO | LL_PERIPH_EFM | LL_PERIPH_FCG | \
|
||||
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM)
|
||||
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM | LL_PERIPH_LVD)
|
||||
#define EXAMPLE_PERIPH_WP (LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_SRAM)
|
||||
|
||||
/** System Base Configuration
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
/* unlock/lock peripheral */
|
||||
#define EXAMPLE_PERIPH_WE (LL_PERIPH_GPIO | LL_PERIPH_EFM | LL_PERIPH_FCG | \
|
||||
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM)
|
||||
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM | LL_PERIPH_LVD)
|
||||
#define EXAMPLE_PERIPH_WP (LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_SRAM)
|
||||
|
||||
#if defined(BSP_USING_USBD) || defined(BSP_USING_USBH)
|
||||
|
@ -108,6 +108,7 @@ static void _sleep_enter_deep(void)
|
||||
|
||||
(void)PWC_STOP_Config(&sleep_deep_cfg.cfg);
|
||||
|
||||
#if defined(HC32F4A0) || defined(HC32F460) || defined(HC32F448)
|
||||
if (PWC_PWRC2_DVS == (READ_REG8(CM_PWC->PWRC2) & PWC_PWRC2_DVS))
|
||||
{
|
||||
CLR_REG8_BIT(CM_PWC->PWRC1, PWC_PWRC1_STPDAS);
|
||||
@ -116,6 +117,7 @@ static void _sleep_enter_deep(void)
|
||||
{
|
||||
SET_REG8_BIT(CM_PWC->PWRC1, PWC_PWRC1_STPDAS);
|
||||
}
|
||||
#endif
|
||||
PWC_STOP_Enter(sleep_deep_cfg.pwc_stop_type);
|
||||
}
|
||||
|
||||
@ -161,14 +163,20 @@ static void _run_switch_high_to_low(void)
|
||||
struct pm_run_mode_config st_run_mode_cfg = PM_RUN_MODE_CFG;
|
||||
|
||||
st_run_mode_cfg.sys_clk_cfg(PM_RUN_MODE_LOW_SPEED);
|
||||
|
||||
#if defined(HC32F4A0) || defined(HC32F460) || defined(HC32F448)
|
||||
PWC_HighSpeedToLowSpeed();
|
||||
#endif
|
||||
}
|
||||
|
||||
static void _run_switch_low_to_high(void)
|
||||
{
|
||||
struct pm_run_mode_config st_run_mode_cfg = PM_RUN_MODE_CFG;
|
||||
|
||||
#if defined(HC32F4A0) || defined(HC32F460) || defined(HC32F448)
|
||||
PWC_LowSpeedToHighSpeed();
|
||||
#endif
|
||||
|
||||
st_run_mode_cfg.sys_clk_cfg(PM_RUN_MODE_HIGH_SPEED);
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,7 @@ struct pm_sleep_mode_shutdown_config
|
||||
******************************************************************************/
|
||||
#if defined(HC32F4A0)
|
||||
#define PM_CHECK_EFM() ((EFM_GetStatus(EFM_FLAG_RDY) == SET) && (EFM_GetStatus(EFM_FLAG_RDY1) == SET))
|
||||
#elif defined(HC32F460) || defined (HC32F448)
|
||||
#elif defined(HC32F460) || defined (HC32F448) || defined (HC32F472)
|
||||
#define PM_CHECK_EFM() ((EFM_GetStatus(EFM_FLAG_RDY) == SET))
|
||||
#endif
|
||||
#define PM_CHECK_XTAL() ((CM_CMU->XTALSTDCR & CLK_XTALSTD_ON) == 0)
|
||||
|
@ -24,12 +24,14 @@
|
||||
* PM_SLEEP_MODE_STANDBY | 掉电模式1或2(可配,默认配置是模式1)
|
||||
* PM_SLEEP_MODE_SHUTDOWN | 掉电模式3或4(可配,默认配置是模式3)
|
||||
*
|
||||
* 操作步骤:
|
||||
* 操作步骤1:
|
||||
* 1)按下按键K10: MCU进入休眠模式
|
||||
* 2)再按下按键K10:MCU退出休眠模式
|
||||
* 3)重复上述按键操作,MCU循环进入休眠模式(deep、standby、shutdown、idle)和退出对应的休眠模式。
|
||||
* 每次进入休眠模式前,MCU打印 "sleep:" + 休眠模式名称
|
||||
* 每次退出休眠模式后,MCU打印 "wake from sleep:" + 休眠模式名称
|
||||
* 操作步骤2:
|
||||
* 1)支持运行模式切换的芯片循环切换 低速->高速->低速 运行模式,对应时钟输出口输出对应模式下的时钟信号
|
||||
*/
|
||||
|
||||
#include <rtthread.h>
|
||||
@ -37,11 +39,8 @@
|
||||
#include <board.h>
|
||||
#include <drivers/lptimer.h>
|
||||
|
||||
|
||||
#if defined(BSP_USING_PM)
|
||||
|
||||
#define EFM_ERASE_TIME_MAX_IN_MILLISECOND (20)
|
||||
|
||||
#if defined (HC32F4A0)
|
||||
#define PLL_SRC ((CM_CMU->PLLHCFGR & CMU_PLLHCFGR_PLLSRC) >> CMU_PLLHCFGR_PLLSRC_POS)
|
||||
#define BSP_KEY_PORT (GPIO_PORT_A) /* Key10 */
|
||||
@ -101,10 +100,6 @@
|
||||
#define BSP_KEY_EVT (EVT_SRC_PORT_EIRQ5)
|
||||
#define BSP_KEY_PWC_PD_WKUP_TRIG_WKUP (PWC_PD_WKUP_TRIG_WKUP1)
|
||||
#define BSP_KEY_PWC_PD_WKUP_WKUP (PWC_PD_WKUP_WKUP11)
|
||||
|
||||
#define MCO_PORT (GPIO_PORT_A)
|
||||
#define MCO_PIN (GPIO_PIN_08)
|
||||
#define MCO_GPIO_FUNC (GPIO_FUNC_1)
|
||||
#endif
|
||||
|
||||
#define KEYCNT_BACKUP_ADDR (uint32_t *)(0x200F0010)
|
||||
@ -327,6 +322,7 @@ static void pm_cmd_handler(void *parameter)
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(HC32F4A0) || defined(HC32F460) || defined(HC32F448)
|
||||
static void pm_run_main(void *parameter)
|
||||
{
|
||||
static rt_uint8_t run_index = 0;
|
||||
@ -354,6 +350,7 @@ static void pm_run_main(void *parameter)
|
||||
rt_thread_mdelay(3000);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void _keycnt_cmd_init_after_power_on(void)
|
||||
{
|
||||
@ -440,6 +437,7 @@ int pm_sample_init(void)
|
||||
rt_kprintf("create pm sample thread failed!\n");
|
||||
}
|
||||
|
||||
#if defined(HC32F4A0) || defined(HC32F460) || defined(HC32F448)
|
||||
thread = rt_thread_create("pm_run_main", pm_run_main, RT_NULL, 1024, 25, 10);
|
||||
if (thread != RT_NULL)
|
||||
{
|
||||
@ -449,6 +447,8 @@ int pm_sample_init(void)
|
||||
{
|
||||
rt_kprintf("create pm run thread failed!\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
return RT_EOK;
|
||||
}
|
||||
MSH_CMD_EXPORT(pm_sample_init, pm sample init);
|
||||
|
Loading…
x
Reference in New Issue
Block a user