forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-05-15 d14dd3a2106de793fbe08dc5a12cf80defd3258a
Function/FLOW_METER_DATA_COLLECT/pulse_and_alarm_line.c
@@ -1,33 +1,39 @@
#include "pulse_and_alarm_line.h"
#include "system_mem_para.h"
#include "gpio.h"
#include "sizhu_ctrl_word.h"
#include "tim.h"
__IO   int16_t pulse_count =0;  //Âö³å¼ÆÊý£¬À´Ò»¸öÂö³å+1,×îÖÕ½áËãµ½ÀÛ»ýÁ¿ÖÐ,½áËãÖ®ºóÇåÁã
__IO FlagStatus pulse_exti_flag = RESET;
__IO uint32_t pulse_check_delay_ms_cnt = 0;
void LP_lose_check_GPIO_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   OutputIO(LP_LOSE_CHECK_EN_PORT,LP_LOSE_CHECK_EN_PIN,OUT_PUSHPULL);
   LP_LOSE_CHECK_DISENABLE;
   LP_LOSE_CHECK_DISABLE;
}
void LV_lose_check_GPIO_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   OutputIO(LV_LOSE_CHECK_EN_PORT,LV_LOSE_CHECK_EN_PIN,OUT_PUSHPULL);
   LV_LOSE_CHECK_DISENABLE;
   LV_LOSE_CHECK_DISABLE;
}
void UV_lose_check_GPIO_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   OutputIO(UV_LOSE_CHECK_EN_PORT,UV_LOSE_CHECK_EN_PIN,OUT_PUSHPULL);
   UV_LOSE_CHECK_DISENABLE;
   UV_LOSE_CHECK_DISABLE;
}
void CV_lose_check_GPIO_Clk_Init(void)
{
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   OutputIO(CV_LOSE_CHECK_EN_PORT,CV_LOSE_CHECK_EN_PIN,OUT_PUSHPULL);
   CV_LOSE_CHECK_DISENABLE;
   CV_LOSE_CHECK_DISABLE;
}
void LF_PULSE_INT_GPIO_Clk_Init(void)
@@ -94,21 +100,296 @@
}
//Âö³åÏߺͱ¨¾¯Ïß³õʼ»¯
void PulseAndAlarmLineInit(void)
{
   /*Âö³åÏß*/
   if((flow_meter_para_g.broken_line_multiplex & BROKEN_LINE_MUTIPLEX_PULSE)==BROKEN_LINE_MUTIPLEX_PULSE){
      //ÓÅÏȸ´ÓÃ
      LP_lose_check_GPIO_Clk_Init();
      LF_PULSE_INT_GPIO_Clk_Init();
      if(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET){
         LF_PULSE_INT_GPIO_Clk_Init();
         LP_LOSE_CHECK_ENABLE;
         delay_ms(1);
         if(IO_JitterEliminationCheck(LF_PULSE_INT_PORT,LF_PULSE_INT_PIN,1,Bit_SET)==SET){
            __SYS_STATUS_BYTES_GET(broken_line) = SET ;
         }else{
            __SYS_STATUS_BYTES_GET(broken_line) = RESET ;
         }
      }else{
         LF_PULSE_INT_GPIO_Clk_sleep();
      }
      
      LP_LOSE_CHECK_DISABLE;
   }else if((flow_meter_para_g.flow_meter_conn_type==FLOW_METER_CONN_PULSE)||(flow_meter_para_g.flow_meter_conn_type==FLOW_METER_CONN_RS485_AND_PULSE)){
      //Èç¹û¿ªÆôÁËÂö³å
   }else{
      LP_lose_check_GPIO_Clk_Init();
      LF_PULSE_INT_GPIO_Clk_Init();
      LP_LOSE_CHECK_ENABLE;
      
      //Èç¹ûû¿ªÆôÆäËû¶ÏÏ߸´Óã¬ÔòÓÃÂö³åÐźÅÖ±½ÓÅж϶ÏÏß״̬
      if((flow_meter_para_g.broken_line_multiplex& 0xf0) ==BROKEN_LINE_MUTIPLEX_NONE){
         if((flow_meter_para_g.flow_meter_code !=ASMODBUS)&&(flow_meter_para_g.flow_meter_code !=AS100MODBUS)&&(flow_meter_para_g.flow_meter_code !=SIARGO_MODBUS)){
            if(IO_JitterEliminationCheck(LF_PULSE_INT_PORT,LF_PULSE_INT_PIN,501,Bit_RESET)==SET){
               __SYS_STATUS_BYTES_GET(broken_line) = SET ;
            }else{
               __SYS_STATUS_BYTES_GET(broken_line) = RESET ;
            }
         }else{
            __SYS_STATUS_BYTES_GET(broken_line) = RESET ;
         }
      }
      BasicTimer16_Init(BT1,240,PULSE_CHECK_DELAY_MS*(SYSCLOCK_U/240/1000)); //PULSE_CHECK_DELAY_MS ¶¨Ê±£¬ÓÃÓÚÂö³åµÄÑÓʱ¼ì²â£¬Âö³å³ÖÐø³¬¹ýPULSE_CHECK_DELAY_MSÓÐЧ£¬È¥¶¶
   }else{
      //²»ÓÃÂö³åÏß
      LP_lose_check_GPIO_Clk_Init();
      LF_PULSE_INT_GPIO_Clk_sleep();
      LP_LOSE_CHECK_DISABLE;
   }
   
   
   /*Ƿѹ±¨¾¯Ïß*/
   if(((flow_meter_para_g.broken_line_multiplex & 0xf0)==BROKEN_LINE_MUTIPLEX_DOWN_PWR)&&(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET)){
      //ÓÅÏȸ´ÓÃ
      UV_lose_check_GPIO_Clk_Init();
      Under_Pwr_INT_GPIO_Clk_Init();
      UV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(UNDER_PWR_INT_PORT,UNDER_PWR_INT_PIN,1,Bit_SET)==SET){
         __SYS_STATUS_BYTES_GET(broken_line) = SET ;
      }else{
            __SYS_STATUS_BYTES_GET(broken_line) = RESET ;
      }
      UV_LOSE_CHECK_DISABLE;
   }else if(__SYS_ALARM_CTL_BYTES_GET(flow_meter_under_pwr) == SET){
      //Èç¹û¿ªÆôÁËÍⲿǷѹ±¨¾¯
      UV_lose_check_GPIO_Clk_Init();
      Under_Pwr_INT_GPIO_Clk_Init();
      UV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(UNDER_PWR_INT_PORT,UNDER_PWR_INT_PIN,1,Bit_RESET)==SET){
         __SYS_STATUS_BYTES_GET(flow_meter_under_pwr) = SET ;
      }else{
         __SYS_STATUS_BYTES_GET(flow_meter_under_pwr) = RESET ;
      }
      UV_LOSE_CHECK_DISABLE;
   }else{
      //²»ÓÃÂö³åÏß
      UV_lose_check_GPIO_Clk_Init();
      Under_Pwr_INT_GPIO_Clk_sleep();
      UV_LOSE_CHECK_DISABLE;
   }
   
}
   /*µÍµç±¨¾¯Ïß*/
   if(((flow_meter_para_g.broken_line_multiplex & 0xf0)==BROKEN_LINE_MUTIPLEX_LOW_PWR)&&(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET)){
      //ÓÅÏȸ´ÓÃ
      LV_lose_check_GPIO_Clk_Init();
      Low_Pwr_INT_GPIO_Clk_Init();
      LV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(LOW_PWR_INT_PORT,LOW_PWR_INT_PIN,1,Bit_SET)==SET){
         __SYS_STATUS_BYTES_GET(broken_line) = SET ;
      }else{
            __SYS_STATUS_BYTES_GET(broken_line) = RESET ;
      }
      LV_LOSE_CHECK_DISABLE;
   }else if(__SYS_ALARM_CTL_BYTES_GET(flow_meter_low_pwr) == SET){
      //Èç¹û¿ªÆôÁËÍⲿǷѹ±¨¾¯
      LV_lose_check_GPIO_Clk_Init();
      Low_Pwr_INT_GPIO_Clk_Init();
      LV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(LOW_PWR_INT_PORT,LOW_PWR_INT_PIN,1,Bit_RESET)==SET){
         __SYS_STATUS_BYTES_GET(flow_meter_low_pwr) = SET ;
      }else{
            __SYS_STATUS_BYTES_GET(flow_meter_low_pwr) = RESET ;
      }
      UV_LOSE_CHECK_DISABLE;
   }else{
      //²»ÓÃÂö³åÏß
      LV_lose_check_GPIO_Clk_Init();
      Low_Pwr_INT_GPIO_Clk_sleep();
      LV_LOSE_CHECK_DISABLE;
   }
   /*¹Ø·§±¨¾¯Ïß*/
   //ÒòΪÐèÒª´¥·¢¹Ø·§£¬½ö¸´ÓöÏÏß¹¦ÄÜÔÚÕâÀïÅжϣ¬±¾Éí¹Ø·§¹¦ÄÜÔÚÖ÷Ñ­»·ÀïÃæ´¦Àí
   CV_lose_check_GPIO_Clk_Init();
   Close_Valve_Alarm_Line_GPIO_Clk_sleep();
   CV_LOSE_CHECK_DISABLE;
}
#define ALARM_LINE_CONTINUE_TIMES  3       //±¨¾¯Ïß״̬³ÖÐøALARM_LINE_CONTINUE_TIMESÃëʱ¼äΪÓÐЧ
void PulseAndAlarmLineCheck(void)
{
   static   uint8_t broken_line_cnt=0;
   static   uint8_t low_pwr_line_cnt=0;
   static   uint8_t under_pwr_line_cnt=0;
   static   uint8_t close_valve_line_cnt=0;
   /*Âö³åÏß*/
   if((flow_meter_para_g.broken_line_multiplex & BROKEN_LINE_MUTIPLEX_PULSE)==BROKEN_LINE_MUTIPLEX_PULSE){
      //ÓÅÏȸ´ÓÃ
      LP_lose_check_GPIO_Clk_Init();
      if(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET){
         LF_PULSE_INT_GPIO_Clk_Init();
         LP_LOSE_CHECK_ENABLE;
         delay_ms(1);
         if(IO_JitterEliminationCheck(LF_PULSE_INT_PORT,LF_PULSE_INT_PIN,1,Bit_SET)==SET){
            broken_line_cnt ++  ;
         }else{
            broken_line_cnt = 0 ;
         }
      }else{
         LF_PULSE_INT_GPIO_Clk_sleep();
      }
      LP_LOSE_CHECK_DISABLE;
   }else if((flow_meter_para_g.flow_meter_conn_type==FLOW_METER_CONN_PULSE)||(flow_meter_para_g.flow_meter_conn_type==FLOW_METER_CONN_RS485_AND_PULSE)){
      //Èç¹û¿ªÆôÁËÂö³å
      LP_lose_check_GPIO_Clk_Init();
      LF_PULSE_INT_GPIO_Clk_Init();
      LP_LOSE_CHECK_ENABLE;
      //Èç¹ûû¿ªÆôÆäËû¶ÏÏ߸´Óã¬ÔòÓÃÂö³åÐźÅÖ±½ÓÅж϶ÏÏß״̬
      if((flow_meter_para_g.broken_line_multiplex& 0xf0) ==BROKEN_LINE_MUTIPLEX_NONE){
         if((flow_meter_para_g.flow_meter_code !=ASMODBUS)&&(flow_meter_para_g.flow_meter_code !=AS100MODBUS)&&(flow_meter_para_g.flow_meter_code !=SIARGO_MODBUS)){
            if(IO_JitterEliminationCheck(LF_PULSE_INT_PORT,LF_PULSE_INT_PIN,1,Bit_RESET)==SET){
               broken_line_cnt ++  ;
            }else{
               broken_line_cnt = 0 ;
            }
         }else{
            broken_line_cnt = 0 ;
         }
      }
      BasicTimer16_Init(BT1,240,PULSE_CHECK_DELAY_MS*(SYSCLOCK_U/240/1000)); //PULSE_CHECK_DELAY_MS ¶¨Ê±£¬ÓÃÓÚÂö³åµÄÑÓʱ¼ì²â£¬Âö³å³ÖÐø³¬¹ýPULSE_CHECK_DELAY_MSÓÐЧ£¬È¥¶¶
   }else{
      //²»ÓÃÂö³åÏß
      LP_lose_check_GPIO_Clk_Init();
      LF_PULSE_INT_GPIO_Clk_sleep();
      LP_LOSE_CHECK_DISABLE;
   }
   /*Ƿѹ±¨¾¯Ïß*/
   if(((flow_meter_para_g.broken_line_multiplex & 0xf0)==BROKEN_LINE_MUTIPLEX_DOWN_PWR)&&(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET)){
      //ÓÅÏȸ´ÓÃ
      UV_lose_check_GPIO_Clk_Init();
      Under_Pwr_INT_GPIO_Clk_Init();
      UV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(UNDER_PWR_INT_PORT,UNDER_PWR_INT_PIN,1,Bit_SET)==SET){
         broken_line_cnt ++  ;
      }else{
         broken_line_cnt = 0 ;
      }
      UV_LOSE_CHECK_DISABLE;
   }else if(__SYS_ALARM_CTL_BYTES_GET(flow_meter_under_pwr) == SET){
      //Èç¹û¿ªÆôÁËÍⲿǷѹ±¨¾¯
      UV_lose_check_GPIO_Clk_Init();
      Under_Pwr_INT_GPIO_Clk_Init();
      UV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(UNDER_PWR_INT_PORT,UNDER_PWR_INT_PIN,1,Bit_RESET)==SET){
         __SYS_STATUS_BYTES_GET(flow_meter_under_pwr) = SET ;
      }else{
         __SYS_STATUS_BYTES_GET(flow_meter_under_pwr) = RESET ;
      }
      UV_LOSE_CHECK_DISABLE;
   }else{
      //²»ÓÃÂö³åÏß
      UV_lose_check_GPIO_Clk_Init();
      Under_Pwr_INT_GPIO_Clk_sleep();
      UV_LOSE_CHECK_DISABLE;
   }
   /*µÍµç±¨¾¯Ïß*/
   if(((flow_meter_para_g.broken_line_multiplex & 0xf0)==BROKEN_LINE_MUTIPLEX_LOW_PWR)&&(__SYS_ALARM_CTL_BYTES_GET(broken_line) == SET)){
      //ÓÅÏȸ´ÓÃ
      LV_lose_check_GPIO_Clk_Init();
      Low_Pwr_INT_GPIO_Clk_Init();
      LV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(LOW_PWR_INT_PORT,LOW_PWR_INT_PIN,1,Bit_SET)==SET){
         broken_line_cnt ++  ;
      }else{
         broken_line_cnt = 0 ;
      }
      LV_LOSE_CHECK_DISABLE;
   }else if(__SYS_ALARM_CTL_BYTES_GET(flow_meter_low_pwr) == SET){
      //Èç¹û¿ªÆôÁËÍⲿǷѹ±¨¾¯
      LV_lose_check_GPIO_Clk_Init();
      Low_Pwr_INT_GPIO_Clk_Init();
      LV_LOSE_CHECK_ENABLE;
      delay_ms(1);
      if(IO_JitterEliminationCheck(LOW_PWR_INT_PORT,LOW_PWR_INT_PIN,1,Bit_RESET)==SET){
         __SYS_STATUS_BYTES_GET(flow_meter_low_pwr) = SET ;
      }else{
            __SYS_STATUS_BYTES_GET(flow_meter_low_pwr) = RESET ;
      }
      UV_LOSE_CHECK_DISABLE;
   }else{
      //²»ÓÃÂö³åÏß
      LV_lose_check_GPIO_Clk_Init();
      Low_Pwr_INT_GPIO_Clk_sleep();
      LV_LOSE_CHECK_DISABLE;
   }
   /*¹Ø·§±¨¾¯Ïß*/
   //ÒòΪÐèÒª´¥·¢¹Ø·§£¬³õʼ¿ÉÒÔ²»ÓÃÅжϣ¬ÔÚÖ÷Ñ­»·ÀïÃæ´¦Àí
   CV_lose_check_GPIO_Clk_Init();
   Close_Valve_Alarm_Line_GPIO_Clk_sleep();
   CV_LOSE_CHECK_DISABLE;
}