i2c_master.c 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825
  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 *I2C_pBuffer_byte;
  195. UBYTE i;
  196. I2C_pBuffer = &Syspara2.stHistoryPara.uwAssModSelect.uwDefault1;
  197. for (i = 0; i < I2C_HISTORY_PARA_N_WORDS; i++)
  198. {
  199. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_ARDDR + 2 * i] = (UBYTE)(*(I2C_pBuffer) >> 8); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  200. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_ARDDR + 2 * i + 1] = (UBYTE)(*(I2C_pBuffer)); /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  201. I2C_pBuffer += I2C_PBUFFER_NWORDS; /* parasoft-suppress MISRA2004-17_1 "本项目无法更改,后续避免未指向数组的指针运算" */ /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  202. }
  203. I2C_pBuffer_byte = &Syspara2.stRidePara.ucAssistRatioGain1.ucDefault1;
  204. for (i = 0; i < I2C_RIDE_PARA_N_BYTES; i++)
  205. {
  206. I2C_ubHistoyWriteBuffer[I2C_RIDE_PARA_ADDR + i] = (UBYTE)(*I2C_pBuffer_byte);
  207. I2C_pBuffer_byte += I2C_PBUFFERBYTE_BYTES;
  208. }
  209. I2C_pBuffer = &Syspara2.stBikePara2.uwNoneOBCEnable.uwDefault1;
  210. for (i = 0; i < I2C_BIKE_PARA2_N_WORDS; i++)
  211. {
  212. I2C_ubHistoyWriteBuffer[I2C_BIKE_PARA2_ADDR + 2 * i] = (UBYTE)(*I2C_pBuffer >> 8);
  213. I2C_ubHistoyWriteBuffer[I2C_BIKE_PARA2_ADDR + 2 * i + 1] = (UBYTE)(*I2C_pBuffer);
  214. I2C_pBuffer += I2C_PBUFFER_NWORDS;
  215. }
  216. I2C_pHistoryWriteBuffer = I2C_ubHistoyWriteBuffer;
  217. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_CRC_ARDDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_HISTORY_PARA_N_BYTES) >> 8);
  218. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_CRC_ARDDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_HISTORY_PARA_N_BYTES));
  219. I2C_pHistoryWriteBuffer = I2C_ubHistoyWriteBuffer + I2C_RIDE_PARA_ADDR;
  220. I2C_ubHistoyWriteBuffer[I2C_RIDE_PARA_CRC_ADDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_RIDE_PARA_N_BYTES) >> 8);
  221. I2C_ubHistoyWriteBuffer[I2C_RIDE_PARA_CRC_ADDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_RIDE_PARA_N_BYTES));
  222. I2C_pHistoryWriteBuffer = I2C_ubHistoyWriteBuffer + I2C_BIKE_PARA2_ADDR;
  223. I2C_ubHistoyWriteBuffer[I2C_BIKE_PARA2_CRC_ADDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_BIKE_PARA2_N_BYTES) >> 8);
  224. I2C_ubHistoyWriteBuffer[I2C_BIKE_PARA2_CRC_ADDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_BIKE_PARA2_N_BYTES));
  225. }
  226. /*************************************************************************
  227. Function:
  228. Description:
  229. Call by:
  230. Input Variables:
  231. Output/Return Variables:
  232. Subroutine Call:
  233. Reference:
  234. *************************************************************************/
  235. void i2c_voHistoryWriteBuffer(void)
  236. {
  237. UWORD *I2C_pBuffer;
  238. UBYTE *I2C_pBuffer_byte;
  239. UBYTE i;
  240. I2C_pBuffer = &Syspara2.stHistoryPara.uwAssModSelect.uwDefault1;
  241. for (i = 0; i < I2C_HISTORY_PARA_N_WORDS; i++)
  242. {
  243. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_ARDDR + 2 * i] = (UBYTE)(*(I2C_pBuffer + 1) >> 8);
  244. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_ARDDR + 2 * i + 1] = (UBYTE)(*(I2C_pBuffer + 1));
  245. I2C_pBuffer += I2C_PBUFFER_NWORDS;
  246. }
  247. I2C_pBuffer_byte = &Syspara2.stRidePara.ucAssistRatioGain1.ucDefault1;
  248. for (i = 0; i < I2C_RIDE_PARA_N_BYTES; i++)
  249. {
  250. I2C_ubHistoyWriteBuffer[I2C_RIDE_PARA_ADDR + i] = (UBYTE)(*(I2C_pBuffer_byte + 1));
  251. I2C_pBuffer_byte += I2C_PBUFFERBYTE_BYTES;
  252. }
  253. I2C_pBuffer = &Syspara2.stBikePara2.uwNoneOBCEnable.uwDefault1;
  254. for (i = 0; i < I2C_BIKE_PARA2_N_WORDS; i++)
  255. {
  256. I2C_ubHistoyWriteBuffer[I2C_BIKE_PARA2_ADDR + 2 * i] = (UBYTE)(*(I2C_pBuffer + 1) >> 8);
  257. I2C_ubHistoyWriteBuffer[I2C_BIKE_PARA2_ADDR + 2 * i + 1] = (UBYTE)(*(I2C_pBuffer + 1));
  258. I2C_pBuffer += I2C_PBUFFER_NWORDS;
  259. }
  260. I2C_pHistoryWriteBuffer = I2C_ubHistoyWriteBuffer;
  261. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_CRC_ARDDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_HISTORY_PARA_N_BYTES) >> 8);
  262. I2C_ubHistoyWriteBuffer[I2C_HISTORY_PARA_CRC_ARDDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_HISTORY_PARA_N_BYTES));
  263. I2C_pHistoryWriteBuffer = I2C_ubHistoyWriteBuffer + I2C_RIDE_PARA_ADDR;
  264. I2C_ubHistoyWriteBuffer[I2C_RIDE_PARA_CRC_ADDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_RIDE_PARA_N_BYTES) >> 8);
  265. I2C_ubHistoyWriteBuffer[I2C_RIDE_PARA_CRC_ADDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_RIDE_PARA_N_BYTES));
  266. I2C_pHistoryWriteBuffer = I2C_ubHistoyWriteBuffer + I2C_BIKE_PARA2_ADDR;
  267. I2C_ubHistoyWriteBuffer[I2C_BIKE_PARA2_CRC_ADDR] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_BIKE_PARA2_N_BYTES) >> 8);
  268. I2C_ubHistoyWriteBuffer[I2C_BIKE_PARA2_CRC_ADDR + 1] = (UBYTE)(i2c_uwCRCCcitt(I2C_pHistoryWriteBuffer, I2C_BIKE_PARA2_N_BYTES));
  269. }
  270. /*************************************************************************
  271. Function:
  272. Description:
  273. Call by:
  274. Input Variables:
  275. Output/Return Variables:
  276. Subroutine Call:
  277. Reference:
  278. *************************************************************************/
  279. void i2c_voInfoWrite2EE(const I2C_TX_COF *coef, I2C_TX_OUT *out)
  280. {
  281. UBYTE ubNBytes;
  282. UBYTE ubReTX1;
  283. UBYTE ubSlaveAddr;
  284. UBYTE ubWriteAddr;
  285. ubNBytes = I2C_TX1_NBYTES;
  286. ubReTX1 = I2C_RETX1_TIMES;
  287. #if(ubReTX1 >= 2)
  288. ubReTX1 = 2;
  289. #endif
  290. ubWriteAddr = 0x00;
  291. ubSlaveAddr = I2C_SLAVEADDR_BLOCK1;
  292. while (ubReTX1 != 0)
  293. {
  294. ubReTX1--;
  295. I2C_pWriteBuffer = I2C_ubWriteBuffer;
  296. if (ubReTX1 == 1)
  297. {
  298. ubSlaveAddr = I2C_SLAVEADDR_BLOCK2;
  299. }
  300. if (ubReTX1 == 0)
  301. {
  302. ubSlaveAddr = I2C_SLAVEADDR_BLOCK1;
  303. }
  304. iI2C_Write(0, ubSlaveAddr, ubWriteAddr, 8, I2C_pWriteBuffer, ubNBytes);
  305. }
  306. if ((ubReTX1 == 0) && (I2C_EE_ComuFltFlg != TRUE))
  307. {
  308. out->blTX1FinishFlg = TRUE;
  309. }
  310. else
  311. {
  312. out->blTX1FinishFlg = FALSE;
  313. }
  314. }
  315. /*************************************************************************
  316. Function:
  317. Description:
  318. Call by:
  319. Input Variables:
  320. Output/Return Variables:
  321. Subroutine Call:
  322. Reference:
  323. *************************************************************************/
  324. void i2c_voHistoryWrite2EE(const I2C_TX_COF *coef, I2C_TX_OUT *out)
  325. {
  326. UBYTE ubNBytes;
  327. UBYTE ubReTX2;
  328. UBYTE ubSlaveAddr;
  329. UBYTE ubWriteAddr;
  330. ubNBytes = I2C_TX2_NBYTES;
  331. ubReTX2 = I2C_RETX2_TIMES;
  332. #if(ubReTX2 >= 2)
  333. ubReTX2 = 2;
  334. #endif
  335. ubSlaveAddr = I2C_SLAVEADDR_BLOCK3;
  336. ubWriteAddr = 0x00;
  337. while (ubReTX2 != 0)
  338. {
  339. ubReTX2--;
  340. I2C_pHistoryWriteBuffer = I2C_ubHistoyWriteBuffer;
  341. if (ubReTX2 == 1)
  342. {
  343. ubSlaveAddr = I2C_SLAVEADDR_BLOCK4;
  344. }
  345. if (ubReTX2 == 0)
  346. {
  347. ubSlaveAddr = I2C_SLAVEADDR_BLOCK3;
  348. }
  349. iI2C_Write(0, ubSlaveAddr, ubWriteAddr, 8, I2C_pHistoryWriteBuffer, ubNBytes);
  350. }
  351. if ((ubReTX2 == 0) && (I2C_EE_ComuFltFlg != TRUE))
  352. {
  353. out->blTX2FinishFlg = TRUE;
  354. }
  355. else
  356. {
  357. out->blTX2FinishFlg = FALSE;
  358. }
  359. }
  360. /*************************************************************************
  361. Function:
  362. Description:
  363. Call by:
  364. Input Variables:
  365. Output/Return Variables:
  366. Subroutine Call:
  367. Reference:
  368. *************************************************************************/
  369. void i2c_voSysparaReadFromEE(I2C_RXCRC_OUT *out) /* parasoft-suppress METRICS-28 "本项目圈复杂度无法更改,后续避免" */
  370. {
  371. UBYTE ubRdNBytes = 0, ubRdSlaveAddr = 0, ubRdAddr = 0;
  372. UBYTE ubRdCnt = 2;
  373. UBYTE *p_buffer;
  374. while(ubRdCnt != 0)
  375. {
  376. ubRdCnt--;
  377. if (ubRdCnt == 1)
  378. {
  379. ubRdSlaveAddr = I2C_SLAVEADDR_BLOCK1;
  380. ubRdAddr = 0x00;
  381. ubRdNBytes = I2C_RX1_NBYTES;
  382. p_buffer = I2C_ubReadBuffer[0];
  383. }
  384. else if (ubRdCnt == 0)
  385. {
  386. ubRdSlaveAddr = I2C_SLAVEADDR_BLOCK3;
  387. ubRdAddr = 0x00;
  388. ubRdNBytes = I2C_RX2_NBYTES;
  389. p_buffer = I2C_ubReadBuffer[1];
  390. }
  391. else
  392. {
  393. //do nothing
  394. }
  395. iI2C_Read(0, ubRdSlaveAddr, ubRdAddr, 8, p_buffer, ubRdNBytes);
  396. }
  397. i2c_voReadBufferCRC(out);
  398. i2c_voGetValueFrmBuffer(out);
  399. out->ReadFinishFlg = TRUE;
  400. }
  401. /*************************************************************************
  402. Function:
  403. Description:
  404. Call by:
  405. Input Variables:
  406. Output/Return Variables:
  407. Subroutine Call:
  408. Reference:
  409. *************************************************************************/
  410. UWORD i2c_uwCRCCcitt(const UBYTE *ptubBuf, UWORD length)
  411. {
  412. UBYTE b = 0;
  413. UWORD crc = 0xffff;
  414. UWORD i, j;
  415. for (i = 0; i < length; i++)
  416. {
  417. for (j = 0; j < 8; j++)
  418. {
  419. b = (UBYTE)(((ptubBuf[i] << j) & 0x80) ^ ((crc & 0x8000) >> 8)); /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  420. crc <<= 1;
  421. if (b != 0)
  422. {
  423. crc ^= 0x1021; // crc = crc^(0x10000^0x11021)
  424. }
  425. }
  426. }
  427. return crc;
  428. }
  429. /*************************************************************************
  430. Function:
  431. Description:
  432. Call by:
  433. Input Variables:
  434. Output/Return Variables:
  435. Subroutine Call:
  436. Reference:
  437. *************************************************************************/
  438. void i2c_voReadBufferCRC(I2C_RXCRC_OUT *out)
  439. {
  440. UWORD uwMotorParaCRC, uwBikeParaCRC, uwMControlParaCRC;
  441. UWORD uwSensorParaCRC, uwAssistParaCRC, uwGearBoxParaCRC, uwHistoryParaCRC, uwRideParaCRC, uwBikePara2CRC;
  442. UWORD uwMotorParaRdCRC, uwBikeParaRdCRC, uwMControlParaRdCRC;
  443. UWORD uwSensorParaRdCRC, uwAssistParaRdCRC, uwGearBoxParaRdCRC, uwHistoryParaRdCRC, uwRideParaRdCRC, uwBikePara2RdCRC;
  444. I2C_pReadBuffer = I2C_ubReadBuffer[0];
  445. uwMotorParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer, I2C_MOTOR_PARA_N_BYTES);
  446. uwBikeParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer + I2C_BIKE_PARA_ARDDR, I2C_BIKE_PARA_N_BYTES); /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  447. uwMControlParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer + I2C_MCONTROL_PARA_ARDDR, I2C_MCONTROL_PARA_N_BYTES); /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  448. uwSensorParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer + I2C_SENSOR_PARA_ARDDR, I2C_SENSOR_PARA_N_BYTES); /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  449. uwAssistParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer + I2C_ASSIST_PARA_ARDDR, I2C_ASSIST_PARA_N_BYTES); /* parasoft-suppress MISRA2004-17_4 "本项目无法更改,后续避免非数组索引指针运算" */
  450. uwGearBoxParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer + I2C_GEARBOX_PARA_ADDR, I2C_GEARBOX_PARA_N_BYTES);
  451. I2C_pReadBuffer = I2C_ubReadBuffer[1];
  452. uwHistoryParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer, I2C_HISTORY_PARA_N_BYTES);
  453. uwRideParaCRC = i2c_uwCRCCcitt(I2C_pReadBuffer + I2C_RIDE_PARA_ADDR, I2C_RIDE_PARA_N_BYTES);
  454. uwBikePara2CRC = i2c_uwCRCCcitt(I2C_pReadBuffer + I2C_BIKE_PARA2_ADDR, I2C_BIKE_PARA2_N_BYTES);
  455. uwMotorParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_MOTOR_PARA_CRC_ARDDR] << 8) + I2C_ubReadBuffer[0][I2C_MOTOR_PARA_CRC_ARDDR + 1];
  456. uwBikeParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_BIKE_PARA_CRC_ARDDR] << 8) + I2C_ubReadBuffer[0][I2C_BIKE_PARA_CRC_ARDDR + 1];
  457. uwMControlParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_MCONTROL_PARA_CRC_ARDDR] << 8) + I2C_ubReadBuffer[0][I2C_MCONTROL_PARA_CRC_ARDDR + 1];
  458. uwSensorParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_SENSOR_PARA_CRC_ARDDR] << 8) + I2C_ubReadBuffer[0][I2C_SENSOR_PARA_CRC_ARDDR + 1];
  459. uwAssistParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_ASSIST_PARA_CRC_ARDDR] << 8) + I2C_ubReadBuffer[0][I2C_ASSIST_PARA_CRC_ARDDR + 1];
  460. uwGearBoxParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_GEARBOX_PARA_CRC_ADDR] << 8) + I2C_ubReadBuffer[0][I2C_GEARBOX_PARA_CRC_ADDR + 1];
  461. uwHistoryParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[1][I2C_HISTORY_PARA_CRC_ARDDR] << 8) + I2C_ubReadBuffer[1][I2C_HISTORY_PARA_CRC_ARDDR + 1];
  462. uwRideParaRdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[1][I2C_RIDE_PARA_CRC_ADDR] << 8) + I2C_ubReadBuffer[1][I2C_RIDE_PARA_CRC_ADDR + 1];
  463. uwBikePara2RdCRC = (UWORD)((UWORD)I2C_ubReadBuffer[1][I2C_BIKE_PARA2_CRC_ADDR] << 8) + I2C_ubReadBuffer[1][I2C_BIKE_PARA2_CRC_ADDR + 1];
  464. if (uwMotorParaCRC != uwMotorParaRdCRC)
  465. {
  466. out->blMotorParaFltFlg = TRUE;
  467. }
  468. if (uwBikeParaCRC != uwBikeParaRdCRC)
  469. {
  470. out->blBikeParaFltFlg = TRUE;
  471. }
  472. if (uwMControlParaCRC != uwMControlParaRdCRC)
  473. {
  474. out->blMControlParaFltFlg = TRUE;
  475. }
  476. if (uwSensorParaCRC != uwSensorParaRdCRC)
  477. {
  478. out->blSensorParaFltFlg = TRUE;
  479. }
  480. if (uwAssistParaCRC != uwAssistParaRdCRC)
  481. {
  482. out->blAssistParaFltFlg = TRUE;
  483. }
  484. if (uwGearBoxParaCRC != uwGearBoxParaRdCRC)
  485. {
  486. out->blGearBoxParaFltFlg = TRUE;
  487. }
  488. if (uwHistoryParaCRC != uwHistoryParaRdCRC)
  489. {
  490. out->blHistoryParaFltFlg = TRUE;
  491. }
  492. if (uwRideParaCRC != uwRideParaRdCRC)
  493. {
  494. out->blRideParaFltFlg = TRUE;
  495. }
  496. if (uwBikePara2CRC != uwBikePara2RdCRC)
  497. {
  498. out->blBikePara2FltFlg = TRUE;
  499. }
  500. }
  501. /*************************************************************************
  502. Function:
  503. Description:
  504. Call by:
  505. Input Variables:
  506. Output/Return Variables:
  507. Subroutine Call:
  508. Reference:
  509. *************************************************************************/
  510. void i2c_voGetValueFrmBuffer(const I2C_RXCRC_OUT *out)
  511. {
  512. UBYTE j = 0;
  513. if (out->blMotorParaFltFlg != TRUE)
  514. {
  515. for (j = 0; j < I2C_MOTOR_PARA_N_WORDS; j++)
  516. {
  517. 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];
  518. }
  519. }
  520. else
  521. {}
  522. if (out->blBikeParaFltFlg != TRUE)
  523. {
  524. for (j = 0; j < I2C_BIKE_PARA_N_WORDS; j++)
  525. {
  526. 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];
  527. }
  528. }
  529. else
  530. {}
  531. if (out->blMControlParaFltFlg != TRUE)
  532. {
  533. for (j = 0; j < I2C_MCONTROL_PARA_N_WORDS; j++)
  534. {
  535. I2C_uwMControlRead[j] =
  536. (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_MCONTROL_PARA_ARDDR + 2 * j] << 8) + I2C_ubReadBuffer[0][I2C_MCONTROL_PARA_ARDDR + 2 * j + 1];
  537. }
  538. }
  539. else
  540. {}
  541. if (out->blSensorParaFltFlg != TRUE)
  542. {
  543. for (j = 0; j < I2C_SENSOR_PARA_N_WORDS; j++)
  544. {
  545. 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];
  546. }
  547. }
  548. else
  549. {}
  550. if (out->blAssistParaFltFlg != TRUE)
  551. {
  552. for (j = 0; j < I2C_ASSIST_PARA_N_WORDS; j++)
  553. {
  554. I2C_uwAssistParaRead[j] =
  555. (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_ASSIST_PARA_ARDDR + 2 * j] << 8) + I2C_ubReadBuffer[0][I2C_ASSIST_PARA_ARDDR + 2 * j + 1];
  556. }
  557. }
  558. else
  559. {}
  560. if (out->blGearBoxParaFltFlg != TRUE)
  561. {
  562. for (j = 0; j < I2C_GEARBOX_PARA_N_WORDS; j++)
  563. {
  564. I2C_uwGearBoxParaRead[j] =
  565. (UWORD)((UWORD)I2C_ubReadBuffer[0][I2C_GEARBOX_PARA_ADDR + 2 * j] << 8) + I2C_ubReadBuffer[0][I2C_GEARBOX_PARA_ADDR + 2 * j + 1];
  566. }
  567. }
  568. else
  569. {}
  570. if (out->blHistoryParaFltFlg != TRUE)
  571. {
  572. for (j = 0; j < I2C_HISTORY_PARA_N_WORDS; j++)
  573. {
  574. I2C_uwHistoryParaRead[j] =
  575. (UWORD)((UWORD)I2C_ubReadBuffer[1][I2C_HISTORY_PARA_ARDDR + 2 * j] << 8) + I2C_ubReadBuffer[1][I2C_HISTORY_PARA_ARDDR + 2 * j + 1];
  576. }
  577. }
  578. else
  579. {}
  580. if (out->blRideParaFltFlg != TRUE)
  581. {
  582. for (j = 0; j < I2C_RIDE_PARA_N_WORDS; j++)
  583. {
  584. I2C_uwRideParaRead[j] =
  585. (UWORD)((UWORD)I2C_ubReadBuffer[1][I2C_RIDE_PARA_ADDR + 2 * j] << 8) + I2C_ubReadBuffer[1][I2C_RIDE_PARA_ADDR + 2 * j + 1];
  586. }
  587. }
  588. else
  589. {}
  590. if (out->blBikePara2FltFlg != TRUE)
  591. {
  592. for (j = 0; j < I2C_BIKE_PARA2_N_WORDS; j++)
  593. {
  594. I2C_uwBikePara2Read[j] =
  595. (UWORD)((UWORD)I2C_ubReadBuffer[1][I2C_BIKE_PARA2_ADDR + 2 * j] << 8) + I2C_ubReadBuffer[1][I2C_BIKE_PARA2_ADDR + 2 * j + 1];
  596. }
  597. }
  598. else
  599. {}
  600. Syspara2.stMotorPara.uwPolePairs.uwReal = I2C_uwMotorParaRead[0];
  601. Syspara2.stMotorPara.uwRsmOhm.uwReal = I2C_uwMotorParaRead[1];
  602. Syspara2.stMotorPara.uwLduH.uwReal = I2C_uwMotorParaRead[2];
  603. Syspara2.stMotorPara.uwLquH.uwReal = I2C_uwMotorParaRead[3];
  604. Syspara2.stMotorPara.uwFluxmWb.uwReal = I2C_uwMotorParaRead[4];
  605. Syspara2.stMotorPara.uwIdMaxA.uwReal = I2C_uwMotorParaRead[5];
  606. Syspara2.stMotorPara.uwIdMinA.uwReal = I2C_uwMotorParaRead[6];
  607. Syspara2.stMotorPara.uwRSpdRpm.uwReal = I2C_uwMotorParaRead[7];
  608. Syspara2.stMotorPara.uwRPwrWt.uwReal = I2C_uwMotorParaRead[8];
  609. Syspara2.stMotorPara.uwRCurA.uwReal = I2C_uwMotorParaRead[9];
  610. Syspara2.stMotorPara.uwRVolV.uwReal = I2C_uwMotorParaRead[10];
  611. Syspara2.stMotorPara.uwJD.uwReal = I2C_uwMotorParaRead[11];
  612. Syspara2.stMotorPara.uwTorMaxNm.uwReal = I2C_uwMotorParaRead[12];
  613. Syspara2.stBikePara.uwWheelPerimeter.uwReal = I2C_uwBikeParaRead[0];
  614. Syspara2.stBikePara.uwMechRationMotor.uwReal = I2C_uwBikeParaRead[1];
  615. Syspara2.stBikePara.uwThrottleMaxSpdKmH.uwReal = I2C_uwBikeParaRead[2];
  616. Syspara2.stBikePara.uwCartSpdKmH.uwReal = I2C_uwBikeParaRead[3];
  617. Syspara2.stBikePara.uwNmFrontChainring.uwReal = I2C_uwBikeParaRead[4];
  618. Syspara2.stBikePara.uwNmBackChainring.uwReal = I2C_uwBikeParaRead[5];
  619. Syspara2.stBikePara.uwAssistSelect1.uwReal = I2C_uwBikeParaRead[6];
  620. Syspara2.stBikePara.uwAssistSelect2.uwReal = I2C_uwBikeParaRead[7];
  621. Syspara2.stBikePara.uwLightVoltage.uwReal = I2C_uwBikeParaRead[8];
  622. Syspara2.stBikePara.swDeltPerimeter.swReal = (SWORD)I2C_uwBikeParaRead[9];
  623. Syspara2.stBikePara.uwStartMode.uwReal = I2C_uwBikeParaRead[10];
  624. Syspara2.stBikePara.uwAutoPowerOffTime.uwReal = I2C_uwBikeParaRead[11];
  625. Syspara2.stBikePara.uwThrottleSmooth.uwReal = I2C_uwBikeParaRead[12];
  626. Syspara2.stMControlPara.ParaFirstSetFlg.uwReal = I2C_uwMControlRead[0];
  627. Syspara2.stMControlPara.SpiOffsetFirstSetFlg.uwReal = I2C_uwMControlRead[1];
  628. Syspara2.stMControlPara.uwSPIPosOffsetOrigin.uwReal = I2C_uwMControlRead[2];
  629. Syspara2.stMControlPara.uwSPIPosOffsetNow.uwReal = I2C_uwMControlRead[3];
  630. Syspara2.stMControlPara.uwIPeakMaxA.uwReal = I2C_uwMControlRead[4];
  631. Syspara2.stMControlPara.uwAlamOCurA.uwReal = I2C_uwMControlRead[5];
  632. Syspara2.stMControlPara.uwAlamOVolV.uwReal = I2C_uwMControlRead[6];
  633. Syspara2.stMControlPara.uwAlamUVolV.uwReal = I2C_uwMControlRead[7];
  634. Syspara2.stMControlPara.uwAlamOverSpdRpm.uwReal = I2C_uwMControlRead[8];
  635. Syspara2.stMControlPara.uwAlamOverHeatCe.uwReal = I2C_uwMControlRead[9];
  636. Syspara2.stMControlPara.uwAlamRecHeatCe.uwReal = I2C_uwMControlRead[10];
  637. Syspara2.stMControlPara.uwPwrLimitStartCe.uwReal = I2C_uwMControlRead[11];
  638. Syspara2.stMControlPara.uwControlFunEN.uwReal = I2C_uwMControlRead[15];
  639. Syspara2.stMControlPara.uwThrottleGearEN.uwReal = I2C_uwMControlRead[16];
  640. Syspara2.stSensorPara.uwTorSensorOffsetOrigin.uwReal = I2C_uwSensorRead[0];
  641. Syspara2.stSensorPara.uwTorSensorOffsetNow1.uwReal = I2C_uwSensorRead[1];
  642. Syspara2.stSensorPara.uwTorSensorOffsetNow2.uwReal = I2C_uwSensorRead[2];
  643. Syspara2.stSensorPara.uwTorSensorOffsetNow3.uwReal = I2C_uwSensorRead[3];
  644. Syspara2.stSensorPara.uwTorSensorOffsetNow4.uwReal = I2C_uwSensorRead[4];
  645. Syspara2.stSensorPara.uwBikeTorMaxNm.uwReal = I2C_uwSensorRead[5];
  646. Syspara2.stSensorPara.uwBikeTor1StepRealNm.uwReal = I2C_uwSensorRead[6];
  647. Syspara2.stSensorPara.uwBikeTor1StepADC.uwReal = I2C_uwSensorRead[7];
  648. Syspara2.stSensorPara.uwBikeTor2StepRealNm.uwReal = I2C_uwSensorRead[8];
  649. Syspara2.stSensorPara.uwBikeTor2StepADC.uwReal = I2C_uwSensorRead[9];
  650. Syspara2.stSensorPara.uwBikeTor3StepRealNm.uwReal = I2C_uwSensorRead[10];
  651. Syspara2.stSensorPara.uwBikeTor3StepADC.uwReal = I2C_uwSensorRead[11];
  652. Syspara2.stSensorPara.uwBikeTor4StepRealNm.uwReal = I2C_uwSensorRead[12];
  653. Syspara2.stSensorPara.uwBikeTor4StepADC.uwReal = I2C_uwSensorRead[13];
  654. Syspara2.stSensorPara.uwCadSensorPulseNm.uwReal = I2C_uwSensorRead[14];
  655. Syspara2.stSensorPara.uwBikeSpdSensorPulseNm.uwReal = I2C_uwSensorRead[15];
  656. Syspara2.stAssistPara.uwStartupGain.uwReal = I2C_uwAssistParaRead[0];
  657. Syspara2.stAssistPara.uwStartcruiseGain.uwReal = I2C_uwAssistParaRead[1];
  658. Syspara2.stAssistPara.uwAssistStartNm.uwReal = I2C_uwAssistParaRead[2];
  659. Syspara2.stAssistPara.uwAssistStopNm.uwReal = I2C_uwAssistParaRead[3];
  660. Syspara2.stAssistPara.uwStartUpGainStep.uwReal = I2C_uwAssistParaRead[4];
  661. Syspara2.stAssistPara.uwStartUpCadNm.uwReal = I2C_uwAssistParaRead[5];
  662. Syspara2.stAssistPara.uwTorLPFCadNm.uwReal = I2C_uwAssistParaRead[6];
  663. Syspara2.stAssistPara.uwSpeedAssistSpdRpm.uwReal = I2C_uwAssistParaRead[7];
  664. Syspara2.stAssistPara.uwSpeedAssistIMaxA.uwReal = I2C_uwAssistParaRead[8];
  665. Syspara2.stAssistPara.uwAssistLimitBikeSpdStart.uwReal = I2C_uwAssistParaRead[9];
  666. Syspara2.stAssistPara.uwAssistLimitBikeSpdStop.uwReal = I2C_uwAssistParaRead[10];
  667. Syspara2.stAssistPara.uwCadenceAssistWeight.uwReal = I2C_uwAssistParaRead[11];
  668. Syspara2.stGearBoxPara.uwGearBoxNum.uwReal = I2C_uwGearBoxParaRead[0];
  669. Syspara2.stGearBoxPara.uwGearBoxCadenceMin.uwReal = I2C_uwGearBoxParaRead[1];
  670. Syspara2.stGearBoxPara.uwGearBoxCadenceMax.uwReal = I2C_uwGearBoxParaRead[2];
  671. Syspara2.stRidePara.ucAssistRatioGain1.ucReal = (UBYTE)(I2C_uwRideParaRead[0]>>8);
  672. Syspara2.stRidePara.ucAssistAccelerationGain1.ucReal = (UBYTE)(I2C_uwRideParaRead[0]);
  673. Syspara2.stRidePara.ucAssistRatioGain2.ucReal = (UBYTE)(I2C_uwRideParaRead[1]>>8);
  674. Syspara2.stRidePara.ucAssistAccelerationGain2.ucReal = (UBYTE)(I2C_uwRideParaRead[1]);
  675. Syspara2.stRidePara.ucAssistRatioGain3.ucReal = (UBYTE)(I2C_uwRideParaRead[2]>>8);
  676. Syspara2.stRidePara.ucAssistAccelerationGain3.ucReal = (UBYTE)(I2C_uwRideParaRead[2]);
  677. Syspara2.stRidePara.ucAssistRatioGain4.ucReal = (UBYTE)(I2C_uwRideParaRead[3]>>8);
  678. Syspara2.stRidePara.ucAssistAccelerationGain4.ucReal = (UBYTE)(I2C_uwRideParaRead[3]);
  679. Syspara2.stRidePara.ucAssistRatioGain5.ucReal = (UBYTE)(I2C_uwRideParaRead[4]>>8);
  680. Syspara2.stRidePara.ucAssistAccelerationGain5.ucReal = (UBYTE)(I2C_uwRideParaRead[4]);
  681. Syspara2.stRidePara.ucMaxCurrentGain1.ucReal = (UBYTE)(I2C_uwRideParaRead[5]>>8);
  682. Syspara2.stRidePara.ucMaxTorqueGain1.ucReal = (UBYTE)(I2C_uwRideParaRead[5]);
  683. Syspara2.stRidePara.ucMaxCurrentGain2.ucReal = (UBYTE)(I2C_uwRideParaRead[6]>>8);
  684. Syspara2.stRidePara.ucMaxTorqueGain2.ucReal = (UBYTE)(I2C_uwRideParaRead[6]);
  685. Syspara2.stRidePara.ucMaxCurrentGain3.ucReal = (UBYTE)(I2C_uwRideParaRead[7]>>8);
  686. Syspara2.stRidePara.ucMaxTorqueGain3.ucReal = (UBYTE)(I2C_uwRideParaRead[7]);
  687. Syspara2.stRidePara.ucMaxCurrentGain4.ucReal = (UBYTE)(I2C_uwRideParaRead[8]>>8);
  688. Syspara2.stRidePara.ucMaxTorqueGain4.ucReal = (UBYTE)(I2C_uwRideParaRead[8]);
  689. Syspara2.stRidePara.ucMaxCurrentGain5.ucReal = (UBYTE)(I2C_uwRideParaRead[9]>>8);
  690. Syspara2.stRidePara.ucMaxTorqueGain5.ucReal = (UBYTE)(I2C_uwRideParaRead[9]);
  691. Syspara2.stBikePara2.uwNoneOBCEnable.uwReal = I2C_uwBikePara2Read[0];
  692. Syspara2.stBikePara2.uwRearLightCycle.uwReal = I2C_uwBikePara2Read[1];
  693. Syspara2.stBikePara2.uwRearLightDuty.uwReal = I2C_uwBikePara2Read[2];
  694. Syspara2.stBikePara2.swDeltaBikeSpeedLimit.swReal = I2C_uwBikePara2Read[3];
  695. Syspara2.stHistoryPara.uwAssModSelect.uwReal = I2C_uwHistoryParaRead[0];
  696. Syspara2.stHistoryPara.uwOpenTimes.uwReal = I2C_uwHistoryParaRead[1];
  697. Syspara2.stHistoryPara.uwUsedTimeH.uwReal = I2C_uwHistoryParaRead[2];
  698. Syspara2.stHistoryPara.uwUsedTimeL.uwReal = I2C_uwHistoryParaRead[3];
  699. Syspara2.stHistoryPara.uwNTCTempMaxCe.uwReal = I2C_uwHistoryParaRead[4];
  700. Syspara2.stHistoryPara.uwNTCTempMinCe.uwReal = I2C_uwHistoryParaRead[5];
  701. Syspara2.stHistoryPara.uwAlamHOcurTimes.uwReal = I2C_uwHistoryParaRead[6];
  702. Syspara2.stHistoryPara.uwAlamSOcurTimes.uwReal = I2C_uwHistoryParaRead[7];
  703. Syspara2.stHistoryPara.uwAlamOHeatTimes.uwReal = I2C_uwHistoryParaRead[8];
  704. Syspara2.stHistoryPara.uwAlamRotorLockTimes.uwReal = I2C_uwHistoryParaRead[9];
  705. Syspara2.stHistoryPara.uwAlamPhsLossTimes.uwReal = I2C_uwHistoryParaRead[10];
  706. Syspara2.stHistoryPara.uwAlamOVolTimes.uwReal = I2C_uwHistoryParaRead[11];
  707. Syspara2.stHistoryPara.uwAlamUVolTimes.uwReal = I2C_uwHistoryParaRead[12];
  708. Syspara2.stHistoryPara.uwAlamComOTimeTimes.uwReal = I2C_uwHistoryParaRead[13];
  709. Syspara2.stHistoryPara.uwG1AvgPwrConsumption.uwReal = I2C_uwHistoryParaRead[14];
  710. Syspara2.stHistoryPara.uwG2AvgPwrConsumption.uwReal = I2C_uwHistoryParaRead[15];
  711. Syspara2.stHistoryPara.uwG3AvgPwrConsumption.uwReal = I2C_uwHistoryParaRead[16];
  712. Syspara2.stHistoryPara.uwG4AvgPwrConsumption.uwReal = I2C_uwHistoryParaRead[17];
  713. Syspara2.stHistoryPara.uwG5AvgPwrConsumption.uwReal = I2C_uwHistoryParaRead[18];
  714. Syspara2.stHistoryPara.uwODOTripH.uwReal = I2C_uwHistoryParaRead[19];
  715. Syspara2.stHistoryPara.uwODOTripL.uwReal = I2C_uwHistoryParaRead[20];
  716. Syspara2.stHistoryPara.uwODOTimeH.uwReal = I2C_uwHistoryParaRead[21];
  717. Syspara2.stHistoryPara.uwODOTimeL.uwReal = I2C_uwHistoryParaRead[22];
  718. Syspara2.stHistoryPara.uwTripSumH.uwReal = I2C_uwHistoryParaRead[23];
  719. Syspara2.stHistoryPara.uwTripSumL.uwReal = I2C_uwHistoryParaRead[24];
  720. Syspara2.stHistoryPara.uwTripSumTimeH.uwReal = I2C_uwHistoryParaRead[25];
  721. Syspara2.stHistoryPara.uwTripSumTimeL.uwReal = I2C_uwHistoryParaRead[26];
  722. Syspara2.stHistoryPara.uwTorSensorAlamTimes.uwReal = I2C_uwHistoryParaRead[27];
  723. Syspara2.stHistoryPara.uwCadSensorAlamTimes.uwReal = I2C_uwHistoryParaRead[28];
  724. Syspara2.stHistoryPara.uwBikeSpdSensorAlamTimes.uwReal = I2C_uwHistoryParaRead[29];
  725. Syspara2.stHistoryPara.uwPosSensorAlamTimes.uwReal = I2C_uwHistoryParaRead[30];
  726. Syspara2.stHistoryPara.uwRealODOTripH.uwReal = I2C_uwHistoryParaRead[31];
  727. Syspara2.stHistoryPara.uwRealODOTripL.uwReal = I2C_uwHistoryParaRead[32];
  728. Syspara2.stHistoryPara.uwRealODOTimeH.uwReal = I2C_uwHistoryParaRead[33];
  729. Syspara2.stHistoryPara.uwRealODOTimeL.uwReal = I2C_uwHistoryParaRead[34];
  730. }
  731. /*************************************************************************
  732. Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd.
  733. All rights reserved.
  734. *************************************************************************/
  735. #ifdef _I2C_MASTER_C_
  736. #undef _I2C_MASTER_C_ /* parasoft-suppress MISRA2004-19_6 "本项目中无法更改,后续避免使用" */
  737. #endif
  738. /*************************************************************************
  739. End of this File (EOF)!
  740. Do not put anything after this part!
  741. *************************************************************************/