This commit is contained in:
stark1898y 2025-05-16 14:27:39 +08:00
parent 39630d3171
commit 5ef5c8842a
3 changed files with 19 additions and 14 deletions

View File

@ -2,7 +2,7 @@
* @Author : stark1898y 1658608470@qq.com
* @Date : 2024-12-15 16:13:37
* @LastEditors : stark1898y 1658608470@qq.com
* @LastEditTime : 2025-05-16 11:17:22
* @LastEditTime : 2025-05-16 14:17:34
* @FilePath : \BLE_TYQ_CH584M\BSP\inc\bsp_iwdg.h
* @Description :
*
@ -31,8 +31,8 @@
#define RB_WR_PROTECT 0x40000000 // RO, write protect
#define RB_IWDG_EN 0x80000000 // RO, watch-dog enable
#define IWDG_TIMEOUT_MS (7000U)
#define IWDG_FEED_MS (3000U)
#define IWDG_TIMEOUT_MS (6000)
#define IWDG_FEED_MS (5000)
#define IWIG_FEED_EVENT (0x01 << 0)

View File

@ -2,7 +2,7 @@
* @Author : stark1898y 1658608470@qq.com
* @Date : 2024-12-15 16:13:41
* @LastEditors : stark1898y 1658608470@qq.com
* @LastEditTime : 2025-05-16 12:29:30
* @LastEditTime : 2025-05-16 14:23:06
* @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_iwdg.c
* @Description :
*
@ -30,6 +30,8 @@ uint16_t IWDG_ProcessEvent(uint8_t task_id, uint16_t events)
{
FEED_IWDG();
logDebug("IWDG feed");
// 获取tmos系统堆的剩余内存大小
// uint8_t* a = tmos_msg_allocate(1);
logDebug("tmos_memory_getlen = %d" , tmos_memory_getlen());
tmos_start_task(task_id, IWIG_FEED_EVENT, MS1_TO_SYSTEM_TIME(IWDG_FEED_MS));
return (events ^ IWIG_FEED_EVENT);
@ -55,17 +57,22 @@ void IWDG_Init(uint16_t ms)
// 解除IWDG保护
R32_IWDG_KR = 0x5555;
R32_IWDG_CFG = (RB_PR & (div << 12)) | (RB_STOP_EN) | (reload & RB_RLR);
// R32_IWDG_CFG |= (7 << 12); // 32K分频512时钟62.5Hz
// R32_IWDG_CFG &= 0xFFFFF000;
// // R32_IWDG_CFG |= 0x7D * 3; // 看门狗时间约6 s0x10/(32K/512))
// R32_IWDG_CFG |= reload;
// R32_IWDG_CFG = (RB_PR & (div << 12)) | (RB_STOP_EN) | (reload & RB_RLR);
R32_IWDG_CFG |= (7 << 12); // 32K分频512时钟62.5Hz
R32_IWDG_CFG &= 0xFFFFF000;
// R32_IWDG_CFG |= 0x7D * 3; // 看门狗时间约6 s0x10/(32K/512))
R32_IWDG_CFG |= reload;
// 开启IWDG保护
R32_IWDG_KR = 0xCCCC;
// uint32_t d = R32_IWDG_CFG;
// logHexDumpAll(d, 4);
logDebug("IWDG = %d, %.1f ms", reload, (reload * 1000) / 62.5);
// sys_safe_access_enable();
// R8_SAFE_LRST_CTRL |= RB_IWDG_RST_EN;
// sys_safe_access_disable();
IWDGTaskId = TMOS_ProcessEventRegister(IWDG_ProcessEvent);
// tmos_set_event(IWDGTaskId, IWIG_FEED_EVENT);
tmos_start_task(IWDGTaskId, IWIG_FEED_EVENT, MS1_TO_SYSTEM_TIME(IWDG_FEED_MS));

View File

@ -231,7 +231,7 @@ void HAL_Init()
halTaskID = TMOS_ProcessEventRegister(HAL_ProcessEvent);
HAL_TimeInit();
#if 0
#if 1
// 开启独立看门狗会强制开启内部32K但是开启状态没有跟内部的RC32K寄存器同步
// 而复位时候是根据内部RC32K寄存器状态来决定是否启动RC32K
// 不关闭ch584的内部32KRC
@ -239,9 +239,7 @@ void HAL_Init()
R8_CK32K_CONFIG |= RB_CLK_INT32K_PON;
sys_safe_access_disable();
#endif
sys_safe_access_enable();
R8_SAFE_LRST_CTRL |= RB_IWDG_RST_EN;
sys_safe_access_disable();
#if(defined HAL_SLEEP) && (HAL_SLEEP == TRUE)
HAL_SleepInit();