Трансиверы, передатчики, РПУ > Software Defined Radio (SDR)
DAC (ЦАП) stm32f429 Лаба
ra0ahc:
Провел несколько дней за экспериментом : Вывод звука через цап.
Так как больше у меня ничего нет, делаю фактически на голой плате.
Вот такой код написал по выводу то одного буфера то другого. Заполнение с сохранением фазы. Просто Синус пытаюсь вывести на ЦАП. Все работает в бесконечном цикле через DMA без участия процессора. Настроил DMA , ЦАП, таймер на 24кГц сэмплирование. Короче работает, но есть проблема. Она на фотке. Это момент переключения буфера.
void DMA1_Stream6_IRQHandler(void)
{
uint8_t old = dacTxBankNawNumber;
dacTxBankNawNumber= (uint8_t)(~dacTxBankNawNumber & 1);
HAL_DAC_Stop_DMA(&hdac,DAC_CHANNEL_2);
if (HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_2, (uint32_t *) &pOutDac[dacTxBankNawNumber][0], FRAME_SIZE,
DAC_ALIGN_12B_R) != HAL_OK) { Error_Handler(); }
float32_t delta = pp * 1500 / bit;
for (int i = 0; i < FRAME_SIZE; i++) {
pOutDac[old][i ] = (uint32_t) (100 + arm_sin_f32(phase) * 100);
phase += delta;
if (phase > pp) phase -= pp;
}
HAL_DMA_IRQHandler(&hdma_dac2);
}
ra0ahc:
Причем фаза действительно совпадает. Но вот этот скачок я не могу победить.
ra0ahc:
Прогресс !
ra0ahc:
Нашел причину. Достал Геннадия. Как всегда не документированные переменные в CubeMX
Теперь так
ra0ahc:
Из-за использования дешевой звуковухи , у нее только микрофонный вход, а у меня выход 3 вольта с цап (при 12БИТ). Так что пришлось снижать искусственно битность выхода (типа регулировка громкости)
Навигация
Перейти к полной версии