/*******************************************************************************
* @Copyright (c)    :(C)2016, Qingdao ieslab Co., Ltd
* @FileName         :GP22Gas_sys.c
* @Author           :Team
* @Version          :V1.0
* @Date             :2016年4月23日 10:53:39
* @Description      :the function of the entity of GP22Gas_sys.c
*******************************************************************************/
#include "sys_config.h"
#include "UWater_sys.h" 
#ifdef __cplusplus
extern "C" {
#endif


//#pragma clang diagnostic push
//#pragma clang diagnostic ignored "-Wunknown-attributes"

#define __no_init __attribute__((zero_init))
/*
__no_init volatile float gp22_copy_total_flow __attribute__((section(".ARM.__at_0x20007F00")));
__no_init volatile float gp22_copy_total_flow_reverse __attribute__((section(".ARM.__at_0x20007F04")));
__no_init volatile float gp22_copy_total_flow_test __attribute__((section(".ARM.__at_0x20007F08")));
__no_init volatile float gp22_copy_temp_total_flow_float_test __attribute__((section(".ARM.__at_0x20007F0C")));
__no_init volatile u32 gp22_copy_reset_flag_test __attribute__((section(".ARM.__at_0x20007F10")));
__no_init volatile u32 MCU_reset_judge __attribute__((section(".ARM.__at_0x20007F14")));
__no_init volatile float gp22_copy_temp_total_flow_float __attribute__((section(".ARM.__at_0x20007F18")));
__no_init volatile u16 record_last_calculative_time __attribute__((section(".ARM.__at_0x20007F1C"))); //用于记录距离上次计算的时间间隔，方便复位精确补偿
*/
__no_init volatile u32 meter_reset_cnt_reason __attribute__((section(".ARM.__at_0x20007F20")));//复位次数和原因
__no_init volatile u32 meter_boot_version __attribute__((section(".ARM.__at_0x20007F24")));//boot版本号
/*
__no_init volatile u32 jx_com_rxbuf_wcount_copy __attribute__((section(".ARM.__at_0x20007F28")));
__no_init volatile u32 jx_com_rxbuf_rcount_copy __attribute__((section(".ARM.__at_0x20007F2C")));
__no_init volatile u16 jx_com_rxbuf_check_copy __attribute__((section(".ARM.__at_0x20007F30")));
__no_init volatile u8 upload_again_cnt_copy __attribute__((section(".ARM.__at_0x20007F34")));
__no_init volatile float temp_calculate_last __attribute__((section(".ARM.__at_0x20007F38")));
__no_init volatile float limit_valve_total_flow __attribute__((section(".ARM.__at_0x20007F40")));//纪录关阀时的流量*/



void Clk_Init(void)
{
	//时钟分频
	Sysctrl_SetHCLKDiv(SysctrlHclkDiv1);///> 配置SYSCLK-> HCLK 的分频因子
	Sysctrl_SetPCLKDiv(SysctrlPclkDiv1);///> 配置HCLK-> PCLK 的分频因子

	///< RCH时钟不同频率的切换，需要先将时钟切换到RCL 32.768KHZ
	Sysctrl_SetRCLTrim(SysctrlRclFreq32768);			//设置RCL频率
	Sysctrl_SetRCLStableTime(SysctrlRclStableCycle64);	//稳定周期设置
	Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);		//使能目标时钟源
	Sysctrl_SysClkSwitch(SysctrlClkRCL);				//切换到新的时钟源
	
	///< 内部高速时钟频率加载
	Sysctrl_SetRCHTrim(SysctrlRchFreq4MHz);   //4M
	///< 使能RCH
	Sysctrl_ClkSourceEnable(SysctrlClkRCH, TRUE);
	///< 时钟切换到RCH
	Sysctrl_SysClkSwitch(SysctrlClkRCH);

	Flash_Init(6, TRUE);
	///< HCLK不超过24M：此处设置FLASH读等待周期为0 cycle
	Flash_WaitCycle(FlashWaitCycle0);
	
	///<使能GPIO模块时钟
	Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
}
#if (HARDWARE_VERSION==0x14)//方壳表
void UnusedGpioInit(void)
{
	stc_gpio_cfg_t stcGpioCfg;
    DDL_ZERO_STRUCT(stcGpioCfg);
    stcGpioCfg.enDir = GpioDirOut;    ///< 端口方向配置->输出
    stcGpioCfg.enDrv = GpioDrvL;      ///< 端口驱动能力配置->低驱动能力
    stcGpioCfg.enPu = GpioPuDisable;  ///< 端口上下拉配置->无
    stcGpioCfg.enPd = GpioPdDisable;
    stcGpioCfg.enOD = GpioOdDisable;  ///< 端口开漏输出配置->开漏输出关闭
    stcGpioCfg.enCtrlMode = GpioAHB;  ///< 端口输入/输出值寄存器总线控制模式配置->AHB
	/*LED初始化*/
    Gpio_Init(LED_PORT, LED_PIN, &stcGpioCfg);
    Gpio_WriteOutputIO(LED_PORT, LED_PIN, TRUE );//LED OFF
	
//	/*其他无用管脚初始化*/
//	//PA5
//	Gpio_Init(GpioPortA, GpioPin5, &stcGpioCfg);
//	Gpio_WriteOutputIO(GpioPortA, GpioPin5, FALSE);
//	//PA13
//	Gpio_Init(GpioPortA, GpioPin13, &stcGpioCfg);
//	Gpio_WriteOutputIO(GpioPortA, GpioPin13, FALSE);
//	//PA14
//	Gpio_Init(GpioPortA, GpioPin14, &stcGpioCfg);
//	Gpio_WriteOutputIO(GpioPortA, GpioPin14, FALSE);
//	//PA15
//	Gpio_Init(GpioPortA, GpioPin15, &stcGpioCfg);
//	Gpio_WriteOutputIO(GpioPortA, GpioPin15, FALSE);
//	//PC10
//	Gpio_Init(GpioPortC, GpioPin10, &stcGpioCfg);
//	Gpio_WriteOutputIO(GpioPortC, GpioPin10, FALSE);
//	//PE11
//	Gpio_Init(GpioPortE, GpioPin11, &stcGpioCfg);
//	Gpio_WriteOutputIO(GpioPortE, GpioPin11, FALSE);
//	
//	////////////PA:GpioPin0|GpioPin1|GpioPin2|GpioPin3|GpioPin4|GpioPin5|GpioPin6|GpioPin7|GpioPin14|GpioPin15
	Gpio_Init(GpioPortA, GpioPin0, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin1, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin2, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin3, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin4, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin5, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin6, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin7, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin13, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin14, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin15, &stcGpioCfg);
//
	Gpio_WriteOutputIO(GpioPortA, GpioPin0, FALSE);//NB_MCUTX
	Gpio_WriteOutputIO(GpioPortA, GpioPin1, FALSE);//NB_MCURX
	Gpio_WriteOutputIO(GpioPortA, GpioPin2, FALSE);//NB_MCUWUIN------------
	Gpio_WriteOutputIO(GpioPortA, GpioPin3, FALSE);//38K_IR_____________
	Gpio_WriteOutputIO(GpioPortA, GpioPin4, FALSE); //null______________
	Gpio_WriteOutputIO(GpioPortA, GpioPin5, FALSE);//NB_PSM_CHECK________
	Gpio_WriteOutputIO(GpioPortA, GpioPin6, FALSE);//STA_CL
	Gpio_WriteOutputIO(GpioPortA, GpioPin7, FALSE);//STA_OP
	Gpio_WriteOutputIO(GpioPortA, GpioPin13,FALSE);//SWDIO
	Gpio_WriteOutputIO(GpioPortA, GpioPin14,FALSE);//SWCLK
	Gpio_WriteOutputIO(GpioPortA, GpioPin15,FALSE);//null
////	
	////////////PB
	//Gpio_Init(GpioPortB, GpioPin7|GpioPin8|GpioPin9, &stcGpioCfg);
	//Gpio_WriteOutputIO(GpioPortB, GpioPin7|GpioPin8|GpioPin9, FALSE);
	Gpio_Init(GpioPortB, GpioPin7, &stcGpioCfg);
	Gpio_Init(GpioPortB, GpioPin8, &stcGpioCfg);
	Gpio_Init(GpioPortB, GpioPin9, &stcGpioCfg);
//
	Gpio_WriteOutputIO(GpioPortB, GpioPin7, FALSE);//PT2466_SLEEP________
	Gpio_WriteOutputIO(GpioPortB, GpioPin8, FALSE);//ESCL
	Gpio_WriteOutputIO(GpioPortB, GpioPin9, FALSE);//ESDA
////	
	////////////PC
	//Gpio_Init(GpioPortC, GpioPin0|GpioPin1|GpioPin2|GpioPin3|GpioPin10|GpioPin11|GpioPin12|GpioPin13, &stcGpioCfg);
	//Gpio_WriteOutputIO(GpioPortC, GpioPin0|GpioPin1|GpioPin2|GpioPin3|GpioPin10|GpioPin11|GpioPin12|GpioPin13, FALSE);
	Gpio_Init(GpioPortC, GpioPin0, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin1, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin2, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin3, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin10, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin11, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin12, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin13, &stcGpioCfg);
//
	Gpio_WriteOutputIO(GpioPortC, GpioPin0, FALSE);//BAT_CHECK_MCU
	Gpio_WriteOutputIO(GpioPortC, GpioPin1, FALSE);//VstaOrADC_MCU
	Gpio_WriteOutputIO(GpioPortC, GpioPin2, FALSE);//T_ADC_MCU
	Gpio_WriteOutputIO(GpioPortC, GpioPin3, FALSE);//VALVE_ADC_V_MCU
	Gpio_WriteOutputIO(GpioPortC, GpioPin10, FALSE);//KEY_Reserved_________
	Gpio_WriteOutputIO(GpioPortC, GpioPin11, FALSE);//MCU_RX
	Gpio_WriteOutputIO(GpioPortC, GpioPin12, FALSE);//MCU_TX
	Gpio_WriteOutputIO(GpioPortC, GpioPin13, TRUE);//LED_CTL
//	
	////////////PD
	//Gpio_Init(GpioPortD, GpioPin0|GpioPin1|GpioPin2|GpioPin3|GpioPin4, &stcGpioCfg);
	//Gpio_WriteOutputIO(GpioPortD, GpioPin0|GpioPin1|GpioPin2|GpioPin3|GpioPin4, FALSE);
	Gpio_Init(GpioPortD, GpioPin0, &stcGpioCfg);
	Gpio_Init(GpioPortD, GpioPin1, &stcGpioCfg);
	Gpio_Init(GpioPortD, GpioPin2, &stcGpioCfg);
	Gpio_Init(GpioPortD, GpioPin3, &stcGpioCfg);
	Gpio_Init(GpioPortD, GpioPin4, &stcGpioCfg);
//
	Gpio_WriteOutputIO(GpioPortD, GpioPin0, FALSE);//nSSN_GP30
	Gpio_WriteOutputIO(GpioPortD, GpioPin1, FALSE);//SCK_GP30
	Gpio_WriteOutputIO(GpioPortD, GpioPin2, FALSE);//nINT_GP30
	Gpio_WriteOutputIO(GpioPortD, GpioPin3, FALSE);//SO_GP30
	Gpio_WriteOutputIO(GpioPortD, GpioPin4, FALSE);//SI_GP30
	////////////PE
	//Gpio_Init(GpioPortE, GpioPin2|GpioPin3|GpioPin4|GpioPin5|GpioPin11, &stcGpioCfg);
	//Gpio_WriteOutputIO(GpioPortE, GpioPin2|GpioPin3|GpioPin4|GpioPin5|GpioPin11, FALSE);
	Gpio_Init(GpioPortE, GpioPin2, &stcGpioCfg);
	Gpio_Init(GpioPortE, GpioPin3, &stcGpioCfg);
	Gpio_Init(GpioPortE, GpioPin4, &stcGpioCfg);
	Gpio_Init(GpioPortE, GpioPin5, &stcGpioCfg);
	Gpio_Init(GpioPortE, GpioPin11, &stcGpioCfg);
//
	Gpio_WriteOutputIO(GpioPortE, GpioPin2, TRUE); //IR_CTL  _________
	Gpio_WriteOutputIO(GpioPortE, GpioPin3, FALSE);//EN_PWR_EE
	Gpio_WriteOutputIO(GpioPortE, GpioPin4, FALSE);//EN_NB_PWR
	Gpio_WriteOutputIO(GpioPortE, GpioPin5, FALSE); //EN_Bat_Check_________
	Gpio_WriteOutputIO(GpioPortE, GpioPin11, TRUE);//KEY_INT___________
	////////////PF
	//Gpio_Init(GpioPortF, GpioPin0|GpioPin1|GpioPin4|GpioPin5|GpioPin6|GpioPin7, &stcGpioCfg);
	//Gpio_WriteOutputIO(GpioPortF, GpioPin0|GpioPin1|GpioPin4|GpioPin5|GpioPin6|GpioPin7, FALSE);
	Gpio_Init(GpioPortF, GpioPin0, &stcGpioCfg);
	Gpio_Init(GpioPortF, GpioPin1, &stcGpioCfg);
	Gpio_Init(GpioPortF, GpioPin4, &stcGpioCfg);
	Gpio_Init(GpioPortF, GpioPin5, &stcGpioCfg);
	Gpio_Init(GpioPortF, GpioPin6, &stcGpioCfg);
	Gpio_Init(GpioPortF, GpioPin7, &stcGpioCfg);
//
	Gpio_WriteOutputIO(GpioPortF, GpioPin0, FALSE);//NB_MCURESET
	Gpio_WriteOutputIO(GpioPortF, GpioPin1, FALSE);//NB_MCUPWR
	Gpio_WriteOutputIO(GpioPortF, GpioPin4, FALSE);//OPEN
	Gpio_WriteOutputIO(GpioPortF, GpioPin5, FALSE);//CLOSE
	Gpio_WriteOutputIO(GpioPortF, GpioPin6, FALSE);//TouchVCC__________
	Gpio_WriteOutputIO(GpioPortF, GpioPin7, FALSE);//T_POWER
	//异常复位次数先增加
	Meter_ResetCountAdd(0x80);
	if(meter_reset_cnt_reason<0xA55AFF00)
	{
		meter_reset_cnt_reason += 0x100;//复位次数
	}
}

