optical/NxBase/iwdog.c

75 lines
1.6 KiB
C
Raw Normal View History

2025-09-04 01:45:08 +00:00
#include "iwdog.h"
/*
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>40KHz<EFBFBD><EFBFBD>ʱ<EFBFBD>ӣ<EFBFBD>ͨ<EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>Ƶֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ʽ:
Tout = ((4 <EFBFBD><EFBFBD> 2^prer) <EFBFBD><EFBFBD> rlr) / 40;
Tout Ϊ<EFBFBD><EFBFBD>λʱ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ms
prer Ϊ<EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>ʱ<EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>Ƶֵ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD> 0--7<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ƶϵ<EFBFBD><EFBFBD>/4<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 4<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>0, 64 <EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD> д<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>4
rlr <EFBFBD>ǿ<EFBFBD><EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>ֵ
*/
//-------------------------------------------------------------------------------
#define MAX_IWD_MS 6553
#ifdef USE_STDPERIPH_DRIVER
#define IWDG_PRE IWDG_Prescaler_4 // 4<><34>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>0.1ms
#endif
#ifdef USE_FULL_LL_DRIVER
#define IWDG_PRE LL_IWDG_PRESCALER_4 // 4<><34>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>0.1ms
#endif
//-------------------------------------------------------------------------------
void InitIWDog(u16 ms)
{
if (ms < MAX_IWD_MS)
{
ms *= 10;
}
else
{
ms = 65535;
}
#if (USE_IWDOG == 1)
#ifdef USE_STDPERIPH_DRIVER
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); // ȡ<><C8A1><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
IWDG_SetPrescaler(IWDG_PRE); // <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>Ԥ<EFBFBD><D4A4>Ƶϵ<C6B5><CFB5>
IWDG_SetReload(ms); // <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>ֵ
IWDG_ReloadCounter(); // <20><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>ֵ, <20><>һ<EFBFBD><D2BB>ι<EFBFBD><CEB9>
IWDG_Enable(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
#endif
#ifdef USE_FULL_LL_DRIVER
LL_IWDG_EnableWriteAccess(IWDG); // ȡ<><C8A1><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
LL_IWDG_SetPrescaler(IWDG, IWDG_PRE); // <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>Ԥ<EFBFBD><D4A4>Ƶϵ<C6B5><CFB5>
LL_IWDG_SetWindow(IWDG, ms); // <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>
LL_IWDG_SetReloadCounter(IWDG, ms); // <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>ֵ
LL_IWDG_ReloadCounter(IWDG); // <20><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>ֵ, <20><>һ<EFBFBD><D2BB>ι<EFBFBD><CEB9>
LL_IWDG_Enable(IWDG); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
#endif
#endif
}
void FeedIWDog(void)
{
#if (USE_IWDOG == 1)
#ifdef USE_STDPERIPH_DRIVER
IWDG_ReloadCounter();
#endif
#ifdef USE_FULL_LL_DRIVER
LL_IWDG_ReloadCounter(IWDG);
#endif
#endif
}