AD7124_ATY.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  1. /**
  2. * @file AD7124_ATY.c
  3. *
  4. * @param Project DEVICE_GENERAL_ATY_LIB
  5. *
  6. * @author ATY
  7. *
  8. * @copyright
  9. * - Copyright 2017 - 2026 MZ-ATY
  10. * - This code follows:
  11. * - MZ-ATY Various Contents Joint Statement -
  12. * <a href="https://mengze.top/MZ-ATY_VCJS">
  13. * https://mengze.top/MZ-ATY_VCJS</a>
  14. * - CC 4.0 BY-NC-SA -
  15. * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
  16. * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
  17. * - Your use will be deemed to have accepted the terms of this statement.
  18. *
  19. * @brief functions of AD7124 for C platform
  20. *
  21. * @version
  22. * - 1_01_230828 > ATY
  23. * -# Preliminary version, first Release
  24. * - 1_02_231229 > ATY
  25. * -# add multy addr and dev->channel
  26. * - 1_03_240111 > ATY
  27. * -# add lock
  28. * - 1_04_251124 > ATY
  29. * -# change log and test basely
  30. ********************************************************************************
  31. */
  32. #ifndef __AD7124_ATY_C
  33. #define __AD7124_ATY_C
  34. #include "AD7124_ATY.h"
  35. #define AD7124_ATY_TAG "\r\n[AD7124_ATY] "
  36. /******************************* For user *************************************/
  37. /******************************************************************************/
  38. /**
  39. * @brief
  40. *
  41. * @param data
  42. * @param len
  43. * @param dev
  44. * @return uint8_t
  45. */
  46. uint8_t AD7124_WriteRead(uint8_t* data, uint8_t len, struct AD7124_ATY_Dev* dev){
  47. uint8_t errCode = 0;
  48. __ATY_LOCK(dev);
  49. dev->nssSet(__ATY_HL_L);
  50. printf_ATY_D("%sRW_W: ", AD7124_ATY_TAG);
  51. for(int i = 0; i < len; i++) printf_ATY_D("%02X ", data[i]);
  52. errCode = dev->spiProcess(data, len, __ATY_RW_RW);
  53. printf_ATY_D("%sRW_R: ", AD7124_ATY_TAG);
  54. for(int i = 0; i < len; i++) printf_ATY_D("%02X ", data[i]);
  55. dev->nssSet(__ATY_HL_H);
  56. __ATY_UNLOCK(dev);
  57. return errCode;
  58. }
  59. /**
  60. * @brief
  61. *
  62. * @param dev
  63. * @return uint8_t
  64. */
  65. uint8_t AD7124_Reset(struct AD7124_ATY_Dev* dev){
  66. uint8_t errCode = 0, resetBuf[9] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
  67. printf_ATY_D("%s--Reset", AD7124_ATY_TAG);
  68. __ATY_LOCK(dev);
  69. dev->syncSet(__ATY_HL_H);
  70. // dev->delay(10);
  71. dev->nssSet(__ATY_HL_H);
  72. dev->delay(10);
  73. __ATY_UNLOCK(dev);
  74. // write more than 64 bits to reset AD7124
  75. errCode = AD7124_WriteRead(resetBuf, 9, dev);
  76. return errCode;
  77. }
  78. /**
  79. * @brief
  80. *
  81. * @param id
  82. * @param dev
  83. * @return uint8_t
  84. */
  85. uint8_t AD7124_ReadId(uint8_t* id, struct AD7124_ATY_Dev* dev){
  86. uint8_t errCode = 0, groupTrans[2] = {0};
  87. printf_ATY_D("%s--ReadId", AD7124_ATY_TAG);
  88. groupTrans[0] = 0x45;
  89. groupTrans[1] = 0;
  90. errCode = AD7124_WriteRead(groupTrans, 2, dev);
  91. dev->id = groupTrans[1];
  92. *id = dev->id;
  93. printf_ATY_D("%sAD7124_ID: %02X\r\n", AD7124_ATY_TAG, dev->id);
  94. return errCode;
  95. }
  96. /**
  97. * @brief
  98. *
  99. * @param regAddr
  100. * @param data
  101. * @param len
  102. * @param dev
  103. * @return uint8_t
  104. * @note AD7124_ERR_REG_SPI_IGNORE_ERR only for crc trans
  105. */
  106. uint8_t AD7124_WriteReg(uint8_t regAddr, uint32_t data, uint8_t len, struct AD7124_ATY_Dev* dev){
  107. uint8_t errCode = 0, i = 0, groupTrans[4] = {0};
  108. printf_ATY_D("%s--WriteReg", AD7124_ATY_TAG);
  109. groupTrans[0] = AD7124_COMM_REG_WA(regAddr);
  110. for(i = 0; i < len; i++){
  111. groupTrans[len - i] = data & 0xFF;
  112. data = data >> 8;
  113. }
  114. printf_ATY_D("%sWriteReg: ", AD7124_ATY_TAG);
  115. for(i = 0; i < len + 1; i++)
  116. printf_ATY_D("%02X ", groupTrans[i]);
  117. errCode = AD7124_WriteRead(groupTrans, len + 1, dev);
  118. return errCode;
  119. }
  120. /**
  121. * @brief
  122. *
  123. * @param regAddr
  124. * @param data
  125. * @param len
  126. * @param dev
  127. * @return uint8_t
  128. */
  129. uint8_t AD7124_ReadReg(uint8_t regAddr, uint32_t* data, uint8_t len, struct AD7124_ATY_Dev* dev){
  130. uint8_t errCode = 0, i = 0, groupTrans[4] = {0};
  131. printf_ATY_D("%s--ReadReg", AD7124_ATY_TAG);
  132. groupTrans[0] = AD7124_COMM_REG_RA(regAddr);
  133. errCode = AD7124_WriteRead(groupTrans, len + 1, dev);
  134. if(len == 1)
  135. *data = groupTrans[1];
  136. else if(len == 2)
  137. *data = (groupTrans[1] + (groupTrans[2] << 8));
  138. else if(len == 3)
  139. *data = (groupTrans[1] + (groupTrans[2] << 8) + (groupTrans[3] << 16));
  140. printf_ATY_D("%sReadReg: ", AD7124_ATY_TAG);
  141. for(i = 0; i < len + 1; i++)
  142. printf_ATY_D("%X ", data);
  143. return errCode;
  144. }
  145. /**
  146. * @brief
  147. *
  148. * @param data
  149. * @param dev
  150. * @return uint8_t
  151. */
  152. uint8_t AD7124_ReadData(uint8_t* data, struct AD7124_ATY_Dev* dev){
  153. printf_ATY_D("%s--ReadData", AD7124_ATY_TAG);
  154. uint8_t errCode = 0, i = 0;
  155. data[0] = AD7124_COMM_REG_RA(AD7124_DATA_REG);
  156. errCode = AD7124_WriteRead(data, 5, dev);
  157. printf_ATY_D("%sReadData: 0x ", AD7124_ATY_TAG);
  158. for(i = 0; i < 5; i++)
  159. printf_ATY_D("%02X ", data[i]);
  160. return errCode;
  161. }
  162. /**
  163. * @brief
  164. *
  165. * @param status
  166. * @param dev
  167. * @return uint8_t
  168. */
  169. uint8_t AD7124_ReadStatus(uint8_t* status, struct AD7124_ATY_Dev* dev){
  170. printf_ATY_D("%s--ReadStatus", AD7124_ATY_TAG);
  171. if(AD7124_ReadReg(AD7124_STATUS_REG, (uint32_t*)status, 1, dev)){
  172. printf_ATY_D("%sAD7124_ERR: STATE %02X %02X\r\n",
  173. AD7124_ATY_TAG, status[0], status[1]);
  174. return 1;
  175. }
  176. dev->delay(10);
  177. return 0;
  178. }
  179. /**
  180. * @brief
  181. *
  182. * @param data
  183. * @param resolution
  184. * @param refRes
  185. * @param gain
  186. * @return float
  187. */
  188. float AD7124_DataToRes(uint32_t data, uint8_t resolution, float refRes, uint8_t gain){
  189. uint32_t tempNum = 1;
  190. uint8_t i = 0;
  191. for(i = 0; i < resolution - 1; i++)
  192. tempNum *= 2;
  193. return (float)((((float)data - (float)tempNum) * refRes) / ((float)gain * (float)tempNum));
  194. }
  195. /**
  196. * @brief
  197. *
  198. * @param data
  199. * @return float
  200. */
  201. float AD7124_DataToResDefault(uint32_t data){
  202. return (float)((((float)data - 8388608.0) * 5110.0) / (16.0 * 8388608.0));
  203. }
  204. /**
  205. * @brief
  206. *
  207. * @param cfg
  208. * @param dev
  209. * @return uint8_t
  210. */
  211. uint8_t AD7124_Init(struct AD7124_ATY_Cfg* cfg, struct AD7124_ATY_Dev* dev){
  212. uint8_t id = 0, status[2] = {0};
  213. dev->enSet(__ATY_HL_H);
  214. if(AD7124_Reset(dev)){
  215. printf_ATY_D("%sAD7124_ERR: RST\r\n", AD7124_ATY_TAG);
  216. return 1;
  217. }
  218. if(AD7124_ReadId(&id, dev)){
  219. printf_ATY_D("%sAD7124_ERR: ID\r\n", AD7124_ATY_TAG);
  220. return 2;
  221. }
  222. if(AD7124_ReadStatus(status, dev)){
  223. printf_ATY_D("%sAD7124_ERR: Status\r\n", AD7124_ATY_TAG);
  224. return 3;
  225. }
  226. if(AD7124_Config(cfg, dev)){
  227. printf_ATY_D("%sAD7124_ERR: CFG\r\n", AD7124_ATY_TAG);
  228. return 4;
  229. }
  230. return 0;
  231. }
  232. /**
  233. * @brief
  234. *
  235. * @param cfg
  236. * @param dev
  237. * @return uint8_t
  238. */
  239. uint8_t AD7124_Config(struct AD7124_ATY_Cfg* cfg, struct AD7124_ATY_Dev* dev){
  240. printf_ATY_D("%s--Config", AD7124_ATY_TAG);
  241. if(cfg->AD7124_ADC_CTRL_REG_t) AD7124_WriteReg(AD7124_ADC_CTRL_REG, cfg->AD7124_ADC_CTRL_REG_t, 2, dev);
  242. if(cfg->AD7124_IO_CTRL1_REG_t) AD7124_WriteReg(AD7124_IO_CTRL1_REG, cfg->AD7124_IO_CTRL1_REG_t, 3, dev);
  243. if(cfg->AD7124_IO_CTRL2_REG_t) AD7124_WriteReg(AD7124_IO_CTRL2_REG, cfg->AD7124_IO_CTRL2_REG_t, 2, dev);
  244. if(cfg->AD7124_ERREN_REG_t) AD7124_WriteReg(AD7124_ERREN_REG, cfg->AD7124_ERREN_REG_t, 3, dev);
  245. if(cfg->AD7124_CH0_MAP_REG_t) AD7124_WriteReg(AD7124_CH0_MAP_REG, cfg->AD7124_CH0_MAP_REG_t, 2, dev);
  246. if(cfg->AD7124_CH1_MAP_REG_t) AD7124_WriteReg(AD7124_CH1_MAP_REG, cfg->AD7124_CH1_MAP_REG_t, 2, dev);
  247. if(cfg->AD7124_CH2_MAP_REG_t) AD7124_WriteReg(AD7124_CH2_MAP_REG, cfg->AD7124_CH2_MAP_REG_t, 2, dev);
  248. if(cfg->AD7124_CH3_MAP_REG_t) AD7124_WriteReg(AD7124_CH3_MAP_REG, cfg->AD7124_CH3_MAP_REG_t, 2, dev);
  249. if(cfg->AD7124_CH4_MAP_REG_t) AD7124_WriteReg(AD7124_CH4_MAP_REG, cfg->AD7124_CH4_MAP_REG_t, 2, dev);
  250. if(cfg->AD7124_CH5_MAP_REG_t) AD7124_WriteReg(AD7124_CH5_MAP_REG, cfg->AD7124_CH5_MAP_REG_t, 2, dev);
  251. if(cfg->AD7124_CH6_MAP_REG_t) AD7124_WriteReg(AD7124_CH6_MAP_REG, cfg->AD7124_CH6_MAP_REG_t, 2, dev);
  252. if(cfg->AD7124_CH7_MAP_REG_t) AD7124_WriteReg(AD7124_CH7_MAP_REG, cfg->AD7124_CH7_MAP_REG_t, 2, dev);
  253. if(cfg->AD7124_CH8_MAP_REG_t) AD7124_WriteReg(AD7124_CH8_MAP_REG, cfg->AD7124_CH8_MAP_REG_t, 2, dev);
  254. if(cfg->AD7124_CH9_MAP_REG_t) AD7124_WriteReg(AD7124_CH9_MAP_REG, cfg->AD7124_CH9_MAP_REG_t, 2, dev);
  255. if(cfg->AD7124_CH10_MAP_REG_t) AD7124_WriteReg(AD7124_CH10_MAP_REG, cfg->AD7124_CH10_MAP_REG_t, 2, dev);
  256. if(cfg->AD7124_CH11_MAP_REG_t) AD7124_WriteReg(AD7124_CH11_MAP_REG, cfg->AD7124_CH11_MAP_REG_t, 2, dev);
  257. if(cfg->AD7124_CH12_MAP_REG_t) AD7124_WriteReg(AD7124_CH12_MAP_REG, cfg->AD7124_CH12_MAP_REG_t, 2, dev);
  258. if(cfg->AD7124_CH13_MAP_REG_t) AD7124_WriteReg(AD7124_CH13_MAP_REG, cfg->AD7124_CH13_MAP_REG_t, 2, dev);
  259. if(cfg->AD7124_CH14_MAP_REG_t) AD7124_WriteReg(AD7124_CH14_MAP_REG, cfg->AD7124_CH14_MAP_REG_t, 2, dev);
  260. if(cfg->AD7124_CH15_MAP_REG_t) AD7124_WriteReg(AD7124_CH15_MAP_REG, cfg->AD7124_CH15_MAP_REG_t, 2, dev);
  261. if(cfg->AD7124_CFG0_REG_t) AD7124_WriteReg(AD7124_CFG0_REG, cfg->AD7124_CFG0_REG_t, 2, dev);
  262. if(cfg->AD7124_CFG1_REG_t) AD7124_WriteReg(AD7124_CFG1_REG, cfg->AD7124_CFG1_REG_t, 2, dev);
  263. if(cfg->AD7124_CFG2_REG_t) AD7124_WriteReg(AD7124_CFG2_REG, cfg->AD7124_CFG2_REG_t, 2, dev);
  264. if(cfg->AD7124_CFG3_REG_t) AD7124_WriteReg(AD7124_CFG3_REG, cfg->AD7124_CFG3_REG_t, 2, dev);
  265. if(cfg->AD7124_CFG4_REG_t) AD7124_WriteReg(AD7124_CFG4_REG, cfg->AD7124_CFG4_REG_t, 2, dev);
  266. if(cfg->AD7124_CFG5_REG_t) AD7124_WriteReg(AD7124_CFG5_REG, cfg->AD7124_CFG5_REG_t, 2, dev);
  267. if(cfg->AD7124_CFG6_REG_t) AD7124_WriteReg(AD7124_CFG6_REG, cfg->AD7124_CFG6_REG_t, 2, dev);
  268. if(cfg->AD7124_CFG7_REG_t) AD7124_WriteReg(AD7124_CFG7_REG, cfg->AD7124_CFG7_REG_t, 2, dev);
  269. if(cfg->AD7124_FILT0_REG_t) AD7124_WriteReg(AD7124_FILT0_REG, cfg->AD7124_FILT0_REG_t, 3, dev);
  270. if(cfg->AD7124_FILT1_REG_t) AD7124_WriteReg(AD7124_FILT1_REG, cfg->AD7124_FILT1_REG_t, 3, dev);
  271. if(cfg->AD7124_FILT2_REG_t) AD7124_WriteReg(AD7124_FILT2_REG, cfg->AD7124_FILT2_REG_t, 3, dev);
  272. if(cfg->AD7124_FILT3_REG_t) AD7124_WriteReg(AD7124_FILT3_REG, cfg->AD7124_FILT3_REG_t, 3, dev);
  273. if(cfg->AD7124_FILT4_REG_t) AD7124_WriteReg(AD7124_FILT4_REG, cfg->AD7124_FILT4_REG_t, 3, dev);
  274. if(cfg->AD7124_FILT5_REG_t) AD7124_WriteReg(AD7124_FILT5_REG, cfg->AD7124_FILT5_REG_t, 3, dev);
  275. if(cfg->AD7124_FILT6_REG_t) AD7124_WriteReg(AD7124_FILT6_REG, cfg->AD7124_FILT6_REG_t, 3, dev);
  276. if(cfg->AD7124_FILT7_REG_t) AD7124_WriteReg(AD7124_FILT7_REG, cfg->AD7124_FILT7_REG_t, 3, dev);
  277. if(cfg->AD7124_OFFS0_REG_t) AD7124_WriteReg(AD7124_OFFS0_REG, cfg->AD7124_OFFS0_REG_t, 3, dev);
  278. if(cfg->AD7124_OFFS1_REG_t) AD7124_WriteReg(AD7124_OFFS1_REG, cfg->AD7124_OFFS1_REG_t, 3, dev);
  279. if(cfg->AD7124_OFFS2_REG_t) AD7124_WriteReg(AD7124_OFFS2_REG, cfg->AD7124_OFFS2_REG_t, 3, dev);
  280. if(cfg->AD7124_OFFS3_REG_t) AD7124_WriteReg(AD7124_OFFS3_REG, cfg->AD7124_OFFS3_REG_t, 3, dev);
  281. if(cfg->AD7124_OFFS4_REG_t) AD7124_WriteReg(AD7124_OFFS4_REG, cfg->AD7124_OFFS4_REG_t, 3, dev);
  282. if(cfg->AD7124_OFFS5_REG_t) AD7124_WriteReg(AD7124_OFFS5_REG, cfg->AD7124_OFFS5_REG_t, 3, dev);
  283. if(cfg->AD7124_OFFS6_REG_t) AD7124_WriteReg(AD7124_OFFS6_REG, cfg->AD7124_OFFS6_REG_t, 3, dev);
  284. if(cfg->AD7124_OFFS7_REG_t) AD7124_WriteReg(AD7124_OFFS7_REG, cfg->AD7124_OFFS7_REG_t, 3, dev);
  285. if(cfg->AD7124_GAIN0_REG_t) AD7124_WriteReg(AD7124_GAIN0_REG, cfg->AD7124_GAIN0_REG_t, 3, dev);
  286. if(cfg->AD7124_GAIN1_REG_t) AD7124_WriteReg(AD7124_GAIN1_REG, cfg->AD7124_GAIN1_REG_t, 3, dev);
  287. if(cfg->AD7124_GAIN2_REG_t) AD7124_WriteReg(AD7124_GAIN2_REG, cfg->AD7124_GAIN2_REG_t, 3, dev);
  288. if(cfg->AD7124_GAIN3_REG_t) AD7124_WriteReg(AD7124_GAIN3_REG, cfg->AD7124_GAIN3_REG_t, 3, dev);
  289. if(cfg->AD7124_GAIN4_REG_t) AD7124_WriteReg(AD7124_GAIN4_REG, cfg->AD7124_GAIN4_REG_t, 3, dev);
  290. if(cfg->AD7124_GAIN5_REG_t) AD7124_WriteReg(AD7124_GAIN5_REG, cfg->AD7124_GAIN5_REG_t, 3, dev);
  291. if(cfg->AD7124_GAIN6_REG_t) AD7124_WriteReg(AD7124_GAIN6_REG, cfg->AD7124_GAIN6_REG_t, 3, dev);
  292. if(cfg->AD7124_GAIN7_REG_t) AD7124_WriteReg(AD7124_GAIN7_REG, cfg->AD7124_GAIN7_REG_t, 3, dev);
  293. printf_ATY_D("\r\n");
  294. return 0;
  295. }
  296. /**
  297. * @brief
  298. *
  299. * @param calibrateType b1111
  300. * @param cfg
  301. * @param dev
  302. * @return uint8_t
  303. * @note 0001 int full cal at mid power
  304. 0010 int zero cal at full power
  305. 0100 sys full cal
  306. 1000 sys zero cal
  307. */
  308. uint8_t AD7124_Calibrate(uint8_t calibrateType, struct AD7124_ATY_Cfg* cfg, struct AD7124_ATY_Dev* dev){
  309. uint32_t regTrans = 0;
  310. printf_ATY_D("%s--Calibrate: %02X", AD7124_ATY_TAG, calibrateType);
  311. AD7124_WriteReg(AD7124_OFFS0_REG, 0x800000, 3, dev);
  312. AD7124_WriteReg(AD7124_OFFS1_REG, 0x800000, 3, dev);
  313. AD7124_WriteReg(AD7124_OFFS2_REG, 0x800000, 3, dev);
  314. AD7124_WriteReg(AD7124_OFFS3_REG, 0x800000, 3, dev);
  315. AD7124_WriteReg(AD7124_OFFS4_REG, 0x800000, 3, dev);
  316. AD7124_WriteReg(AD7124_OFFS5_REG, 0x800000, 3, dev);
  317. AD7124_WriteReg(AD7124_OFFS6_REG, 0x800000, 3, dev);
  318. AD7124_WriteReg(AD7124_OFFS7_REG, 0x800000, 3, dev);
  319. if(calibrateType & AD7124_CALIBRATE_INT_FULL){
  320. AD7124_WriteReg(AD7124_ADC_CTRL_REG, 0x0058, 2, dev); // int full cal at mid power
  321. AD7124_ReadReg(AD7124_ADC_CTRL_REG, &regTrans, 2, dev);
  322. dev->delay(1500); // 1300ms min
  323. AD7124_ReadReg(AD7124_ADC_CTRL_REG, &regTrans, 2, dev);
  324. }
  325. if(calibrateType & AD7124_CALIBRATE_INT_ZERO){
  326. AD7124_WriteReg(AD7124_ADC_CTRL_REG, 0x0094, 2, dev); // int zero cal at full power
  327. AD7124_ReadReg(AD7124_ADC_CTRL_REG, &regTrans, 2, dev);
  328. dev->delay(100); // 80ms min
  329. AD7124_ReadReg(AD7124_ADC_CTRL_REG, &regTrans, 2, dev);
  330. }
  331. if(calibrateType & AD7124_CALIBRATE_SYS_FULL){
  332. AD7124_WriteReg(AD7124_ADC_CTRL_REG, 0x00A0, 2, dev); // sys full cal
  333. AD7124_ReadReg(AD7124_ADC_CTRL_REG, &regTrans, 2, dev);
  334. dev->delay(100); // 80ms min
  335. AD7124_ReadReg(AD7124_ADC_CTRL_REG, &regTrans, 2, dev);
  336. }
  337. if(calibrateType & AD7124_CALIBRATE_SYS_ZERO){
  338. AD7124_WriteReg(AD7124_ADC_CTRL_REG, 0x009C, 2, dev); // sys zero cal
  339. AD7124_ReadReg(AD7124_ADC_CTRL_REG, &regTrans, 2, dev);
  340. dev->delay(100); // 80ms min
  341. AD7124_ReadReg(AD7124_ADC_CTRL_REG, &regTrans, 2, dev);
  342. }
  343. AD7124_WriteReg(AD7124_ADC_CTRL_REG, cfg->AD7124_ADC_CTRL_REG_t, 2, dev); // detect mode
  344. printf_ATY_D("\r\n");
  345. dev->delay(1);
  346. return 0;
  347. }
  348. /**
  349. * @brief
  350. *
  351. * @param dev
  352. * @return uint8_t
  353. */
  354. uint8_t AD7124_ReadAllReg(struct AD7124_ATY_Cfg* cfg, struct AD7124_ATY_Dev* dev){
  355. uint8_t i = 0;
  356. uint32_t* p = (uint32_t*)cfg;
  357. printf_ATY_D("%s--AllRegs %d", AD7124_ATY_TAG, (sizeof(struct AD7124_ATY_Cfg) / sizeof(uint32_t)));
  358. for(i = 0; i < (sizeof(struct AD7124_ATY_Cfg) / sizeof(uint32_t)); i++){ // 0x00~0x38
  359. printf_ATY_D("\r\nReg 0x%02X: ", i);
  360. AD7124_ReadReg(i, (p + i), 3, dev);
  361. }
  362. // AD7124_ReadReg(AD7124_ADC_CTRL_REG, groupTrans, 2, dev);
  363. printf_ATY_D("\r\n");
  364. return 0;
  365. }
  366. #endif /* __AD7124_ATY_C */
  367. /************************************ etc *************************************/
  368. /* init */
  369. // #include "AD7124_ATY.h"
  370. // void AD7124_1_NSS_SET(uint8_t level){
  371. // if(level == __ATY_HL_L)
  372. // GPIO_SET_L(SPI2_NSS_GPIO_Port, SPI2_NSS_Pin);
  373. // else if(level == __ATY_HL_H)
  374. // GPIO_SET_H(SPI2_NSS_GPIO_Port, SPI2_NSS_Pin);
  375. // }
  376. // void AD7124_1_EN_SET(uint8_t level){ }
  377. // void AD7124_1_SYNC_SET(uint8_t level){ }
  378. // uint8_t AD7124_1_SPI(uint8_t* data_t, uint16_t len, uint8_t rw){
  379. // if(rw == _ATY_RW_RW)
  380. // return HAL_SPI_TransmitReceive(&hspi2, (uint8_t*)data_t, (uint8_t*)data_t, len, 1000);
  381. // return 0;
  382. // }
  383. // struct AD7124_ATY_Dev AD7124_ATY_Dev_1 = {
  384. // .id = 0,
  385. // .nssSet = AD7124_1_NSS_SET,
  386. // .enSet = AD7124_1_EN_SET,
  387. // .syncSet = AD7124_1_SYNC_SET,
  388. // .spiProcess = AD7124_1_SPI,
  389. // .delay = HAL_Delay,
  390. // .lock = __ATY_UNLOCKED,
  391. // .debugEnable = 0,
  392. // };
  393. /* config template */
  394. // struct AD7124_ATY_Cfg AD7124_ATY_Cfg_CHIP_T = {
  395. // .AD7124_ADC_CTRL_REG_t = 0x0580,
  396. //
  397. // .AD7124_CFG0_REG_t = 0x09F0,
  398. //
  399. // .AD7124_CH0_MAP_REG_t = 0x8211, // IC Temp, int vref
  400. // };
  401. // struct AD7124_ATY_Cfg AD7124_ATY_Cfg_NTC10_O1 = {
  402. // .AD7124_ADC_CTRL_REG_t = 0x0580,
  403. //
  404. // .AD7124_CFG1_REG_t = 0x09F0,
  405. // .AD7124_FILT1_REG_t = 0x0060180,
  406. // .AD7124_GAIN1_REG_t = 0x5558CC,
  407. //
  408. // .AD7124_CH0_MAP_REG_t = 0x918D,
  409. // };
  410. // struct AD7124_ATY_Cfg AD7124_ATY_Cfg_RTD4_1 = {
  411. // .AD7124_ADC_CTRL_REG_t = 0x0480,
  412. // .AD7124_IO_CTRL1_REG_t = 0x000400,
  413. // // .AD7124_ERREN_REG_t = 0x06FFFF,
  414. //
  415. // .AD7124_CFG0_REG_t = 0x09E4,
  416. // .AD7124_FILT0_REG_t = 0x0060180,
  417. // .AD7124_GAIN0_REG_t = 0x5558CC,
  418. // .AD7124_CH0_MAP_REG_t = 0x9211, //IC Temp
  419. //
  420. // .AD7124_CFG1_REG_t = 0x09E4,
  421. // .AD7124_FILT1_REG_t = 0x0060180,
  422. // .AD7124_GAIN1_REG_t = 0x05558CC,
  423. // .AD7124_CH1_MAP_REG_t = 0x9022,
  424. // };
  425. // struct AD7124_ATY_Cfg AD7124_ATY_Cfg_NTC1_1 = {
  426. // .AD7124_ADC_CTRL_REG_t = 0x0480,
  427. // .AD7124_IO_CTRL1_REG_t = 0x002040,
  428. //
  429. // .AD7124_CFG1_REG_t = 0x09E1,
  430. // .AD7124_FILT1_REG_t = 0x0060180,
  431. // .AD7124_GAIN1_REG_t = 0x05558CC,
  432. // // 500uA * 5.11K = 2.5Vref, 1K gain 2 max
  433. // .AD7124_CH2_MAP_REG_t = 0x90A6,
  434. // };
  435. // struct AD7124_ATY_Cfg AD7124_ATY_Cfg_NTC10_1 = {
  436. // .AD7124_ADC_CTRL_REG_t = 0x0580,
  437. //
  438. // .AD7124_CFG1_REG_t = 0x09F0,
  439. // .AD7124_FILT1_REG_t = 0x0060180,
  440. // .AD7124_GAIN1_REG_t = 0x5558CC,
  441. //
  442. // .AD7124_CH3_MAP_REG_t = 0x918D,
  443. // .AD7124_CH4_MAP_REG_t = 0x91CF,
  444. // };
  445. // struct AD7124_ATY_Cfg AD7124_ATY_Cfg_TC_1 = {
  446. // .AD7124_ADC_CTRL_REG_t = 0x0580,
  447. // .AD7124_IO_CTRL2_REG_t = 0x0500,
  448. //
  449. // .AD7124_CFG1_REG_t = 0x09F7,
  450. // .AD7124_FILT1_REG_t = 0x0060180,
  451. // .AD7124_GAIN1_REG_t = 0x5558CC,
  452. //
  453. // .AD7124_CH5_MAP_REG_t = 0x9109,
  454. // .AD7124_CH6_MAP_REG_t = 0x914B,
  455. // };
  456. /* use */
  457. // tested 20ms fastest at stm32f103cbt6, spi 18MBit/s, line 50mm
  458. // uint8_t group_AD7124_Data[5] = {0};
  459. // uint8_t adDetectType = 0; // 0: IC temp / user channel, 1: RTD, 2: NTC1K, 34: NTC10K, 56: TC
  460. // uint8_t adInitFlag = 0;
  461. // uint32_t ad7124Code = 0;
  462. // uint8_t ad7124End = 0;
  463. // uint8_t ad7124State = 0;
  464. // #define AD_INIT_MAX_COUNT 8
  465. // void AD7124_Calc(uint8_t* codeGroup){
  466. // if((codeGroup[4] & 0x80) != 0){
  467. // adInitFlag++;
  468. // if(adInitFlag > AD_INIT_MAX_COUNT){
  469. // adInitFlag = 0;
  470. // }
  471. // return;
  472. // }
  473. //
  474. // if((codeGroup[4] & 0x0F) != adDetectType){
  475. // adInitFlag++;
  476. // if(adInitFlag > AD_INIT_MAX_COUNT)
  477. // adInitFlag = 0;
  478. // return;
  479. // }
  480. //
  481. // ad7124State = codeGroup[4];
  482. // ad7124End = codeGroup[0];
  483. // ad7124Code = (codeGroup[3] + (codeGroup[2] << 8) + (codeGroup[1] << 16));
  484. //
  485. // float calcVol = 0, calcRes = 0, fastTempCalc = 0, aboveTempCalc = 0, belowTempCalc = 0;
  486. // if((codeGroup[4] & 0x0F) == 0){ // IC Temp
  487. // fastTempCalc = ((float)(ad7124Code - 0x800000) / 13584.0) - 272.5;
  488. // }
  489. // if((codeGroup[4] & 0x0F) == 1){ // RTD4
  490. // calcRes = AD7124_DataToRes(ad7124Code, 24, 5110.0, 16);
  491. // }
  492. // if((codeGroup[4] & 0x0F) == 2){ // NTC1K
  493. // calcRes = AD7124_DataToRes(ad7124Code, 24, 5110.0, 2);
  494. // }
  495. // if(((codeGroup[4] & 0x0F) == 3) || ((codeGroup[4] & 0x0F) == 4)){ // NTC10K
  496. // calcRes = 10.0 * 1000.0 * ((double)((double)(ad7124Code - 0x800000) / (double)(0x1000000 - ad7124Code)));
  497. // }
  498. // if(((codeGroup[4] & 0x0F) == 5) || ((codeGroup[4] & 0x0F) == 6)){ // TC
  499. // calcVol = (((float)ad7124Code - 8388608.0) * 2500.0 / (128.0 * 8388608.0));
  500. // }
  501. // }
  502. // void AD7124_Detect(void){
  503. // static uint8_t lastChannel = 0;
  504. // if(lastChannel != adDetectType){
  505. // lastChannel = adDetectType;
  506. // adInitFlag = 0;
  507. // }
  508. // switch(adDetectType){
  509. // case 0:
  510. // case 1:
  511. // if(adInitFlag == 0){
  512. // adInitFlag = 1;
  513. // // AD7124_Init(&AD7124_ATY_Cfg_CHIP_T, &AD7124_ATY_Dev_1);
  514. // AD7124_Init(&AD7124_ATY_Cfg_RTD4_1, &AD7124_ATY_Dev_1);
  515. // // AD7124_Calibrate(AD7124_CALIBRATE_INT_FULL | AD7124_CALIBRATE_INT_ZERO,
  516. // // &AD7124_ATY_Cfg_RTD4_1, &AD7124_ATY_Dev_1);
  517. // }
  518. // AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
  519. // AD7124_Calc(group_AD7124_Data);
  520. // AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
  521. // AD7124_Calc(group_AD7124_Data);
  522. // break;
  523. // case 2:
  524. // if(adInitFlag == 0){
  525. // adInitFlag = 1;
  526. // AD7124_Init(&AD7124_ATY_Cfg_NTC1_1, &AD7124_ATY_Dev_1);
  527. // AD7124_Calibrate(AD7124_CALIBRATE_INT_FULL | AD7124_CALIBRATE_INT_ZERO,
  528. // &AD7124_ATY_Cfg_NTC1_1, &AD7124_ATY_Dev_1);
  529. // }
  530. // AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
  531. // AD7124_Calc(group_AD7124_Data);
  532. // break;
  533. // case 3:
  534. // case 4:
  535. // if(adInitFlag == 0){
  536. // adInitFlag = 1;
  537. // AD7124_Init(&AD7124_ATY_Cfg_NTC10_1, &AD7124_ATY_Dev_1);
  538. // AD7124_Calibrate(AD7124_CALIBRATE_INT_FULL | AD7124_CALIBRATE_INT_ZERO,
  539. // &AD7124_ATY_Cfg_NTC10_1, &AD7124_ATY_Dev_1);
  540. // }
  541. // AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
  542. // AD7124_Calc(group_AD7124_Data);
  543. // AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
  544. // AD7124_Calc(group_AD7124_Data);
  545. // break;
  546. // case 5:
  547. // case 6:
  548. // if(adInitFlag == 0){
  549. // adInitFlag = 1;
  550. // AD7124_Init(&AD7124_ATY_Cfg_TC_1, &AD7124_ATY_Dev_1);
  551. // AD7124_Calibrate(AD7124_CALIBRATE_INT_FULL | AD7124_CALIBRATE_INT_ZERO,
  552. // &AD7124_ATY_Cfg_TC_1, &AD7124_ATY_Dev_1);
  553. // }
  554. // AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
  555. // AD7124_Calc(group_AD7124_Data);
  556. // AD7124_ReadData(group_AD7124_Data, &AD7124_ATY_Dev_1);
  557. // AD7124_Calc(group_AD7124_Data);
  558. // break;
  559. // default:
  560. // break;
  561. // }
  562. // }
  563. /* calc */
  564. // // IC Temp
  565. // fastTempCalc = ((float)(ad7124Code - 0x800000) / 13584.0) - 272.5;
  566. // // RTD4
  567. // calcRes = AD7124_DataToRes(ad7124Code, 24, 5110.0, 16);
  568. // fastTempCalc = ALGO_Temp_RTD_Res_Fast(calcRes);
  569. // aboveTempCalc = ALGO_Temp_RTD_Res_Above(calcRes);
  570. // belowTempCalc = ALGO_Temp_RTD_Res_Below(calcRes);
  571. // // NTC1K
  572. // calcRes = AD7124_DataToRes(ad7124Code, 24, 5110.0, 2);
  573. // fastTempCalc = ALGO_ResToKelvinTemp((calcRes / 1000.0), 1.0, 3950);
  574. // // NTC10K
  575. // calcVol = (((float)ad7124Code - 8388608.0) * 2500.0 / (1.0 * 8388608.0));
  576. // calcRes = ((calcVol * 10.0) / (2500.0 - calcVol));
  577. // fastTempCalc = ALGO_ResToKelvinTemp(calcRes, 10.0, 3380);
  578. // // TC
  579. // calcVol = (((float)ad7124Code - 8388608.0) * 2500.0 / (128.0 * 8388608.0));
  580. // float coldTemp = 25.0;
  581. // float calcVolCold = ALGO_Temp_TC_TempToVol('T', coldTemp);
  582. // calcVol += calcVolCold;
  583. // aboveTempCalc = ALGO_Temp_TC_VolToTemp('T', calcVol);
  584. // belowTempCalc = ALGO_Temp_TC_VolToTemp('T', calcVol);
  585. // fastTempCalc = aboveTempCalc;
  586. /******************************************************************************/
  587. /******************************** End Of File *********************************/