#elif (HARDWARE_VERSION==0x18)//圆壳表
void UnusedGpioInit(void)
{
	stc_gpio_cfg_t stcGpioCfg;
    DDL_ZERO_STRUCT(stcGpioCfg);
    stcGpioCfg.enDir = GpioDirOut;    ///< 端口方向配置->输出
    stcGpioCfg.enDrv = GpioDrvL;      ///< 端口驱动能力配置->低驱动能力
    stcGpioCfg.enPu = GpioPuDisable;  ///< 端口上下拉配置->无
    stcGpioCfg.enPd = GpioPdDisable;
    stcGpioCfg.enOD = GpioOdDisable;  ///< 端口开漏输出配置->开漏输出关闭
    stcGpioCfg.enCtrlMode = GpioAHB;  ///< 端口输入/输出值寄存器总线控制模式配置->AHB
	/*LED初始化*/
    Gpio_Init(LED_PORT, LED_PIN, &stcGpioCfg);
    Gpio_WriteOutputIO(LED_PORT, LED_PIN, TRUE );//LED OFF
	
//	/*其他无用管脚初始化*/
//	//PA5
//	Gpio_Init(GpioPortA, GpioPin5, &stcGpioCfg);
//	Gpio_WriteOutputIO(GpioPortA, GpioPin5, FALSE);
//	//PA13
//	Gpio_Init(GpioPortA, GpioPin13, &stcGpioCfg);
//	Gpio_WriteOutputIO(GpioPortA, GpioPin13, FALSE);
//	//PA14
//	Gpio_Init(GpioPortA, GpioPin14, &stcGpioCfg);
//	Gpio_WriteOutputIO(GpioPortA, GpioPin14, FALSE);
//	//PA15
//	Gpio_Init(GpioPortA, GpioPin15, &stcGpioCfg);
//	Gpio_WriteOutputIO(GpioPortA, GpioPin15, FALSE);
//	//PC10
//	Gpio_Init(GpioPortC, GpioPin10, &stcGpioCfg);
//	Gpio_WriteOutputIO(GpioPortC, GpioPin10, FALSE);
//	//PE11
//	Gpio_Init(GpioPortE, GpioPin11, &stcGpioCfg);
//	Gpio_WriteOutputIO(GpioPortE, GpioPin11, FALSE);
//	
//	////////////PA:GpioPin0|GpioPin1|GpioPin2|GpioPin3|GpioPin4|GpioPin5|GpioPin6|GpioPin7|GpioPin14|GpioPin15
	Gpio_Init(GpioPortA, GpioPin0, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin1, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin2, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin3, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin4, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin5, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin6, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin7, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin13, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin14, &stcGpioCfg);
	Gpio_Init(GpioPortA, GpioPin15, &stcGpioCfg);
//
	Gpio_WriteOutputIO(GpioPortA, GpioPin0, FALSE);//NB_MCUTX
	Gpio_WriteOutputIO(GpioPortA, GpioPin1, FALSE);//NB_MCURX
	Gpio_WriteOutputIO(GpioPortA, GpioPin2, FALSE);//null______________
	Gpio_WriteOutputIO(GpioPortA, GpioPin3, FALSE);//38K_IR_____________
	Gpio_WriteOutputIO(GpioPortA, GpioPin4, FALSE); //T_POWER
	Gpio_WriteOutputIO(GpioPortA, GpioPin5, FALSE);//T_ADC_MCU
	Gpio_WriteOutputIO(GpioPortA, GpioPin6, FALSE);//null______________
	Gpio_WriteOutputIO(GpioPortA, GpioPin7, FALSE);//null______________
	Gpio_WriteOutputIO(GpioPortA, GpioPin13,FALSE);//SWDIO
	Gpio_WriteOutputIO(GpioPortA, GpioPin14,FALSE);//SWCLK
	Gpio_WriteOutputIO(GpioPortA, GpioPin15,FALSE);//null
////	
	////////////PB
	//Gpio_Init(GpioPortB, GpioPin7|GpioPin8|GpioPin9, &stcGpioCfg);
	//Gpio_WriteOutputIO(GpioPortB, GpioPin7|GpioPin8|GpioPin9, FALSE);
	Gpio_Init(GpioPortB, GpioPin7, &stcGpioCfg);
	Gpio_Init(GpioPortB, GpioPin8, &stcGpioCfg);
	Gpio_Init(GpioPortB, GpioPin9, &stcGpioCfg);
//
	Gpio_WriteOutputIO(GpioPortB, GpioPin7, FALSE);//EN_PWR_EE
	Gpio_WriteOutputIO(GpioPortB, GpioPin8, FALSE);//ESCL
	Gpio_WriteOutputIO(GpioPortB, GpioPin9, FALSE);//ESDA
////	
	////////////PC
	//Gpio_Init(GpioPortC, GpioPin0|GpioPin1|GpioPin2|GpioPin3|GpioPin10|GpioPin11|GpioPin12|GpioPin13, &stcGpioCfg);
	//Gpio_WriteOutputIO(GpioPortC, GpioPin0|GpioPin1|GpioPin2|GpioPin3|GpioPin10|GpioPin11|GpioPin12|GpioPin13, FALSE);
	Gpio_Init(GpioPortC, GpioPin0, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin1, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin2, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin3, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin10, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin11, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin12, &stcGpioCfg);
	Gpio_Init(GpioPortC, GpioPin13, &stcGpioCfg);
//
	Gpio_WriteOutputIO(GpioPortC, GpioPin0, FALSE);//BAT_CHECK_MCU
	Gpio_WriteOutputIO(GpioPortC, GpioPin1, FALSE);//VstaOrADC_MCU--null
	Gpio_WriteOutputIO(GpioPortC, GpioPin2, FALSE);//NB_PSM_CHECK
	Gpio_WriteOutputIO(GpioPortC, GpioPin3, FALSE);//VALVE_ADC_V_MCU--null
	Gpio_WriteOutputIO(GpioPortC, GpioPin10, FALSE);//KEY_Reserved--null
	Gpio_WriteOutputIO(GpioPortC, GpioPin11, FALSE);//MCU_RX
	Gpio_WriteOutputIO(GpioPortC, GpioPin12, FALSE);//MCU_TX
	Gpio_WriteOutputIO(GpioPortC, GpioPin13, FALSE);//KEY_Reserved
//	
	////////////PD
	//Gpio_Init(GpioPortD, GpioPin0|GpioPin1|GpioPin2|GpioPin3|GpioPin4, &stcGpioCfg);
	//Gpio_WriteOutputIO(GpioPortD, GpioPin0|GpioPin1|GpioPin2|GpioPin3|GpioPin4, FALSE);
	Gpio_Init(GpioPortD, GpioPin0, &stcGpioCfg);
	Gpio_Init(GpioPortD, GpioPin1, &stcGpioCfg);
	Gpio_Init(GpioPortD, GpioPin2, &stcGpioCfg);
	Gpio_Init(GpioPortD, GpioPin3, &stcGpioCfg);
	Gpio_Init(GpioPortD, GpioPin4, &stcGpioCfg);
//
	Gpio_WriteOutputIO(GpioPortD, GpioPin0, FALSE);//nSSN_GP30
	Gpio_WriteOutputIO(GpioPortD, GpioPin1, FALSE);//SCK_GP30
	Gpio_WriteOutputIO(GpioPortD, GpioPin2, FALSE);//nINT_GP30
	Gpio_WriteOutputIO(GpioPortD, GpioPin3, FALSE);//SO_GP30
	Gpio_WriteOutputIO(GpioPortD, GpioPin4, FALSE);//SI_GP30
	////////////PE
	//Gpio_Init(GpioPortE, GpioPin2|GpioPin3|GpioPin4|GpioPin5|GpioPin11, &stcGpioCfg);
	//Gpio_WriteOutputIO(GpioPortE, GpioPin2|GpioPin3|GpioPin4|GpioPin5|GpioPin11, FALSE);
	Gpio_Init(GpioPortE, GpioPin2, &stcGpioCfg);
	Gpio_Init(GpioPortE, GpioPin3, &stcGpioCfg);
	Gpio_Init(GpioPortE, GpioPin4, &stcGpioCfg);
	Gpio_Init(GpioPortE, GpioPin5, &stcGpioCfg);
	Gpio_Init(GpioPortE, GpioPin11, &stcGpioCfg);
//
	Gpio_WriteOutputIO(GpioPortE, GpioPin2, FALSE); //NB_MCUPWR
	Gpio_WriteOutputIO(GpioPortE, GpioPin3, FALSE);//NB_MCUWUIN
	Gpio_WriteOutputIO(GpioPortE, GpioPin4, FALSE);//NB_MCURESET
	Gpio_WriteOutputIO(GpioPortE, GpioPin5, FALSE); //EN_NB_PWR
	Gpio_WriteOutputIO(GpioPortE, GpioPin11, TRUE);//KEY_INT
	////////////PF
	//Gpio_Init(GpioPortF, GpioPin0|GpioPin1|GpioPin4|GpioPin5|GpioPin6|GpioPin7, &stcGpioCfg);
	//Gpio_WriteOutputIO(GpioPortF, GpioPin0|GpioPin1|GpioPin4|GpioPin5|GpioPin6|GpioPin7, FALSE);
	Gpio_Init(GpioPortF, GpioPin0, &stcGpioCfg);
	Gpio_Init(GpioPortF, GpioPin1, &stcGpioCfg);
	Gpio_Init(GpioPortF, GpioPin4, &stcGpioCfg);
	Gpio_Init(GpioPortF, GpioPin5, &stcGpioCfg);
	Gpio_Init(GpioPortF, GpioPin6, &stcGpioCfg);
//
	Gpio_WriteOutputIO(GpioPortF, GpioPin0, FALSE);//EN_Bat_Check
	Gpio_WriteOutputIO(GpioPortF, GpioPin1, FALSE);//TouchVCC
	Gpio_WriteOutputIO(GpioPortF, GpioPin4, FALSE);//no
	Gpio_WriteOutputIO(GpioPortF, GpioPin5, FALSE);//no
	Gpio_WriteOutputIO(GpioPortF, GpioPin6, TRUE);//IR_CTL
	//异常复位次数先增加
	Meter_ResetCountAdd(0x80);
	
	if(meter_reset_cnt_reason<0xA55AFF00)
	{
		meter_reset_cnt_reason += 0x100;//复位次数
	}
}

