/******************************************************************************
* Copyright (C) 2018, Huada Semiconductor Co.,Ltd All rights reserved.
*
* This software is owned and published by:
* Huada Semiconductor Co.,Ltd ("HDSC").
*
* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
*
* This software contains source code for use with HDSC
* components. This software is licensed by HDSC to be adapted only
* for use in systems utilizing HDSC components. HDSC shall not be
* responsible for misuse or illegal use of this software for devices not
* supported herein. HDSC is providing this software "AS IS" and will
* not be responsible for issues arising from incorrect user implementation
* of the software.
*
* Disclaimer:
* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
* WARRANTY OF NONINFRINGEMENT.
* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
* SAVINGS OR PROFITS,
* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
* FROM, THE SOFTWARE.
*
* This software may be replicated in part or whole for the licensed use,
* with the restriction that this Disclaimer and Copyright notice must be
* included with each copy of this software, whether used in part or whole,
* at all times.
*/
/******************************************************************************/
/** \file reset.h
 **
 ** Headerfile for reset functions
 **  
 **
 ** History:
 **   - 2018-04-21   Lux     First Version
 **
 ******************************************************************************/

#ifndef __RESET_H__
#define __RESET_H__

/******************************************************************************
 * Include files
 ******************************************************************************/
#include "ddl.h"


#ifdef __cplusplus
extern "C"
{
#endif

/**
 ******************************************************************************
 ** \defgroup ResetGroup Reset (RST)
 **
 ******************************************************************************/
//@{

/**
 *******************************************************************************
 ** function prototypes.
 ******************************************************************************/

/*******************************************************************************
 * Global definitions
 ******************************************************************************/


/**
 *******************************************************************************
 ** \brief 外设复位控制类型定义
 ** \note
 ******************************************************************************/
typedef enum en_sysctrl_peripheral0
{
    ResetMskUart0      = 1u<<0u,       ///< 串口0
    ResetMskUart1      = 1u<<1u,       ///< 串口1
    ResetMskLpUart0    = 1u<<2u,       ///< 低功耗串口0
    ResetMskLpUart1    = 1u<<3u,       ///< 低功耗串口1
    ResetMskI2c0       = 1u<<4u,       ///< I2C0
    ResetMskI2c1       = 1u<<5u,       ///< I2C1
    ResetMskSpi0       = 1u<<6u,       ///< SPI0
    ResetMskSpi1       = 1u<<7u,       ///< SPI1
    ResetMskBaseTim    = 1u<<8u,       ///< 基础定时器TIM0/1/2
    ResetMskLpTim0     = 1u<<9u,       ///< 低功耗定时器0
    ResetMskAdvTim     = 1u<<10u,      ///< 高级定时器TIM4/5/6
    ResetMskTim3       = 1u<<11u,      ///< 定时器3
    ResetMskOpa        = 1u<<13u,      ///< OPA
    ResetMskPca        = 1u<<14u,      ///< 可编程计数阵列
    ResetMskAdcBgr     = 1u<<16u,      ///< ADC&BGR
    ResetMskVcLvd      = 1u<<17u,      ///< VC和LVD
    ResetMskRng        = 1u<<18u,      ///< RNG
    ResetMskPcnt       = 1u<<19u,      ///< PCNT
    ResetMskRtc        = 1u<<20u,      ///< RTC
    ResetMskTrim       = 1u<<21u,      ///< 时钟校准
    ResetMskLcd        = 1u<<22u,      ///< LCD
    ResetMskTick       = 1u<<24u,      ///< 系统定时器
    ResetMskSwd        = 1u<<25u,      ///< SWD
    ResetMskCrc        = 1u<<26u,      ///< CRC
    ResetMskAes        = 1u<<27u,      ///< AES
    ResetMskGpio       = 1u<<28u,      ///< GPIO
    ResetMskDma        = 1u<<29u,      ///< DMA
	ResetMskHdiv       = 1U<<30U,      ///< HDIV
}en_reset_peripheral0_t;

typedef enum en_sysctrl_peripheral1
{
    ResetMskUsb        = 1u<<0u,      ///< USB
    ResetMskCan        = 1u<<1u,      ///< CAN
	ResetMskCts        = 1u<<2u,      ///< CTS
    ResetMskDac        = 1u<<3u,      ///< DAC
    ResetMskLpTim1     = 1u<<4u,      ///< 低功耗定时器1
    ResetMskI2s0       = 1u<<5u,      ///< I2S0
    ResetMskI2s1       = 1u<<6u,      ///< I2S1	
    ResetMskUart2      = 1u<<8u,      ///< UART2
    ResetMskUart3      = 1u<<9u,      ///< UART3 
}en_reset_peripheral1_t;

/**
 *******************************************************************************
 ** \brief 复位源(标识)显示
 **
 ** \note
 ******************************************************************************/
typedef enum en_reset_flag
{
    ResetFlagMskPor5V     = 1u<<0u,         ///< 5V启动复位
    ResetFlagMskPor1_5V   = 1u<<1u,         ///< 1.5V启动复位
    ResetFlagMskLvd       = 1u<<2u,         ///< 低电压检测复位
    ResetFlagMskWdt       = 1u<<3u,         ///< 看门狗复位
    ResetFlagMskPca       = 1u<<4u,         ///< PCA复位
    ResetFlagMskLockup    = 1u<<5u,         ///< 系统异常复位
    ResetFlagMskSysreq    = 1u<<6u,         ///< 软件复位
    ResetFlagMskRstb      = 1u<<7u,         ///< RESET脚 复位
}en_reset_flag_t;

/*******************************************************************************
 * Global variable declarations ('extern', definition in C source)
 ******************************************************************************/

/*******************************************************************************
 * Global function prototypes (definition in C source)
 ******************************************************************************/
///< 获得复位源状态
boolean_t Reset_GetFlag(en_reset_flag_t enRstFlg);
///< 清除复位源状态
void Reset_ClearFlag(en_reset_flag_t enRstFlg);
void Reset_ClearFlagAll(void);

///< 外设模块复位
void Reset_RstPeripheralAll(void);
void Reset_RstPeripheral0(en_reset_peripheral0_t enPeri);
void Reset_RstPeripheral1(en_reset_peripheral1_t enPeri);

//@} // ResetGroup

#ifdef __cplusplus
#endif


#endif /* __RESET_H__ */
/*******************************************************************************
 * EOF (not truncated)
 ******************************************************************************/