adc.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "adc.h"
  2. #include "ti/driverlib/dl_adc12.h"
  3. #include "ti_msp_dl_config.h"
  4. #include "src/battery_data/battery.h"
  5. // A0 PA27
  6. // A1 PA26
  7. // A2 PA25
  8. // A3 PA24
  9. // A4 PA16
  10. const uint8_t measurement_channels[4] = {
  11. DL_ADC12_INPUT_CHAN_0,
  12. DL_ADC12_INPUT_CHAN_1,
  13. DL_ADC12_INPUT_CHAN_2,
  14. DL_ADC12_INPUT_CHAN_3
  15. };
  16. uint8_t ch=0;
  17. uint16_t measurement_results[4] = {
  18. 0,
  19. 0,
  20. 0,
  21. 0
  22. };
  23. void ADC12_0_INST_IRQHandler(void)
  24. {
  25. uint32_t irqval = DL_ADC12_getPendingInterrupt(ADC12_0_INST);
  26. printf("irqval: %d", irqval);
  27. switch (irqval) {
  28. case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
  29. measurement_results[ch] = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0)*3300/4096;
  30. if (ch == 1) {
  31. slot.measurement.voltage = (measurement_results[1]-measurement_results[0])*(56+100)/56;
  32. }
  33. if (++ch == 4) {
  34. ch = 0;
  35. }
  36. DL_ADC12_stopConversion(ADC12_0_INST);
  37. DL_ADC12_configConversionMem(ADC12_0_INST,
  38. ADC12_0_ADCMEM_0,
  39. measurement_channels[ch],
  40. DL_ADC12_REFERENCE_VOLTAGE_VDDA,
  41. DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0,
  42. DL_ADC12_AVERAGING_MODE_ENABLED,
  43. DL_ADC12_BURN_OUT_SOURCE_DISABLED,
  44. DL_ADC12_TRIGGER_MODE_AUTO_NEXT,
  45. DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
  46. DL_ADC12_enableConversions(ADC12_0_INST);
  47. DL_ADC12_startConversion(ADC12_0_INST);
  48. break;
  49. default:
  50. break;
  51. }
  52. }