i2c_master.c 36 KB

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