lib_LoadNVR.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  1. /**
  2. ******************************************************************************
  3. * @file lib_LoadNVR.c
  4. * @author Application Team
  5. * @version V4.7.0
  6. * @date 2019-12-12
  7. * @brief Load information from NVR.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. ******************************************************************************
  12. */
  13. /* Includes ------------------------------------------------------------------*/
  14. #include "lib_LoadNVR.h"
  15. /**
  16. * @breif Load Analog trim data from NVR manually.
  17. * @note Successful Operation:
  18. * - Load [0x40DC0] or [0x40DD0] to ANA registers(B C D E), return 0.
  19. * Operation failed:
  20. * - return 1.
  21. * @param None
  22. * @retval 0: Function succeeded.
  23. 1: Function failed(Checksum error).
  24. */
  25. uint32_t NVR_LoadANADataManual(void)
  26. {
  27. uint32_t checksum;
  28. uint32_t op_reg;
  29. uint32_t ana_data;
  30. uint32_t key_reg = 0xFFFFFFFF;
  31. /* Get Analog data1 */
  32. ana_data = *NVR_ANA_TRIMDATA1;
  33. op_reg = *NVR_ANA_OPREG1;
  34. /* Calculate checksum1 */
  35. checksum = ~(ana_data + op_reg + key_reg);
  36. /* Compare checksum1 */
  37. if (checksum == (*NVR_ANA_CHECKSUM1))
  38. {
  39. ANA->REGB = (uint8_t)(ana_data);
  40. ANA->REGC = (uint8_t)(ana_data >> 8);
  41. ANA->REGD = (uint8_t)(ana_data >> 16);
  42. ANA->REGE = (uint8_t)(ana_data >> 24);
  43. return 0;
  44. }
  45. /* Get Analog data2 */
  46. ana_data = *NVR_ANA_TRIMDATA2;
  47. op_reg = *NVR_ANA_OPREG2;
  48. /* Calculate checksum2 */
  49. checksum = ~(ana_data + op_reg + key_reg);
  50. /* Compare checksum2 */
  51. if (checksum == (*NVR_ANA_CHECKSUM2))
  52. {
  53. ANA->REGB = (uint8_t)(ana_data);
  54. ANA->REGC = (uint8_t)(ana_data >> 8);
  55. ANA->REGD = (uint8_t)(ana_data >> 16);
  56. ANA->REGE = (uint8_t)(ana_data >> 24);
  57. return 0;
  58. }
  59. else
  60. {
  61. return 1;
  62. }
  63. }
  64. /**
  65. * @breif Get the parameters of ADC voltage measuring.
  66. * @note Voltage(unit:V) = aParameter*ADC_DATA + bParameter
  67. * ADC_DATA: ADC channel original data
  68. * aParameter/bParameter: Get from this function
  69. * @param [in]Mode:
  70. * NVR_3V_EXTERNAL_NODIV
  71. * NVR_3V_EXTERNAL_RESDIV
  72. * NVR_3V_EXTERNAL_CAPDIV
  73. * NVR_3V_VDD_RESDIV
  74. * NVR_3V_VDD_CAPDIV
  75. * NVR_3V_BATRTC_RESDIV
  76. * NVR_3V_BATRTC_CAPDIV
  77. * NVR_5V_EXTERNAL_NODIV
  78. * NVR_5V_EXTERNAL_RESDIV
  79. * NVR_5V_EXTERNAL_CAPDIV
  80. * NVR_5V_VDD_RESDIV
  81. * NVR_5V_VDD_CAPDIV
  82. * NVR_5V_BATRTC_RESDIV
  83. * NVR_5V_BATRTC_CAPDIV
  84. * @param [out]Parameter: The parameters get from NVR
  85. * @retval 0: Function succeeded.
  86. 1: Function failed(Checksum error).
  87. */
  88. uint32_t NVR_GetADCVoltageParameter(uint32_t Mode, NVR_ADCVOLPARA *Parameter)
  89. {
  90. uint32_t checksum;
  91. uint32_t i;
  92. int32_t tmp_int;
  93. /* Check the parameters */
  94. assert_parameters(IS_NVR_ADCVOL_MODE(Mode));
  95. /*----- Power supply: 5V -----*/
  96. if (0x100UL & Mode)
  97. {
  98. checksum = 0UL;
  99. for (i=0; i<14; i++)
  100. checksum += *(NVR_5VPARA_BASEADDR1+i);
  101. checksum = ~(checksum);
  102. if (checksum != *(NVR_5VPARA_BASEADDR1+i)) /* Checksum1 error */
  103. {
  104. checksum = 0UL;
  105. for (i=0; i<14; i++)
  106. checksum += *(NVR_5VPARA_BASEADDR2+i);
  107. checksum = ~(checksum);
  108. if (checksum != *(NVR_5VPARA_BASEADDR2+i)) /* Checksum2 error */
  109. {
  110. return 1;
  111. }
  112. else
  113. {
  114. tmp_int = (int32_t)*(NVR_5VPARA_BASEADDR2+2*(Mode-0x100UL));
  115. Parameter->aParameter = (float)(tmp_int / 100000000.0);
  116. tmp_int = (int32_t)*(NVR_5VPARA_BASEADDR2+2*(Mode-0x100UL)+1);
  117. Parameter->bParameter = (float)(tmp_int / 100000000.0);
  118. return 0;
  119. }
  120. }
  121. else
  122. {
  123. tmp_int = (int32_t)*(NVR_5VPARA_BASEADDR1+2*(Mode-0x100UL));
  124. Parameter->aParameter = (float)(tmp_int / 100000000.0);
  125. tmp_int = (int32_t)*(NVR_5VPARA_BASEADDR1+2*(Mode-0x100UL)+1);
  126. Parameter->bParameter = (float)(tmp_int / 100000000.0);
  127. return 0;
  128. }
  129. }
  130. /*----- Power supply: 3.3V -----*/
  131. else
  132. {
  133. checksum = 0UL;
  134. for (i=0; i<14; i++)
  135. checksum += *(NVR_3VPARA_BASEADDR1+i);
  136. checksum = ~(checksum);
  137. if (checksum != *(NVR_3VPARA_BASEADDR1+i)) /* Checksum1 error */
  138. {
  139. checksum = 0UL;
  140. for (i=0; i<14; i++)
  141. checksum += *(NVR_3VPARA_BASEADDR2+i);
  142. checksum = ~(checksum);
  143. if (checksum != *(NVR_3VPARA_BASEADDR2+i)) /* Checksum2 error */
  144. {
  145. return 1;
  146. }
  147. else
  148. {
  149. tmp_int = (int32_t)*(NVR_3VPARA_BASEADDR2+2*(Mode));
  150. Parameter->aParameter = (float)(tmp_int / 100000000.0);
  151. tmp_int = (int32_t)*(NVR_3VPARA_BASEADDR2+2*(Mode)+1);
  152. Parameter->bParameter = (float)(tmp_int / 100000000.0);
  153. return 0;
  154. }
  155. }
  156. else
  157. {
  158. tmp_int = (int32_t)*(NVR_3VPARA_BASEADDR1+2*(Mode));
  159. Parameter->aParameter = (float)(tmp_int / 100000000.0);
  160. tmp_int = (int32_t)*(NVR_3VPARA_BASEADDR1+2*(Mode)+1);
  161. Parameter->bParameter = (float)(tmp_int / 100000000.0);
  162. return 0;
  163. }
  164. }
  165. }
  166. /**
  167. * @breif Get BAT Measure result.
  168. * @param [out]MEAResult The pointer to struct NVR_BATMEARES.
  169. * @retval 0: Function succeeded.
  170. 1: Function failed(Checksum error).
  171. */
  172. uint32_t NVR_GetBATOffset(NVR_BATMEARES *MEAResult)
  173. {
  174. uint32_t bat_r;
  175. uint32_t bat_c;
  176. uint32_t checksum;
  177. bat_r = *NVR_BAT_R1;
  178. bat_c = *NVR_BAT_C1;
  179. /* Calculate checksum1 */
  180. checksum = ~(bat_r + bat_c);
  181. if (checksum == (*NVR_BATMEA_CHECHSUM1))
  182. {
  183. MEAResult->BATRESResult = (float)((int32_t)bat_r / 1000.0);
  184. MEAResult->BATCAPResult = (float)((int32_t)bat_c / 1000.0);
  185. return 0;
  186. }
  187. bat_r = *NVR_BAT_R2;
  188. bat_c = *NVR_BAT_C2;
  189. /* Calculate checksum2 */
  190. checksum = ~(bat_r + bat_c);
  191. if (checksum == (*NVR_BATMEA_CHECHSUM2))
  192. {
  193. MEAResult->BATRESResult = (float)((int32_t)bat_r / 1000.0);
  194. MEAResult->BATCAPResult = (float)((int32_t)bat_c / 1000.0);
  195. return 0;
  196. }
  197. else
  198. {
  199. return 1;
  200. }
  201. }
  202. /**
  203. * @breif Load RTC ACPx pramameters from NVR to RTC registers.
  204. Get RTC pramameters.
  205. * @param [out]RTCTempData The pointer to struct NVR_RTCINFO.
  206. * @retval 0: Function succeeded.
  207. !0: Function not succeeded, load default value to registers.
  208. bit[0]=1: Temperature Measure delta information checksum error, default value is 0.
  209. bit[1]=1: P paramters checksum error, default value as follows
  210. [P0]-214, [P1]1060, [P2]-19746971, [P5]6444, [P6]1342, [P7]0
  211. bit[2]=1: P4 checksum error, default value is 0
  212. bit[3]=1: ACKx checksum error, default value as follows
  213. [K1]20827, [K2]21496, [K3]22020, [K4]24517, [K5]25257
  214. bit[4]=1: ACTI checksum error, default value is 0x1800(24.0)
  215. bit[5]=1: ACKTEMP checksum error, defalut value is 0x3C2800EC
  216. */
  217. uint32_t NVR_GetInfo_LoadRTCData(NVR_RTCINFO *RTCTempData)
  218. {
  219. uint32_t real_temp, mea_temp;
  220. uint32_t rtc_data1, rtc_data2, rtc_data3, rtc_data4;
  221. uint32_t rtc_p4;
  222. uint32_t rtc_ack[5];
  223. uint32_t rtc_acti;
  224. uint32_t rtc_acktemp;
  225. uint32_t checksum;
  226. float pclk_mul;
  227. int16_t TempDelta;
  228. uint32_t retval = 0;
  229. /*------------------------ Temperature Measure delta -------------------------*/
  230. real_temp = *NVR_REALTEMP1;
  231. mea_temp = *NVR_MEATEMP1;
  232. /* Calculate checksum1 */
  233. checksum = ~(real_temp + mea_temp);
  234. if (checksum == (*NVR_TEMP_CHECKSUM1)) //checksum1 true
  235. {
  236. TempDelta = (int16_t)real_temp - (int16_t)mea_temp;
  237. }
  238. else
  239. {
  240. real_temp = *NVR_REALTEMP2;
  241. mea_temp = *NVR_MEATEMP2;
  242. /* Calculate checksum2 */
  243. checksum = ~(real_temp + mea_temp);
  244. if (checksum == (*NVR_TEMP_CHECKSUM2)) //checksum2 true
  245. {
  246. TempDelta = (int16_t)real_temp - (int16_t)mea_temp;
  247. }
  248. else
  249. {
  250. TempDelta = 0;
  251. retval |= BIT0;
  252. }
  253. }
  254. /* Get Measure delta information */
  255. RTCTempData->RTCTempDelta = TempDelta;
  256. /*------------------------------ P parameters --------------------------------*/
  257. /* Wait until the RTC registers be synchronized */
  258. RTC_WaitForSynchro();
  259. /* Disable RTC Registers write-protection */
  260. RTC_WriteProtection(DISABLE);
  261. /* Get PCLK */
  262. RTCTempData->APBClock = CLK_GetPCLKFreq();
  263. pclk_mul = RTCTempData->APBClock / 6553600.0;
  264. rtc_data1 = *NVR_RTC1_P1_P0;
  265. rtc_data2 = *NVR_RTC1_P2;
  266. rtc_data3 = *NVR_RTC1_P5_P4;
  267. rtc_data4 = *NVR_RTC1_P7_P6;
  268. /* Calculate checksum1 */
  269. checksum = ~(rtc_data1 + rtc_data2 + rtc_data3 + rtc_data4);
  270. if (checksum == (*NVR_RTC1_PCHECHSUM)) //checksum1 true
  271. {
  272. /* Get information */
  273. RTCTempData->RTCTempP0 = (int16_t)(rtc_data1);
  274. RTCTempData->RTCTempP1 = (int16_t)(rtc_data1 >> 16);
  275. RTCTempData->RTCTempP2 = (int32_t)((int32_t)rtc_data2 + (((int32_t)TempDelta)*256));
  276. RTCTempData->RTCTempP5 = (int16_t)(rtc_data3 >> 16);
  277. RTCTempData->RTCTempP6 = (int16_t)(rtc_data4 * pclk_mul);
  278. RTCTempData->RTCTempP7 = (int16_t)(rtc_data4 >> 16);
  279. /* Load data to ACPx register */
  280. RTC->ACP0 = (uint16_t)(rtc_data1 & 0xFFFF);
  281. RTC->ACP1 = (uint16_t)((rtc_data1 >> 16) & 0xFFFF);
  282. RTC->ACP2 = (uint32_t)((int32_t)rtc_data2 + (((int32_t)TempDelta)*256));
  283. RTC->ACP5 = (uint16_t)((rtc_data3 >> 16) & 0xFFFF);
  284. RTC->ACP6 = (uint16_t)((int16_t)(rtc_data4 * pclk_mul));
  285. RTC->ACP7 = (uint16_t)((rtc_data4 >> 16) & 0xFFFF);
  286. }
  287. else
  288. {
  289. rtc_data1 = *NVR_RTC2_P1_P0;
  290. rtc_data2 = *NVR_RTC2_P2;
  291. rtc_data3 = *NVR_RTC2_P5_P4;
  292. rtc_data4 = *NVR_RTC2_P7_P6;
  293. /* Calculate checksum2 */
  294. checksum = ~(rtc_data1 + rtc_data2 + rtc_data3 + rtc_data4);
  295. if (checksum == (*NVR_RTC2_PCHECHSUM)) //checksum2 true
  296. {
  297. /* Get information */
  298. RTCTempData->RTCTempP0 = (int16_t)(rtc_data1);
  299. RTCTempData->RTCTempP1 = (int16_t)(rtc_data1 >> 16);
  300. RTCTempData->RTCTempP2 = (int32_t)((int32_t)rtc_data2 + (((int32_t)TempDelta)*256));
  301. RTCTempData->RTCTempP5 = (int16_t)(rtc_data3 >> 16);
  302. RTCTempData->RTCTempP6 = (int16_t)(rtc_data4 * pclk_mul);
  303. RTCTempData->RTCTempP7 = (int16_t)(rtc_data4 >> 16);
  304. /* Load data to ACPx register */
  305. RTC->ACP0 = (uint16_t)(rtc_data1 & 0xFFFF);
  306. RTC->ACP1 = (uint16_t)((rtc_data1 >> 16) & 0xFFFF);
  307. RTC->ACP2 = (uint32_t)((int32_t)rtc_data2 + (((int32_t)TempDelta)*256));
  308. RTC->ACP5 = (uint16_t)((rtc_data3 >> 16) & 0xFFFF);
  309. RTC->ACP6 = (uint16_t)((int16_t)(rtc_data4 * pclk_mul));
  310. RTC->ACP7 = (uint16_t)((rtc_data4 >> 16) & 0xFFFF);
  311. }
  312. else
  313. {
  314. /* Get information */
  315. RTCTempData->RTCTempP0 = -214;
  316. RTCTempData->RTCTempP1 = 1060;
  317. RTCTempData->RTCTempP2 = -19746971 + (TempDelta*256);
  318. RTCTempData->RTCTempP5 = 6444;
  319. RTCTempData->RTCTempP6 = (uint32_t)((int32_t)(1342*pclk_mul));
  320. RTCTempData->RTCTempP7 = 0;
  321. /* Load data to ACPx register */
  322. RTC->ACP0 = (uint16_t)(-214);
  323. RTC->ACP1 = (uint16_t)(1060);
  324. RTC->ACP2 = (uint32_t)(-19746971 + (TempDelta*256));
  325. RTC->ACP5 = (uint16_t)(6444);
  326. RTC->ACP6 = (uint16_t)((int32_t)(1342*pclk_mul));
  327. RTC->ACP7 = (uint16_t)(0);
  328. retval |= BIT1;
  329. }
  330. }
  331. /*----------------------------------- P4 -------------------------------------*/
  332. /* Calculate checksum1 */
  333. rtc_p4 = *NVR_RTC1_P4;
  334. checksum = ~rtc_p4;
  335. if (checksum == (*NVR_RTC1_P4_CHKSUM))//checksum1 true
  336. {
  337. /* Get information */
  338. RTCTempData->RTCTempP4 = (int16_t)(*NVR_RTC1_P4);
  339. RTC->ACP4 = *NVR_RTC1_P4;
  340. }
  341. else
  342. {
  343. rtc_p4 = *NVR_RTC2_P4;
  344. checksum = ~rtc_p4;
  345. if (checksum == (*NVR_RTC2_P4_CHKSUM))//checksum2 true
  346. {
  347. /* Get information */
  348. RTCTempData->RTCTempP4 = (int16_t)(*NVR_RTC1_P4);
  349. RTC->ACP4 = *NVR_RTC1_P4;
  350. }
  351. else
  352. {
  353. RTCTempData->RTCTempP4 = 0;
  354. RTC->ACP4 = 0;
  355. retval |= BIT2;
  356. }
  357. }
  358. /*-------------------------- RTC ACKx parameters -----------------------------*/
  359. rtc_ack[0] = *NVR_RTC1_ACK1;
  360. rtc_ack[1] = *NVR_RTC1_ACK2;
  361. rtc_ack[2] = *NVR_RTC1_ACK3;
  362. rtc_ack[3] = *NVR_RTC1_ACK4;
  363. rtc_ack[4] = *NVR_RTC1_ACK5;
  364. checksum = ~(rtc_ack[0] + rtc_ack[1] + rtc_ack[2] + rtc_ack[3] + rtc_ack[4]);
  365. if (checksum == (*NVR_RTC1_ACK_CHKSUM))//checksum1 true
  366. {
  367. /* Get information */
  368. RTCTempData->RTCTempK1 = rtc_ack[0];
  369. RTCTempData->RTCTempK2 = rtc_ack[1];
  370. RTCTempData->RTCTempK3 = rtc_ack[2];
  371. RTCTempData->RTCTempK4 = rtc_ack[3];
  372. RTCTempData->RTCTempK5 = rtc_ack[4];
  373. /* Load data to ACKx register */
  374. RTC->ACK1 = rtc_ack[0];
  375. RTC->ACK2 = rtc_ack[1];
  376. RTC->ACK3 = rtc_ack[2];
  377. RTC->ACK4 = rtc_ack[3];
  378. RTC->ACK5 = rtc_ack[4];
  379. }
  380. else
  381. {
  382. rtc_ack[0] = *NVR_RTC2_ACK1;
  383. rtc_ack[1] = *NVR_RTC2_ACK2;
  384. rtc_ack[2] = *NVR_RTC2_ACK3;
  385. rtc_ack[3] = *NVR_RTC2_ACK4;
  386. rtc_ack[4] = *NVR_RTC2_ACK5;
  387. checksum = ~(rtc_ack[0] + rtc_ack[1] + rtc_ack[2] + rtc_ack[3] + rtc_ack[4]);
  388. if (checksum == (*NVR_RTC2_ACK_CHKSUM))//checksum2 true
  389. {
  390. /* Get information */
  391. RTCTempData->RTCTempK1 = rtc_ack[0];
  392. RTCTempData->RTCTempK2 = rtc_ack[1];
  393. RTCTempData->RTCTempK3 = rtc_ack[2];
  394. RTCTempData->RTCTempK4 = rtc_ack[3];
  395. RTCTempData->RTCTempK5 = rtc_ack[4];
  396. /* Load data to ACKx register */
  397. RTC->ACK1 = rtc_ack[0];
  398. RTC->ACK2 = rtc_ack[1];
  399. RTC->ACK3 = rtc_ack[2];
  400. RTC->ACK4 = rtc_ack[3];
  401. RTC->ACK5 = rtc_ack[4];
  402. }
  403. else
  404. {
  405. /* Get information */
  406. RTCTempData->RTCTempK1 = 20827;
  407. RTCTempData->RTCTempK2 = 21496;
  408. RTCTempData->RTCTempK3 = 22020;
  409. RTCTempData->RTCTempK4 = 24517;
  410. RTCTempData->RTCTempK5 = 25257;
  411. /* Load data to ACKx register */
  412. RTC->ACK1 = 20827;
  413. RTC->ACK2 = 21496;
  414. RTC->ACK3 = 22020;
  415. RTC->ACK4 = 24517;
  416. RTC->ACK5 = 25257;
  417. retval |= BIT3;
  418. }
  419. }
  420. /*-------------------------- RTC ACTI parameters -----------------------------*/
  421. rtc_acti = *NVR_RTC1_ACTI;
  422. checksum = ~rtc_acti;
  423. if (checksum == (*NVR_RTC1_ACTI_CHKSUM))
  424. {
  425. /* Get information */
  426. RTCTempData->RTCACTI = rtc_acti;
  427. /* Load data to ACKx register */
  428. RTC->ACTI = rtc_acti;
  429. }
  430. else
  431. {
  432. rtc_acti = *NVR_RTC2_ACTI;
  433. checksum = ~rtc_acti;
  434. if (checksum == (*NVR_RTC2_ACTI_CHKSUM))
  435. {
  436. /* Get information */
  437. RTCTempData->RTCACTI = rtc_acti;
  438. /* Load data to ACKx register */
  439. RTC->ACTI = rtc_acti;
  440. }
  441. else
  442. {
  443. /* Get information */
  444. RTCTempData->RTCACTI = 0x1800;
  445. RTC->ACTI = 0x1800;
  446. retval |= BIT4;
  447. }
  448. }
  449. /*------------------------- RTC ACKTemp parameters ---------------------------*/
  450. rtc_acktemp = *NVR_RTC1_ACKTEMP;
  451. checksum = ~rtc_acktemp;
  452. if (checksum == (*NVR_RTC1_ACKTEMP_CHKSUM))
  453. {
  454. /* Get information */
  455. RTCTempData->RTCACKTemp = rtc_acktemp;
  456. /* Load data to ACKx register */
  457. RTC->ACKTEMP = rtc_acktemp;
  458. }
  459. else
  460. {
  461. rtc_acktemp = *NVR_RTC2_ACKTEMP;
  462. checksum = ~rtc_acktemp;
  463. if (checksum == (*NVR_RTC2_ACKTEMP_CHKSUM))
  464. {
  465. /* Get information */
  466. RTCTempData->RTCACKTemp = rtc_acktemp;
  467. /* Load data to ACKx register */
  468. RTC->ACKTEMP = rtc_acktemp;
  469. }
  470. else
  471. {
  472. /* Get information */
  473. RTCTempData->RTCACKTemp = 0x3C2800EC;
  474. RTC->ACKTEMP = 0x3C2800EC;
  475. retval |= BIT5;
  476. }
  477. }
  478. /*--------------------------------- ACF200 -----------------------------------*/
  479. RTCTempData->RTCACF200 = (uint32_t)((int32_t)(pclk_mul*0x320000));
  480. RTC->ACF200 = (uint32_t)((int32_t)(pclk_mul*0x320000));
  481. /* Enable RTC Registers write-protection */
  482. RTC_WriteProtection(ENABLE);
  483. /* Wait until the RTC registers be synchronized */
  484. RTC_WaitForSynchro();
  485. return retval;
  486. }
  487. /**
  488. * @breif Get Power/Clock Measure result.
  489. * @param [out]MEAResult The pointer to struct NVR_PWRMEARES.
  490. * @retval 0: Function succeeded.
  491. 1: Function failed(Checksum error).
  492. */
  493. uint32_t NVR_GetMISCGain(NVR_MISCGain *MEAResult)
  494. {
  495. uint32_t avcc_data, dvcc_data, bgp_data, rcl_data, rch_data;
  496. uint32_t checksum;
  497. avcc_data = *NVR_AVCC_MEA1;
  498. dvcc_data = *NVR_DVCC_MEA1;
  499. bgp_data = *NVR_BGP_MEA1;
  500. rcl_data = *NVR_RCL_MEA1;
  501. rch_data = *NVR_RCH_MEA1;
  502. /* Calculate checksum1 */
  503. checksum = ~(avcc_data + dvcc_data + bgp_data + rcl_data + rch_data);
  504. if (checksum == (*NVR_PWR_CHECKSUM1))
  505. {
  506. MEAResult->AVCCMEAResult = avcc_data;
  507. MEAResult->DVCCMEAResult = dvcc_data;
  508. MEAResult->BGPMEAResult = bgp_data;
  509. MEAResult->RCLMEAResult = rcl_data;
  510. MEAResult->RCHMEAResult = rch_data;
  511. return 0;
  512. }
  513. avcc_data = *NVR_AVCC_MEA2;
  514. dvcc_data = *NVR_DVCC_MEA2;
  515. bgp_data = *NVR_BGP_MEA2;
  516. rcl_data = *NVR_RCL_MEA2;
  517. rch_data = *NVR_RCH_MEA2;
  518. /* Calculate checksum2 */
  519. checksum = ~(avcc_data + dvcc_data + bgp_data + rcl_data + rch_data);
  520. if (checksum == (*NVR_PWR_CHECKSUM2))
  521. {
  522. MEAResult->AVCCMEAResult = avcc_data;
  523. MEAResult->DVCCMEAResult = dvcc_data;
  524. MEAResult->BGPMEAResult = bgp_data;
  525. MEAResult->RCLMEAResult = rcl_data;
  526. MEAResult->RCHMEAResult = rch_data;
  527. return 0;
  528. }
  529. else
  530. {
  531. return 1;
  532. }
  533. }
  534. /**
  535. * @breif Get Chip ID.
  536. * @param [out]ChipID The pointer to struct NVR_CHIPID.
  537. * @retval 0: Function succeeded.
  538. 1: Function failed(Checksum error).
  539. */
  540. uint32_t NVR_GetChipID(NVR_CHIPID *ChipID)
  541. {
  542. uint32_t id0, id1;
  543. uint32_t checksum;
  544. id0 = *NVR_CHIP1_ID0;
  545. id1 = *NVR_CHIP1_ID1;
  546. /* Calculate checksum1 */
  547. checksum = ~(id0 + id1);
  548. if (checksum == (*NVR_CHIP1_CHECKSUM))
  549. {
  550. ChipID->ChipID0 = id0;
  551. ChipID->ChipID1 = id1;
  552. return 0;
  553. }
  554. id0 = *NVR_CHIP2_ID0;
  555. id1 = *NVR_CHIP2_ID1;
  556. /* Calculate checksum2 */
  557. checksum = ~(id0 + id1);
  558. if (checksum == (*NVR_CHIP2_CHECKSUM))
  559. {
  560. ChipID->ChipID0 = id0;
  561. ChipID->ChipID1 = id1;
  562. return 0;
  563. }
  564. else
  565. {
  566. return 1;
  567. }
  568. }
  569. /**
  570. * @breif Get LCD information.
  571. * @param [out]LCDInfo The pointer to struct NVR_LCDINFO.
  572. * @retval 0: Function succeeded.
  573. 1: Function failed(Checksum error).
  574. */
  575. uint32_t NVR_GetLCDInfo(NVR_LCDINFO *LCDInfo)
  576. {
  577. uint32_t lcd_ldo, lcd_vol;
  578. uint32_t checksum;
  579. lcd_ldo = *NVR_LCD_LDO1;
  580. lcd_vol = *NVR_LCD_VOL1;
  581. /* Calculate checksum1 */
  582. checksum = ~(lcd_ldo + lcd_vol);
  583. if (checksum == (*NVR_LCD_CHECKSUM1))
  584. {
  585. LCDInfo->MEALCDLDO = lcd_ldo;
  586. LCDInfo->MEALCDVol = lcd_vol;
  587. return 0;
  588. }
  589. lcd_ldo = *NVR_LCD_LDO2;
  590. lcd_vol = *NVR_LCD_VOL2;
  591. /* Calculate checksum2 */
  592. checksum = ~(lcd_ldo + lcd_vol);
  593. if (checksum == (*NVR_LCD_CHECKSUM2))
  594. {
  595. LCDInfo->MEALCDLDO = lcd_ldo;
  596. LCDInfo->MEALCDVol = lcd_vol;
  597. return 0;
  598. }
  599. else
  600. {
  601. return 1;
  602. }
  603. }
  604. /*********************************** END OF FILE ******************************/