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. void PeripheralInit();
  21. void PeripheralStart();
  22. void AppInit()
  23. {
  24. /* 初始化外设(Api层级配置)并配置调度逻辑 */
  25. PeripheralInit();
  26. // /* 1 电机控制环路初始化 */
  27. // /* 1.1 初始化PU值系统 */
  28. // /* 1.2 初始化参数系统 */
  29. // /* 1.3 算法模块初始化 */
  30. //
  31. // McPipelineInit();
  32. // McModulesConfig();
  33. // McPipelineModulesInit();
  34. // McPipelineStaticCoef();
  35. //
  36. // /* 2 控制组件初始化 */
  37. //
  38. // SysCtrlInit();
  39. // McCtrlInit();
  40. //
  41. // /* 状态机初始化 */
  42. //
  43. // SysFsmInit();
  44. // CtrlFsmInit();
  45. // McFsmInit();
  46. //
  47. // /* 故障处理初始化 */
  48. //
  49. // AlmInit();
  50. //
  51. // /* 串口调试初始化 */
  52. //
  53. // uart_voMonitorInit();
  54. /* Code Para Init */
  55. CodeParaInit();
  56. /* AssitPara Init */
  57. ass_voAssitEEInit();
  58. /* PowerInit */
  59. power_voPowerInit();
  60. /* DisplayInit */
  61. display_voDisplayInit();
  62. #ifdef RUN_ARCH_SIM
  63. cp_stFlg.SpiOffsetFirstSetFlg = 1;
  64. #else
  65. /* Para Copy */
  66. mn_voParaSet();
  67. //cp_stFlg.ParaFirstSetFlg = 0; //eeprom save test
  68. if(cp_stFlg.ParaFirstSetFlg == 0)
  69. {
  70. flash_voParaInit();
  71. /* Parameter Default Value Write*/
  72. i2c_voDefaultWriteBuffer();
  73. i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
  74. /* Cycling History Info clear */
  75. CodeHistoryParaDelete();
  76. mn_voEEHistoryParaUpdate();
  77. i2c_voHistoryWriteBuffer();
  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. }
  124. if (power_stPowStateOut.powerstate == POWER_OFF)
  125. {
  126. if (FSM2nd_Run_state.state == Exit)
  127. {
  128. if (cp_stFlg.ParaHistorySaveEEFinishFlg == FALSE)
  129. {
  130. cp_stHistoryPara.uwOpenTimes++;
  131. cp_stHistoryPara.ulODOTime = MC_RideLog.ODO_Time;
  132. cp_stHistoryPara.ulTripSumTime = MC_RideLog.TRIP_Time;
  133. mn_voEEHistoryParaUpdate();
  134. i2c_voHistoryWriteBuffer();
  135. i2c_voHistoryWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
  136. cp_stFlg.ParaHistorySaveEEFinishFlg = TRUE;
  137. flash_voWrite();
  138. /* Error Log Write */
  139. flash_voErrorWrite();
  140. if (cp_stFlg.ParaSaveEEFlg == TRUE)
  141. {
  142. mn_voEEUperParaUpdate();
  143. /* Parameter real value write*/
  144. i2c_voParaWriteBuffer();
  145. i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
  146. cp_stFlg.ParaSaveEEFinishFlg = TRUE;
  147. cp_stFlg.ParaSaveEEFlg = FALSE;
  148. }
  149. }
  150. }
  151. }
  152. }
  153. void PeripheralInit()
  154. {
  155. /* Gpio配置 */
  156. // iGpio_SetMode(HW_GPIO_HALLA_PIN, ApiGpio_Output);
  157. // iGpio_SetMode(HW_GPIO_HALLB_PIN, ApiGpio_Output);
  158. // iGpio_SetMode(HW_GPIO_HALLC_PIN, ApiGpio_Output);
  159. /* Pwm配置 */
  160. iPwm_BindDeviceInterrupt(0, ApiPwm_CountZeroInt, tbc_voUpIsr);
  161. iPwm_BindDeviceInterrupt(0, ApiPwm_CountMaxInt, tbc_voDownIsr);
  162. iPwm_EnableDeviceInterrupt(0, ApiPwm_CountZeroInt);
  163. iPwm_EnableDeviceInterrupt(0, ApiPwm_CountMaxInt);
  164. /* Tbs 定时器配置 */
  165. iTimer_BindInterrupt(HW_TBS_TIMER, tbs_voIsr);
  166. iTimer_EnableInterrupt(HW_TBS_TIMER);
  167. /* Event1ms 定时器配置 */
  168. iTimer_BindInterrupt(HW_EVENT1MS_TIMER, Event_1ms);
  169. iTimer_EnableInterrupt(HW_EVENT1MS_TIMER);
  170. /* 1ms 定时器配置 */
  171. // clock = iTimer_GetClock(HW_SYSTICK_TIMER);
  172. // iTimer_SetPeriod(HW_SYSTICK_TIMER, clock / 1000 - 1);
  173. // iTimer_EnableAutoReload(HW_SYSTICK_TIMER);
  174. iTimer_BindInterrupt(HW_SYSTICK_TIMER, SysTask1Ms);
  175. iTimer_EnableInterrupt(HW_SYSTICK_TIMER);
  176. iCap_BindDeviceInterrupt(0,IC_CountMaxISR);
  177. iCap_BindChannelInterrupt(0,CAP_CH(2),IC_CadenceISR);
  178. iCap_BindChannelInterrupt(0,CAP_CH(3),IC_BikeSpdISR);
  179. iCap_EnableDeviceInterrupt(0);
  180. iCap_EnableChannelInterrupt(0,CAP_CH(2));
  181. iCap_EnableChannelInterrupt(0,CAP_CH(3));
  182. }
  183. void PeripheralStart()
  184. {
  185. // iPwm_EnableCount(0);
  186. // iTimer_Start(HW_TBS_TIMER);
  187. // iTimer_Start(HW_SYSTICK_TIMER);
  188. }