#include "power_manage.h" #include "adc.h" #include "stdlib.h" #include "uart.h" #include "extern_rtc.h" #include "lcd.h" #include "gpio.h" #include "lcd.h" #include "tim.h" #include "sizhu_ctrl_word.h" #include "system_run_fun.h" #include "system_mem_para.h" #include "sizhu_ctrl_word.h" #include "linked_list.h" #include "upper_com.h" PWR_VOL_T pwr_vol_g = {.lith_flag = LMS_PERIOD, .alka_flag = AMS_PERIOD, .mcu_temp_flag = SET,.lith_vcc_per = 100}; // ĬÈÏÉϵç²É¼¯Ò»´ÎµçÁ¿ºÍMCUÎÂ¶È uint8_t first_power_get_cnt_g = 0; LIMIT_TRIGGER_RECORD_PARA_T limit_trigger_record_para_g; void Power_IO_Init(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý OutputIO(LITH_DETECTION_PORT,LITH_DETECTION_PIN,OUT_PUSHPULL); InputtIO( LITH_PWR_LOSE_PORT, LITH_PWR_LOSE_PIN, IN_NORMAL); OutputIO(ALKA_DETECTION_PORT,ALKA_DETECTION_PIN,OUT_PUSHPULL); InputtIO_H( ALKA_PWR_LOSE_PIN, IN_NORMAL); ALK_DEC_OFF; LIT_DEC_OFF; OutputIO(BORROW_PWR_PORT,BORROW_PWR_PIN,OUT_PUSHPULL); OutputIO(EX_PWR_EN_PORT,EX_PWR_EN_PIN,OUT_PUSHPULL); BORROW_PWR_OFF; EX_PWR_OFF; InputtIO( LIMIT_TRIGGER_PORT, LIMIT_TRIGGER_PIN, IN_NORMAL); } void Lith_Battery_GPIO_Clk_Init(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý AnalogIO(LIT_ADC_PORT,LIT_ADC_PIN);// OutputIO(LITH_DETECTION_PORT,LITH_DETECTION_PIN,OUT_PUSHPULL); // AnalogIO(LIT_PWR_UNDER_PORT,LIT_PWR_UNDER_PIN); } void Alka_Battery_GPIO_Clk_Init(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý AnalogIO_H(ALK_ADC_PIN); OutputIO(ALKA_DETECTION_PORT,ALKA_DETECTION_PIN,OUT_PUSHPULL); } void EX_Pwr_GPIO_Clk_Init(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý InputtIO( HWIDO_EX_PWR_PORT, HWIDO_EX_PWR_PIN, IN_NORMAL); OutputIO(EX_PWR_EN_PORT,EX_PWR_EN_PIN,OUT_PUSHPULL); } void borrow_Pwr_GPIO_Clk_Init(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý InputtIO( BORROW_PWR_PORT, BORROW_PWR_PIN, IN_NORMAL); } /****************************************** * func: Get_vol_Average * desc: * - sample total 100 data,list data from low to hign,get middle 64 data * - calculation sample mean of 64 middle data * input: * ch - select sample channel of adc1 * vref_adc - Voltage reference of adc1 multiply by 1000. eg:3.3v ->33000 * output: none * return: calculation sample mean of 64 middle data,multiply by 1000. eg:1.0v -> 1000 *****************************************/ uint32_t Get_vol_Average(ad_data_s *data_p) { u32 i, j, t; uint32_t temp; uint32_t temp_vol = 0; for (i = 0; i < data_p->ad_buffer_cnt; i++) { data_p->ad_get_buffer[i] = Get_AdcValue(); } for (i = 0; i < data_p->ad_buffer_cnt; i++) { for (j = (i + 1); j < data_p->ad_buffer_cnt; j++) if (data_p->ad_get_buffer[j] < data_p->ad_get_buffer[i]) { temp = data_p->ad_get_buffer[j]; data_p->ad_get_buffer[j] = data_p->ad_get_buffer[i]; data_p->ad_get_buffer[i] = temp; } } for (t = 1; t < (data_p->ad_buffer_cnt - 1); t++) { temp_vol += data_p->ad_get_buffer[t]; } temp_vol = temp_vol / (data_p->ad_buffer_cnt - 2); return temp_vol; } /****************************************** * func: get_alka_bat_voltage * desc: Get alka ADC data * input: none * output: none * return: none *****************************************/ float Get_Alka_Bat_Voltage(void) { uint32_t volt_ret; float sample_vol; float battery_vol = 0; ad_data_s *data_ins; Alka_Battery_GPIO_Clk_Init(); ADC_IN10_Init(); ALK_DEC_ON; delay_ms(5); // ÉêÇëÈáÐÔÊý×éÄÚ´æ¿Õ¼ä if ((data_ins = (ad_data_s *)malloc(sizeof(ad_data_s) + sizeof(uint16_t) * AD_ALKA_BAT_CNT)) != NULL) { data_ins->ad_buffer_cnt = AD_ALKA_BAT_CNT; data_ins->ad_ch = AD_ALKA_BAT_CH; volt_ret = Get_vol_Average(data_ins); sample_vol = (float)volt_ret * 0.001; battery_vol = sample_vol * ALKA_VOL_COE; ALK_DEC_OFF; /*ÊÍ·ÅÄÚ´æ*/ free(data_ins); data_ins = NULL; } ADC_CR_EN_Setable(DISABLE); return battery_vol; } /****************************************** * func: get_lith_bat_voltage * desc: Get lith_bat ADC data * input: none * output: none * return: none *****************************************/ float Get_Lith_Bat_Voltage(void) { uint32_t volt_ret; float sample_vol; float battery_vol = 0; ad_data_s *data_ins; Lith_Battery_GPIO_Clk_Init(); ADC_IN5_Init(); LIT_DEC_ON; delay_ms(5); if ((data_ins = (ad_data_s *)malloc(sizeof(data_ins) + sizeof(uint16_t) * AD_LITH_BAT_CNT)) != NULL) { data_ins->ad_buffer_cnt = AD_LITH_BAT_CNT; data_ins->ad_ch = AD_LITH_BAT_CH; volt_ret = Get_vol_Average(data_ins); sample_vol = (float)volt_ret * 0.001; battery_vol = sample_vol * LITH_VOL_COE; LIT_DEC_OFF; /*ÊÍ·ÅÄÚ´æ*/ free(data_ins); data_ins = NULL; } ADC_CR_EN_Setable(DISABLE); return battery_vol; } //float Get_PF6_Bat_Voltage(void) //{ // uint32_t volt_ret; // float sample_vol; // float battery_vol = 0; // ad_data_s *data_ins; // Lith_Battery_GPIO_Clk_Init(); // ADC_IN5_Init(); // if ((data_ins = (ad_data_s *)malloc(sizeof(data_ins) + sizeof(uint16_t) * AD_LITH_PF6_BAT_CNT)) != NULL) // { // data_ins->ad_buffer_cnt = AD_LITH_PF6_BAT_CNT; // data_ins->ad_ch = AD_LITH_PF6_BAT_CH; // volt_ret = Get_vol_Average(data_ins); // sample_vol = (float)volt_ret * 0.001; // battery_vol = sample_vol * LITH_PF6_VOL_COE; // /*ÊÍ·ÅÄÚ´æ*/ // free(data_ins); // data_ins = NULL; // } // ADC_CR_EN_Setable(DISABLE); // return battery_vol; //} float Get_Mcu_Temp(void) { ad_data_s *data_ins_vtem; float temperature; ADC_Temp_Init(); if ((data_ins_vtem = (ad_data_s *)malloc(sizeof(ad_data_s) + sizeof(uint16_t) * AD_VTEM_CNT)) != NULL) { data_ins_vtem->ad_buffer_cnt = AD_VTEM_CNT; // data_ins_vtem->ad_ch = AD_VTEM_CH; //ûÄñÓà temperature = Get_AdcTempValue(); // »ñȡζȵçѹֵ,¿ªÆôζÈADC /*ÊÍ·ÅÄÚ´æ*/ free(data_ins_vtem); data_ins_vtem = NULL; } ADC_CR_EN_Setable(DISABLE); return temperature; } #define LITH_BAT_VCC_MAX 7.2f /*µç³Øµçѹ״̬ÅжÏ,״̬ÍùÉϱä¸üÐèÒª´óÓÚãÐÖµ+0.2V£¬·Àֹ״̬ÔÚãÐÖµÉÏÏÂÌø¶¯*/ void Lith_Bat_Voltage_Status(float lith_vcc,PWR_VOL_T *pwr_vol_p) { float fTemp; if(lith_vcc < bat_para_g.lith_bat_under_v*0.1){ pwr_vol_p->lith_vcc_status = BAT_V_DOWN; }else if(lith_vcc < bat_para_g.lith_bat_under_v*0.1 + 0.2){ if(pwr_vol_p->lith_vcc_status == BAT_V_DOWN){ pwr_vol_p->lith_vcc_status = BAT_V_DOWN; }else{ pwr_vol_p->lith_vcc_status = BAT_V_LOW; } }else if(lith_vcc < bat_para_g.lith_bat_low_v*0.1){ pwr_vol_p->lith_vcc_status = BAT_V_LOW; }else if(lith_vcc < bat_para_g.lith_bat_low_v*0.1 + 0.2){ if(pwr_vol_p->lith_vcc_status == BAT_V_LOW){ pwr_vol_p->lith_vcc_status = BAT_V_LOW; }else{ pwr_vol_p->lith_vcc_status = BAT_V_NONE; } }else{ pwr_vol_p->lith_vcc_status = BAT_V_NONE; } /*****¸ù¾Ýµçѹֵ¼ÆËã°Ù·Ö±È£¬Âúµç°´LITH_BAT_VCC_MAXËã***/ if(pwr_vol_p->lith_vcc_status == BAT_V_DOWN){ pwr_vol_p->lith_vcc_per = 0; }else if(pwr_vol_p->lith_vcc_status == BAT_V_LOW){ if(bat_para_g.lith_bat_low_v > bat_para_g.lith_bat_under_v){ fTemp = BAT_PERSENT_LEVEL_1*(lith_vcc - bat_para_g.lith_bat_low_v*0.1) /(0.1*(bat_para_g.lith_bat_low_v - bat_para_g.lith_bat_under_v)); if(fTemp > 20.0) fTemp = 20; else if(fTemp <0) fTemp = 0; pwr_vol_p->lith_vcc_per = fTemp; }else { pwr_vol_p->lith_vcc_per = 0; } }else { if(LITH_BAT_VCC_MAX>bat_para_g.lith_bat_low_v*0.1){ fTemp = (100-BAT_PERSENT_LEVEL_1)*(lith_vcc - bat_para_g.lith_bat_low_v*0.1) /(LITH_BAT_VCC_MAX - bat_para_g.lith_bat_low_v*0.1); if(fTemp > 80.0) fTemp = 80; else if(fTemp <0.0) fTemp = 0.0; pwr_vol_p->lith_vcc_per = fTemp + 20.0; }else{ pwr_vol_p->lith_vcc_per = 20; } } } #define ALKA_BAT_VCC_MAX 6.4f void Alka_Bat_Voltage_Status(float alka_vcc,PWR_VOL_T *pwr_vol_p) { float fTemp; if(alka_vcc < bat_para_g.alka_bat_under_v*0.1){ pwr_vol_p->alka_vcc_status = BAT_V_DOWN; }else if(alka_vcc < bat_para_g.alka_bat_under_v*0.1 + 0.2){ if(pwr_vol_p->alka_vcc_status == BAT_V_DOWN){ pwr_vol_p->alka_vcc_status = BAT_V_DOWN; }else{ pwr_vol_p->alka_vcc_status = BAT_V_LOW; } }else if(alka_vcc < bat_para_g.alka_bat_low_v*0.1){ pwr_vol_p->alka_vcc_status = BAT_V_LOW; }else if(alka_vcc < bat_para_g.alka_bat_low_v*0.1 + 0.2){ if(pwr_vol_p->alka_vcc_status==BAT_V_LOW){ pwr_vol_p->alka_vcc_status = BAT_V_LOW; }else{ pwr_vol_p->alka_vcc_status = BAT_V_NONE; } }else{ pwr_vol_p->alka_vcc_status = BAT_V_NONE; } /*****¸ù¾Ýµçѹֵ¼ÆËã°Ù·Ö±È£¬Âúµç°´ALKA_BAT_VCC_MAXËã***/ if(pwr_vol_p->alka_vcc_status == BAT_V_DOWN){ pwr_vol_p->alka_vcc_per = 0; }else if(pwr_vol_p->alka_vcc_status == BAT_V_LOW){ if(bat_para_g.alka_bat_low_v > bat_para_g.alka_bat_under_v){ fTemp = BAT_PERSENT_LEVEL_1*(alka_vcc - bat_para_g.alka_bat_low_v*0.1) /(0.1*(bat_para_g.alka_bat_low_v - bat_para_g.alka_bat_under_v)); if(fTemp > 20.0) fTemp = 20; else if(fTemp <0) fTemp = 0; pwr_vol_p->alka_vcc_per = fTemp; }else { pwr_vol_p->alka_vcc_per = 0; } }else { if(ALKA_BAT_VCC_MAX>bat_para_g.alka_bat_low_v*0.1){ fTemp = (100-BAT_PERSENT_LEVEL_1)*(alka_vcc - bat_para_g.alka_bat_low_v*0.1) /(ALKA_BAT_VCC_MAX - bat_para_g.alka_bat_low_v*0.1); if(fTemp > 80.0) fTemp = 80; else if(fTemp <0.0) fTemp = 0.0; pwr_vol_p->alka_vcc_per = fTemp + 20.0; }else{ pwr_vol_p->alka_vcc_per = 20; } } } /**MCUζÈ״̬ÅжÏ*/ void MCU_temperature_Status(float mcu_tem,PWR_VOL_T *pwr_vol_p) { } //ï®µç³ØÊ¹ÓÃʱ¼ä¼ÆÊý void LithBatUseTimeCalculate(BAT_PARA_T *bat_para_p) { bat_para_p->lith_bat_used_sec ++; if(bat_para_p->lith_bat_used_sec >=3600){ bat_para_p->lith_bat_used_sec = 0; if(bat_para_p->lith_bat_used_hour < 87600) //24Сʱ*365Ìì*10Äê bat_para_p->lith_bat_used_hour ++; //? ´æ´¢£¬Ôݶ¨Ã¿Ð¡Ê±´æ´¢Ò»´Î } } #define EX_PWR_CONTINUE_TIME 5 //Íâµç³ÖÐøÊ±¼ä£¬³ÖÐøXÃëËãÓÐЧ /*»ñµÃµçԴ״̬¡£ï®µç¡¢¼îµç¡¢Íâµç¡¢MCUζÈ*/ void GetPwrStatusPro(PWR_VOL_T *pwr_vol_p) { const uint16_t DELAY_TIME = 5; static uint16_t delay_time_cnt = 0; /*¸ß¹¦ºÄ¹¦ÄÜÔËÐнáÊøÖ®ºóÑÓʱһ¶¨Ê±¼äÔÙ¼ì²âµç³Ø*/ if((sys_fun_run_ctrl_g.rs485_ctrl_flag.running_flag == RESET)&&(sys_fun_run_ctrl_g.wrc_ctrl_flag.running_flag == RESET)&&(sys_fun_run_ctrl_g.valve_ctrl_flag.running_flag == RESET)){ if(delay_time_cnt < DELAY_TIME) delay_time_cnt ++; } else delay_time_cnt = 0; /*﮵ç¼îµçÖÜÆÚ´¥·¢*/ //Ôݶ¨¼òµ¥´¦Àí£¬Ò»Ìì¼ì²âÒ»´Î if((sys_clockBCD_g.hour == 23)&&(sys_clockBCD_g.min == 57)&&(sys_clockBCD_g.sec == 57)){ pwr_vol_p->lith_flag = LMS_PERIOD; pwr_vol_p->alka_flag = AMS_PERIOD; } /*MCUζÈÖÜÆÚÐÔ¼ì²â*/ //Ôݶ¨Ã¿Ð¡Ê±¼ì²âÒ»´Î if((sys_clockBCD_g.min == 57)&&(sys_clockBCD_g.sec == 58)) pwr_vol_p->mcu_temp_flag = SET; //﮵çµôµçÈ·ÈÏ if(pwr_vol_p->lith_lose_check_flag == SET){ pwr_vol_p->lith_lose_check_flag = RESET; if(LITH_PWR_LOSE_IO_READ == Bit_RESET){ //È·ÈÏ﮵çµôµç __SYS_STATUS_ALARM_BYTES_SET(lith_remove,ALARM_ID_LITH_BAT_REMOVAL); //?﮵çµôµçÖ®ºóÐèҪһЩ½ô¼±´¦Àí£¬±ÈÈçʵʱÊý¾ÝÁ¢Âí´æ´¢Ò»´Î } } //¼îµçµôµçÈ·ÈÏ if(pwr_vol_p->alka_lose_check_flag == SET){ pwr_vol_p->alka_lose_check_flag = RESET; if(ALKA_PWR_LOSE_IO_READ == Bit_RESET){ //È·ÈÏ﮵çµôµç __SYS_STATUS_ALARM_BYTES_SET(alka_remove,ALARM_ID_ALKA_BAT_REMOVAL); } } if(pwr_vol_p->lith_flag != LMS_NONE ){ pwr_vol_p->lith_flag = LMS_NONE; pwr_vol_p->lith_vcc = Get_Lith_Bat_Voltage();//﮵ç¼ì²â Lith_Bat_Voltage_Status(pwr_vol_p->lith_vcc,pwr_vol_p); } // if((pwr_vol_p->alka_flag != AMS_NONE)&&(delay_time_cnt >= DELAY_TIME) ){ // pwr_vol_p->alka_flag = AMS_PERIOD; // pwr_vol_p->alka_vcc = Get_Alka_Bat_Voltage();//¼îµç¼ì²â // Alka_Bat_Voltage_Status(pwr_vol_p->alka_vcc,pwr_vol_p); // } if(pwr_vol_p->mcu_temp_flag == SET){ pwr_vol_p->mcu_temp_flag = RESET; pwr_vol_p->mcu_temperature = Get_Mcu_Temp();//mcuζȻñÈ¡ } /*µç³ØÊ¹ÓÃʱ¼ä¼ÆË㣬ÔÙ¸ù¾Ýµçѹ״̬ºÍʹÓÃʱ¼ä״̬×ۺϵóö×îÖÕµÄµç³Ø×´Ì¬*/ /*﮵çµçѹǷѹ£¬ÔòºÏ³ÉǷѹ£¬°Ù·Ö±È0£»ï®µçµçѹµÍµç£¬ÔòºÏ³ÉµÍµç£¬°Ù·Ö±È°´µçѹֵÏÔʾ0-20£» ·ñÔò£¬ºÏ³É=ʹÓÃʱ¼äÊ£Ó࣬ºÏ³ÉСÓÚ20ÅжÏΪµÍµç£¬20-100ΪÕý³£*/ if(__SYS_STATUS_BYTES_GET(power_state) ==RESET) LithBatUseTimeCalculate(&bat_para_g); if(bat_para_g.lith_bat_used_hour >= bat_para_g.lith_bat_max_hour){ pwr_vol_p->lith_remain_use_time_per = 0; }else{ pwr_vol_p->lith_remain_use_time_per = 100*(bat_para_g.lith_bat_max_hour - bat_para_g.lith_bat_used_hour)/bat_para_g.lith_bat_max_hour; } if(pwr_vol_p->lith_vcc_status == BAT_V_DOWN){ __SYS_STATUS_ALARM_BYTES_SET(lith_down, ALARM_ID_LITH_BAT_DOWN); __SYS_STATUS_ALARM_BYTES_SET(lith_low, ALARM_ID_LITH_BAT_LOW); pwr_vol_p->lith_synthesize_per = 0; }else if(pwr_vol_p->lith_vcc_status == BAT_V_LOW){ __SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN); __SYS_STATUS_ALARM_BYTES_SET(lith_low, ALARM_ID_LITH_BAT_LOW); pwr_vol_p->lith_synthesize_per = pwr_vol_p->alka_vcc_per; }else{ pwr_vol_p->lith_synthesize_per = (pwr_vol_p->lith_remain_use_time_per ==100)? 100:pwr_vol_p->lith_remain_use_time_per + 1; //ΪÁË100%Äܹ»Î¬³ÖÒ»¶Îʱ¼ä£¬µçѹÕý³£×´Ì¬Ê±°Ù·Ö±È²»ÄÜΪ0£¬Îª0¾ÍÒªÏÔʾ¿ÕÁË£¬±£³Ö1¸ñÖÁµçѹ״̬±äΪǷѹ if(pwr_vol_p->lith_synthesize_per < 20){ __SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN); __SYS_STATUS_ALARM_BYTES_SET(lith_low, ALARM_ID_LITH_BAT_LOW); }else{ __SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN); __SYS_STATUS_BYTES_STATUS(lith_low, RESET, ALARM_ID_LITH_BAT_LOW); } } /*¼îµç³Ø¿ÉÄܸù¾ÝʹÓôÎÊý£¬¶ø²»ÊÇʱ¼ä£¬×îÖÕ״̬ÅжϷ½Ê½´ý¶¨£¿ÔÝʱ»¹Ö»ÊǸù¾Ýµçѹֵ*/ if(pwr_vol_p->alka_vcc_status == BAT_V_DOWN){ __SYS_STATUS_ALARM_BYTES_SET(alka_down, ALARM_ID_ALKA_BAT_DOWN); __SYS_STATUS_ALARM_BYTES_SET(alka_low, ALARM_ID_ALKA_BAT_LOW); }else if(pwr_vol_p->alka_vcc_status == BAT_V_LOW){ __SYS_STATUS_BYTES_STATUS(alka_down, RESET, ALARM_ID_ALKA_BAT_DOWN); __SYS_STATUS_ALARM_BYTES_SET(alka_low, ALARM_ID_ALKA_BAT_LOW); }else{ __SYS_STATUS_BYTES_STATUS(alka_down, RESET, ALARM_ID_ALKA_BAT_DOWN); __SYS_STATUS_BYTES_STATUS(alka_low, RESET, ALARM_ID_ALKA_BAT_LOW); } /****Íâµçʵʱ¼à²â,Íâµç½ÓÈëÑÓ³Ù£¬ÍâµçÒÆ³ýҪ˲¼äÇл»»Øµç³Ø¹©µç******/ EX_Pwr_GPIO_Clk_Init(); if(HWIDO_EX_PWR_IO_READ == Bit_RESET){ if((pwr_vol_p->ex_pwr_out_cnt!=0)&&(pwr_vol_p->ex_pwr_out_cnt!=EX_PWR_CONTINUE_TIME)){ //³ÖÐøÖÐ;״̬¸Ä±ä£¬¿ÉÄÜ´ú±íÍâµç²»Îȶ¨£¬Æµ·±³öÏÖÔò±¨¾¯ } pwr_vol_p->ex_pwr_out_cnt = 0; if(pwr_vol_p->ex_pwr_in_cnt < EX_PWR_CONTINUE_TIME ) pwr_vol_p->ex_pwr_in_cnt++; if(pwr_vol_p->ex_pwr_in_cnt >=EX_PWR_CONTINUE_TIME){ if(__SYS_STATUS_BYTES_GET(power_state) != SET){ EX_PWR_ON; __SYS_STATUS_BYTES_STATUS(power_state, SET, ALARM_ID_NORMAL); //Íâµç½ÓÈëÖ®ºó´ò¿ªÍâµçÒÆ³ýÖжϣ¬ÍâµçÒÆ³ýÒªÁ¢¼´Çл»µç³Ø¹©µç GPIO_EXTI_Init( HWIDO_EX_PWR_PORT, HWIDO_EX_PWR_PIN, EXTI_RISING, ENABLE); up_comm_uart_enable();//ÍâµçʱʹÄÜÉÏλ»ú´®¿Ú //?Ìí¼ÓÍâµç±ä»¯±¨¾¯ } } }else { GPIO_EXTI_Init( HWIDO_EX_PWR_PORT, HWIDO_EX_PWR_PIN, EXTI_RISING, DISABLE); EX_PWR_OFF; __SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL); // if((pwr_vol_p->ex_pwr_in_cnt!=0)&&(pwr_vol_p->ex_pwr_in_cnt!=EX_PWR_CONTINUE_TIME)){ // //³ÖÐøÖÐ;״̬¸Ä±ä£¬¿ÉÄÜ´ú±íÍâµç²»Îȶ¨£¬Æµ·±³öÏÖÔò±¨¾¯ // } // pwr_vol_p->ex_pwr_in_cnt = 0; // if(pwr_vol_p->ex_pwr_out_cnt < EX_PWR_CONTINUE_TIME ) // pwr_vol_p->ex_pwr_out_cnt++; // // if(pwr_vol_p->ex_pwr_out_cnt >=EX_PWR_CONTINUE_TIME){ // if(__SYS_STATUS_BYTES_GET(power_state) != RESET){ // EX_PWR_OFF; // __SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL); // //?Ìí¼ÓÍâµç±ä»¯±¨¾¯ // } // } } } //³ÌÐòÆô¶¯ºóµçÔ´¹ÜÀí³õʼ»¯£¬ Ê×´ÎÍâµçÅжϣ¬Ê×´Îµç³Øµçѹ²É¼¯ void PowerManagrInit(void) { pwr_vol_g.lith_vcc = Get_Lith_Bat_Voltage();//﮵ç¼ì²â if(pwr_vol_g.lith_vcc < bat_para_g.lith_bat_under_v*0.1){ __SYS_STATUS_BYTES_STATUS(lith_down, SET, ALARM_ID_LITH_BAT_DOWN); __SYS_STATUS_BYTES_STATUS(lith_low, SET, ALARM_ID_LITH_BAT_LOW); }else if(pwr_vol_g.lith_vcc < bat_para_g.lith_bat_low_v*0.1){ __SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN); __SYS_STATUS_BYTES_STATUS(lith_low, SET, ALARM_ID_LITH_BAT_LOW); }else{ __SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN); __SYS_STATUS_BYTES_STATUS(lith_low, RESET, ALARM_ID_LITH_BAT_LOW); } // pwr_vol_g.alka_vcc = Get_Alka_Bat_Voltage();//¼îµç¼ì²â // if(pwr_vol_g.alka_vcc < bat_para_g.alka_bat_under_v*0.1){ // __SYS_STATUS_BYTES_STATUS(alka_down, SET, ALARM_ID_ALKA_BAT_DOWN); // __SYS_STATUS_BYTES_STATUS(alka_low, SET, ALARM_ID_ALKA_BAT_LOW); // }else if(pwr_vol_g.alka_vcc < bat_para_g.alka_bat_low_v*0.1){ // __SYS_STATUS_BYTES_STATUS(alka_down, RESET, ALARM_ID_ALKA_BAT_DOWN); // __SYS_STATUS_BYTES_STATUS(alka_low, SET, ALARM_ID_ALKA_BAT_LOW); // }else{ // __SYS_STATUS_BYTES_STATUS(alka_down, RESET, ALARM_ID_ALKA_BAT_DOWN); // __SYS_STATUS_BYTES_STATUS(alka_low, RESET, ALARM_ID_ALKA_BAT_LOW); // } //Íâµç¼ì²â,HWID0µÍλÓÐÍâµç EX_Pwr_GPIO_Clk_Init(); if(HWIDO_EX_PWR_IO_READ == Bit_RESET){ delay_ms(10); if(HWIDO_EX_PWR_IO_READ == Bit_RESET){ EX_PWR_ON; __SYS_STATUS_BYTES_STATUS(power_state, SET, ALARM_ID_NORMAL); }else{ EX_PWR_OFF; __SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL); } }else{ EX_PWR_OFF; __SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL); } }