diff options
Diffstat (limited to 'source/adc.hpp')
-rw-r--r-- | source/adc.hpp | 92 |
1 files changed, 5 insertions, 87 deletions
diff --git a/source/adc.hpp b/source/adc.hpp index 9989883..4c3836e 100644 --- a/source/adc.hpp +++ b/source/adc.hpp @@ -1,6 +1,6 @@ /** * @file adc.hpp - * @brief Wrapper for ChibiOS's ADCDriver. + * @brief Manages signal reading through the ADC. * * Copyright (C) 2020 Clyne Sullivan * @@ -14,14 +14,7 @@ #include "hal.h" -class ADCd; - -struct ADCdConfig : public ADCConfig -{ - ADCd *adcdinst; -}; - -enum class ADCdRate : unsigned int { +enum class ADCRate { R2P5, R6P5, R12P5, @@ -32,84 +25,9 @@ enum class ADCdRate : unsigned int { R640P5 }; -class ADCd -{ -public: - constexpr static const unsigned int CLOCK_RATE = 40000000; - constexpr static unsigned int SAMPLES_PER_SECOND(ADCdRate rate) { - unsigned int sps = 0; - switch (rate) { - case ADCdRate::R2P5: - sps = 15; - break; - case ADCdRate::R6P5: - sps = 19; - break; - case ADCdRate::R12P5: - sps = 25; - break; - case ADCdRate::R24P5: - sps = 37; - break; - case ADCdRate::R47P5: - sps = 60; - break; - case ADCdRate::R92P5: - sps = 105; - break; - case ADCdRate::R247P5: - sps = 260; - break; - case ADCdRate::R640P5: - sps = 653; - break; - } - - return static_cast<unsigned int>(1.f / (sps / static_cast<float>(CLOCK_RATE))); - } - - constexpr explicit ADCd(ADCDriver& adcd, GPTDriver& gptd) : - m_adcd(&adcd), m_gptd(&gptd), m_adc_config{}, - m_adc_group_config(ADC_GROUP_CONFIG), - m_is_adc_finished(false) {} - - void start(); - adcsample_t *getSamples(adcsample_t *buffer, size_t count); - void setSampleRate(ADCdRate rate); - -private: - static const GPTConfig m_gpt_config; - - ADCDriver *m_adcd; - GPTDriver *m_gptd; - ADCdConfig m_adc_config; - ADCConversionGroup m_adc_group_config; - - bool m_is_adc_finished; - - void initPins(); - //void selectPins(bool a0, bool a1); - - static void adcEndCallback(ADCDriver *adcd); - - constexpr static const ADCConversionGroup ADC_GROUP_CONFIG = { - .circular = false, - .num_channels = 1, - .end_cb = ADCd::adcEndCallback, - .error_cb = nullptr, - .cfgr = ADC_CFGR_EXTEN_RISING | - ADC_CFGR_EXTSEL_SRC(12), /* TIM4_TRGO */ - .cfgr2 = 0, - .tr1 = ADC_TR(0, 4095), - .smpr = { - ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_247P5), 0 - }, - .sqr = { - ADC_SQR1_SQ1_N(ADC_CHANNEL_IN5), - 0, 0, 0 - } - }; -}; +void adc_init(); +adcsample_t *adc_read(adcsample_t *buffer, size_t count); +void adc_set_rate(ADCRate rate); #endif // STMDSP_ADC_HPP_ |