Для проекта софтверного FM-возбудителя со стереорежимом реализовал аппаратную передачу кода частоты в DDS. Скорость - 384к в секунду новых значений частоты в DDS.
Обвязка - 2 элемента или-не.
Генератор - 12288 кГц, от него тактируется I2S (PC7/PC9), таймер 4 (PB7) и таймер 3 через элемент или-не (PD2). На один вход или-не тактовая частота от генератора, на второй - I/O UPDATE с PB8. На таймер 3 также приходит I/O UPDATE с PB8 на PB4. Т.е. смысл такой: таймер 3 по началу I/O UPDATE сбрасывается, тянет в буфер dds_spi_buf новое значение из TIM2->CCR4 и на него тактовая не проходит все время, пока I/O UPDATE активен.
Таймер 4 в TIM2->CCR4 записывает через DMA выдернутое из большого кольцевого буфера значение FTW по сработке TIM4.CC1
Таймер 2 захватывает период SOF'ов в CCR1, а CCR4 используется как временный 32-х битный регистр, доступный для DMA1 (ни на что не влияет).
Таймер 4 также выдает "триггер" для ЦАПа (DAC2).
Проект для CooCox в аттаче.
Сообщение отредактировал romanetz - Jun 1 2015, 05:31