mirror of
https://github.com/jhbruhn/eurorack.git
synced 2025-03-15 02:55:49 +00:00
Implement timer for output writing, implement CV input
This commit is contained in:
parent
d86b472820
commit
90fb81270c
7 changed files with 38 additions and 9 deletions
|
@ -9,12 +9,14 @@ using namespace stereo_mix;
|
|||
const uint8_t kNumChannels = 4;
|
||||
|
||||
static const uint16_t kGpioPins[] = { GPIO_PIN_7, GPIO_PIN_15, GPIO_PIN_13, GPIO_PIN_14 };
|
||||
static GPIO_TypeDef* kGpioPorts[] = { GPIOB, GPIOB, GPIOF, GPIOF };
|
||||
static GPIO_TypeDef* kGpioPorts[] = { GPIOB, GPIOB, GPIOC, GPIOC };
|
||||
|
||||
class Leds {
|
||||
public:
|
||||
Leds()
|
||||
{
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||
GPIO_InitTypeDef gpioInit;
|
||||
for (size_t i = 0; i < kNumChannels; i++) {
|
||||
gpioInit.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
|
|
|
@ -4,6 +4,7 @@ ADC_HandleTypeDef hadc1 = { .Instance = ADC1 };
|
|||
DMA_HandleTypeDef hdma1_channel1 = { .Instance = DMA1_Channel1 };
|
||||
SPI_HandleTypeDef hspi1 = { .Instance = SPI1 };
|
||||
TIM_HandleTypeDef htim3 = { .Instance = TIM3 };
|
||||
TIM_HandleTypeDef htim6 = { .Instance = TIM6 };
|
||||
|
||||
void DMA1_Channel1_IRQHandler(void)
|
||||
{
|
||||
|
@ -17,3 +18,7 @@ void TIM3_IRQHandler()
|
|||
{
|
||||
HAL_TIM_IRQHandler(&htim3);
|
||||
}
|
||||
void TIM6_IRQHandler()
|
||||
{
|
||||
HAL_TIM_IRQHandler(&htim6);
|
||||
}
|
||||
|
|
|
@ -6,4 +6,5 @@ extern ADC_HandleTypeDef hadc1;
|
|||
extern DMA_HandleTypeDef hdma1_channel1;
|
||||
extern SPI_HandleTypeDef hspi1;
|
||||
extern TIM_HandleTypeDef htim3;
|
||||
extern TIM_HandleTypeDef htim6;
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ FAMILY = f0xx
|
|||
# USB = enabled
|
||||
#APPLICATION = true
|
||||
#BOOTLOADER = midi2cv_bootloader
|
||||
|
||||
OPTIMIZE = TRUE
|
||||
# Preferred upload command
|
||||
UPLOAD_COMMAND = upload_jtag
|
||||
|
||||
|
|
|
@ -22,9 +22,13 @@ class Processor {
|
|||
mute = m;
|
||||
}
|
||||
|
||||
uint16_t previous_volume() {
|
||||
return previous_vol;
|
||||
}
|
||||
|
||||
private:
|
||||
uint16_t volume_offset = 0;
|
||||
int16_t pan_offset = 0;
|
||||
int32_t previous_vol;
|
||||
uint16_t previous_vol;
|
||||
bool mute = false;
|
||||
};
|
||||
|
|
|
@ -25,6 +25,8 @@ UI ui(&adc, &switches, &leds, processors);
|
|||
|
||||
bool mute[4];
|
||||
|
||||
void WriteOutputs(void);
|
||||
|
||||
// Default interrupt handlers.
|
||||
extern "C" {
|
||||
void NMI_Handler() { }
|
||||
|
@ -106,10 +108,13 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
|
|||
|
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim)
|
||||
{
|
||||
if (htim != &htim3) {
|
||||
if (htim == &htim3) {
|
||||
leds.Write();
|
||||
return;
|
||||
}
|
||||
leds.Write();
|
||||
if (htim == &htim6) {
|
||||
WriteOutputs();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -119,8 +124,10 @@ void Init(void)
|
|||
__HAL_RCC_PWR_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOF_CLK_ENABLE();
|
||||
__HAL_RCC_TIM3_CLK_ENABLE();
|
||||
__HAL_RCC_TIM6_CLK_ENABLE();
|
||||
__HAL_RCC_SPI1_CLK_ENABLE();
|
||||
|
||||
HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
|
||||
|
@ -133,6 +140,16 @@ void Init(void)
|
|||
HAL_TIM_Base_Init(&htim3);
|
||||
HAL_TIM_Base_Start_IT(&htim3);
|
||||
|
||||
HAL_NVIC_SetPriority(TIM6_IRQn, 1, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM6_IRQn);
|
||||
htim6.Init.Prescaler = 192;
|
||||
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim6.Init.Period = 512;
|
||||
htim6.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim6.Init.RepetitionCounter = 0;
|
||||
HAL_TIM_Base_Init(&htim6);
|
||||
HAL_TIM_Base_Start_IT(&htim6);
|
||||
|
||||
system_clock.Init();
|
||||
}
|
||||
|
||||
|
@ -141,8 +158,8 @@ void WriteOutputs(void)
|
|||
for (int i = 0; i < kNumChannels; i++) {
|
||||
uint16_t out[2];
|
||||
int16_t cvs[2];
|
||||
cvs[0] = 0;
|
||||
cvs[1] = 0;
|
||||
cvs[0] = 65535 - adc.cv_value(AdcChannel(ADC_CHANNEL_PAN_1 + i));
|
||||
cvs[1] = adc.cv_value(AdcChannel(ADC_CHANNEL_VOL_1 + i));
|
||||
processors[i].Process(cvs, out);
|
||||
dacs[i].Write16(0, out[0]);
|
||||
dacs[i + 4].Write16(0, out[0]);
|
||||
|
@ -162,6 +179,6 @@ int main(void)
|
|||
|
||||
ui.DoEvents();
|
||||
|
||||
WriteOutputs();
|
||||
// WriteOutputs();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -113,7 +113,7 @@ void UI::TaskDrawLeds()
|
|||
leds->set_blinking(i, pan_pots[i] - 32767 < 0);
|
||||
} else {
|
||||
// show volume if not muted
|
||||
leds->set_intensity(i, mute[i] ? 0 : volume_pots[i] >> 8);
|
||||
leds->set_intensity(i, processors[i].previous_volume() >> (4));
|
||||
leds->set_blinking(i, false);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue