stereo_mix: adc groups

This commit is contained in:
Jan-Henrik 2020-04-12 09:13:52 +02:00
parent 25160b3c54
commit 765de98f39
3 changed files with 15 additions and 28 deletions

View file

@ -73,7 +73,6 @@ void Adc::Init()
sConfig.Channel = ADC_CHANNEL_8; sConfig.Channel = ADC_CHANNEL_8;
HAL_ADC_ConfigChannel(&adc, &sConfig); HAL_ADC_ConfigChannel(&adc, &sConfig);
dma.Init.Direction = DMA_PERIPH_TO_MEMORY; dma.Init.Direction = DMA_PERIPH_TO_MEMORY;
dma.Init.PeriphInc = DMA_PINC_DISABLE; dma.Init.PeriphInc = DMA_PINC_DISABLE;
dma.Init.MemInc = DMA_MINC_ENABLE; dma.Init.MemInc = DMA_MINC_ENABLE;
@ -88,13 +87,7 @@ void Adc::Init()
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
/*NVIC_InitTypeDef NVIC_InitStructure; HAL_ADC_Start_DMA(&adc, (uint32_t*)values_, ADC_CHANNEL_LAST);
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);
} }
void Adc::DeInit() void Adc::DeInit()
@ -104,16 +97,16 @@ void Adc::DeInit()
void Adc::OnDMATransferComplete() 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_; uint8_t address = this->mux_index_;
// Write the mux address. // Write the mux address.
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, static_cast<GPIO_PinState>(address & 1)); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, static_cast<GPIO_PinState>(address & 1));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, static_cast<GPIO_PinState>(address & 2)); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, static_cast<GPIO_PinState>(address & 2));
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, static_cast<GPIO_PinState>(address & 4)); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, static_cast<GPIO_PinState>(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 } // namespace rings

View file

@ -16,22 +16,16 @@ enum AdcChannel {
ADC_CHANNEL_CV_PAN_3, ADC_CHANNEL_CV_PAN_3,
ADC_CHANNEL_CV_PAN_4, ADC_CHANNEL_CV_PAN_4,
ADC_CHANNEL_MUX, 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_LAST,
ADC_CHANNEL_FIRST_DIRECT = ADC_CHANNEL_CV_PAN_4, ADC_CHANNEL_COUNT = (ADC_CHANNEL_LAST * 2) - 1
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, enum AdcGroup {
ADC_CHANNEL_NUM_DIRECT = ADC_CHANNEL_MUX + 1, ADC_GROUP_CV = 0,
ADC_CHANNEL_NUM_MUXED = ADC_CHANNEL_LAST - ADC_CHANNEL_FIRST_MUXED, ADC_GROUP_POT = ADC_CHANNEL_LAST,
ADC_GROUP_COUNT
}; };
class Adc { class Adc {
@ -55,7 +49,7 @@ class Adc {
ADC_HandleTypeDef adc; ADC_HandleTypeDef adc;
private: private:
uint16_t values_[ADC_CHANNEL_LAST]; uint16_t values_[ADC_CHANNEL_COUNT];
uint8_t mux_index_; uint8_t mux_index_;
DISALLOW_COPY_AND_ASSIGN(Adc); DISALLOW_COPY_AND_ASSIGN(Adc);

View file

@ -115,8 +115,8 @@ int main(void)
uint32_t value_l; uint32_t value_l;
uint32_t value_r; 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 pan_pot = adc.value(ADC_GROUP_POT + 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 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); 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); uint16_t vol_cv = adc.value(ADC_CHANNEL_CV_VOL_1 + i) >> (16 - 12);
int32_t pan = pan_pot + pan_cv; int32_t pan = pan_pot + pan_cv;