#endif

/***************************************************************
Function:    Meter_ResetCountAdd (void)
Description: 复位次数增加,复位原因保存
 ****************************************************************/
void Meter_ResetCountAdd(u8 reason)
{
	if((meter_reset_cnt_reason&0xA55A0000)!=0xA55A0000)
	{
		meter_reset_cnt_reason = 0xA55A0000;
	}
	meter_reset_cnt_reason |= reason;//
}
/***************************************************************
Function:    Meter_GetResetCount
Description: 获取复位次数和复位原因
 ****************************************************************/
u16 Meter_GetResetCount(void)
{
	if((meter_reset_cnt_reason&0xA55A0000)==0xA55A0000)
	{
	     return (meter_reset_cnt_reason&0XFFFF);
	}
	return 0;
}
/***************************************************************
Function:    Meter_BootVersionInit
Description: boot版本号初始化
 ****************************************************************/
void Meter_BootVersionInit(void)
{
	if((meter_boot_version&0xA55A0000)==0xA55A0000)
	{
	     meter_boot_version &=0XFFFF;
	}
	else
	{
		meter_boot_version = 0;
	}
}
/***************************************************************
Function:    Meter_GetBootVersion
Description: 获取boot版本号
 ****************************************************************/
u16 Meter_GetBootVersion(void)
{
	return meter_boot_version &=0XFFFF;
}
#ifdef __cplusplus
}
#endif
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


