/******************************************************************************* * @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****/