From fa6053f85287163f6e2d5dba690bec05cbc95f4a Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Fri, 07 Jun 2024 17:00:49 +0800
Subject: [PATCH] 增加阀控事件记录及修改阀控命令
---
Function/POWER_MANAGE/power_manage.c | 603 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 603 insertions(+), 0 deletions(-)
diff --git a/Function/POWER_MANAGE/power_manage.c b/Function/POWER_MANAGE/power_manage.c
new file mode 100644
index 0000000..a06ed1b
--- /dev/null
+++ b/Function/POWER_MANAGE/power_manage.c
@@ -0,0 +1,603 @@
+#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);//
+ 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);
+
+}
+
+void Alka_Battery_GPIO_Clk_Init(void)
+{
+ CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱ�ӣ�GPIO��ʹ�ܺ���
+ AnalogIO_H(ALK_ADC_PIN);
+// 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
+ * 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){
+ 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 != 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();//���ʱʹ����λ������
+ uart_ctrl_para_g.UP_COMM_rxto_flag = RESET;
+ 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;
+ pwr_vol_p->ex_pwr_in_cnt = 0;
+ //?������仯��������籨��������Ƴ����������뷧�أ�����ʾ������
+ 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