INA220.c 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. /*
  2. ** author: jimbo
  3. ** date: 2019-03-21
  4. ** version: 1.00
  5. ** e-mail: zhouchao@storlead.com 1959353124@qq.com
  6. ** brief: INA220 driver
  7. *
  8. */
  9. #include "bmc_main.h"
  10. #include "i2c_api.h"
  11. /*
  12. * ** sensor name: INA220
  13. * ** brief:Volts
  14. * **/
  15. int INA220_3V3_Volts_init(hal_t *phal)
  16. {
  17. printf("init INA220 3V3 Volts!\n");
  18. return 0;
  19. }
  20. int INA220_3V3_Volts_write(hal_t *phal)
  21. {
  22. printf("write INA220 3V3 Volts!\n");
  23. return 0;
  24. }
  25. int INA220_3V3_Volts_read(hal_t *phal)
  26. {
  27. uint8_t pData[2]={0x00,0x00};
  28. uint16_t *Volt;
  29. uint8_t temp;
  30. I2C_DEV_T i2c_dev;
  31. i2c_dev.bus = I2C3;
  32. I2C_Master_Receiver(&i2c_dev,0x88,pData,0x02,0x02);
  33. // printf("read INA220 3V3 Volts!\n");
  34. temp=pData[1];
  35. pData[1]=pData[0];
  36. pData[0]=temp;
  37. Volt=pData;
  38. // printf("3V3 Volt is %x\n",*Volt);
  39. // printf("%x , %x \n",pData[0],pData[1]);
  40. if((*Volt>>5)>255)
  41. *phal->pbyte =255;
  42. else
  43. *phal->pbyte =*Volt>>5;
  44. return 0;
  45. }
  46. /*
  47. * * ** sensor name: INA220
  48. * * ** brief: Volts
  49. * * **/
  50. int INA220_5V0_Volts_init(hal_t *phal)
  51. {
  52. printf("init INA220 5V0 Volts!\n");
  53. return 0;
  54. }
  55. int INA220_5V0_Volts_write(hal_t *phal)
  56. {
  57. printf("write INA220 5V0 Volts!\n");
  58. return 0;
  59. }
  60. int INA220_5V0_Volts_read(hal_t *phal)
  61. {
  62. uint8_t pData[2]={0x00,0x00};
  63. uint16_t *Volt;
  64. uint8_t temp;
  65. I2C_DEV_T i2c_dev;
  66. i2c_dev.bus = I2C3;
  67. I2C_Master_Receiver(&i2c_dev,0x82,pData,0x02,0x02);
  68. temp=pData[1];
  69. pData[1]=pData[0];
  70. pData[0]=temp;
  71. Volt=pData;
  72. // printf("read INA220 5V0 Volts!\n");
  73. if((*Volt>>6)>255)
  74. *phal->pbyte = 255;
  75. else
  76. *phal->pbyte = *Volt>>6;
  77. return 0;
  78. }
  79. /*
  80. * * * ** sensor name: INA220
  81. * * * ** brief: Volts
  82. * * * **/
  83. int INA220_12V0_Volts_init(hal_t *phal)
  84. {
  85. printf("init INA220 12V0 Volts!\n");
  86. return 0;
  87. }
  88. int INA220_12V0_Volts_write(hal_t *phal)
  89. {
  90. printf("write INA220 12V0 Volts!\n");
  91. return 0;
  92. }
  93. int INA220_12V0_Volts_read(hal_t *phal)
  94. {
  95. uint8_t pData[2]={0x00,0x00};
  96. uint16_t *Volt;
  97. uint8_t temp;
  98. I2C_DEV_T i2c_dev;
  99. i2c_dev.bus = I2C3;
  100. I2C_Master_Receiver(&i2c_dev,0x80,pData,0x02,0x02);
  101. temp=pData[1];
  102. pData[1]=pData[0];
  103. pData[0]=temp;
  104. Volt=pData;
  105. // printf("read INA220 12V0 Volts!\n");
  106. if((*Volt>>7)>255)
  107. *phal->pbyte = 255;
  108. else
  109. *phal->pbyte = *Volt>>7;
  110. return 0;
  111. }
  112. /*
  113. * * * * * * ** sensor name: INA220
  114. * * * * * * ** brief: Amps
  115. * * * * * * **/
  116. int INA220_3V3_Amps_init(hal_t *phal)
  117. {
  118. printf("init INA220 3V3 Amps!\n");
  119. return 0;
  120. }
  121. int INA220_3V3_Amps_write(hal_t *phal)
  122. {
  123. printf("write INA220 3V3 Amps!\n");
  124. return 0;
  125. }
  126. int INA220_3V3_Amps_read(hal_t *phal)
  127. {
  128. uint8_t pData[2]={0x00,0x00};
  129. uint16_t *Amps;
  130. uint8_t temp;
  131. I2C_DEV_T i2c_dev;
  132. i2c_dev.bus = I2C3;
  133. I2C_Master_Receiver(&i2c_dev,0x88,pData,0x04,0x02);
  134. temp=pData[1];
  135. pData[1]=pData[0];
  136. pData[0]=temp;
  137. Amps=pData;
  138. // printf("read INA220 3V3 Volts!\n");
  139. if((*Amps>>1)>255)
  140. *phal->pbyte = 255;
  141. else
  142. *phal->pbyte = *Amps>>1;
  143. return 0;
  144. }
  145. /*
  146. * * * * * ** sensor name: INA220
  147. * * * * * ** brief: Amps
  148. * * * * * **/
  149. int INA220_5V0_Amps_init(hal_t *phal)
  150. {
  151. printf("init INA220 5V0 Amps!\n");
  152. return 0;
  153. }
  154. int INA220_5V0_Amps_write(hal_t *phal)
  155. {
  156. printf("write INA220 5V0 Amps!\n");
  157. return 0;
  158. }
  159. int INA220_5V0_Amps_read(hal_t *phal)
  160. {
  161. uint8_t pData[2]={0x00,0x00};
  162. uint16_t *Amps;
  163. uint8_t temp;
  164. I2C_DEV_T i2c_dev;
  165. i2c_dev.bus = I2C3;
  166. I2C_Master_Receiver(&i2c_dev,0x82,pData,0x04,0x02);
  167. temp=pData[1];
  168. pData[1]=pData[0];
  169. pData[0]=temp;
  170. Amps=pData;
  171. // printf("read INA220 5V0 Volts!\n");
  172. if((*Amps>>1)>255)
  173. *phal->pbyte = 255;
  174. else
  175. *phal->pbyte = *Amps>>1;
  176. return 0;
  177. }
  178. /*
  179. * * * * ** sensor name: INA220
  180. * * * * ** brief: Amps
  181. * * * * **/
  182. int INA220_12V0_Amps_init(hal_t *phal)
  183. {
  184. printf("init INA220 12V0 Amps!\n");
  185. return 0;
  186. }
  187. int INA220_12V0_Amps_write(hal_t *phal)
  188. {
  189. printf("write INA220 12V0 Amps!\n");
  190. return 0;
  191. }
  192. int INA220_12V0_Amps_read(hal_t *phal)
  193. {
  194. uint8_t pData[2]={0x00,0x00};
  195. uint16_t *Amps;
  196. uint8_t temp;
  197. I2C_DEV_T i2c_dev;
  198. i2c_dev.bus = I2C3;
  199. I2C_Master_Receiver(&i2c_dev,0x80,pData,0x04,0x02);
  200. temp=pData[1];
  201. pData[1]=pData[0];
  202. pData[0]=temp;
  203. Amps=pData;
  204. // printf("read INA220 12V0 Volts!\n");
  205. if((*Amps>>1)>255)
  206. *phal->pbyte = 255;
  207. else
  208. *phal->pbyte = *Amps>>1;
  209. return 0;
  210. }