forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

wujiazhi
2024-06-13 72def895431ad7a08e635b11f3da738e2b2c4618
HARDWARE/EXTI/exti.c
@@ -2,234 +2,48 @@
#include "key.h"
#include "gpio.h"
#include "uart.h"
#include "eeprom.h"
#include "extern_rtc.h"
#include "system_general_para.h"
#include "key.h"
#include "e2p.h"
#include "valve_control.h"
#include "system_mem_para.h"
#include "system_run_fun.h"
#include "power_manage.h"
#include "pulse_and_alarm_line.h"
#include "tim.h"
#include "wireless_remote_comm.h"
#include "main.h"
#include "lcd.h"
#include "master_slave_inter.h"
#include "low_pwr_test.h"
void NMI_Handler(void)
{
//   //NWKUPĬÈÏÁ¬½Óµ½ÁËcpuµÄNMI²»¿ÉÆÁ±ÎÖжϣ¬²»ÊÜNVIC¿ØÖÆ£¬²»ÊÜÈ«¾ÖÖжÏʹÄÜ¿ØÖÆ£¬»½ÐѺó±ØÈ»½øNMIÖжÏ
//   if( SET == PMU_WKFR_WKPxF_Chk(PINWKEN_PF5) )
//   {
//      PMU_WKFR_WKPxF_Clr(PINWKEN_PF5);
//      __SYS_STATUS_ALARM_BYTES_SET(uncap_state_1);
//#ifdef RS232_PRINTF
//         printf("¿ª¸Ç±¨¾¯\r\n");
//#endif
//   }
}
void GPIO_IRQHandler(void)
{
// void NMI_Handler(void)
// {
//    //NWKUPĬÈÏÁ¬½Óµ½ÁËcpuµÄNMI²»¿ÉÆÁ±ÎÖжϣ¬²»ÊÜNVIC¿ØÖÆ£¬²»ÊÜÈ«¾ÖÖжÏʹÄÜ¿ØÖÆ£¬»½ÐѺó±ØÈ»½øNMIÖжÏ
//    if( SET == PMU_WKFR_WKPxF_Chk(PINWKEN_PF5) )
//    {
//       PMU_WKFR_WKPxF_Clr(PINWKEN_PF5);
//       __SYS_STATUS_ALARM_BYTES_SET(uncap_state_1);
// #ifdef RS232_PRINTF
//          printf("¿ª¸Ç±¨¾¯\r\n");
// #endif
//    }
// }
//void GPIO_IRQHandler(void)
//{
//   if(__SYS_DELAY_SEC_FLAG_GET(sys_active_time) == SET && LargeCurrent_LimitingProcess() == 3)
      SysWakeUp_ClockCfg();
   if(GPIO_EXTI_EXTIISR_ChkEx(EXT_RTC_INT_PORT, EXT_RTC_INT_PIN)  == SET) //RTCÖжÏ
   {
      GPIO_EXTI_EXTIISR_ClrEx(EXT_RTC_INT_PORT, EXT_RTC_INT_PIN);
      sys_run_period = SET;
       // ÅжÏϵͳ¼¤»îʱ¼äÊÇ·ñ½áÊø
      if (sys_delay_sec_para_g.sys_active_time.delay_time)
      {
         if (!(--sys_delay_sec_para_g.sys_active_time.delay_time))
         {
            sys_delay_sec_para_g.sys_active_time.delay_flag = SET;
         }
      }
      // ÅжÏÉÏλ»ú³¬Ê±Ê±¼ä
      if (sys_delay_sec_para_g.UC_active_time.delay_time)
      {
         if (!(--sys_delay_sec_para_g.UC_active_time.delay_time))
            sys_delay_sec_para_g.UC_active_time.delay_flag = SET;
      }
      // ÅжÏGPRS³¬Ê±Ê±¼ä
      if (sys_delay_sec_para_g.wrc_timeout_para.delay_time)
      {
         if (!(--sys_delay_sec_para_g.wrc_timeout_para.delay_time))
            sys_delay_sec_para_g.wrc_timeout_para.delay_flag = SET;
      }
      //wrcÖØ±¨Ê±¼äµ¹¼ÆÊ±
      if (wrc_ctrl_para_g.wrc_restart_time_sec_cnt)
      {
         if (!(--wrc_ctrl_para_g.wrc_restart_time_sec_cnt))
            ;
      }
   }
   if(GPIO_EXTI_EXTIISR_ChkEx(KEY1_PORT, KEY1_PIN)  == SET) //key1ÖжÏ,µçÔ´
   {
      GPIO_EXTI_EXTIISR_ClrEx(KEY1_PORT, KEY1_PIN);
      if(KEY1_IO_READ==Bit_RESET)
      {
         if((KEY3_IO_READ==Bit_RESET)&&(__SYS_DELAY_SEC_TIME_GET_(sys_active_time) >0))
         {
            //¿ª·§
            if(__SYS_STATUS_BYTES_GET(account_state) == RESET ||__SYS_STATUS_BYTES_GET(valve_lock) == RESET )
               ValveCtrlOrder(VC_OPEN);
         }else if((KEY2_IO_READ==Bit_RESET)&&(__SYS_DELAY_SEC_TIME_GET_(sys_active_time) >0))
         {
            //¹Ø·§
            if(__SYS_STATUS_BYTES_GET(account_state) == RESET)
               ValveCtrlOrder(VC_CLOSE);
         }else
         {
            //µ¥»÷µçÔ´
            if(__SYS_DELAY_SEC_TIME_GET_(sys_active_time) ==0){
               //Ê״λ½ÐÑ£¬LCD°åÏÈÉϵ磬ʹµÄkey2ºÍkey3À­ÉÏÉúЧ£¬²¢ÇÒÊ״λ½ÐÑÐèÒª³õʼ»¯Òº¾§Çý¶¯£¬Öñê־λ
               lcd_first_wake_up_flag_g = SET;
               Lcd_GPIO_Init();
               LCD_PWR_ON;
            }
            __SYS_DELAY_SEC_TIME_SET_(sys_active_time,SYS_WAKE_UP_TIME);
            lcd_wake_up_flag_g = SET;
            Key_GPIO_Init();
            pwr_vol_g.lith_flag = LMS_KEY; //°´µçÔ´¼ü²É¼¯Ò»´Îµç³Øµçѹ
            pwr_vol_g.alka_flag = AMS_KEY;
         }
      }
   }
//   if(GPIO_EXTI_EXTIISR_ChkEx(KEY2_PORT, KEY2_PIN)  == SET) //key2ÖжÏ
//      SysWakeUp_ClockCfg();
//   if(GPIO_EXTI_EXTIISR_ChkEx(KEYA_S1_PORT, KEYA_S1_PIN)  == SET)
//   {
//      GPIO_EXTI_EXTIISR_ClrEx(KEY2_PORT, KEY2_PIN);
//      if(KEY2_IO_READ==Bit_RESET)
//      {
//         lcd_wake_up_flag_g = SET;
//         if(__SYS_DELAY_SEC_TIME_GET_(sys_active_time) >0){ //¼¤»îºóÈÎÒâ°´¼üÖØÖü¤»îʱ¼ä
//            __SYS_DELAY_SEC_TIME_SET_(sys_active_time,SYS_WAKE_UP_TIME);
//         }
//      }
//      GPIO_EXTI_EXTIISR_ClrEx(KEYA_S1_PORT, KEYA_S1_PIN);
//      GPIO_EXTI_Close(KEYA_S1_PORT,KEYA_S1_PIN);
//      InfraRed_Uart0_Clk_Init();
//      Key_Awaken_Init();
//      Botton_LPTimer_Clk_Init();
//      LPTIM_CR_EN_Setable(ENABLE);
//#ifdef RS232_PRINTF
//    printf("KEYA_EXTI\r\n");
//#endif
//    __SYS_DELAY_SEC_FLAG_CLEAR_(sys_active_time); // Çå³ýϵͳ¼¤»îʱ¼ä±ê־λ
//    pwr_vol_g.lith_flag = LMS_KEY;                // »½ÐѺóÁ¢Âí²É¼¯Ò»´ÎµçÁ¿
//    pwr_vol_g.alka_flag = AMS_KEY;
//      if(GPIO_ReadOutputDataBit(LCD_PWR_GPIO_PORT,LCD_PWR_PIN) == Bit_RESET)
//         Lcd_Sys_Init(); // °´¼ü»½ÐÑÆÁÄ»
//   }
//
//   if(GPIO_EXTI_EXTIISR_ChkEx(KEY3_PORT, KEY3_PIN)  == SET) //key3ÖжÏ
//   {
//      GPIO_EXTI_EXTIISR_ClrEx(KEY3_PORT, KEY3_PIN);
//      if(KEY3_IO_READ==Bit_RESET)
//      {
//         if(KEY2_IO_READ==Bit_RESET)
//         {
//            //²É¼¯Á÷Á¿¼ÆÊý¾Ý²¢´¥·¢Éϱ¨
//            start_rs485_g = RS485_START_REASON_KEY;
//            start_wrc_g = WRC_MEANS_KEY;
//         }else{
//            lcd_wake_up_flag_g = SET;
//         }
//
//         if(__SYS_DELAY_SEC_TIME_GET_(sys_active_time) >0){ //¼¤»îºóÈÎÒâ°´¼üÖØÖü¤»îʱ¼ä
//            __SYS_DELAY_SEC_TIME_SET_(sys_active_time,SYS_WAKE_UP_TIME);
//         }
//
//      }
//   }
//   if(GPIO_EXTI_EXTIISR_ChkEx(KEY4_PORT, KEY4_PIN)  == SET) //key4ÖжÏ
//   {
//      GPIO_EXTI_EXTIISR_ClrEx(KEY4_PORT, KEY4_PIN);
//   }
   if(GPIO_EXTI_EXTIISR_ChkEx(Motor_OP_PORT, Motor_OP_PIN)  == SET) //·§ÃÅ¿ª¹Øµ½Î»ÐźÅÓõÄͬһ¸öÖжϣ¬ËùÒÔ·ÅÒ»Æð´¦Àí
   {
         GPIO_EXTI_EXTIISR_ClrEx(Motor_OP_PORT, Motor_OP_PIN);
         if(save_valve_para_g.valve_status == VALVE_OPENING){
            if(Motor_OP_IO_READ == Bit_RESET){  //Òý½Å״̬ȷÈÏ
               ValveMotorStop();//¹Ø±ÕÇý¶¯
               save_valve_para_g.valve_status = VALVE_OPEN;
            }
         }else if(save_valve_para_g.valve_status == VALVE_CLOSING){
            if(Motor_CL_IO_READ == Bit_RESET){  //Òý½Å״̬ȷÈÏ
               ValveMotorStop();//¹Ø±ÕÇý¶¯
               save_valve_para_g.valve_status = VALVE_CLOSE;
            }
         }
   }
//   if(GPIO_EXTI_EXTIISR_ChkEx(Motor_CL_PORT, Motor_CL_PIN)  == SET) //·§ÃŹص½Î»ÖжÏ
//   {
//      GPIO_EXTI_EXTIISR_ClrEx(Motor_CL_PORT, Motor_CL_PIN);
//      if(Motor_CL_IO_READ == Bit_RESET){  //Òý½Å״̬ȷÈÏ
//         ValveMotorStop();//¹Ø±ÕÇý¶¯
//         save_valve_para_g.valve_status = VALVE_CLOSE;
//      }
//
//   }
   if(GPIO_EXTI_EXTIISR_ChkEx(LITH_PWR_LOSE_PORT, LITH_PWR_LOSE_PIN)  == SET)
   {
      GPIO_EXTI_EXTIISR_ClrEx(LITH_PWR_LOSE_PORT, LITH_PWR_LOSE_PIN);
//      __SYS_STATUS_ALARM_BYTES_SET(lith_remove);
      pwr_vol_g.lith_lose_check_flag = SET;
   }
//   if(GPIO_EXTI_EXTIISR_ChkEx(ALKA_PWR_LOSE_PORT, ALKA_PWR_LOSE_PIN)  == SET)
//   {
//      GPIO_EXTI_EXTIISR_ClrEx(ALKA_PWR_LOSE_PORT, ALKA_PWR_LOSE_PIN);
////      __SYS_STATUS_ALARM_BYTES_SET(alka_remove);
//
//      pwr_vol_g.alka_lose_check_flag = SET;
//   }
   if(GPIO_EXTI_EXTIISR_ChkEx(LF_PULSE_INT_PORT, LF_PULSE_INT_PIN)  == SET) //¼Æ·ÑµÍƵÂö³å
   {
      GPIO_EXTI_EXTIISR_ClrEx(LF_PULSE_INT_PORT, LF_PULSE_INT_PIN);
      //Ŀǰ½ö¿ªÆô¼Æ·ÑÂö³å¹¦ÄÜÇÒûÓб»¸´ÓòÅÐèÒª´¦Àí
      if(((flow_meter_para_g.broken_line_multiplex & BROKEN_LINE_MUTIPLEX_PULSE)!=BROKEN_LINE_MUTIPLEX_PULSE)&&   \
      ((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))){
         pulse_exti_flag = SET;
         BTx_CR1_CHEN_Setable(BT1,ENABLE);   //¿ªÆô¶¨Ê±Æ÷
      }
   }
   if(GPIO_EXTI_EXTIISR_ChkEx(HWIDO_EX_PWR_PORT, HWIDO_EX_PWR_PIN)  == SET) //ÍâµçÒÆ³ýÖжÏ
   {
      GPIO_EXTI_EXTIISR_ClrEx(HWIDO_EX_PWR_PORT, HWIDO_EX_PWR_PIN);
      //ÍâµçÒÆ³ýÁËÁ¢¼´¹Ø±ÕÍâµç¿ØÖÆ
      EX_PWR_OFF;
//      __SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL);
   }
   if(GPIO_EXTI_EXTIISR_ChkEx(LIMIT_TRIGGER_PORT, LIMIT_TRIGGER_PIN)  == SET) //ÏÞÁ÷´¥·¢
   {
      GPIO_EXTI_EXTIISR_ClrEx(LIMIT_TRIGGER_PORT, LIMIT_TRIGGER_PIN);
      //¼Ç¼ÏÞÁ÷´¥·¢Ê±µÄÐÅÏ¢
      arrayA_2_arrayB((uint8_t *)&sys_clockBCD_g.year,&limit_trigger_record_para_g.record_time_BCD.year,sizeof(sys_clockBCD_g),LITTLE_ENDIAN);
      limit_trigger_record_para_g.trigger_times ++;
      limit_trigger_record_para_g.RS485_running_flag = sys_fun_run_ctrl_g.rs485_ctrl_flag.running_flag;
      limit_trigger_record_para_g.valve_running_flag = sys_fun_run_ctrl_g.valve_ctrl_flag.running_flag;
      limit_trigger_record_para_g.wrc_running_flag = sys_fun_run_ctrl_g.wrc_ctrl_flag.running_flag;
      limit_trigger_record_para_g.EXPWR_check_status = HWIDO_EX_PWR_IO_READ;
      limit_trigger_record_para_g.EXPWR_ctrl_status = __SYS_STATUS_BYTES_GET(power_state);
   }
//   if(GPIO_EXTI_EXTIISR_ChkEx(VALVE_FORCED_OPEN_PORT, VALVE_FORCED_OPEN_PIN)  == SET)
//   {
//      GPIO_EXTI_EXTIISR_ClrEx(VALVE_FORCED_OPEN_PORT, VALVE_FORCED_OPEN_PIN);
@@ -259,27 +73,47 @@
////#endif   
////      }
////   }
}
//   if(GPIO_EXTI_EXTIISR_ChkEx(LITHIUM_PWR_DOWN_PORT, LITHIUM_PWR_DOWN_PIN)  == SET)
//   {
//      GPIO_EXTI_EXTIISR_ClrEx(LITHIUM_PWR_DOWN_PORT, LITHIUM_PWR_DOWN_PIN);
//#ifdef RS232_PRINTF
//    printf("﮵çµôµç\r\n");
//#endif
//      __SYS_STATUS_ALARM_BYTES_SET(lith_remove);
//      pwr_vol_g.lith_vcc_per = 0;
//      SLAVE_PWR_OFF; //µôµçºóС°åµçѹ²»ÎÈ£¬»á²úÉúÁ÷Á¿Êý¾Ý»ìÂÒ£¬´Ó¶øµ¼Ö¸÷ÖÖ·ÇÕý³£±¨¾¯£¬ËùÒÔÐèÒª¹Ø±ÕµçÔ´£¬»Ö¸´ºóÔÙ¿ªÆô¡£
////    pwr_vol_g.lith_flag = LMS_PERIOD; // µôµçºóÁ¢Âí²É¼¯Ò»´ÎµçÁ¿
//   }
//   if(GPIO_EXTI_EXTIISR_ChkEx(ALKALI_PWR_DOWN_PORT, ALKALI_PWR_DOWN_PIN)  == SET)
//   {
//      GPIO_EXTI_EXTIISR_ClrEx(ALKALI_PWR_DOWN_PORT, ALKALI_PWR_DOWN_PIN);
//#ifdef RS232_PRINTF
//    printf("¼îµçµôµç\r\n");
//#endif
//      __SYS_STATUS_ALARM_BYTES_SET(alka_remove);
//
////    pwr_vol_g.alka_flag = AMS_PERIOD; // µôµçºóÁ¢Âí²É¼¯Ò»´ÎµçÁ¿
//   }
//}
void All_Exti_Init(void)
{
//      CMU_OPCCR1_EXTICKSEL_Set(CMU_OPCCR1_EXTICKSEL_LSCLK);//EXTIÖжϲÉÑùʱÖÓÑ¡Ôñ
//    CMU_OPCCR1_EXTICKE_Setable(ENABLE);         //EXTI¹¤×÷ʱÖÓʹÄÜ
//
//      GPIO_EXTI_Init( KEYA_S1_PORT, KEYA_S1_PIN, EXTI_FALLING, ENABLE);   //ÊäÈëÖжϴò¿ª¡¢Ï½µÑØ´¥·¢¡¢¿ªÆôÊý×ÖÂ˲¨ //PD6
//      GPIO_EXTI_Init( VALVE_FORCED_OPEN_PORT, VALVE_FORCED_OPEN_PIN, EXTI_RISING, ENABLE);   //PA1
//    GPIO_EXTI_Init( LITH_PWR_LOSE_PORT, LITH_PWR_LOSE_PIN, EXTI_FALLING, ENABLE);   //PF11
////      GPIO_EXTI_Init( LIT_PWR_UNDER_PORT, LIT_PWR_UNDER_PIN, EXTI_FALLING, ENABLE);   //PF6
//      GPIO_EXTI_Init( ALKA_PWR_LOSE_PORT, ALKA_PWR_LOSE_PIN, EXTI_FALLING, ENABLE);   //PA4
////      GPIO_EXTI_Init( UNCAP_DETECTION_PORT, UNCAP_DETECTION_PIN, EXTI_RISING, ENABLE);   //PF5
      CMU_OPCCR1_EXTICKSEL_Set(CMU_OPCCR1_EXTICKSEL_LSCLK);//EXTIÖжϲÉÑùʱÖÓÑ¡Ôñ
    CMU_OPCCR1_EXTICKE_Setable(ENABLE);         //EXTI¹¤×÷ʱÖÓʹÄÜ
      GPIO_EXTI_Init( KEYA_S1_PORT, KEYA_S1_PIN, EXTI_FALLING, ENABLE);   //ÊäÈëÖжϴò¿ª¡¢Ï½µÑØ´¥·¢¡¢¿ªÆôÊý×ÖÂ˲¨ //PD6
      GPIO_EXTI_Init( VALVE_FORCED_OPEN_PORT, VALVE_FORCED_OPEN_PIN, EXTI_RISING, ENABLE);   //PA1
    GPIO_EXTI_Init( LITHIUM_PWR_DOWN_PORT, LITHIUM_PWR_DOWN_PIN, EXTI_FALLING, ENABLE);   //PF11
//      GPIO_EXTI_Init( LIT_PWR_UNDER_PORT, LIT_PWR_UNDER_PIN, EXTI_FALLING, ENABLE);   //PF6
      GPIO_EXTI_Init( ALKALI_PWR_DOWN_PORT, ALKALI_PWR_DOWN_PIN, EXTI_FALLING, ENABLE);   //PA4
//      GPIO_EXTI_Init( UNCAP_DETECTION_PORT, UNCAP_DETECTION_PIN, EXTI_RISING, ENABLE);   //PF5
////      GPIO_PINWKSEL_SetEx(PINWKEN_PF5,GPIO_PINWKEN_PINWKSEL_RISING);
////      GPIO_PINWKEN_SetableEx(PINWKEN_PF5,ENABLE);//ʹÄÜPB0µÄNWKUP1¹¦ÄÜ
//      GPIO_PINWKSEL_SetEx(PINWKEN_PF5,GPIO_PINWKEN_PINWKSEL_RISING);
//      GPIO_PINWKEN_SetableEx(PINWKEN_PF5,ENABLE);//ʹÄÜPB0µÄNWKUP1¹¦ÄÜ
//    /*NVICÖжÏÅäÖÃ*/
//    NVIC_DisableIRQ(GPIO_IRQn);
//    NVIC_SetPriority(GPIO_IRQn,2);//ÖжÏÓÅÏȼ¶ÅäÖÃ
//    NVIC_EnableIRQ(GPIO_IRQn);
    /*NVICÖжÏÅäÖÃ*/
    NVIC_DisableIRQ(GPIO_IRQn);
    NVIC_SetPriority(GPIO_IRQn,2);//ÖжÏÓÅÏȼ¶ÅäÖÃ
    NVIC_EnableIRQ(GPIO_IRQn);
}