75 lines
1.6 KiB
C
75 lines
1.6 KiB
C
|
|
|
|||
|
|
#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
|
|||
|
|
}
|