


#ifndef __CH57x_SYS_H__
#define __CH57x_SYS_H__

#ifdef __cplusplus
 extern "C" {
#endif

#include "CH579SFR.h"
#include "core_cm0.h"

	 
	 
/**
  * @brief  rtc interrupt event define
  */
typedef enum
{
	RST_STATUS_SW = 0,			// 软件复位
	RST_STATUS_RPOR,			// 上电复位
	RST_STATUS_WTR,				// 看门狗超时复位
	RST_STATUS_MR,				// 外部手动复位
	RST_STATUS_LRM0,			// 唤醒复位-软复位引起
	RST_STATUS_GPWSM,			// 下电模式唤醒复位
	RST_STATUS_LRM1,			//	唤醒复位-看门狗引起
	RST_STATUS_LRM2,			//	唤醒复位-手动复位引起

}SYS_ResetStaTypeDef;

/**
  * @brief  rtc interrupt event define
  */
typedef enum
{
	INFO_ROM_READ = 0,			// FlashROM 代码和数据区 是否可读
	INFO_RESET_EN = 2,			// RST#外部手动复位输入功能是否开启
	INFO_BOOT_EN,				// 系统引导程序 BootLoader 是否开启
	INFO_DEBUG_EN,				// 系统仿真调试接口是否开启
	INFO_LOADER,				// 当前系统是否处于Bootloader 区
	STA_SAFEACC_ACT,			// 当前系统是否处于安全访问状态，否则RWA属性区域不可访问

}SYS_InfoStaTypeDef;
	 

#define SYS_GetChipID()				R8_CHIP_ID									/* 获取芯片ID类，一般为固定值 */
#define SYS_GetAccessID()			R8_SAFE_ACCESS_ID							/* 获取安全访问ID，一般为固定值 */
UINT8 SYS_GetInfoSta( SYS_InfoStaTypeDef i );									/* 获取当前系统信息状态 */
// refer to SYS_ResetStaTypeDef
#define SYS_GetLastResetSta()		(R8_RESET_STATUS&RB_RESET_FLAG)				/* 获取系统上次复位状态 */
void SYS_ResetExecute( void );													/* 执行系统软件复位 */
#define SYS_ResetKeepBuf( d )		(R8_GLOB_RESET_KEEP = d)					/* 不受手动复位、 软件复位、 看门狗复位或者普通唤醒复位的影响 */

void SYS_DisableAllIrq( PUINT32 pirqv);									        /* 关闭所有中断，并保留当前中断值 */
void SYS_RecoverIrq( UINT32 irq_status );									    /* 恢复之前关闭的中断值 */
UINT32 SYS_GetSysTickCnt( void );												/* 获取当前系统(SYSTICK)计数值 */

#define  WWDG_SetCounter( c )		(R8_WDOG_COUNT = c)							/* 加载看门狗计数初值，递增型 */
void  WWDG_ITCfg( UINT8 s );							/* 看门狗溢出中断使能 */
void  WWDG_ResetCfg( UINT8 s );							/* 看门狗溢出复位使能 */
#define  WWDG_GetFlowFlag()			(R8_RST_WDOG_CTRL&RB_WDOG_INT_FLAG)			/* 获取当前看门狗定时器溢出标志 */
void WWDG_ClearFlag(void);														/* 清除看门狗中断标志，重新加载计数值也可清除 */


void mDelayuS( UINT16 t );		/* uS 延时 */
void mDelaymS( UINT16 t );		/* mS 延时 */



#ifdef __cplusplus
}
#endif

#endif  // __CH57x_SYS_H__	

