#include "api.h" #include "board_config.h" #include "tbc.h" #include "tbs.h" #include "sys_task.h" #include "TimeTask_Event.h" #include "InputCapture.h" #include "syspar.h" #include "user.h" #include "TimeTask_Event.h" #include "FSM_1st.h" #include "FSM_2nd.h" #include "can.h" #include "cmdgennew.h" #include "canAppl.h" #include "flash_master.h" #include "torquesensor.h" #include "power.h" #include "STLmain.h" void PeripheralInit(); void PeripheralStart(); void AppInit() { /* 初始化外设(Api层级配置)并配置调度逻辑 */ PeripheralInit(); // /* 1 电机控制环路初始化 */ // /* 1.1 初始化PU值系统 */ // /* 1.2 初始化参数系统 */ // /* 1.3 算法模块初始化 */ // // McPipelineInit(); // McModulesConfig(); // McPipelineModulesInit(); // McPipelineStaticCoef(); // // /* 2 控制组件初始化 */ // // SysCtrlInit(); // McCtrlInit(); // // /* 状态机初始化 */ // // SysFsmInit(); // CtrlFsmInit(); // McFsmInit(); // // /* 故障处理初始化 */ // // AlmInit(); // // /* 串口调试初始化 */ // // uart_voMonitorInit(); /* Code Para Init */ CodeParaInit(); /* AssitPara Init */ ass_voAssitEEInit(); /* PowerInit */ power_voPowerInit(); /* DisplayInit */ display_voDisplayInit(); #ifdef RUN_ARCH_SIM cp_stFlg.SpiOffsetFirstSetFlg = 1; #else /* Para Copy */ mn_voParaSet(); //cp_stFlg.ParaFirstSetFlg = 0; //eeprom save test if(cp_stFlg.ParaFirstSetFlg == 0) { flash_voParaInit(); /* Parameter Default Value Write*/ i2c_voDefaultWriteBuffer(); i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut); /* Cycling History Info clear */ CodeHistoryParaDelete(); mn_voEEHistoryParaUpdate(); i2c_voHistoryWriteBuffer(); i2c_voHistoryWrite2EE(&i2c_stTXCoef, &i2c_stTXOut); /* Read EE and Update code para */ mn_voParaSet(); } #endif Can_voUpdateMC_UpcInfo(); /* System parameter initial */ mn_voSoftwareInit(); /* 启动外设 */ PeripheralStart(); } void AppLoop() { /* Uart Monitor Service */ // ReadFrame_Poll2(); // uart_voMainDec(); /* Control mode FSM reset */ if (!sysfsm_stFlg.blFSMRstOvrFlg) { RUN_FSM_voInit(); Switch_speed_FSMInit(); sysfsm_stFlg.blFSMRstOvrFlg = TRUE; } /* Control mode variable clear */ if (!sysfsm_stFlg.blCtrlMdVarClcOvrFlg) { sysfsm_stFlg.blCtrlMdVarClcOvrFlg = TRUE; } CanRx_Process(); ReadFrame_Poll2(); uart_voMainDec(); TimingTaskLoopServer(); if(cp_stFlg.SpiOffsetFirstSetFinishFlg == TRUE && switch_flg.SysRun_Flag == FALSE && cp_stFlg.SpiOffsetFirstSetFlg==0 && FSM2nd_Run_state.state == Exit) { MC_UpcInfo.stMContorlInfo.uwSaveFlg = 1; cp_stFlg.SpiOffsetFirstSetFlg = 1; mn_voEEUperParaUpdate(); /* Parameter real value write*/ i2c_voParaWriteBuffer(); i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut); MC_UpcInfo.stMContorlInfo.uwSaveFlg = 0; } if (cp_stFlg.ParaUpdateFlg == TRUE) { mn_voParaUpdate(); } if (power_stPowStateOut.powerstate == POWER_OFF) { if (FSM2nd_Run_state.state == Exit) { if (cp_stFlg.ParaHistorySaveEEFinishFlg == FALSE) { cp_stHistoryPara.uwOpenTimes++; cp_stHistoryPara.ulODOTime = MC_RideLog.ODO_Time; cp_stHistoryPara.ulTripSumTime = MC_RideLog.TRIP_Time; mn_voEEHistoryParaUpdate(); i2c_voHistoryWriteBuffer(); i2c_voHistoryWrite2EE(&i2c_stTXCoef, &i2c_stTXOut); cp_stFlg.ParaHistorySaveEEFinishFlg = TRUE; flash_voWrite(); /* Error Log Write */ flash_voErrorWrite(); if (cp_stFlg.ParaSaveEEFlg == TRUE) { mn_voEEUperParaUpdate(); /* Parameter real value write*/ i2c_voParaWriteBuffer(); i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut); cp_stFlg.ParaSaveEEFinishFlg = TRUE; cp_stFlg.ParaSaveEEFlg = FALSE; } } } } } void PeripheralInit() { /* Gpio配置 */ // iGpio_SetMode(HW_GPIO_HALLA_PIN, ApiGpio_Output); // iGpio_SetMode(HW_GPIO_HALLB_PIN, ApiGpio_Output); // iGpio_SetMode(HW_GPIO_HALLC_PIN, ApiGpio_Output); /* Pwm配置 */ iPwm_BindDeviceInterrupt(0, ApiPwm_CountZeroInt, tbc_voUpIsr); iPwm_BindDeviceInterrupt(0, ApiPwm_CountMaxInt, tbc_voDownIsr); iPwm_EnableDeviceInterrupt(0, ApiPwm_CountZeroInt); iPwm_EnableDeviceInterrupt(0, ApiPwm_CountMaxInt); /* Tbs 定时器配置 */ iTimer_BindInterrupt(HW_TBS_TIMER, tbs_voIsr); iTimer_EnableInterrupt(HW_TBS_TIMER); /* Event1ms 定时器配置 */ iTimer_BindInterrupt(HW_EVENT1MS_TIMER, Event_1ms); iTimer_EnableInterrupt(HW_EVENT1MS_TIMER); /* 1ms 定时器配置 */ // clock = iTimer_GetClock(HW_SYSTICK_TIMER); // iTimer_SetPeriod(HW_SYSTICK_TIMER, clock / 1000 - 1); // iTimer_EnableAutoReload(HW_SYSTICK_TIMER); iTimer_BindInterrupt(HW_SYSTICK_TIMER, SysTask1Ms); iTimer_EnableInterrupt(HW_SYSTICK_TIMER); iCap_BindDeviceInterrupt(0,IC_CountMaxISR); iCap_BindChannelInterrupt(0,CAP_CH(2),IC_CadenceISR); iCap_BindChannelInterrupt(0,CAP_CH(3),IC_BikeSpdISR); iCap_EnableDeviceInterrupt(0); iCap_EnableChannelInterrupt(0,CAP_CH(2)); iCap_EnableChannelInterrupt(0,CAP_CH(3)); } void PeripheralStart() { // iPwm_EnableCount(0); // iTimer_Start(HW_TBS_TIMER); // iTimer_Start(HW_SYSTICK_TIMER); }