luat_adc_air101.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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, val);
  42. break;
  43. case 1:
  44. voltage = adc_get_inputVolt(ch, val);
  45. break;
  46. case 2:
  47. voltage = adc_get_inputVolt(ch, val);
  48. break;
  49. case 3:
  50. voltage = adc_get_inputVolt(ch, val);
  51. break;
  52. case 10:
  53. voltage = adc_temp();
  54. *val = voltage;
  55. return 0;
  56. case 11:
  57. voltage = adc_get_interVolt();
  58. *val = voltage;
  59. return 0;
  60. default:
  61. return 1;
  62. }
  63. *val2 = voltage;
  64. if (*val < 46134) {
  65. *val2 = 0;
  66. }
  67. else if (*val > 123405) {
  68. *val2 = 2300;
  69. }
  70. // else {
  71. // *val2 = (int)((double)(*val - 46134) / (double)(32.196));
  72. // }
  73. return 0;
  74. }
  75. int luat_adc_close(int ch)
  76. {
  77. switch (ch)
  78. {
  79. case 0:
  80. tls_io_cfg_set(WM_IO_PA_01, WM_IO_OPTION5);
  81. break;
  82. case 1:
  83. tls_io_cfg_set(WM_IO_PA_04, WM_IO_OPTION5);
  84. break;
  85. // #ifdef AIR103
  86. case 2:
  87. tls_io_cfg_set(WM_IO_PA_03, WM_IO_OPTION5);
  88. break;
  89. case 3:
  90. tls_io_cfg_set(WM_IO_PA_02, WM_IO_OPTION5);
  91. break;
  92. // #endif
  93. case 10:
  94. break; // 温度
  95. case 11:
  96. break; // 内部电压
  97. default:
  98. return 1;
  99. }
  100. return 0;
  101. }