luat_adc_air101.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include "luat_adc.h"
  2. #include "luat_base.h"
  3. #include "wm_adc.h"
  4. #include "wm_gpio_afsel.h"
  5. #include "wm_include.h"
  6. // 0,1 标准ADC
  7. // 3 - 内部温度传感
  8. int luat_adc_open(int ch, void *args)
  9. {
  10. switch (ch)
  11. {
  12. case 0:
  13. wm_adc_config(ch);
  14. break;
  15. case 1:
  16. wm_adc_config(ch);
  17. break;
  18. // #ifdef AIR103
  19. case 2:
  20. wm_adc_config(ch);
  21. break;
  22. case 3:
  23. wm_adc_config(ch);
  24. break;
  25. // #endif
  26. case 10:
  27. return 0; // 温度传感器
  28. case 11:
  29. return 0; // VBAT电压
  30. default:
  31. return 1;
  32. }
  33. return 0;
  34. }
  35. int luat_adc_read(int ch, int *val, int *val2)
  36. {
  37. int voltage = 0;
  38. switch (ch)
  39. {
  40. case 0:
  41. voltage = adc_get_inputVolt(ch);
  42. break;
  43. case 1:
  44. voltage = adc_get_inputVolt(ch);
  45. break;
  46. case 2:
  47. voltage = adc_get_inputVolt(ch);
  48. break;
  49. case 3:
  50. voltage = adc_get_inputVolt(ch);
  51. break;
  52. case 10:
  53. voltage = adc_temp();
  54. return 0;
  55. case 11:
  56. voltage = adc_get_interVolt();
  57. return 0;
  58. default:
  59. return 1;
  60. }
  61. *val = voltage;
  62. *val2 = voltage;
  63. if (*val < 46134) {
  64. *val2 = 0;
  65. }
  66. else if (*val > 123405) {
  67. *val2 = 2300;
  68. }
  69. else {
  70. *val2 = (int)((double)(*val - 46134) / (double)(32.196));
  71. }
  72. return 0;
  73. }
  74. int luat_adc_close(int ch)
  75. {
  76. switch (ch)
  77. {
  78. case 0:
  79. tls_io_cfg_set(WM_IO_PA_01, WM_IO_OPTION5);
  80. break;
  81. case 1:
  82. tls_io_cfg_set(WM_IO_PA_04, WM_IO_OPTION5);
  83. break;
  84. // #ifdef AIR103
  85. case 2:
  86. tls_io_cfg_set(WM_IO_PA_03, WM_IO_OPTION5);
  87. break;
  88. case 3:
  89. tls_io_cfg_set(WM_IO_PA_02, WM_IO_OPTION5);
  90. break;
  91. // #endif
  92. case 10:
  93. break; // 温度
  94. case 11:
  95. break; // 内部电压
  96. default:
  97. return 1;
  98. }
  99. return 0;
  100. }