#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_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_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_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_DISABLE; } void LF_PULSE_INT_GPIO_Clk_Init(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý InputtIO(LF_PULSE_INT_PORT,LF_PULSE_INT_PIN,IN_NORMAL); } void LF_PULSE_INT_GPIO_Clk_sleep(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý CloseIO(LF_PULSE_INT_PORT,LF_PULSE_INT_PIN); } void Low_Pwr_INT_GPIO_Clk_Init(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý InputtIO(LOW_PWR_INT_PORT,LOW_PWR_INT_PIN,IN_NORMAL); } void Low_Pwr_INT_GPIO_Clk_sleep(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý CloseIO(LOW_PWR_INT_PORT,LOW_PWR_INT_PIN); } void Under_Pwr_INT_GPIO_Clk_Init(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý InputtIO(UNDER_PWR_INT_PORT,UNDER_PWR_INT_PIN,IN_NORMAL); } void Under_Pwr_INT_GPIO_Clk_sleep(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý CloseIO(UNDER_PWR_INT_PORT,UNDER_PWR_INT_PIN); } void Close_Valve_Alarm_Line_GPIO_Clk_Init(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý InputtIO(CV_ALM_A_PORT,CV_ALM_A_PIN,IN_NORMAL); } void Close_Valve_Alarm_Line_GPIO_Clk_sleep(void) { CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý CloseIO(CV_ALM_A_PORT,CV_ALM_A_PIN); } void Pulse_And_Alarm_Line_IO_Init(void) { LP_lose_check_GPIO_Clk_Init(); LF_PULSE_INT_GPIO_Clk_sleep(); LV_lose_check_GPIO_Clk_Init(); Low_Pwr_INT_GPIO_Clk_sleep(); UV_lose_check_GPIO_Clk_Init(); Under_Pwr_INT_GPIO_Clk_sleep(); CV_lose_check_GPIO_Clk_Init(); Close_Valve_Alarm_Line_GPIO_Clk_sleep(); } //Âö³åÏߺͱ¨¾¯Ïß³õʼ»¯ 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(); 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)){ //Èç¹û¿ªÆôÁËÂö³å 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; }