Browse Source

Add pm driver for F472 and add lVD unlock in board_init

Jamie 5 months ago
parent
commit
0800db1400

+ 1 - 1
bsp/hc32/ev_hc32f448_lqfp80/board/board.c

@@ -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

+ 1 - 1
bsp/hc32/ev_hc32f460_lqfp100_v2/board/board.c

@@ -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

+ 1 - 1
bsp/hc32/ev_hc32f472_lqfp100/board/board.c

@@ -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

+ 1 - 1
bsp/hc32/ev_hc32f4a0_lqfp176/board/board.c

@@ -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

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

@@ -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)

+ 8 - 0
bsp/hc32/libraries/hc32_drivers/drv_pm.c

@@ -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);
 }
 

+ 1 - 1
bsp/hc32/libraries/hc32_drivers/drv_pm.h

@@ -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)

+ 8 - 8
bsp/hc32/tests/test_pm.c

@@ -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);