#include "system_run_fun.h" #include "system_eep_mem_manage.h" #include "system_mem_para.h" #include "eeprom.h" #include "mbcrc1.h" #include "gpio.h" #include "extern_rtc.h" #include "key.h" #include "lcd_io_api.h" #include "wireless_remote_comm.h" #include "power_manage.h" #include "pulse_and_alarm_line.h" #include "valve_control.h" #include "linked_list.h" #include "sizhu_history_record.h" RS485_START_REASON start_rs485_g = RS485_START_REASON_NONE; WRC_START_MEANS start_wrc_g = WRC_MEANS_NONE; void allGpioInit(void) { E2P_Ctrl_Gpio_Init(); RTC_GPIO_Init(); Key_GPIO_Init(); Lcd_GPIO_Init(); Power_IO_Init();//µçÔ´Ïà¹Ø Valve_CTRL_GPIO_Init(); Pulse_And_Alarm_Line_IO_Init(); RS485_read_data_GPIO_Init(); WRC_PWR_GPIO_Init(); //ÎÞÏßÔ¶´«µçÔ´¿ØÖÆIO } //ËùÓÐÍâÉèÇý¶¯ÅäÖà void allPeripheralDriver(void) { } //Ó²¼þÇý¶¯³õʼ»¯ void hardwareDriversInit(void) { //¸÷ÖÖÓ²¼þÍâÉèÇý¶¯³õʼ»¯ //I0¿ÚÅäÖà allGpioInit(); //¸´Î»Æô¶¯£¬²¿·Ö±ØÒªÍâÉ蹦Äܳõʼ»¯£¬ÐèÒªÓõ½²Å¿ªÆôµÄÍâÉ蹦Äܿɲ»ÔÚÕâÀïÆôÓà // allPeripheralDriver(); SPI3_Init(); //EEP-SPI³õʼ»¯ } //ËùÓÐÍⲿÒý½ÅÖжÏÅäÖà void allExtiIRQ(void) { CMU_OPCCR1_EXTICKSEL_Set(CMU_OPCCR1_EXTICKSEL_LSCLK);//EXTIÖжϲÉÑùʱÖÓÑ¡Ôñ CMU_OPCCR1_EXTICKE_Setable(ENABLE); //EXTI¹¤×÷ʱÖÓʹÄÜ GPIO_EXTI_Init( EXT_RTC_INT_PORT, EXT_RTC_INT_PIN, EXTI_FALLING, ENABLE); GPIO_EXTI_Init( KEY1_PORT, KEY1_PIN, EXTI_FALLING, ENABLE); // GPIO_EXTI_Init( KEY2_PORT, KEY2_PIN, EXTI_FALLING, ENABLE); // GPIO_EXTI_Init( KEY3_PORT, KEY3_PIN, EXTI_FALLING, ENABLE); // GPIO_EXTI_Init( KEY4_PORT, KEY4_PIN, EXTI_FALLING, ENABLE); GPIO_EXTI_Init( LITH_PWR_LOSE_PORT, LITH_PWR_LOSE_PIN, EXTI_FALLING, ENABLE); // GPIO_EXTI_Init( ALKA_PWR_LOSE_PORT, ALKA_PWR_LOSE_PIN, EXTI_FALLING, ENABLE); GPIO_EXTI_Init( LIMIT_TRIGGER_PORT, LIMIT_TRIGGER_PIN, EXTI_FALLING, ENABLE); /*Âö³åÏßÖжÏÅäÖÃÑ¡Ôñ,û¿ªÆô¸´ÓÃÇÒ¿ªÆôÁËÂö³å*/ 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))){ 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)){ GPIO_EXTI_Init( LF_PULSE_INT_PORT, LF_PULSE_INT_PIN, EXTI_FALLING, ENABLE); }else{ GPIO_EXTI_Init( LF_PULSE_INT_PORT, LF_PULSE_INT_PIN, EXTI_RISING, ENABLE); } } /*NVICÖжÏÅäÖÃ*/ NVIC_DisableIRQ(GPIO_IRQn); NVIC_SetPriority(GPIO_IRQn,0);//ÖжÏÓÅÏȼ¶ÅäÖà NVIC_EnableIRQ(GPIO_IRQn); } //´æ´¢µÄ²ÎÊý³õʼ»¯ void sysStoredParaInit(void) { SYSTEM_EEP_IDENTIFICATION_T sys_eep_id_A_l={0}; SYSTEM_EEP_IDENTIFICATION_T sys_eep_id_B_l={0}; uint8_t eep_none_flag = 1; //0´ú±í¿Õ£¬·Ç0´ú±í·Ç¿Õ uint8_t buf_test[10]; //?²âÊÔÌí¼Ó // EEPROM_test(); EEPROM_CTRL_ENABLE; //¶ÁÈ¡²ÎÊý³õʼ»¯ÅäÖñêʶ //Èç¹û±êʶÎÞ·¨Ê¶±ðÔò´ú±í´æ´¢ÐèҪȫ²¿Ð´ÈëĬÈÏÖµ //Èç¹û±êʶʶ±ð³É¹¦´ú±íÒÑÓвÎÊý£¬²ÎÊýÖ±½Ó´Ó´æ´¢ÀïÃæ¶ÁÈ¡ EEPROM_MultipleRead((uint8_t *)&sys_eep_id_A_l, SYSTEM_EEP_ID_ADDR, SYSTEM_EEP_IDENTIFICATION_LENGTH); if(sys_eep_id_A_l.eep_para_init_config_id == EEP_PARA_INIT_ID) { eep_none_flag = 1; }else { EEPROM_MultipleRead((uint8_t *)&sys_eep_id_B_l, SYSTEM_EEP_ID_ADDR + PARA_EEP_B_OFFSET_ADDR, SYSTEM_EEP_IDENTIFICATION_LENGTH); if(sys_eep_id_B_l.eep_para_init_config_id == EEP_PARA_INIT_ID) { eep_none_flag = 1; }else { eep_none_flag = 0; } } if(eep_none_flag ==0) { //ËùÓвÎÊýÐèÒª³õʼ»¯ÎªÄ¬ÈÏÖµ²¢Ð´ÈëEEPROM allParaDefaultInit(); }else { //ËùÓвÎÊýÖ±½Ó´ÓEEPROM¶ÁÈ¡£¬µ«¶ÁÈ¡µÄʱºòÐèÒªÅжÏCRCУÑ飬УÑ鲻ͨ¹ýµÄ¶ÁÈ¡BÇø£¬´íÎóµÄÇøÓòдÈëÕýÈ·Öµ»òÕßĬÈÏÖµ allParaReadFromEep(); } //¶Áȡϵͳ²¹¶¡±êʶ //Èç¹û²¹¶¡±êʶÎÞ·¨Ê¶±ð»òÕßСÓÚ²¹¶¡Ê±¼ä£¬ÔòÐèÒª´ò²¹¶¡´¦Àí allParaPatchPro(); EEPROM_CTRL_DISABLE; } //ϵͳÔËÐй¦ÄܲÎÊý³õʼ»¯ void sysRunFunParaInit(void) { //¸÷ÖÖ¹¦ÄÜÄ£¿éÔËÐÐËùÐèµÄ²ÎÊý³õʼ»¯ /*״̬×Ö³õʼ*/ system_status_word_g.status_word.account_state = (system_function_ctrl_word_g.fun_ctrl_word.account_open == 1)?1:0; system_status_word_g.status_word.valve_lock = (save_valve_para_g.valve_lock_state == VL_LOCK)?1:0; system_status_word_g.status_word.virtual_billing = (system_function_ctrl_word_g.fun_ctrl_word.virtual_billing == 1)?1:0; system_status_word_g.status_word.billing_type = system_function_ctrl_word_g.fun_ctrl_word.billing_type; system_status_word_g.status_word.lcd_mode = system_function_ctrl_word_g.fun_ctrl_word.lcd_mode; /****ÍⲿRTCÅäÖü°²ÎÊý³õʼ»¯***********/ Set_Rtc_UpdataInterrupt(); //ÉèÖÃRTCΪÃëÖÐ¶Ï //¶ÁÈ¡ÍⲿRTCʱ¼ä£¬ if(Get_Extern_Rtc_Time(&sys_clockBCD_g) ==FAIL) { //²ÉÓÃ´æ´æ´¢¶ÁÈ¡µÄʱ¼äÉèÖõ½RTC if(Set_Extern_Rtc_Time(save_realtime_data_g.record_time_BCD.year,save_realtime_data_g.record_time_BCD.month,save_realtime_data_g.record_time_BCD.day, \ 1,save_realtime_data_g.record_time_BCD.hour,save_realtime_data_g.record_time_BCD.min,save_realtime_data_g.record_time_BCD.sec) ==FAIL){ //´æ´¢ÖÐʱ¼ä´íÎóÔòÉèÖÃĬÈÏÖµ Set_Extern_Rtc_Time(sys_clockBCD_g.year,sys_clockBCD_g.month,sys_clockBCD_g.day, 1,sys_clockBCD_g.hour,sys_clockBCD_g.min,sys_clockBCD_g.sec) ; } } //·§ÃÅÔËÐгõʼ»¯ ValveRunParaInit(equipment_basic_inf_g.valve_type); //µçԴ״̬¼ì²â¡¢Íâµç״̬¼ì²â PowerManagrInit(); //²ð°å¡¢¿ª¸Ç״̬¼ì²â //Âö³åÏß¡¢±¨¾¯Ïß³õʼ PulseAndAlarmLineInit(); } void sysRunFunCtrlPro(FUN_START_CTRL_PARA_T * sys_fun_run_ctrl_p,sClockBCD sys_clockBCD_in) { uint8_t first_time[2] = {0,0}; uint16_t IntervalTime; /*rs485²É¼¯Æô¶¯¿ØÖÆ£¬ °´¼ü¡¢¶¨Ê±¡¢Òì³£±¨¾¯¡¢¼Ç¼´æ´¢ËùÐèµÈ*/ if(start_rs485_g == RS485_START_REASON_KEY){ //°´¼ü²úÉú»¹ÐèÒª´æ´¢Ò»Ìõ¼ä¸ô¶³½áÓÃÓÚÉϱ¨ interval_report_record_flag =SET; } /*Сʱ¡¢Ìì¡¢ÔÂ*/ if((sys_clockBCD_in.min == 0)&&(sys_clockBCD_in.sec == 0)) //Сʱ¼Ç¼´æ´¢µã start_rs485_g = RS485_START_REASON_RECORD; if((sys_clockBCD_in.hour == 0)&&(sys_clockBCD_in.min == 0)&&(sys_clockBCD_in.sec == 0))//Ìì¼Ç¼´æ´¢µã start_rs485_g = RS485_START_REASON_RECORD; if((sys_clockBCD_in.day == 1)&&(sys_clockBCD_in.hour == 0)&&(sys_clockBCD_in.min == 0)&&(sys_clockBCD_in.sec == 0))//ԼǼ´æ´¢µã start_rs485_g = RS485_START_REASON_RECORD; if(__SYS_STATUS_BYTES_GET(power_state) == SET) IntervalTime = wrc_para_sizhu_g.ext_power_data_interval; else IntervalTime = wrc_para_sizhu_g.bat_power_data_interval; if(IntervalTriggerHandle(sys_clockBCD_in,IntervalTime,first_time)==SET) start_rs485_g = RS485_START_REASON_RECORD; //Éϱ¨Ö®Ç°´¥·¢²É¼¯ if(start_wrc_g != WRC_MEANS_NONE){ start_rs485_g = RS485_START_REASON_REPORT; } if(start_rs485_g != RS485_START_REASON_NONE){ start_rs485_g = RS485_START_REASON_NONE; if(sys_fun_run_ctrl_p->rs485_ctrl_flag.running_flag ==RESET) sys_fun_run_ctrl_p->rs485_ctrl_flag.start_flag = SET; } /*·§¿Ø¿ØÖÆ£¬·§¿ØÍ¨¹ý°´¼ü»òÕßÖ¸Áî¡¢Òì³£µÈ¿ØÖÆ£¬ÐèÒª²Ù×÷ʱֱ½Óµ÷ÓÃValveCtrlOrderº¯Êý¼´¿É£¬²»ÔÚ´Ë´¦Æô¶¯*/ /*Ô¶³ÌͨѶÆô¶¯¿ØÖÆ£¬°´¼ü¡¢¼ä¸ô¡¢ÖÜÆÚ¡¢Òì³£±¨¾¯¡¢Öر¨µÈ*/ if((wrc_para_sizhu_g.time_start_type&WRC_TIME_START_INTERVAL)==WRC_TIME_START_INTERVAL){ for(uint16_t count_i=0;count_i=12) break; //ʱ¼ä×éÊý×î´ó12¡£³¬¹ýÔòÍ˳ö if((sys_clockBCD_in.hour==wrc_para_sizhu_g.timing_send_time_BCD[count_i][0])&&(sys_clockBCD_in.min==wrc_para_sizhu_g.timing_send_time_BCD[count_i][1])&&(sys_clockBCD_in.sec==0)) start_wrc_g = WRC_MEANS_RTC_TIMING; } } if((wrc_para_sizhu_g.time_start_type&WRC_TIME_START_TIMING)==WRC_TIME_START_TIMING){ if(__SYS_STATUS_BYTES_GET(power_state) == SET) IntervalTime = wrc_para_sizhu_g.ext_power_send_interval; else IntervalTime = wrc_para_sizhu_g.bat_power_send_interval; if(IntervalTriggerHandle(sys_clockBCD_in,IntervalTime,wrc_para_sizhu_g.send_first_time_BCD)==SET) start_wrc_g = WRC_MEANS_RTC_INTERVAL; } if((wrc_ctrl_para_g.wrc_restart_num_cnt > 0)&&(wrc_ctrl_para_g.wrc_restart_time_sec_cnt == 0)){ if(start_wrc_g == WRC_MEANS_NONE){ //´¥·¢Öر¨Éϱ¨ start_wrc_g = WRC_MEANS_AGAIN; wrc_ctrl_para_g.wrc_restart_num_cnt -- ; } } if(start_wrc_g != WRC_MEANS_NONE){ wrc_ctrl_para_g.wrc_start_flag = start_wrc_g; start_wrc_g = WRC_MEANS_NONE; if((sys_fun_run_ctrl_p->wrc_ctrl_flag.start_flag == RESET)&&(sys_fun_run_ctrl_p->wrc_ctrl_flag.running_flag == RESET )){ pwr_vol_g.alka_flag = AMS_WRC_BEFORE; sys_fun_run_ctrl_p->wrc_ctrl_flag.start_flag = SET; } } } //ϵͳ±£³ÖÔËÐв»ÐÝÃß״̬£¬·µ»ØRESET´ú±í¿ÉÒÔÐÝÃß FlagStatus SysKeepRunningStatusGet(FUN_START_CTRL_PARA_T sys_fun_run_ctrl_in) { if(__SYS_STATUS_BYTES_GET(power_state) == SET) //Í⹩µç״̬Ï¿ÉÒÔ²»ÐÝÃß return SET; if(sys_fun_run_ctrl_in.rs485_ctrl_flag.running_flag ==SET) return SET; // if(sys_fun_run_ctrl_in.valve_ctrl_flag.running_flag ==SET) //·§¿ØÔËÐпÉÒÔÐÝÃß // return SET; if(sys_fun_run_ctrl_in.wrc_ctrl_flag.running_flag ==SET) return SET; return RESET; } //״̬×Ö´¦Àí void SysStatusWordPro(void) { }