HAL_IWDT.c 1.7 KB
Newer Older
A
aisino2200 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
/***********************************************************************
 * Filename    : HAL_IWDT.c
 * Description : HAL IWDT driver source file
 * Author(s)   : CWT  
 * version     : V1.0
 * Modify date : 2020-04-17  
 ***********************************************************************/
#include  "ACM32Fxx_HAL.h" 


HAL_StatusTypeDef HAL_IWDT_Init(IWDT_HandleTypeDef * hidt)
{
    if (hidt == NULL)
    {
        return HAL_ERROR;
    }

    System_Module_Enable(EN_IWDT); 	    
    System_Delay(1);  

    System_Enable_Disable_RTC_Domain_Access(FUNC_ENABLE);  
    System_Enable_RC32K();      
    System_Enable_Disable_Reset(RESET_ENABLE_SOURCE_IWDT, FUNC_ENABLE);  
    /*Enable IWDT  */
    hidt->Instance->CMDR = IWDT_ENABLE_COMMAND;
    System_Delay(10);  	
    /*Enable Write  */
    hidt->Instance->CMDR = IWDT_WRITE_ENABLE_COMMAND;      
    System_Delay(10);          

    hidt->Instance->PR = hidt->Init.Prescaler;   
    hidt->Instance->RLR = hidt->Init.Reload;	
    hidt->Instance->WINR = hidt->Init.Window; 		
    hidt->Instance->WUTR = hidt->Init.Wakeup;    	
    System_Delay(1);    
    while(hidt->Instance->SR & (0x0F)){}; // wait for configuration done         

    if (hidt->Init.Reload > hidt->Init.Wakeup)	
    {
        /*Enable Wake up  */
        hidt->Instance->CMDR = IWDT_WAKEUP_ENABLE_COMMAND;  
    }

    hidt->Instance->CMDR = IWDT_RELOAD_COMMAND;
    System_Delay(1);	
    while(hidt->Instance->SR & (1 << 4)){};      

    return HAL_OK;  

}

HAL_StatusTypeDef HAL_IWDT_Kick_Watchdog_Wait_For_Done(IWDT_HandleTypeDef * hidt)  
{
    hidt->Instance->CMDR = IWDT_RELOAD_COMMAND;  
    System_Delay(1);   
    while(hidt->Instance->SR & (1 << 4)){};  //wait for kick watchdog done       

    return HAL_OK;  
}