Skip to content

Commit 9409c7d

Browse files
author
JamieTx
committed
Add pm driver for F472 and add lVD unlock in board_init.
1 parent 45bb1dd commit 9409c7d

File tree

8 files changed

+22
-14
lines changed

8 files changed

+22
-14
lines changed

bsp/hc32/ev_hc32f448_lqfp80/board/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
/* unlock/lock peripheral */
1717
#define EXAMPLE_PERIPH_WE (LL_PERIPH_GPIO | LL_PERIPH_EFM | LL_PERIPH_FCG | \
18-
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM)
18+
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM | LL_PERIPH_LVD)
1919
#define EXAMPLE_PERIPH_WP (LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_SRAM)
2020

2121
/** System Base Configuration

bsp/hc32/ev_hc32f460_lqfp100_v2/board/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
/* unlock/lock peripheral */
1616
#define EXAMPLE_PERIPH_WE (LL_PERIPH_GPIO | LL_PERIPH_EFM | LL_PERIPH_FCG | \
17-
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM)
17+
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM | LL_PERIPH_LVD)
1818
#define EXAMPLE_PERIPH_WP (LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_SRAM)
1919

2020
/** System Base Configuration

bsp/hc32/ev_hc32f472_lqfp100/board/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
/* unlock/lock peripheral */
1717
#define EXAMPLE_PERIPH_WE (LL_PERIPH_GPIO | LL_PERIPH_EFM | LL_PERIPH_FCG | \
18-
LL_PERIPH_PWC_CLK_RMU)
18+
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM | LL_PERIPH_LVD)
1919
#define EXAMPLE_PERIPH_WP (LL_PERIPH_EFM | LL_PERIPH_FCG)
2020

2121
/** System Base Configuration

bsp/hc32/ev_hc32f4a0_lqfp176/board/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
/* unlock/lock peripheral */
1616
#define EXAMPLE_PERIPH_WE (LL_PERIPH_GPIO | LL_PERIPH_EFM | LL_PERIPH_FCG | \
17-
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM)
17+
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM | LL_PERIPH_LVD)
1818
#define EXAMPLE_PERIPH_WP (LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_SRAM)
1919

2020
/** System Base Configuration

bsp/hc32/lckfb-hc32f4a0-lqfp100/board/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
/* unlock/lock peripheral */
1515
#define EXAMPLE_PERIPH_WE (LL_PERIPH_GPIO | LL_PERIPH_EFM | LL_PERIPH_FCG | \
16-
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM)
16+
LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM | LL_PERIPH_LVD)
1717
#define EXAMPLE_PERIPH_WP (LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_SRAM)
1818

1919
#if defined(BSP_USING_USBD) || defined(BSP_USING_USBH)

bsp/hc32/libraries/hc32_drivers/drv_pm.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ static void _sleep_enter_deep(void)
108108

109109
(void)PWC_STOP_Config(&sleep_deep_cfg.cfg);
110110

111+
#if defined(HC32F4A0) || defined(HC32F460) || defined(HC32F448)
111112
if (PWC_PWRC2_DVS == (READ_REG8(CM_PWC->PWRC2) & PWC_PWRC2_DVS))
112113
{
113114
CLR_REG8_BIT(CM_PWC->PWRC1, PWC_PWRC1_STPDAS);
@@ -116,6 +117,7 @@ static void _sleep_enter_deep(void)
116117
{
117118
SET_REG8_BIT(CM_PWC->PWRC1, PWC_PWRC1_STPDAS);
118119
}
120+
#endif
119121
PWC_STOP_Enter(sleep_deep_cfg.pwc_stop_type);
120122
}
121123

@@ -161,14 +163,20 @@ static void _run_switch_high_to_low(void)
161163
struct pm_run_mode_config st_run_mode_cfg = PM_RUN_MODE_CFG;
162164

163165
st_run_mode_cfg.sys_clk_cfg(PM_RUN_MODE_LOW_SPEED);
166+
167+
#if defined(HC32F4A0) || defined(HC32F460) || defined(HC32F448)
164168
PWC_HighSpeedToLowSpeed();
169+
#endif
165170
}
166171

167172
static void _run_switch_low_to_high(void)
168173
{
169174
struct pm_run_mode_config st_run_mode_cfg = PM_RUN_MODE_CFG;
170175

176+
#if defined(HC32F4A0) || defined(HC32F460) || defined(HC32F448)
171177
PWC_LowSpeedToHighSpeed();
178+
#endif
179+
172180
st_run_mode_cfg.sys_clk_cfg(PM_RUN_MODE_HIGH_SPEED);
173181
}
174182

