From 765de98f392827525c2aa28789bdfc864e92c43c Mon Sep 17 00:00:00 2001 From: Jan-Henrik Bruhn Date: Sun, 12 Apr 2020 09:13:52 +0200 Subject: [PATCH] stereo_mix: adc groups --- stereo_mix/drivers/adc.cc | 15 ++++----------- stereo_mix/drivers/adc.h | 24 +++++++++--------------- stereo_mix/stereo_mix.cc | 4 ++-- 3 files changed, 15 insertions(+), 28 deletions(-) diff --git a/stereo_mix/drivers/adc.cc b/stereo_mix/drivers/adc.cc index 2e7d1b7..6083522 100755 --- a/stereo_mix/drivers/adc.cc +++ b/stereo_mix/drivers/adc.cc @@ -73,7 +73,6 @@ void Adc::Init() sConfig.Channel = ADC_CHANNEL_8; HAL_ADC_ConfigChannel(&adc, &sConfig); - dma.Init.Direction = DMA_PERIPH_TO_MEMORY; dma.Init.PeriphInc = DMA_PINC_DISABLE; dma.Init.MemInc = DMA_MINC_ENABLE; @@ -88,13 +87,7 @@ void Adc::Init() HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); - /*NVIC_InitTypeDef NVIC_InitStructure; - NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn; - NVIC_InitStructure.NVIC_IRQChannelPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; - NVIC_Init(&NVIC_InitStructure); -*/ - HAL_ADC_Start_DMA(&adc, (uint32_t*)values_, ADC_CHANNEL_NUM_DIRECT); + HAL_ADC_Start_DMA(&adc, (uint32_t*)values_, ADC_CHANNEL_LAST); } void Adc::DeInit() @@ -104,16 +97,16 @@ void Adc::DeInit() void Adc::OnDMATransferComplete() { - this->values_[ADC_CHANNEL_FIRST_MUXED + this->mux_index_] = this->values_[ADC_CHANNEL_MUX]; + this->values_[ADC_GROUP_POT + this->mux_index_] = this->values_[ADC_CHANNEL_MUX]; - this->mux_index_ = (this->mux_index_ + 1) % ADC_CHANNEL_NUM_MUXED; + this->mux_index_ = (this->mux_index_ + 1) % (ADC_CHANNEL_LAST - 1); uint8_t address = this->mux_index_; // Write the mux address. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, static_cast(address & 1)); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, static_cast(address & 2)); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, static_cast(address & 4)); - HAL_ADC_Start_DMA(&adc, (uint32_t*)values_, ADC_CHANNEL_NUM_DIRECT); + HAL_ADC_Start_DMA(&adc, (uint32_t*)values_, ADC_CHANNEL_LAST); } } // namespace rings diff --git a/stereo_mix/drivers/adc.h b/stereo_mix/drivers/adc.h index adabb78..d46f2e0 100644 --- a/stereo_mix/drivers/adc.h +++ b/stereo_mix/drivers/adc.h @@ -16,22 +16,16 @@ enum AdcChannel { ADC_CHANNEL_CV_PAN_3, ADC_CHANNEL_CV_PAN_4, ADC_CHANNEL_MUX, - ADC_CHANNEL_POT_VOL_1, - ADC_CHANNEL_POT_VOL_2, - ADC_CHANNEL_POT_VOL_3, - ADC_CHANNEL_POT_VOL_4, - ADC_CHANNEL_POT_PAN_1, - ADC_CHANNEL_POT_PAN_2, - ADC_CHANNEL_POT_PAN_3, - ADC_CHANNEL_POT_PAN_4, ADC_CHANNEL_LAST, - ADC_CHANNEL_FIRST_DIRECT = ADC_CHANNEL_CV_PAN_4, - ADC_CHANNEL_LAST_DIRECT = ADC_CHANNEL_MUX, - ADC_CHANNEL_FIRST_MUXED = ADC_CHANNEL_POT_VOL_1, - ADC_CHANNEL_LAST_MUXED = ADC_CHANNEL_POT_PAN_4, - ADC_CHANNEL_NUM_DIRECT = ADC_CHANNEL_MUX + 1, - ADC_CHANNEL_NUM_MUXED = ADC_CHANNEL_LAST - ADC_CHANNEL_FIRST_MUXED, + ADC_CHANNEL_COUNT = (ADC_CHANNEL_LAST * 2) - 1 +}; + +enum AdcGroup { + ADC_GROUP_CV = 0, + ADC_GROUP_POT = ADC_CHANNEL_LAST, + + ADC_GROUP_COUNT }; class Adc { @@ -55,7 +49,7 @@ class Adc { ADC_HandleTypeDef adc; private: - uint16_t values_[ADC_CHANNEL_LAST]; + uint16_t values_[ADC_CHANNEL_COUNT]; uint8_t mux_index_; DISALLOW_COPY_AND_ASSIGN(Adc); diff --git a/stereo_mix/stereo_mix.cc b/stereo_mix/stereo_mix.cc index 7622e7f..e091a27 100644 --- a/stereo_mix/stereo_mix.cc +++ b/stereo_mix/stereo_mix.cc @@ -115,8 +115,8 @@ int main(void) uint32_t value_l; uint32_t value_r; - uint16_t pan_pot = adc.value(ADC_CHANNEL_POT_PAN_1 + i) >> (16 - 12); // adc is only 12 bit anyways - uint16_t vol_pot = adc.value(ADC_CHANNEL_POT_VOL_1 + i) >> (16 - 12); + uint16_t pan_pot = adc.value(ADC_GROUP_POT + i) >> (16 - 12); // adc is only 12 bit anyways + uint16_t vol_pot = adc.value(ADC_GROUP_CV + i) >> (16 - 12); int16_t pan_cv = (adc.value(ADC_CHANNEL_CV_PAN_1 + i) - 32768) >> (16 - 12); uint16_t vol_cv = adc.value(ADC_CHANNEL_CV_VOL_1 + i) >> (16 - 12); int32_t pan = pan_pot + pan_cv;