/**
 * @file cw32l012_wwdt.c
 * @author WHXY
 * @brief WWDT (Window Watchdog Timer) driver for CW32L012
 * @version 0.1
 * @date 2024-08-07
 *
 * @copyright Copyright (c) 2021
 * 代码许可和免责信息
 * 武汉芯源半导体有限公司授予您使用所有编程代码示例的非专属的版权许可，您可以由此
 * 生成根据您的特定需要而定制的相似功能。根据不能被排除的任何法定保证，武汉芯源半
 * 导体有限公司及其程序开发商和供应商对程序或技术支持（如果有）不提供任何明示或暗
 * 含的保证或条件，包括但不限于暗含的有关适销性、适用于某种特定用途和非侵权的保证
 * 或条件。
 * 无论何种情形，武汉芯源半导体有限公司及其程序开发商或供应商均不对下列各项负责，
 * 即使被告知其发生的可能性时，也是如此：数据的丢失或损坏；直接的、特别的、附带的
 * 或间接的损害，或任何后果性经济损害；或利润、业务、收入、商誉或预期可节省金额的
 * 损失。
 * 某些司法辖区不允许对直接的、附带的或后果性的损害有任何的排除或限制，因此某些或
 * 全部上述排除或限制可能并不适用于您。
 */

/* Includes ------------------------------------------------------------------*/
#include "cw32l012_wwdt.h"

/* Private_TypesDefinitions --------------------------------------------------*/

/* Private_Defines -----------------------------------------------------------*/

/* Private_Variables ---------------------------------------------------------*/

/* Private_FunctionPrototypes ------------------------------------------------*/

/* Private_Functions ---------------------------------------------------------*/

/* Public_Functions ----------------------------------------------------------*/

/**
 * @brief 初始化窗口看门狗
 * @details 该函数用于初始化窗口看门狗，包括使能窗口看门狗时钟、配置预分频器、窗口值和计数器初始值，最后使能窗口看门狗。
 * @param WWDT_InitStruct 
 * @return 无
 */

void WWDT_Init(const WWDT_InitTypeDef *WWDT_InitStruct)
{
    // 使能窗口看门狗时钟
    CW_SYSCTRL->APBEN2 |= SYSCTRL_KEY | SYSCTRL_APBEN2_WWDT_Msk;
    // 配置预分频器
    CW_WWDT->CR1_f.PRS = WWDT_InitStruct->Prescaler;    
    // 配置窗口值    
    CW_WWDT->CR1_f.WINR = WWDT_InitStruct->WindowValue;    
    // 配置中断使能
    CW_WWDT->CR1_f.IE = WWDT_InitStruct->PreOvInt;
    // 配置计数器初始值
    CW_WWDT->CR0_f.WCNT = WWDT_InitStruct->CounterValue;
   
    // 使能窗口看门狗
    CW_WWDT->CR0_f.EN = 1;
}

/**
 * @brief 执行窗口看门狗的喂狗操作
 * @details 该操作通过向窗口看门狗的控制寄存器写入特定值来刷新计数器，防止看门狗超时复位。
 * @param  ReloadCnt: WWDT的重载值, 0x41 ~ 0x7F
 * @return 无
 */
void WWDT_Feed(uint8_t ReloadCnt)
{
    
    CW_WWDT->CR0_f.WCNT = ReloadCnt;
}