bsp/hc32/libraries/hc32_drivers/drv_pm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ struct pm_sleep_mode_shutdown_config
9191
******************************************************************************/
9292
#if defined(HC32F4A0)
9393
#define PM_CHECK_EFM() ((EFM_GetStatus(EFM_FLAG_RDY) == SET) && (EFM_GetStatus(EFM_FLAG_RDY1) == SET))
94-
#elif defined(HC32F460) || defined (HC32F448)
94+
#elif defined(HC32F460) || defined (HC32F448) || defined (HC32F472)
9595
#define PM_CHECK_EFM() ((EFM_GetStatus(EFM_FLAG_RDY) == SET))
9696
#endif
9797
#define PM_CHECK_XTAL() ((CM_CMU->XTALSTDCR & CLK_XTALSTD_ON) == 0)

bsp/hc32/tests/test_pm.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,23 @@
2424
* PM_SLEEP_MODE_STANDBY | 掉电模式1或2(可配,默认配置是模式1)
2525
* PM_SLEEP_MODE_SHUTDOWN | 掉电模式3或4(可配,默认配置是模式3)
2626
*
27-
* 操作步骤
27+
* 操作步骤1
2828
* 1)按下按键K10: MCU进入休眠模式
2929
* 2)再按下按键K10:MCU退出休眠模式
3030
* 3)重复上述按键操作,MCU循环进入休眠模式(deep、standby、shutdown、idle)和退出对应的休眠模式。
3131
* 每次进入休眠模式前,MCU打印 "sleep:" + 休眠模式名称
3232
* 每次退出休眠模式后,MCU打印 "wake from sleep:" + 休眠模式名称
33+
* 操作步骤2:
34+
* 1)支持运行模式切换的芯片循环切换 低速->高速->低速 运行模式,对应时钟输出口输出对应模式下的时钟信号
3335
*/
3436

3537
#include <rtthread.h>
3638
#include <rtdevice.h>
3739
#include <board.h>
3840
#include <drivers/lptimer.h>
3941

40-
4142
#if defined(BSP_USING_PM)
4243

43-
#define EFM_ERASE_TIME_MAX_IN_MILLISECOND (20)
44-
4544
#if defined (HC32F4A0)
4645
#define PLL_SRC ((CM_CMU->PLLHCFGR & CMU_PLLHCFGR_PLLSRC) >> CMU_PLLHCFGR_PLLSRC_POS)
4746
#define BSP_KEY_PORT (GPIO_PORT_A) /* Key10 */
@@ -101,10 +100,6 @@
101100
#define BSP_KEY_EVT (EVT_SRC_PORT_EIRQ5)
102101
#define BSP_KEY_PWC_PD_WKUP_TRIG_WKUP (PWC_PD_WKUP_TRIG_WKUP1)
103102
#define BSP_KEY_PWC_PD_WKUP_WKUP (PWC_PD_WKUP_WKUP11)
104-
105-
#define MCO_PORT (GPIO_PORT_A)
106-
#define MCO_PIN (GPIO_PIN_08)
107-
#define MCO_GPIO_FUNC (GPIO_FUNC_1)
108103
#endif
109104

110105
#define KEYCNT_BACKUP_ADDR (uint32_t *)(0x200F0010)
@@ -327,6 +322,7 @@ static void pm_cmd_handler(void *parameter)
327322
}
328323
}
329324

325+
#if defined(HC32F4A0) || defined(HC32F460) || defined(HC32F448)
330326
static void pm_run_main(void *parameter)
331327
{
332328
static rt_uint8_t run_index = 0;
@@ -354,6 +350,7 @@ static void pm_run_main(void *parameter)
354350
rt_thread_mdelay(3000);
355351
}
356352
}
353+
#endif
357354

358355
static void _keycnt_cmd_init_after_power_on(void)
359356
{
@@ -440,6 +437,7 @@ int pm_sample_init(void)
440437
rt_kprintf("create pm sample thread failed!\n");
441438
}
442439

440+
#if defined(HC32F4A0) || defined(HC32F460) || defined(HC32F448)
443441
thread = rt_thread_create("pm_run_main", pm_run_main, RT_NULL, 1024, 25, 10);
444442
if (thread != RT_NULL)
445443
{
@@ -449,6 +447,8 @@ int pm_sample_init(void)
449447
{
450448
rt_kprintf("create pm run thread failed!\n");
451449
}
450+
#endif
451+
452452
return RT_EOK;
453453
}
454454
MSH_CMD_EXPORT(pm_sample_init, pm sample init);

0 commit comments

Comments
 (0)