app.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  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. flash_voErrorClear();
  74. /* Parameter Default Value Write*/
  75. i2c_voDefaultWriteBuffer();
  76. i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
  77. /* History Default Value Write */
  78. i2c_voHistoryDefaultWriteBuffer();
  79. i2c_voHistoryWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
  80. /* Read EE and Update code para */
  81. mn_voParaSet();
  82. }
  83. #endif
  84. Can_voUpdateMC_UpcInfo();
  85. /* System parameter initial */
  86. mn_voSoftwareInit();
  87. /* 启动外设 */
  88. PeripheralStart();
  89. }
  90. void AppLoop()
  91. {
  92. /* Uart Monitor Service */
  93. // ReadFrame_Poll2();
  94. // uart_voMainDec();
  95. /* Control mode FSM reset */
  96. if (!sysfsm_stFlg.blFSMRstOvrFlg)
  97. {
  98. RUN_FSM_voInit();
  99. Switch_speed_FSMInit();
  100. sysfsm_stFlg.blFSMRstOvrFlg = TRUE;
  101. }
  102. /* Control mode variable clear */
  103. if (!sysfsm_stFlg.blCtrlMdVarClcOvrFlg)
  104. {
  105. sysfsm_stFlg.blCtrlMdVarClcOvrFlg = TRUE;
  106. }
  107. CanRx_Process();
  108. ReadFrame_Poll2();
  109. uart_voMainDec();
  110. TimingTaskLoopServer();
  111. if(cp_stFlg.SpiOffsetFirstSetFinishFlg == TRUE && switch_flg.SysRun_Flag == FALSE && cp_stFlg.SpiOffsetFirstSetFlg==0 && FSM2nd_Run_state.state == Exit)
  112. {
  113. MC_UpcInfo.stMContorlInfo.uwSaveFlg = 1;
  114. cp_stFlg.SpiOffsetFirstSetFlg = 1;
  115. mn_voEEUperParaUpdate();
  116. DISABLE_IRQ;
  117. /* Parameter real value write*/
  118. i2c_voParaWriteBuffer();
  119. i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
  120. MC_UpcInfo.stMContorlInfo.uwSaveFlg = 0;
  121. ENABLE_IRQ;
  122. }
  123. if (cp_stFlg.ParaUpdateFlg == TRUE)
  124. {
  125. mn_voParaUpdate();
  126. cp_stFlg.ParaUpdateFlg = FALSE;
  127. }
  128. if (power_stPowStateOut.powerstate == POWER_OFF)
  129. {
  130. if (FSM2nd_Run_state.state == Exit)
  131. {
  132. if (cp_stFlg.ParaHistorySaveEEFinishFlg == FALSE)
  133. {
  134. cp_stHistoryPara.uwOpenTimes++;
  135. cp_stHistoryPara.ulODOTime = MC_RideLog.ODO_Time;
  136. cp_stHistoryPara.ulTripSumTime = MC_RideLog.TRIP_Time;
  137. mn_voEEHistoryParaUpdate();
  138. DISABLE_IRQ;
  139. i2c_voHistoryWriteBuffer();
  140. i2c_voHistoryWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
  141. cp_stFlg.ParaHistorySaveEEFinishFlg = TRUE;
  142. flash_voWrite();
  143. /* Error Log Write */
  144. flash_voErrorWrite();
  145. if (cp_stFlg.ParaSaveEEFlg == TRUE)
  146. {
  147. mn_voEEUperParaUpdate();
  148. /* Parameter real value write*/
  149. i2c_voParaWriteBuffer();
  150. i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
  151. cp_stFlg.ParaSaveEEFinishFlg = TRUE;
  152. cp_stFlg.ParaSaveEEFlg = FALSE;
  153. }
  154. ENABLE_IRQ;
  155. }
  156. }
  157. }
  158. GearBox_Loop();
  159. }
  160. void PeripheralInit()
  161. {
  162. /* Gpio配置 */
  163. // iGpio_SetMode(HW_GPIO_HALLA_PIN, ApiGpio_Output);
  164. // iGpio_SetMode(HW_GPIO_HALLB_PIN, ApiGpio_Output);
  165. // iGpio_SetMode(HW_GPIO_HALLC_PIN, ApiGpio_Output);
  166. /* Pwm配置 */
  167. iPwm_BindDeviceInterrupt(0, ApiPwm_CountZeroInt, tbc_voUpIsr);
  168. iPwm_BindDeviceInterrupt(0, ApiPwm_CountMaxInt, tbc_voDownIsr);
  169. iPwm_EnableDeviceInterrupt(0, ApiPwm_CountZeroInt);
  170. iPwm_EnableDeviceInterrupt(0, ApiPwm_CountMaxInt);
  171. /* Tbs 定时器配置 */
  172. iTimer_BindInterrupt(HW_TBS_TIMER, tbs_voIsr);
  173. iTimer_EnableInterrupt(HW_TBS_TIMER);
  174. /* Event1ms 定时器配置 */
  175. iTimer_BindInterrupt(HW_EVENT1MS_TIMER, Event_1ms);
  176. iTimer_EnableInterrupt(HW_EVENT1MS_TIMER);
  177. /* 1ms 定时器配置 */
  178. // clock = iTimer_GetClock(HW_SYSTICK_TIMER);
  179. // iTimer_SetPeriod(HW_SYSTICK_TIMER, clock / 1000 - 1);
  180. // iTimer_EnableAutoReload(HW_SYSTICK_TIMER);
  181. iTimer_BindInterrupt(HW_SYSTICK_TIMER, SysTask1Ms);
  182. iTimer_EnableInterrupt(HW_SYSTICK_TIMER);
  183. iCap_BindDeviceInterrupt(0,IC_CountMaxISR);
  184. iCap_BindChannelInterrupt(0,CAP_CH(2),IC_CadenceISR);
  185. iCap_BindChannelInterrupt(0,CAP_CH(3),IC_BikeSpdISR);
  186. iCap_EnableDeviceInterrupt(0);
  187. iCap_EnableChannelInterrupt(0,CAP_CH(2));
  188. iCap_EnableChannelInterrupt(0,CAP_CH(3));
  189. }
  190. void PeripheralStart()
  191. {
  192. // iPwm_EnableCount(0);
  193. // iTimer_Start(HW_TBS_TIMER);
  194. // iTimer_Start(HW_SYSTICK_TIMER);
  195. }