ReadEeprom.c 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. /*********************************************************************************************************
  2. * 模块名称:ReadEeprom.c
  3. * 摘 要:ReadEeprom模块,进行独立按键初始化,以及按键扫描函数实现
  4. * 当前版本:1.0.0
  5. * 作 者:Leyutek(COPYRIGHT 2018 - 2021 Leyutek. All rights reserved.)
  6. * 完成日期:2021年07月01日
  7. * 内 容:
  8. * 注 意:
  9. **********************************************************************************************************
  10. * 取代版本:
  11. * 作 者:
  12. * 完成日期:
  13. * 修改内容:
  14. * 修改文件:
  15. *********************************************************************************************************/
  16. /*********************************************************************************************************
  17. * 包含头文件
  18. *********************************************************************************************************/
  19. #include "ReadEeprom.h"
  20. #include "Main.h"
  21. #include "gd32e230x_conf.h"
  22. #include "At24cxx.h"
  23. #include "string.h"
  24. #include "Relay.h"
  25. #include "Sn74hc573.h"
  26. /*********************************************************************************************************
  27. * 宏定义
  28. *********************************************************************************************************/
  29. /*********************************************************************************************************
  30. * 枚举结构体
  31. *********************************************************************************************************/
  32. extern DCPDU_RELAY_Para_Reg DCPDU_RL_time;
  33. /*********************************************************************************************************
  34. * 内部变量定义
  35. *********************************************************************************************************/
  36. uint8_t Eeprom_Rbuf[RELAY_para_sum]={0};
  37. extern uint8_t DCPDU_active_chn;
  38. extern uint8_t Active_state_bit;
  39. extern uint32_t DCPDU_Modbus_Reg[DCPDU_Modbus_Reg_len];
  40. /*********************************************************************************************************
  41. * 内部函数声明
  42. *********************************************************************************************************/
  43. /*********************************************************************************************************
  44. * 内部函数实现
  45. *********************************************************************************************************/
  46. /*********************************************************************************************************
  47. * 函数名称:ReadEeprom
  48. * 函数功能:读出Eeprom的数据
  49. * 输入参数:void
  50. * 输出参数:void
  51. * 返 回 值:void
  52. * 创建日期:2021年07月01日
  53. * 注 意:
  54. *********************************************************************************************************/
  55. void ReadEeprom(void)
  56. {
  57. uint8_t i = 0;
  58. uint8_t j = 0;
  59. uint32_t temp0 = 0;
  60. uint32_t temp1 = 0;
  61. uint32_t temp2 = 0;
  62. uint32_t temp3 = 0;
  63. AT24CxxRead(0, Eeprom_Rbuf, RELAY_para_sum); //从eeprom中读出通道开启延时数据
  64. if((Eeprom_Rbuf[ERom_RL_Ch_N_addr] < 1) || (Eeprom_Rbuf[ERom_RL_Ch_N_addr] > RELAY_ChN_default))
  65. {
  66. Eeprom_Rbuf[ERom_RL_Ch_N_addr] = RELAY_ChN_default;
  67. }
  68. DCPDU_active_chn = Eeprom_Rbuf[ERom_RL_Ch_N_addr];
  69. DCPDU_Modbus_Reg[DCPDU_RL_ST_Addr - DCPDU_Modbus_RegStAd] = Eeprom_Rbuf[ERom_RL_ST_Addr];
  70. DCPDU_Modbus_Reg[DCPDU_RLft_ST_Addr - DCPDU_Modbus_RegStAd] = Eeprom_Rbuf[ERom_RLft_ST_Addr];
  71. for(i = 0;i < RELAY_ChN_default;i++)
  72. {
  73. if((Eeprom_Rbuf[ERom_RL_Ton1_Addr + i] < 1) || (Eeprom_Rbuf[ERom_RL_Ton1_Addr + i] > RELAY_ontime_max))
  74. {
  75. Eeprom_Rbuf[ERom_RL_Ton1_Addr + i] = RELAY_ontime_default;
  76. }
  77. if((Eeprom_Rbuf[ERom_RL_Toff1_Addr + i] < 1) || (Eeprom_Rbuf[ERom_RL_Toff1_Addr + i] > RELAY_offtime_max))
  78. {
  79. Eeprom_Rbuf[ERom_RL_Toff1_Addr + i] = RELAY_offtime_default;
  80. }
  81. DCPDU_Modbus_Reg[DCPDU_RL_Ton1_Addr + i - DCPDU_Modbus_RegStAd] = Eeprom_Rbuf[ERom_RL_Ton1_Addr + i];
  82. DCPDU_Modbus_Reg[DCPDU_RL_Toff1_Addr + i - DCPDU_Modbus_RegStAd] = Eeprom_Rbuf[ERom_RL_Toff1_Addr + i];
  83. DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] = 0;
  84. DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] = 0;
  85. DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] = 0;
  86. DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i] = 0;
  87. temp0 = 4 * i;
  88. DCPDU_Modbus_Reg[Mb_Dbuff_P1Output_Addr + temp0 + 3] = 0;
  89. for(j = 0;j < 4;j++)
  90. {
  91. temp2 = 8 * j;
  92. temp2 = 24 - temp2;
  93. temp3 = 4 * i;
  94. temp3 += j;
  95. DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] += (Eeprom_Rbuf[ERom_VLit1_max_Addr + temp3] << temp2);
  96. DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] += (Eeprom_Rbuf[ERom_VLit1_min_Addr + temp3] << temp2);
  97. DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] += (Eeprom_Rbuf[ERom_ILit1_max_Addr + temp3] << temp2);
  98. DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i] += (Eeprom_Rbuf[ERom_ILit1_min_Addr + temp3] << temp2);
  99. DCPDU_Modbus_Reg[Mb_Dbuff_P1Output_Addr + temp0 + 3] += (Eeprom_Rbuf[ERom_TotalWh1_Addr + temp3] << temp2);
  100. }
  101. if((DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] < Vin_LTmin_default) || (DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] > Vin_LTmax_default))
  102. {
  103. DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] = Vin_LTmax_default;
  104. }
  105. if((DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] < Vin_LTmin_default) || (DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] > Vin_LTmax_default))
  106. {
  107. DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] = Vin_LTmin_default;
  108. }
  109. if(DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] < DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i])
  110. {
  111. temp3 = DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i];
  112. DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_max_Addr + i] = DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i];
  113. DCPDU_Modbus_Reg[Mb_Dbuff_VLit1_min_Addr + i] = temp3;
  114. }
  115. if((DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] < Iout_LTmin_default) || (DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] > Iout_LTmax_default))
  116. {
  117. DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] = Iout_LTmax_default;
  118. }
  119. if((DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i] < Iout_LTmin_default) || (DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i] > Iout_LTmax_default))
  120. {
  121. DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i] = Iout_LTmin_default;
  122. }
  123. if(DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] < DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i])
  124. {
  125. temp3 = DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i];
  126. DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_max_Addr + i] = DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i];
  127. DCPDU_Modbus_Reg[Mb_Dbuff_ILit1_min_Addr + i] = temp3;
  128. }
  129. }
  130. DCPDU_Modbus_Reg[DCPDU_RL_Allon_Addr - DCPDU_Modbus_RegStAd] = Eeprom_Rbuf[ERom_RL_Allon_Addr];
  131. DCPDU_Modbus_Reg[DCPDU_RL_Alloff_Addr - DCPDU_Modbus_RegStAd] = Eeprom_Rbuf[ERom_RL_Alloff_Addr];
  132. }
  133. /*********************************************************************************************************
  134. * API函数实现
  135. *********************************************************************************************************/
  136. void WriteEeprom(void)
  137. {
  138. uint8_t i = 0;
  139. uint8_t j = 0;
  140. uint32_t temp0 = 0;
  141. uint32_t temp1 = 0;
  142. uint32_t temp2 = 0;
  143. uint32_t temp3 = 0;
  144. uint32_t temp4 = 0;
  145. uint32_t temp5 = 0;
  146. Eeprom_Rbuf[ERom_RL_Ch_N_addr] = RELAY_ChN_default;
  147. Eeprom_Rbuf[ERom_RL_ST_Addr] = DCPDU_Modbus_Reg[DCPDU_RL_ST_Addr - DCPDU_Modbus_RegStAd] & Active_state_bit;
  148. Eeprom_Rbuf[ERom_RLft_ST_Addr] = DCPDU_Modbus_Reg[DCPDU_RLft_ST_Addr - DCPDU_Modbus_RegStAd] & Active_state_bit;
  149. for(i = 0;i <RELAY_ChN_default;i++)
  150. {
  151. Eeprom_Rbuf[ERom_RL_Ton1_Addr + i] = DCPDU_Modbus_Reg[DCPDU_RL_Ton1_Addr + i - DCPDU_Modbus_RegStAd];
  152. Eeprom_Rbuf[ERom_RL_Toff1_Addr + i] = DCPDU_Modbus_Reg[DCPDU_RL_Toff1_Addr + i - DCPDU_Modbus_RegStAd];
  153. }
  154. Eeprom_Rbuf[ERom_RL_Allon_Addr] = DCPDU_Modbus_Reg[DCPDU_RL_Allon_Addr - DCPDU_Modbus_RegStAd] & Active_state_bit;
  155. Eeprom_Rbuf[ERom_RL_Alloff_Addr] = DCPDU_Modbus_Reg[DCPDU_RL_Alloff_Addr - DCPDU_Modbus_RegStAd] & Active_state_bit;
  156. temp0 = DCPDU_VLit1_max_Addr - DCPDU_Modbus_RegStAd;
  157. temp1 = DCPDU_VLit1_min_Addr - DCPDU_Modbus_RegStAd;
  158. temp4 = DCPDU_ILit1_max_Addr - DCPDU_Modbus_RegStAd;
  159. temp5 = DCPDU_ILit1_min_Addr - DCPDU_Modbus_RegStAd;
  160. for(i = 0;i <RELAY_ChN_default;i++)
  161. {
  162. for(j = 0;j < 4;j++)
  163. {
  164. temp2 = 8 * j;
  165. temp2 = 24 - temp2;
  166. temp3 = 4 * i;
  167. temp3 += j;
  168. Eeprom_Rbuf[ERom_VLit1_max_Addr + temp3] = DCPDU_Modbus_Reg[temp0 + i] >> temp2;
  169. Eeprom_Rbuf[ERom_VLit1_min_Addr + temp3] = DCPDU_Modbus_Reg[temp1 + i] >> temp2;
  170. Eeprom_Rbuf[ERom_ILit1_max_Addr + temp3] = DCPDU_Modbus_Reg[temp4 + i] >> temp2;
  171. Eeprom_Rbuf[ERom_ILit1_min_Addr + temp3] = DCPDU_Modbus_Reg[temp5 + i] >> temp2;
  172. }
  173. }
  174. AT24CxxWrite(ERom_RL_Ch_N_addr,Eeprom_Rbuf,RELAY_para_sum);
  175. }