This commit is contained in:
stark1898y 2025-05-16 11:39:29 +08:00
parent 5ef5e9cd33
commit 2f9178215d
5 changed files with 134 additions and 123 deletions

View File

@ -223,7 +223,7 @@ __attribute__((noinline)) void Main_Circulation()
TMOS_SystemProcess(); TMOS_SystemProcess();
KEY_ProcessLoop(); KEY_ProcessLoop();
BSP_UART1_TxLoop(); BSP_UART1_TxLoop();
FEED_IWDG(); // FEED_IWDG();
} }
} }
@ -417,13 +417,10 @@ int main(void)
LED_ALL_OFF_DEINIT; LED_ALL_OFF_DEINIT;
BEEP_OFF_DEINIT; BEEP_OFF_DEINIT;
// logDebug("IWDG_Init 0");
// IWDG_Init(1500);
BSP_NoNeedBoost(); BSP_NoNeedBoost();
BSP_RequestSleep(); BSP_RequestSleep();
IWDG_Init(IWDG_MS); IWDG_Init(IWDG_TIMEOUT_MS);
// 在连接间隔和广播间隔到来时,会进入回调中喂狗 // 在连接间隔和广播间隔到来时,会进入回调中喂狗
// LL_AdvertiseEventRegister(BLE_AdvertiseEventCB); // LL_AdvertiseEventRegister(BLE_AdvertiseEventCB);

View File

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

View File

@ -2,7 +2,7 @@
* @Author : stark1898y 1658608470@qq.com * @Author : stark1898y 1658608470@qq.com
* @Date : 2024-12-15 16:13:41 * @Date : 2024-12-15 16:13:41
* @LastEditors : stark1898y 1658608470@qq.com * @LastEditors : stark1898y 1658608470@qq.com
* @LastEditTime : 2025-05-15 18:34:10 * @LastEditTime : 2025-05-16 10:55:30
* @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_iwdg.c * @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_iwdg.c
* @Description : * @Description :
* *
@ -30,7 +30,7 @@ uint16_t IWDG_ProcessEvent(uint8_t task_id, uint16_t events)
{ {
FEED_IWDG(); FEED_IWDG();
logDebug("IWDG feed"); logDebug("IWDG feed");
tmos_start_task(task_id, IWIG_FEED_EVENT, 5000); tmos_start_task(task_id, IWIG_FEED_EVENT, MS1_TO_SYSTEM_TIME(IWDG_FEED_MS));
return (events ^ IWIG_FEED_EVENT); return (events ^ IWIG_FEED_EVENT);
} }
return 0; return 0;
@ -46,25 +46,28 @@ uint16_t IWDG_ProcessEvent(uint8_t task_id, uint16_t events)
void IWDG_Init(uint16_t ms) void IWDG_Init(uint16_t ms)
{ {
uint16_t div = 512; uint16_t div = 512;
float tick_ms = 1000 / (32000 / 512); // float tick_ms = 1000 / (32000 / 512);
uint8_t tick_ms = 16;
uint16_t reload = (ms / tick_ms) + 1; uint16_t reload = (ms / tick_ms) + 1;
// 解除IWDG保护 // 解除IWDG保护
R32_IWDG_KR = 0x5555; R32_IWDG_KR = 0x5555;
// R32_IWDG_CFG = (RB_PR & (div << 12)) | (RB_STOP_EN) | (reload & RB_RLR); 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 |= (7 << 12); // 32K分频512时钟62.5Hz
R32_IWDG_CFG &= 0xFFFFF000; // R32_IWDG_CFG &= 0xFFFFF000;
R32_IWDG_CFG |= 0x7D * 3; // 看门狗时间约256ms0x10/(32K/512)) // // R32_IWDG_CFG |= 0x7D * 3; // 看门狗时间约6 s0x10/(32K/512))
// R32_IWDG_CFG |= reload;
// 开启IWDG保护 // 开启IWDG保护
R32_IWDG_KR = 0xCCCC; R32_IWDG_KR = 0xCCCC;
logDebug("R32_IWDG_CFG = %X", R32_IWDG_CFG); logDebug("IWDG = %d, %.1f ms", reload, (reload * 1000) / 62.5);
IWDGTaskId = TMOS_ProcessEventRegister(IWDG_ProcessEvent); IWDGTaskId = TMOS_ProcessEventRegister(IWDG_ProcessEvent);
tmos_set_event(IWDGTaskId, IWIG_FEED_EVENT); // tmos_set_event(IWDGTaskId, IWIG_FEED_EVENT);
tmos_start_task(IWDGTaskId, IWIG_FEED_EVENT, MS1_TO_SYSTEM_TIME(IWDG_FEED_MS));
} }
// #define RB_RESET_FLAG 0x07 // RO: recent reset flag // #define RB_RESET_FLAG 0x07 // RO: recent reset flag

View File

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

View File

@ -115,7 +115,6 @@ void SetSysClock(SYS_CLKTypeDef sc)
{ {
R8_HFCK_PWR_CTRL &= ~RB_CLK_XT32M_PON; R8_HFCK_PWR_CTRL &= ~RB_CLK_XT32M_PON;
} }
} }
R8_SAFE_MODE_CTRL |= RB_SAFE_AUTO_EN; R8_SAFE_MODE_CTRL |= RB_SAFE_AUTO_EN;
sys_safe_access_disable(); sys_safe_access_disable();
@ -130,8 +129,7 @@ void SetSysClock(SYS_CLKTypeDef sc)
* *
* @return none * @return none
*/ */
__attribute__((section(".highcode_init"))) __attribute__((section(".highcode_init"))) void highcode_init(void)
void highcode_init(void)
{ {
R32_SAFE_MODE_CTRL |= RB_XROM_312M_SEL; R32_SAFE_MODE_CTRL |= RB_XROM_312M_SEL;
R8_SAFE_MODE_CTRL &= ~RB_SAFE_AUTO_EN; R8_SAFE_MODE_CTRL &= ~RB_SAFE_AUTO_EN;
@ -236,7 +234,8 @@ void MachineMode_Call(MachineMode_Call_func func)
* @param none * @param none
* *
* @return none * @return none
*/void SetPI_func() */
void SetPI_func()
{ {
write_csr(0xbc0, 0x25); write_csr(0xbc0, 0x25);
} }
@ -459,8 +458,7 @@ void WWDG_ClearFlag(void)
*/ */
__INTERRUPT __INTERRUPT
__HIGH_CODE __HIGH_CODE
__attribute__((weak)) __attribute__((weak)) void HardFault_Handler(void)
void HardFault_Handler(void)
{ {
uint32_t v_mepc, v_mcause, v_mtval; uint32_t v_mepc, v_mcause, v_mtval;
printf("hardfault\n"); printf("hardfault\n");
@ -593,8 +591,7 @@ int _write(int fd, char *buf, int size)
* *
* @return size: Data length * @return size: Data length
*/ */
__attribute__((used)) __attribute__((used)) void *_sbrk(ptrdiff_t incr)
void *_sbrk(ptrdiff_t incr)
{ {
extern char _end[]; extern char _end[];
static char *curbrk = _end; static char *curbrk = _end;