#include "system_run_fun.h"
|
#include "system_eep_mem_manage.h"
|
#include "system_mem_para.h"
|
#include "eeprom.h"
|
#include "mbcrc.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"
|
|
RS485_START_REASON start_rs485_g = RS485_START_REASON_NONE;
|
WRC_START_MEANS start_wrc_g = WRC_MEANS_NONE;
|
|
|
void allGpioInit(void)
|
{
|
|
RTC_GPIO_Init();
|
|
Key_GPIO_Init();
|
|
Lcd_GPIO_Init();
|
|
Power_IO_Init();//µçÔ´Ïà¹Ø
|
|
}
|
|
//ËùÓÐÍâÉèÇý¶¯ÅäÖÃ
|
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);
|
|
|
|
|
/*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´ú±í·Ç¿Õ
|
|
//¶ÁÈ¡²ÎÊý³õʼ»¯ÅäÖñêʶ
|
//Èç¹û±êʶÎÞ·¨Ê¶±ðÔò´ú±í´æ´¢ÐèҪȫ²¿Ð´ÈëĬÈÏÖµ
|
//Èç¹û±êʶʶ±ð³É¹¦´ú±íÒÑÓвÎÊý£¬²ÎÊýÖ±½Ó´Ó´æ´¢ÀïÃæ¶ÁÈ¡
|
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();
|
|
}
|
|
|
//ϵͳÔËÐй¦ÄܲÎÊý³õʼ»¯
|
void sysRunFunParaInit(void)
|
{
|
//¸÷ÖÖ¹¦ÄÜÄ£¿éÔËÐÐËùÐèµÄ²ÎÊý³õʼ»¯
|
|
/****ÍⲿRTCÅäÖü°²ÎÊý³õʼ»¯***********/
|
Set_Rtc_UpdataInterrupt(); //ÉèÖÃRTCΪÃëÖжÏ
|
//¶ÁÈ¡ÍⲿRTCʱ¼ä£¬
|
if(Get_Extern_Rtc_Time(&sys_clockBCD_g) ==FAIL)
|
{
|
//²ÉÓÃ´æ´æ´¢¶ÁÈ¡µÄʱ¼äÉèÖõ½RTC
|
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);
|
}
|
|
//·§ÃÅÔËÐгõʼ»¯
|
ValveRunParaInit(equipment_basic_inf_g.valve_type);
|
|
//µçԴ״̬¼ì²â
|
|
|
//Íâµç״̬¼ì²â
|
|
//²ð°å¡¢¿ª¸Ç״̬¼ì²â
|
|
//Âö³åÏß״̬¼ì²â
|
|
|
|
}
|
|
|
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((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_rs485_g != RS485_START_REASON_NONE){
|
start_rs485_g = RS485_START_REASON_NONE;
|
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<wrc_para_sizhu_g.timing_send_num;count_i++){
|
if(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(start_wrc_g != WRC_MEANS_NONE){
|
start_wrc_g = WRC_MEANS_NONE;
|
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)
|
{
|
|
|
|
|
|
}
|