i2c_master.c 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665
  1. /************************************************************************
  2. Project: Welling Motor Control Paltform
  3. Filename: i2c_master.c
  4. Partner Filename: i2c_master.h
  5. Description: I2C master driver
  6. Complier: IAR Embedded Workbench for ARM 8.40.2
  7. CPU TYPE : GD32F30x
  8. *************************************************************************
  9. Copyright (c) 2022 Welling Motor Technology(Shanghai) Co. Ltd.
  10. All rights reserved.
  11. *************************************************************************
  12. *************************************************************************
  13. Revising History (ECL of this file):
  14. M0_20170410, by liyue, create this file;
  15. ************************************************************************/
  16. /************************************************************************
  17. Beginning of File, do not put anything above here except notes
  18. Compiler Directives:
  19. *************************************************************************/
  20. #ifndef _I2C_MASTER_C_
  21. #define _I2C_MASTER_C_
  22. #endif
  23. /************************************************************************
  24. Included File
  25. *************************************************************************/
  26. #include "i2c_master.h"
  27. #include "api.h"
  28. /*************************************************************************
  29. Exported Functions (N/A)
  30. *************************************************************************/
  31. /*************************************************************************
  32. Function:
  33. Description:
  34. Call by:
  35. Input Variables:
  36. Output/Return Variables:
  37. Subroutine Call:
  38. Reference:
  39. *************************************************************************/
  40. void i2c_voDefaultWriteBuffer(void)
  41. {
  42. /* Parameter default value write*/
  43. UWORD *I2C_pBuffer;
  44. UBYTE i;
  45. I2C_pBuffer = &Syspara2.stMotorPara.uwPolePairs.uwDefault1;
  46. for (i = 0; i < I2C_MOTOR_PARA_N_WORDS; i++)
  47. {
  48. I2C_ubWriteBuffer[I2C_MOTOR_PARA_ARDDR + 2 * i] = (UBYTE)(*I2C_pBuffer >> 8);
  49. I2C_ubWriteBuffer[I2C_MOTOR_PARA_ARDDR + 2 * i + 1] = (UBYTE)(*I2C_pBuffer);
  50. I2C_pBuffer += I2C_PBUFFER_NWORDS; /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  51. }
  52. I2C_pBuffer = &Syspara2.stBikePara.uwWheelPerimeter.uwDefault1;
  53. for (i = 0; i < I2C_BIKE_PARA_N_WORDS; i++)
  54. {
  55. I2C_ubWriteBuffer[I2C_BIKE_PARA_ARDDR + 2 * i] = (UBYTE)(*I2C_pBuffer >> 8);
  56. I2C_ubWriteBuffer[I2C_BIKE_PARA_ARDDR + 2 * i + 1] = (UBYTE)(*I2C_pBuffer);
  57. I2C_pBuffer += I2C_PBUFFER_NWORDS; /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  58. }
  59. I2C_pBuffer = &Syspara2.stMControlPara.ParaFirstSetFlg.uwDefault1;
  60. for (i = 0; i < I2C_MCONTROL_PARA_N_WORDS; i++)
  61. {
  62. I2C_ubWriteBuffer[I2C_MCONTROL_PARA_ARDDR + 2 * i] = (UBYTE)(*I2C_pBuffer >> 8);
  63. I2C_ubWriteBuffer[I2C_MCONTROL_PARA_ARDDR + 2 * i + 1] = (UBYTE)(*I2C_pBuffer);
  64. I2C_pBuffer += I2C_PBUFFER_NWORDS; /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  65. }
  66. I2C_pBuffer = &Syspara2.stSensorPara.uwTorSensorOffsetOrigin.uwDefault1;
  67. for (i = 0; i < I2C_SENSOR_PARA_N_WORDS; i++)
  68. {
  69. I2C_ubWriteBuffer[I2C_SENSOR_PARA_ARDDR + 2 * i] = (UBYTE)(*I2C_pBuffer >> 8);
  70. I2C_ubWriteBuffer[I2C_SENSOR_PARA_ARDDR + 2 * i + 1] = (UBYTE)(*I2C_pBuffer);
  71. I2C_pBuffer += I2C_PBUFFER_NWORDS; /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  72. }
  73. I2C_pBuffer = &Syspara2.stAssistPara.uwStartupGain.uwDefault1;
  74. for (i = 0; i < I2C_ASSIST_PARA_N_WORDS; i++)
  75. {
  76. I2C_ubWriteBuffer[I2C_ASSIST_PARA_ARDDR + 2 * i] = (UBYTE)(*I2C_pBuffer >> 8);
  77. I2C_ubWriteBuffer[I2C_ASSIST_PARA_ARDDR + 2 * i + 1] = (UBYTE)(*I2C_pBuffer);
  78. I2C_pBuffer += I2C_PBUFFER_NWORDS; /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  79. }
  80. I2C_pWriteBuffer = I2C_ubWriteBuffer;
  81. I2C_ubWriteBuffer[I2C_MOTOR_PARA_CRC_ARDDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_MOTOR_PARA_N_BYTES) >> 8);
  82. I2C_ubWriteBuffer[I2C_MOTOR_PARA_CRC_ARDDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_MOTOR_PARA_N_BYTES));
  83. I2C_pWriteBuffer = I2C_ubWriteBuffer + I2C_BIKE_PARA_ARDDR; /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  84. I2C_ubWriteBuffer[I2C_BIKE_PARA_CRC_ARDDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_BIKE_PARA_N_BYTES) >> 8);
  85. I2C_ubWriteBuffer[I2C_BIKE_PARA_CRC_ARDDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_BIKE_PARA_N_BYTES));
  86. I2C_pWriteBuffer = I2C_ubWriteBuffer + I2C_MCONTROL_PARA_ARDDR; /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  87. I2C_ubWriteBuffer[I2C_MCONTROL_PARA_CRC_ARDDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_MCONTROL_PARA_N_BYTES) >> 8);
  88. I2C_ubWriteBuffer[I2C_MCONTROL_PARA_CRC_ARDDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_MCONTROL_PARA_N_BYTES));
  89. I2C_pWriteBuffer = I2C_ubWriteBuffer + I2C_SENSOR_PARA_ARDDR; /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  90. I2C_ubWriteBuffer[I2C_SENSOR_PARA_CRC_ARDDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_SENSOR_PARA_N_BYTES) >> 8);
  91. I2C_ubWriteBuffer[I2C_SENSOR_PARA_CRC_ARDDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_SENSOR_PARA_N_BYTES));
  92. I2C_pWriteBuffer = I2C_ubWriteBuffer + I2C_ASSIST_PARA_ARDDR; /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  93. I2C_ubWriteBuffer[I2C_ASSIST_PARA_CRC_ARDDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_ASSIST_PARA_N_BYTES) >> 8);
  94. I2C_ubWriteBuffer[I2C_ASSIST_PARA_CRC_ARDDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_ASSIST_PARA_N_BYTES));
  95. }
  96. /*************************************************************************
  97. Function:
  98. Description:
  99. Call by:
  100. Input Variables:
  101. Output/Return Variables:
  102. Subroutine Call:
  103. Reference:
  104. *************************************************************************/
  105. void i2c_voParaWriteBuffer(void)
  106. {
  107. /* Parameter real value write*/
  108. UWORD *I2C_pBuffer;
  109. UBYTE i;
  110. I2C_pBuffer = &Syspara2.stMotorPara.uwPolePairs.uwDefault1;
  111. for (i = 0; i < I2C_MOTOR_PARA_N_WORDS; i++)
  112. {
  113. I2C_ubWriteBuffer[I2C_MOTOR_PARA_ARDDR + 2 * i] = (UBYTE)(*(I2C_pBuffer + 1) >> 8); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  114. I2C_ubWriteBuffer[I2C_MOTOR_PARA_ARDDR + 2 * i + 1] = (UBYTE)(*(I2C_pBuffer + 1)); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  115. I2C_pBuffer += I2C_PBUFFER_NWORDS; /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  116. }
  117. I2C_pBuffer = &Syspara2.stBikePara.uwWheelPerimeter.uwDefault1;
  118. for (i = 0; i < I2C_BIKE_PARA_N_WORDS; i++)
  119. {
  120. I2C_ubWriteBuffer[I2C_BIKE_PARA_ARDDR + 2 * i] = (UBYTE)(*(I2C_pBuffer + 1) >> 8); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  121. I2C_ubWriteBuffer[I2C_BIKE_PARA_ARDDR + 2 * i + 1] = (UBYTE)(*(I2C_pBuffer + 1)); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  122. I2C_pBuffer += I2C_PBUFFER_NWORDS; /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  123. }
  124. I2C_pBuffer = &Syspara2.stMControlPara.ParaFirstSetFlg.uwDefault1;
  125. for (i = 0; i < I2C_MCONTROL_PARA_N_WORDS; i++)
  126. {
  127. I2C_ubWriteBuffer[I2C_MCONTROL_PARA_ARDDR + 2 * i] = (UBYTE)(*(I2C_pBuffer + 1) >> 8); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  128. I2C_ubWriteBuffer[I2C_MCONTROL_PARA_ARDDR + 2 * i + 1] = (UBYTE)(*(I2C_pBuffer + 1)); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  129. I2C_pBuffer += I2C_PBUFFER_NWORDS; /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  130. }
  131. I2C_pBuffer = &Syspara2.stSensorPara.uwTorSensorOffsetOrigin.uwDefault1;
  132. for (i = 0; i < I2C_SENSOR_PARA_N_WORDS; i++)
  133. {
  134. I2C_ubWriteBuffer[I2C_SENSOR_PARA_ARDDR + 2 * i] = (UBYTE)(*(I2C_pBuffer + 1) >> 8); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  135. I2C_ubWriteBuffer[I2C_SENSOR_PARA_ARDDR + 2 * i + 1] = (UBYTE)(*(I2C_pBuffer + 1)); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  136. I2C_pBuffer += I2C_PBUFFER_NWORDS; /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  137. }
  138. I2C_pBuffer = &Syspara2.stAssistPara.uwStartupGain.uwDefault1;
  139. for (i = 0; i < I2C_ASSIST_PARA_N_WORDS; i++)
  140. {
  141. I2C_ubWriteBuffer[I2C_ASSIST_PARA_ARDDR + 2 * i] = (UBYTE)(*(I2C_pBuffer + 1) >> 8); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  142. I2C_ubWriteBuffer[I2C_ASSIST_PARA_ARDDR + 2 * i + 1] = (UBYTE)(*(I2C_pBuffer + 1)); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  143. I2C_pBuffer += I2C_PBUFFER_NWORDS; /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  144. }
  145. I2C_pWriteBuffer = I2C_ubWriteBuffer;
  146. I2C_ubWriteBuffer[I2C_MOTOR_PARA_CRC_ARDDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_MOTOR_PARA_N_BYTES) >> 8);
  147. I2C_ubWriteBuffer[I2C_MOTOR_PARA_CRC_ARDDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_MOTOR_PARA_N_BYTES));
  148. I2C_pWriteBuffer = I2C_ubWriteBuffer + I2C_BIKE_PARA_ARDDR; /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  149. I2C_ubWriteBuffer[I2C_BIKE_PARA_CRC_ARDDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_BIKE_PARA_N_BYTES) >> 8);
  150. I2C_ubWriteBuffer[I2C_BIKE_PARA_CRC_ARDDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_BIKE_PARA_N_BYTES));
  151. I2C_pWriteBuffer = I2C_ubWriteBuffer + I2C_MCONTROL_PARA_ARDDR; /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  152. I2C_ubWriteBuffer[I2C_MCONTROL_PARA_CRC_ARDDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_MCONTROL_PARA_N_BYTES) >> 8);
  153. I2C_ubWriteBuffer[I2C_MCONTROL_PARA_CRC_ARDDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_MCONTROL_PARA_N_BYTES));
  154. I2C_pWriteBuffer = I2C_ubWriteBuffer + I2C_SENSOR_PARA_ARDDR; /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  155. I2C_ubWriteBuffer[I2C_SENSOR_PARA_CRC_ARDDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_SENSOR_PARA_N_BYTES) >> 8);
  156. I2C_ubWriteBuffer[I2C_SENSOR_PARA_CRC_ARDDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_SENSOR_PARA_N_BYTES));
  157. I2C_pWriteBuffer = I2C_ubWriteBuffer + I2C_ASSIST_PARA_ARDDR; /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  158. I2C_ubWriteBuffer[I2C_ASSIST_PARA_CRC_ARDDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_ASSIST_PARA_N_BYTES) >> 8);
  159. I2C_ubWriteBuffer[I2C_ASSIST_PARA_CRC_ARDDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pWriteBuffer, I2C_ASSIST_PARA_N_BYTES));
  160. }
  161. /*************************************************************************
  162. Function:
  163. Description:
  164. Call by:
  165. Input Variables:
  166. Output/Return Variables:
  167. Subroutine Call:
  168. Reference:
  169. *************************************************************************/
  170. void i2c_voHistoryDefaultWriteBuffer(void)
  171. {
  172. /* History default value write*/
  173. UWORD *I2C_pBuffer;
  174. UBYTE i;
  175. I2C_pBuffer = &Syspara2.stHistoryPara.uwAssModSelect.uwDefault1;
  176. for (i = 0; i < I2C_HISTORY_PARA_N_WORDS; i++)
  177. {
  178. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_ARDDR + 2 * i] = (UBYTE)(*(I2C_pBuffer) >> 8); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  179. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_ARDDR + 2 * i + 1] = (UBYTE)(*(I2C_pBuffer)); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  180. I2C_pBuffer += I2C_PBUFFER_NWORDS; /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  181. }
  182. I2C_pHistoryWriteBuffer = I2C_ubHistoyWriteBuffer;
  183. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_CRC_ARDDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_HISTORY_PARA_N_BYTES) >> 8);
  184. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_CRC_ARDDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_HISTORY_PARA_N_BYTES));
  185. }
  186. /*************************************************************************
  187. Function:
  188. Description:
  189. Call by:
  190. Input Variables:
  191. Output/Return Variables:
  192. Subroutine Call:
  193. Reference:
  194. *************************************************************************/
  195. void i2c_voHistoryWriteBuffer(void)
  196. {
  197. UWORD *I2C_pBuffer;
  198. UBYTE i;
  199. I2C_pBuffer = &Syspara2.stHistoryPara.uwAssModSelect.uwDefault1;
  200. for (i = 0; i < I2C_HISTORY_PARA_N_WORDS; i++)
  201. {
  202. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_ARDDR + 2 * i] = *(I2C_pBuffer + 1) >> 8;
  203. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_ARDDR + 2 * i + 1] = *(I2C_pBuffer + 1);
  204. I2C_pBuffer += I2C_PBUFFER_NWORDS;
  205. }
  206. I2C_pHistoryWriteBuffer = I2C_ubHistoyWriteBuffer;
  207. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_CRC_ARDDR] = i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_HISTORY_PARA_N_BYTES) >> 8;
  208. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_CRC_ARDDR + 1] = i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_HISTORY_PARA_N_BYTES);
  209. }
  210. /*************************************************************************
  211. Function:
  212. Description:
  213. Call by:
  214. Input Variables:
  215. Output/Return Variables:
  216. Subroutine Call:
  217. Reference:
  218. *************************************************************************/
  219. void i2c_voInfoWrite2EE(const I2C_TX_COF *coef, I2C_TX_OUT *out)
  220. {
  221. UBYTE ubNBytes;
  222. UBYTE ubReTX1;
  223. UBYTE ubSlaveAddr;
  224. UBYTE ubWriteAddr;
  225. ubNBytes = I2C_TX1_NBYTES;
  226. ubReTX1 = I2C_RETX1_TIMES;
  227. #if(ubReTX1 >= 2)
  228. ubReTX1 = 2;
  229. #endif
  230. ubWriteAddr = 0x00;
  231. ubSlaveAddr = I2C_SLAVEADDR_BLOCK1;
  232. while (ubReTX1 != 0)
  233. {
  234. ubReTX1--;
  235. I2C_pWriteBuffer = I2C_ubWriteBuffer;
  236. if (ubReTX1 == 1)
  237. {
  238. ubSlaveAddr = I2C_SLAVEADDR_BLOCK2;
  239. }
  240. if (ubReTX1 == 0)
  241. {
  242. ubSlaveAddr = I2C_SLAVEADDR_BLOCK1;
  243. }
  244. iI2C_Write(0, ubSlaveAddr, ubWriteAddr, 8, I2C_pWriteBuffer, ubNBytes);
  245. }
  246. if ((ubReTX1 == 0) && (I2C_EE_ComuFltFlg != TRUE))
  247. {
  248. out->blTX1FinishFlg = TRUE;
  249. }
  250. else
  251. {
  252. out->blTX1FinishFlg = FALSE;
  253. }
  254. }
  255. /*************************************************************************
  256. Function:
  257. Description:
  258. Call by:
  259. Input Variables:
  260. Output/Return Variables:
  261. Subroutine Call:
  262. Reference:
  263. *************************************************************************/
  264. void i2c_voHistoryWrite2EE(const I2C_TX_COF *coef, I2C_TX_OUT *out)
  265. {
  266. UBYTE ubNBytes;
  267. UBYTE ubReTX2;
  268. UBYTE ubSlaveAddr;
  269. UBYTE ubWriteAddr;
  270. ubNBytes = I2C_TX2_NBYTES;
  271. ubReTX2 = I2C_RETX2_TIMES;
  272. #if(ubReTX2 >= 2)
  273. ubReTX2 = 2;
  274. #endif
  275. ubSlaveAddr = I2C_SLAVEADDR_BLOCK3;
  276. ubWriteAddr = 0x00;
  277. while (ubReTX2 != 0)
  278. {
  279. ubReTX2--;
  280. I2C_pHistoryWriteBuffer = I2C_ubHistoyWriteBuffer;
  281. if (ubReTX2 == 1)
  282. {
  283. ubSlaveAddr = I2C_SLAVEADDR_BLOCK4;
  284. }
  285. if (ubReTX2 == 0)
  286. {
  287. ubSlaveAddr = I2C_SLAVEADDR_BLOCK3;
  288. }
  289. iI2C_Write(0, ubSlaveAddr, ubWriteAddr, 8, I2C_pHistoryWriteBuffer, ubNBytes);
  290. }
  291. if ((ubReTX2 == 0) && (I2C_EE_ComuFltFlg != TRUE))
  292. {
  293. out->blTX2FinishFlg = TRUE;
  294. }
  295. else
  296. {
  297. out->blTX2FinishFlg = FALSE;
  298. }
  299. }
  300. /*************************************************************************
  301. Function:
  302. Description:
  303. Call by:
  304. Input Variables:
  305. Output/Return Variables:
  306. Subroutine Call:
  307. Reference:
  308. *************************************************************************/
  309. void i2c_voSysparaReadFromEE(I2C_RXCRC_OUT *out) /* parasoft-suppress METRICS-28 "本项目圈复杂度无法更改,后续避免" */
  310. {
  311. UBYTE ubRdNBytes = 0, ubRdSlaveAddr = 0, ubRdAddr = 0;
  312. UBYTE ubRdCnt = 2;
  313. UBYTE *p_buffer;
  314. while(ubRdCnt != 0)
  315. {
  316. ubRdCnt--;
  317. if (ubRdCnt == 1)
  318. {
  319. ubRdSlaveAddr = I2C_SLAVEADDR_BLOCK1;
  320. ubRdAddr = 0x00;
  321. ubRdNBytes = I2C_RX1_NBYTES;
  322. p_buffer = I2C_ubReadBuffer[0];
  323. }
  324. else if (ubRdCnt == 0)
  325. {
  326. ubRdSlaveAddr = I2C_SLAVEADDR_BLOCK3;
  327. ubRdAddr = 0x00;
  328. ubRdNBytes = I2C_RX2_NBYTES;
  329. p_buffer = I2C_ubReadBuffer[1];
  330. }
  331. else
  332. {
  333. //do nothing
  334. }
  335. iI2C_Read(0, ubRdSlaveAddr, ubRdAddr, 8, p_buffer, ubRdNBytes);
  336. }
  337. i2c_voReadBufferCRC(out);
  338. i2c_voGetValueFrmBuffer(out);
  339. out->ReadFinishFlg = TRUE;
  340. }
  341. /*************************************************************************
  342. Function:
  343. Description:
  344. Call by:
  345. Input Variables:
  346. Output/Return Variables:
  347. Subroutine Call:
  348. Reference:
  349. *************************************************************************/
  350. UWORD i2c_uwCRCCcitt(const UBYTE *ptubBuf, UWORD length)
  351. {
  352. UBYTE b = 0;
  353. UWORD crc = 0xffff;
  354. UWORD i, j;
  355. for (i = 0; i < length; i++)
  356. {
  357. for (j = 0; j < 8; j++)
  358. {
  359. b = (UBYTE)(((ptubBuf[i] << j) & 0x80) ^ ((crc & 0x8000) >> 8)); /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  360. crc <<= 1;
  361. if (b != 0)
  362. {
  363. crc ^= 0x1021; // crc = crc^(0x10000^0x11021)
  364. }
  365. }
  366. }
  367. return crc;
  368. }
  369. /*************************************************************************
  370. Function:
  371. Description:
  372. Call by:
  373. Input Variables:
  374. Output/Return Variables:
  375. Subroutine Call:
  376. Reference:
  377. *************************************************************************/
  378. void i2c_voReadBufferCRC(I2C_RXCRC_OUT *out)
  379. {
  380. UWORD uwMotorParaCRC, uwBikeParaCRC, uwMControlParaCRC;
  381. UWORD uwSensorParaCRC, uwAssistParaCRC, uwHistoryParaCRC;
  382. UWORD uwMotorParaRdCRC, uwBikeParaRdCRC, uwMControlParaRdCRC;
  383. UWORD uwSensorParaRdCRC, uwAssistParaRdCRC, uwHistoryParaRdCRC;
  384. I2C_pReadBuffer = I2C_ubReadBuffer[0];
  385. uwMotorParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer, I2C_MOTOR_PARA_N_BYTES);
  386. uwBikeParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer + I2C_BIKE_PARA_ARDDR, I2C_BIKE_PARA_N_BYTES); /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  387. uwMControlParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer + I2C_MCONTROL_PARA_ARDDR, I2C_MCONTROL_PARA_N_BYTES); /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  388. uwSensorParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer + I2C_SENSOR_PARA_ARDDR, I2C_SENSOR_PARA_N_BYTES); /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  389. uwAssistParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer + I2C_ASSIST_PARA_ARDDR, I2C_ASSIST_PARA_N_BYTES); /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  390. I2C_pReadBuffer = I2C_ubReadBuffer[1];
  391. uwHistoryParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer, I2C_HISTORY_PARA_N_BYTES);
  392. uwMotorParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_MOTOR_PARA_CRC_ARDDR] << 8) + I2C_ubReadBuffer[0][I2C_MOTOR_PARA_CRC_ARDDR + 1];
  393. uwBikeParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_BIKE_PARA_CRC_ARDDR] << 8) + I2C_ubReadBuffer[0][I2C_BIKE_PARA_CRC_ARDDR + 1];
  394. uwMControlParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_MCONTROL_PARA_CRC_ARDDR] << 8) + I2C_ubReadBuffer[0][I2C_MCONTROL_PARA_CRC_ARDDR + 1];
  395. uwSensorParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_SENSOR_PARA_CRC_ARDDR] << 8) + I2C_ubReadBuffer[0][I2C_SENSOR_PARA_CRC_ARDDR + 1];
  396. uwAssistParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_ASSIST_PARA_CRC_ARDDR] << 8) + I2C_ubReadBuffer[0][I2C_ASSIST_PARA_CRC_ARDDR + 1];
  397. uwHistoryParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[1][I2C_HISTORY_PARA_CRC_ARDDR] << 8) + I2C_ubReadBuffer[1][I2C_HISTORY_PARA_CRC_ARDDR + 1];
  398. if (uwMotorParaCRC != uwMotorParaRdCRC)
  399. {
  400. out->blMotorParaFltFlg = TRUE;
  401. }
  402. if (uwBikeParaCRC != uwBikeParaRdCRC)
  403. {
  404. out->blBikeParaFltFlg = TRUE;
  405. }
  406. if (uwMControlParaCRC != uwMControlParaRdCRC)
  407. {
  408. out->blMControlParaFltFlg = TRUE;
  409. }
  410. if (uwSensorParaCRC != uwSensorParaRdCRC)
  411. {
  412. out->blSensorParaFltFlg = TRUE;
  413. }
  414. if (uwAssistParaCRC != uwAssistParaRdCRC)
  415. {
  416. out->blAssistParaFltFlg = TRUE;
  417. }
  418. if (uwHistoryParaCRC != uwHistoryParaRdCRC)
  419. {
  420. out->blHistoryParaFltFlg = TRUE;
  421. }
  422. }
  423. /*************************************************************************
  424. Function:
  425. Description:
  426. Call by:
  427. Input Variables:
  428. Output/Return Variables:
  429. Subroutine Call:
  430. Reference:
  431. *************************************************************************/
  432. void i2c_voGetValueFrmBuffer(const I2C_RXCRC_OUT *out)
  433. {
  434. UBYTE j = 0;
  435. if (out->blMotorParaFltFlg != TRUE)
  436. {
  437. for (j = 0; j < I2C_MOTOR_PARA_N_WORDS; j++)
  438. {
  439. I2C_uwMotorParaRead[j] = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_MOTOR_PARA_ARDDR + 2 * j] << 8) + I2C_ubReadBuffer[0][I2C_MOTOR_PARA_ARDDR + 2 * j + 1];
  440. }
  441. }
  442. else
  443. {}
  444. if (out->blBikeParaFltFlg != TRUE)
  445. {
  446. for (j = 0; j < I2C_BIKE_PARA_N_WORDS; j++)
  447. {
  448. I2C_uwBikeParaRead[j] = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_BIKE_PARA_ARDDR + 2 * j] << 8) + I2C_ubReadBuffer[0][I2C_BIKE_PARA_ARDDR + 2 * j + 1];
  449. }
  450. }
  451. else
  452. {}
  453. if (out->blMControlParaFltFlg != TRUE)
  454. {
  455. for (j = 0; j < I2C_MCONTROL_PARA_N_WORDS; j++)
  456. {
  457. I2C_uwMControlRead[j] =
  458. (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_MCONTROL_PARA_ARDDR + 2 * j] << 8) + I2C_ubReadBuffer[0][I2C_MCONTROL_PARA_ARDDR + 2 * j + 1];
  459. }
  460. }
  461. else
  462. {}
  463. if (out->blSensorParaFltFlg != TRUE)
  464. {
  465. for (j = 0; j < I2C_SENSOR_PARA_N_WORDS; j++)
  466. {
  467. I2C_uwSensorRead[j] = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_SENSOR_PARA_ARDDR + 2 * j] << 8) + I2C_ubReadBuffer[0][I2C_SENSOR_PARA_ARDDR + 2 * j + 1];
  468. }
  469. }
  470. else
  471. {}
  472. if (out->blAssistParaFltFlg != TRUE)
  473. {
  474. for (j = 0; j < I2C_ASSIST_PARA_N_WORDS; j++)
  475. {
  476. I2C_uwAssistParaRead[j] =
  477. (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_ASSIST_PARA_ARDDR + 2 * j] << 8) + I2C_ubReadBuffer[0][I2C_ASSIST_PARA_ARDDR + 2 * j + 1];
  478. }
  479. }
  480. else
  481. {}
  482. if (out->blHistoryParaFltFlg != TRUE)
  483. {
  484. for (j = 0; j < I2C_HISTORY_PARA_N_WORDS; j++)
  485. {
  486. I2C_uwHistoryParaRead[j] =
  487. (UWORD)((UWORD)I2C_ubReadBuffer[1][I2C_HISTORY_PARA_ARDDR + 2 * j] << 8) + I2C_ubReadBuffer[1][I2C_HISTORY_PARA_ARDDR + 2 * j + 1];
  488. }
  489. }
  490. else
  491. {}
  492. Syspara2.stMotorPara.uwPolePairs.uwReal = I2C_uwMotorParaRead[0];
  493. Syspara2.stMotorPara.uwRsmOhm.uwReal = I2C_uwMotorParaRead[1];
  494. Syspara2.stMotorPara.uwLduH.uwReal = I2C_uwMotorParaRead[2];
  495. Syspara2.stMotorPara.uwLquH.uwReal = I2C_uwMotorParaRead[3];
  496. Syspara2.stMotorPara.uwFluxmWb.uwReal = I2C_uwMotorParaRead[4];
  497. Syspara2.stMotorPara.uwIdMaxA.uwReal = I2C_uwMotorParaRead[5];
  498. Syspara2.stMotorPara.uwIdMinA.uwReal = I2C_uwMotorParaRead[6];
  499. Syspara2.stMotorPara.uwRSpdRpm.uwReal = I2C_uwMotorParaRead[7];
  500. Syspara2.stMotorPara.uwRPwrWt.uwReal = I2C_uwMotorParaRead[8];
  501. Syspara2.stMotorPara.uwRCurA.uwReal = I2C_uwMotorParaRead[9];
  502. Syspara2.stMotorPara.uwRVolV.uwReal = I2C_uwMotorParaRead[10];
  503. Syspara2.stMotorPara.uwJD.uwReal = I2C_uwMotorParaRead[11];
  504. Syspara2.stMotorPara.uwTorMaxNm.uwReal = I2C_uwMotorParaRead[12];
  505. Syspara2.stBikePara.uwWheelPerimeter.uwReal = I2C_uwBikeParaRead[0];
  506. Syspara2.stBikePara.uwMechRationMotor.uwReal = I2C_uwBikeParaRead[1];
  507. Syspara2.stBikePara.uwAssistMaxSpdKmH.uwReal = I2C_uwBikeParaRead[2];
  508. Syspara2.stBikePara.uwThrottleMaxSpdKmH.uwReal = I2C_uwBikeParaRead[3];
  509. Syspara2.stBikePara.uwNmFrontChainring.uwReal = I2C_uwBikeParaRead[4];
  510. Syspara2.stBikePara.uwNmBackChainring.uwReal = I2C_uwBikeParaRead[5];
  511. Syspara2.stBikePara.uwAssistSelect1.uwReal = I2C_uwBikeParaRead[6];
  512. Syspara2.stBikePara.uwAssistSelect2.uwReal = I2C_uwBikeParaRead[7];
  513. Syspara2.stBikePara.uwLightVoltage.uwReal = I2C_uwBikeParaRead[8];
  514. Syspara2.stBikePara.swDeltPerimeter.swReal = (SWORD)I2C_uwBikeParaRead[9];
  515. Syspara2.stBikePara.uwStartMode.uwReal = I2C_uwBikeParaRead[10];
  516. Syspara2.stBikePara.uwAutoPowerOffTime.uwReal = I2C_uwBikeParaRead[11];
  517. Syspara2.stMControlPara.ParaFirstSetFlg.uwReal = I2C_uwMControlRead[0];
  518. Syspara2.stMControlPara.SpiOffsetFirstSetFlg.uwReal = I2C_uwMControlRead[1];
  519. Syspara2.stMControlPara.uwSPIPosOffsetOrigin.uwReal = I2C_uwMControlRead[2];
  520. Syspara2.stMControlPara.uwSPIPosOffsetNow.uwReal = I2C_uwMControlRead[3];
  521. Syspara2.stMControlPara.uwIPeakMaxA.uwReal = I2C_uwMControlRead[4];
  522. Syspara2.stMControlPara.uwAlamOCurA.uwReal = I2C_uwMControlRead[5];
  523. Syspara2.stMControlPara.uwAlamOVolV.uwReal = I2C_uwMControlRead[6];
  524. Syspara2.stMControlPara.uwAlamUVolV.uwReal = I2C_uwMControlRead[7];
  525. Syspara2.stMControlPara.uwAlamOverSpdRpm.uwReal = I2C_uwMControlRead[8];
  526. Syspara2.stMControlPara.uwAlamOverHeatCe.uwReal = I2C_uwMControlRead[9];
  527. Syspara2.stMControlPara.uwAlamRecHeatCe.uwReal = I2C_uwMControlRead[10];
  528. Syspara2.stMControlPara.uwPwrLimitStartCe.uwReal = I2C_uwMControlRead[11];
  529. Syspara2.stSensorPara.uwTorSensorOffsetOrigin.uwReal = I2C_uwSensorRead[0];
  530. Syspara2.stSensorPara.uwTorSensorOffsetNow1.uwReal = I2C_uwSensorRead[1];
  531. Syspara2.stSensorPara.uwTorSensorOffsetNow2.uwReal = I2C_uwSensorRead[2];
  532. Syspara2.stSensorPara.uwTorSensorOffsetNow3.uwReal = I2C_uwSensorRead[3];
  533. Syspara2.stSensorPara.uwTorSensorOffsetNow4.uwReal = I2C_uwSensorRead[4];
  534. Syspara2.stSensorPara.uwBikeTorMaxNm.uwReal = I2C_uwSensorRead[5];
  535. Syspara2.stSensorPara.uwBikeTor1StepRealNm.uwReal = I2C_uwSensorRead[6];
  536. Syspara2.stSensorPara.uwBikeTor1StepADC.uwReal = I2C_uwSensorRead[7];
  537. Syspara2.stSensorPara.uwBikeTor2StepRealNm.uwReal = I2C_uwSensorRead[8];
  538. Syspara2.stSensorPara.uwBikeTor2StepADC.uwReal = I2C_uwSensorRead[9];
  539. Syspara2.stSensorPara.uwBikeTor3StepRealNm.uwReal = I2C_uwSensorRead[10];
  540. Syspara2.stSensorPara.uwBikeTor3StepADC.uwReal = I2C_uwSensorRead[11];
  541. Syspara2.stSensorPara.uwBikeTor4StepRealNm.uwReal = I2C_uwSensorRead[12];
  542. Syspara2.stSensorPara.uwBikeTor4StepADC.uwReal = I2C_uwSensorRead[13];
  543. Syspara2.stSensorPara.uwCadSensorPulseNm.uwReal = I2C_uwSensorRead[14];
  544. Syspara2.stSensorPara.uwBikeSpdSensorPulseNm.uwReal = I2C_uwSensorRead[15];
  545. Syspara2.stAssistPara.uwStartupGain.uwReal = I2C_uwAssistParaRead[0];
  546. Syspara2.stAssistPara.uwStartcruiseGain.uwReal = I2C_uwAssistParaRead[1];
  547. Syspara2.stAssistPara.uwAssistStartNm.uwReal = I2C_uwAssistParaRead[2];
  548. Syspara2.stAssistPara.uwAssistStopNm.uwReal = I2C_uwAssistParaRead[3];
  549. Syspara2.stAssistPara.uwStartUpGainStep.uwReal = I2C_uwAssistParaRead[4];
  550. Syspara2.stAssistPara.uwStartUpCadNm.uwReal = I2C_uwAssistParaRead[5];
  551. Syspara2.stAssistPara.uwTorLPFCadNm.uwReal = I2C_uwAssistParaRead[6];
  552. Syspara2.stAssistPara.uwSpeedAssistSpdRpm.uwReal = I2C_uwAssistParaRead[7];
  553. Syspara2.stAssistPara.uwSpeedAssistIMaxA.uwReal = I2C_uwAssistParaRead[8];
  554. Syspara2.stAssistPara.uwAssistLimitBikeSpdStart.uwReal = I2C_uwAssistParaRead[9];
  555. Syspara2.stAssistPara.uwAssistLimitBikeSpdStop.uwReal = I2C_uwAssistParaRead[10];
  556. Syspara2.stAssistPara.uwCadenceAssistWeight.uwReal = I2C_uwAssistParaRead[11];
  557. Syspara2.stHistoryPara.uwAssModSelect.uwReal = I2C_uwHistoryParaRead[0];
  558. Syspara2.stHistoryPara.uwOpenTimes.uwReal = I2C_uwHistoryParaRead[1];
  559. Syspara2.stHistoryPara.uwUsedTimeH.uwReal = I2C_uwHistoryParaRead[2];
  560. Syspara2.stHistoryPara.uwUsedTimeL.uwReal = I2C_uwHistoryParaRead[3];
  561. Syspara2.stHistoryPara.uwNTCTempMaxCe.uwReal = I2C_uwHistoryParaRead[4];
  562. Syspara2.stHistoryPara.uwNTCTempMinCe.uwReal = I2C_uwHistoryParaRead[5];
  563. Syspara2.stHistoryPara.uwAlamHOcurTimes.uwReal = I2C_uwHistoryParaRead[6];
  564. Syspara2.stHistoryPara.uwAlamSOcurTimes.uwReal = I2C_uwHistoryParaRead[7];
  565. Syspara2.stHistoryPara.uwAlamOHeatTimes.uwReal = I2C_uwHistoryParaRead[8];
  566. Syspara2.stHistoryPara.uwAlamRotorLockTimes.uwReal = I2C_uwHistoryParaRead[9];
  567. Syspara2.stHistoryPara.uwAlamPhsLossTimes.uwReal = I2C_uwHistoryParaRead[10];
  568. Syspara2.stHistoryPara.uwAlamOVolTimes.uwReal = I2C_uwHistoryParaRead[11];
  569. Syspara2.stHistoryPara.uwAlamUVolTimes.uwReal = I2C_uwHistoryParaRead[12];
  570. Syspara2.stHistoryPara.uwAlamComOTimeTimes.uwReal = I2C_uwHistoryParaRead[13];
  571. Syspara2.stHistoryPara.uwG1AvgPwrConsumption.uwReal = I2C_uwHistoryParaRead[14];
  572. Syspara2.stHistoryPara.uwG2AvgPwrConsumption.uwReal = I2C_uwHistoryParaRead[15];
  573. Syspara2.stHistoryPara.uwG3AvgPwrConsumption.uwReal = I2C_uwHistoryParaRead[16];
  574. Syspara2.stHistoryPara.uwG4AvgPwrConsumption.uwReal = I2C_uwHistoryParaRead[17];
  575. Syspara2.stHistoryPara.uwG5AvgPwrConsumption.uwReal = I2C_uwHistoryParaRead[18];
  576. Syspara2.stHistoryPara.uwODOTripH.uwReal = I2C_uwHistoryParaRead[19];
  577. Syspara2.stHistoryPara.uwODOTripL.uwReal = I2C_uwHistoryParaRead[20];
  578. Syspara2.stHistoryPara.uwODOTimeH.uwReal = I2C_uwHistoryParaRead[21];
  579. Syspara2.stHistoryPara.uwODOTimeL.uwReal = I2C_uwHistoryParaRead[22];
  580. Syspara2.stHistoryPara.uwTripSumH.uwReal = I2C_uwHistoryParaRead[23];
  581. Syspara2.stHistoryPara.uwTripSumL.uwReal = I2C_uwHistoryParaRead[24];
  582. Syspara2.stHistoryPara.uwTripSumTimeH.uwReal = I2C_uwHistoryParaRead[25];
  583. Syspara2.stHistoryPara.uwTripSumTimeL.uwReal = I2C_uwHistoryParaRead[26];
  584. Syspara2.stHistoryPara.uwTorSensorAlamTimes.uwReal = I2C_uwHistoryParaRead[27];
  585. Syspara2.stHistoryPara.uwCadSensorAlamTimes.uwReal = I2C_uwHistoryParaRead[28];
  586. Syspara2.stHistoryPara.uwBikeSpdSensorAlamTimes.uwReal = I2C_uwHistoryParaRead[29];
  587. Syspara2.stHistoryPara.uwPosSensorAlamTimes.uwReal = I2C_uwHistoryParaRead[30];
  588. }
  589. /*************************************************************************
  590. Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd.
  591. All rights reserved.
  592. *************************************************************************/
  593. #ifdef _I2C_MASTER_C_
  594. #undef _I2C_MASTER_C_ /* parasoft-suppress MISRA2004-19_6 "本项目中无法更改,后续避免使用" */
  595. #endif
  596. /*************************************************************************
  597. End of this File (EOF)!
  598. Do not put anything after this part!
  599. *************************************************************************/