app.c 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. #include "api.h"
  2. #include "board_config.h"
  3. #include "tbc.h"
  4. #include "tbs.h"
  5. #include "sys_task.h"
  6. #include "TimeTask_Event.h"
  7. #include "InputCapture.h"
  8. #include "syspar.h"
  9. #include "user.h"
  10. #include "TimeTask_Event.h"
  11. #include "FSM_1st.h"
  12. #include "FSM_2nd.h"
  13. #include "can.h"
  14. #include "cmdgennew.h"
  15. #include "canAppl.h"
  16. #include "flash_master.h"
  17. #include "torquesensor.h"
  18. #include "power.h"
  19. #include "STLmain.h"
  20. #include "display.h"
  21. #include "enviolo_can.h"
  22. void PeripheralInit();
  23. void PeripheralStart();
  24. void AppInit()
  25. {
  26. /* 初始化外设(Api层级配置)并配置调度逻辑 */
  27. PeripheralInit();
  28. // /* 1 电机控制环路初始化 */
  29. // /* 1.1 初始化PU值系统 */
  30. // /* 1.2 初始化参数系统 */
  31. // /* 1.3 算法模块初始化 */
  32. //
  33. // McPipelineInit();
  34. // McModulesConfig();
  35. // McPipelineModulesInit();
  36. // McPipelineStaticCoef();
  37. //
  38. // /* 2 控制组件初始化 */
  39. //
  40. // SysCtrlInit();
  41. // McCtrlInit();
  42. //
  43. // /* 状态机初始化 */
  44. //
  45. // SysFsmInit();
  46. // CtrlFsmInit();
  47. // McFsmInit();
  48. //
  49. // /* 故障处理初始化 */
  50. //
  51. // AlmInit();
  52. //
  53. // /* 串口调试初始化 */
  54. //
  55. // uart_voMonitorInit();
  56. /* Code Para Init */
  57. CodeParaInit();
  58. /* AssitPara Init */
  59. ass_voAssitEEInit();
  60. /* PowerInit */
  61. power_voPowerInit();
  62. /* DisplayInit */
  63. display_voDisplayInit();
  64. #ifdef RUN_ARCH_SIM
  65. cp_stFlg.SpiOffsetFirstSetFlg = 1;
  66. #else
  67. /* Para Copy */
  68. mn_voParaSet();
  69. //cp_stFlg.ParaFirstSetFlg = 0; //eeprom save test
  70. if(cp_stFlg.ParaFirstSetFlg == 0)
  71. {
  72. flash_voParaInit();
  73. /* Parameter Default Value Write*/
  74. i2c_voDefaultWriteBuffer();
  75. i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
  76. /* History Default Value Write */
  77. i2c_voHistoryDefaultWriteBuffer();
  78. i2c_voHistoryWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
  79. /* Read EE and Update code para */
  80. mn_voParaSet();
  81. }
  82. #endif
  83. Can_voUpdateMC_UpcInfo();
  84. /* System parameter initial */
  85. mn_voSoftwareInit();
  86. /* 启动外设 */
  87. PeripheralStart();
  88. }
  89. void AppLoop()
  90. {
  91. /* Uart Monitor Service */
  92. // ReadFrame_Poll2();
  93. // uart_voMainDec();
  94. /* Control mode FSM reset */
  95. if (!sysfsm_stFlg.blFSMRstOvrFlg)
  96. {
  97. RUN_FSM_voInit();
  98. Switch_speed_FSMInit();
  99. sysfsm_stFlg.blFSMRstOvrFlg = TRUE;
  100. }
  101. /* Control mode variable clear */
  102. if (!sysfsm_stFlg.blCtrlMdVarClcOvrFlg)
  103. {
  104. sysfsm_stFlg.blCtrlMdVarClcOvrFlg = TRUE;
  105. }
  106. CanRx_Process();
  107. ReadFrame_Poll2();
  108. uart_voMainDec();
  109. TimingTaskLoopServer();
  110. if(cp_stFlg.SpiOffsetFirstSetFinishFlg == TRUE && switch_flg.SysRun_Flag == FALSE && cp_stFlg.SpiOffsetFirstSetFlg==0 && FSM2nd_Run_state.state == Exit)
  111. {
  112. MC_UpcInfo.stMContorlInfo.uwSaveFlg = 1;
  113. cp_stFlg.SpiOffsetFirstSetFlg = 1;
  114. mn_voEEUperParaUpdate();
  115. /* Parameter real value write*/
  116. i2c_voParaWriteBuffer();
  117. i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
  118. MC_UpcInfo.stMContorlInfo.uwSaveFlg = 0;
  119. }
  120. if (cp_stFlg.ParaUpdateFlg == TRUE)
  121. {
  122. mn_voParaUpdate();
  123. cp_stFlg.ParaUpdateFlg = FALSE;
  124. }
  125. if (power_stPowStateOut.powerstate == POWER_OFF)
  126. {
  127. if (FSM2nd_Run_state.state == Exit)
  128. {
  129. if (cp_stFlg.ParaHistorySaveEEFinishFlg == FALSE)
  130. {
  131. cp_stHistoryPara.uwOpenTimes++;
  132. cp_stHistoryPara.ulODOTime = MC_RideLog.ODO_Time;
  133. cp_stHistoryPara.ulTripSumTime = MC_RideLog.TRIP_Time;
  134. mn_voEEHistoryParaUpdate();
  135. i2c_voHistoryWriteBuffer();
  136. i2c_voHistoryWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
  137. cp_stFlg.ParaHistorySaveEEFinishFlg = TRUE;
  138. flash_voWrite();
  139. /* Error Log Write */
  140. flash_voErrorWrite();
  141. if (cp_stFlg.ParaSaveEEFlg == TRUE)
  142. {
  143. mn_voEEUperParaUpdate();
  144. /* Parameter real value write*/
  145. i2c_voParaWriteBuffer();
  146. i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
  147. cp_stFlg.ParaSaveEEFinishFlg = TRUE;
  148. cp_stFlg.ParaSaveEEFlg = FALSE;
  149. }
  150. }
  151. }
  152. }
  153. GearBox_Loop();
  154. }
  155. void PeripheralInit()
  156. {
  157. /* Gpio配置 */
  158. // iGpio_SetMode(HW_GPIO_HALLA_PIN, ApiGpio_Output);
  159. // iGpio_SetMode(HW_GPIO_HALLB_PIN, ApiGpio_Output);
  160. // iGpio_SetMode(HW_GPIO_HALLC_PIN, ApiGpio_Output);
  161. /* Pwm配置 */
  162. iPwm_BindDeviceInterrupt(0, ApiPwm_CountZeroInt, tbc_voUpIsr);
  163. iPwm_BindDeviceInterrupt(0, ApiPwm_CountMaxInt, tbc_voDownIsr);
  164. iPwm_EnableDeviceInterrupt(0, ApiPwm_CountZeroInt);
  165. iPwm_EnableDeviceInterrupt(0, ApiPwm_CountMaxInt);
  166. /* Tbs 定时器配置 */
  167. iTimer_BindInterrupt(HW_TBS_TIMER, tbs_voIsr);
  168. iTimer_EnableInterrupt(HW_TBS_TIMER);
  169. /* Event1ms 定时器配置 */
  170. iTimer_BindInterrupt(HW_EVENT1MS_TIMER, Event_1ms);
  171. iTimer_EnableInterrupt(HW_EVENT1MS_TIMER);
  172. /* 1ms 定时器配置 */
  173. // clock = iTimer_GetClock(HW_SYSTICK_TIMER);
  174. // iTimer_SetPeriod(HW_SYSTICK_TIMER, clock / 1000 - 1);
  175. // iTimer_EnableAutoReload(HW_SYSTICK_TIMER);
  176. iTimer_BindInterrupt(HW_SYSTICK_TIMER, SysTask1Ms);
  177. iTimer_EnableInterrupt(HW_SYSTICK_TIMER);
  178. iCap_BindDeviceInterrupt(0,IC_CountMaxISR);
  179. iCap_BindChannelInterrupt(0,CAP_CH(2),IC_CadenceISR);
  180. iCap_BindChannelInterrupt(0,CAP_CH(3),IC_BikeSpdISR);
  181. iCap_EnableDeviceInterrupt(0);
  182. iCap_EnableChannelInterrupt(0,CAP_CH(2));
  183. iCap_EnableChannelInterrupt(0,CAP_CH(3));
  184. }
  185. void PeripheralStart()
  186. {
  187. // iPwm_EnableCount(0);
  188. // iTimer_Start(HW_TBS_TIMER);
  189. // iTimer_Start(HW_SYSTICK_TIMER);
  190. }