From 71f8bdb7c63acc381d71105bb950411029f4250f Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Mon, 03 Jun 2024 20:00:58 +0800
Subject: [PATCH] 测试远传

---
 Function/POWER_MANAGE/power_manage.c |  384 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 360 insertions(+), 24 deletions(-)

diff --git a/Function/POWER_MANAGE/power_manage.c b/Function/POWER_MANAGE/power_manage.c
index 6b16adb..4a21a43 100644
--- a/Function/POWER_MANAGE/power_manage.c
+++ b/Function/POWER_MANAGE/power_manage.c
@@ -9,22 +9,26 @@
 #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 = {LMS_PERIOD, AMS_PERIOD, SET,.lith_vcc_per = 100}; // Ĭ���ϵ�ɼ�һ�ε�����MCU�¶�
+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(LITHIUM_DETECTION_PORT,LITHIUM_DETECTION_PIN,OUT_PUSHPULL);
+	OutputIO(LITH_DETECTION_PORT,LITH_DETECTION_PIN,OUT_PUSHPULL);
 	InputtIO( LITH_PWR_LOSE_PORT, LITH_PWR_LOSE_PIN, IN_NORMAL);
 
 	
-	OutputIO(ALKALI_DETECTION_PORT,ALKALI_DETECTION_PIN,OUT_PUSHPULL);
-	InputtIO_H(  ALKALI_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;
@@ -33,14 +37,17 @@
 	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);//ADC_IN4
-	OutputIO(LITHIUM_DETECTION_PORT,LITHIUM_DETECTION_PIN,OUT_PUSHPULL);
-//	AnalogIO(LIT_PWR_UNDER_PORT,LIT_PWR_UNDER_PIN);//ADC_5
+	AnalogIO(LIT_ADC_PORT,LIT_ADC_PIN);//
+	GPIOx_ANEN_Setable(LIT_ADC_PORT,LIT_ADC_PIN,ENABLE);
+	OutputIO(LITH_DETECTION_PORT,LITH_DETECTION_PIN,OUT_PUSHPULL);
+//	AnalogIO(LIT_PWR_UNDER_PORT,LIT_PWR_UNDER_PIN);
 	
 }
 
@@ -48,8 +55,23 @@
 {
 	CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱ�ӣ�GPIO��ʹ�ܺ���
 	AnalogIO_H(ALK_ADC_PIN);
-	OutputIO(ALKALI_DETECTION_PORT,ALKALI_DETECTION_PIN,OUT_PUSHPULL);
+//	GPIOx_ANEN_Setable(ALK_ADC_PORT,ALK_ADC_PIN,ENABLE);
+	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��ʹ�ܺ���
+	OutputIO( BORROW_PWR_PORT, BORROW_PWR_PIN, OUT_PUSHPULL);
+}
+
 
 /******************************************
  * func:    Get_vol_Average
@@ -106,9 +128,9 @@
   float battery_vol = 0;
   ad_data_s *data_ins;
 	Alka_Battery_GPIO_Clk_Init();
-	ADC_IN8_Init();
+	ADC_IN10_Init();
   ALK_DEC_ON;
-//  delay_ms(10);
+  delay_ms(5);
   // �������������ڴ�ռ�
   if ((data_ins = (ad_data_s *)malloc(sizeof(ad_data_s) + sizeof(uint16_t) * AD_ALKA_BAT_CNT)) != NULL)
   {
@@ -140,9 +162,9 @@
   float battery_vol = 0;
   ad_data_s *data_ins;
 	Lith_Battery_GPIO_Clk_Init();
-	ADC_IN4_Init();
+	ADC_IN5_Init();
   LIT_DEC_ON;
-//  delay_ms(10);
+  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;
@@ -203,24 +225,146 @@
 }
 
 
-/*��ص�ѹ״̬�ж�*/
-#define LITH_LOW_EFFECTIVE_VOLTAGE_VALUE (3.2f - 2.9f)
-void Lith_Bat_Voltage_Status(float lith_vcc,int8_t * pLith_vcc_per)
+#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;
+		}
+		
+	}
     
 }
 
-void Alka_Bat_Voltage_Status(float alka_vcc)
+#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 ++;
 
+		//? �洢���ݶ�ÿСʱ�洢һ��
+	}
+	
+}
 
-/*��õ�ص�ѹ*/
-void GetBatVoltagePro(PWR_VOL_T *pwr_vol_p)
+#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;	
@@ -242,24 +386,216 @@
 	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){
+			delay_ms(10);
+			if(ALKA_PWR_LOSE_IO_READ == Bit_RESET){
+				//ȷ��﮵����
+				__SYS_STATUS_ALARM_BYTES_SET(alka_remove,ALARM_ID_ALKA_BAT_REMOVAL);
+			}
+		}else{
+			__SYS_STATUS_BYTES_STATUS(alka_remove, RESET, 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 != LMS_NONE)&&(delay_time_cnt >= DELAY_TIME) ){
-		pwr_vol_p->alka_flag = AMS_PERIOD;
+	if((pwr_vol_p->alka_flag != AMS_NONE)&&(delay_time_cnt >= DELAY_TIME) ){
+		pwr_vol_p->alka_flag = AMS_NONE;
 		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();//���ʱʹ����λ������
+				lcd_first_wake_up_flag_g = SET;  //�����������Ļ�����ֳ���
+				
+				//���ر�
+				borrow_Pwr_GPIO_Clk_Init();
+				BORROW_PWR_OFF;
+				
+				//?������仯��������籨�����⴦������ֻ�����������أ�����ʾ������
+				if(__SYS_ALARM_CTL_BYTES_GET(power_state)){                   
+					if(__SYS_ALARM_REPORT_CTL_BYTES_GET(power_state) ==SET){ 				
+						if(AlarmCntIncrease(ALARM_ID_EX_POWER_STATUS_CHANGE) ==SET){														
+							system_alarm_word_g.alarm_word.power_state = SET;						
+							AlarmTriggerWrcFlag = SET;																	
+						}																														
+					}          																																	
+				}
+				
+			}
+		}
+	}else
+	{
+		GPIO_EXTI_Init( HWIDO_EX_PWR_PORT, HWIDO_EX_PWR_PIN, EXTI_RISING, DISABLE);
+		EX_PWR_OFF;
+		//?������仯��������籨�����⴦���Ƴ����������뷧�أ�����ʾ������
+		if(__SYS_STATUS_BYTES_GET(power_state) ==SET){
+			__SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL);//��״̬�����뱨����ʾ
+			if(__SYS_ALARM_CTL_BYTES_GET(power_state)){
+					system_alarm_word_for_valve_g.alarm_word.power_state = SET;  //����Ƴ�����Ҫ��������
+					if(__SYS_ALARM_REPORT_CTL_BYTES_GET(power_state) ==SET){ 				
+						if(AlarmCntIncrease(ALARM_ID_EX_POWER_STATUS_CHANGE) ==SET){														
+							system_alarm_word_g.alarm_word.power_state = SET;						
+							AlarmTriggerWrcFlag = SET;																	
+						}																														
+					}          																																	
+				}
+		}
+		//����Ƴ��󴮿ڽ�ֹ��Ҳ����������ǰ��ֹ
+		
+		
+//		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);
+		//������֮�������Ƴ��жϣ�����Ƴ�Ҫ�����л���ع���
+			GPIO_EXTI_Init( HWIDO_EX_PWR_PORT, HWIDO_EX_PWR_PIN, EXTI_RISING, ENABLE);
+			
+			up_comm_uart_enable();//���ʱʹ����λ������
+		}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);
+	}
+	
+	
+}

--
Gitblit v1.9.3