работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) для ми
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
И только RabidRabbit быстро его раскусил, честь ему и уважуха!
[/quote] подскажите пожалуйста, сколько времени у Вас занимает запись программы в память микроконтроллера.
[/quote] подскажите пожалуйста, сколько времени у Вас занимает запись программы в память микроконтроллера.
-
RabidRabbit
- Сообщения: 254
- Зарегистрирован: 10 июн 2025, 12:11
- Предприятие: HomeWork
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
Выкладываю вырезки из моего рабочего main.c
Вырезаны фрагменты по которым может быть понятно, как это работает.
Здесь АЦП работает в циклическом режиме с задержками между запусками.
Мне не удалось получить скорость выборки больше 500кГц.
Причина, я думаю, в затратах на обработку прерываний и перезапись в БОЛЬШОЙ буфер.
Вырезаны фрагменты по которым может быть понятно, как это работает.
Здесь АЦП работает в циклическом режиме с задержками между запусками.
Мне не удалось получить скорость выборки больше 500кГц.
Причина, я думаю, в затратах на обработку прерываний и перезапись в БОЛЬШОЙ буфер.
С уважением, Виктор.
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
в последнем примере работы ацп была демонстрация цепочки дескрипторов. они переключаются на автомате, передавая эстафету друг другу. и прерывание одно, - от дма по заполнению буфера полностью.durimar_13 писал(а): ↑21 авг 2026, 17:51 Выкладываю вырезки из моего рабочего main.c
Вырезаны фрагменты по которым может быть понятно, как это работает.
Здесь АЦП работает в циклическом режиме с задержками между запусками.
Мне не удалось получить скорость выборки больше 500кГц.
Причина, я думаю, в затратах на обработку прерываний и перезапись в БОЛЬШОЙ буфер.
Вырезки из main.c.zip
-
RabidRabbit
- Сообщения: 254
- Зарегистрирован: 10 июн 2025, 12:11
- Предприятие: HomeWork
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
Поддержу про цепочки. С ними хоть два, хоть три, хоть N буферов, только не очень больших
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
Вот, вот.Но DMA буфер не больше, чем размер FIFO. В случае АЦП - 32 полуслова (по 16 бит). И получается, что не получается, когда надо 10000 быстрых транзакций.RabidRabbit писал(а): ↑21 авг 2026, 19:03 Поддержу про цепочки. С ними хоть два, хоть три, хоть N буферов, только не очень больших![]()
Да что же это. Неужели нет решения?
Мне очень жаль, что я плохой программист....
С уважением, Виктор.
-
RabidRabbit
- Сообщения: 254
- Зарегистрирован: 10 июн 2025, 12:11
- Предприятие: HomeWork
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
32 отсчёта (64 байта) на один дескриптор. Выстроите в цепочку 100 дескрипторов - получите возможность заполнить буфер в 3200 отсчётов "на одно прерывание".
Т.е. вот такое "кольцо" дескрипторов D1[0]->D1[1]->D1[2]->...->D1[99]->D2[0]->D2[1]->...->D2[99]->D1[0] обеспечит двойной буфер на 3200 отсчётов, где дескрипторы D1 и D2 относятся соответственно к первому и второму буферу, а у дескрипторов D1[99] и D2[99] взведены флаги генерации прерывания.
Вам про примерно такую схему, кстати, коллега с ником "Мерседес" и рассказывал.
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
Мне стоит опять признаться, что программист я никакой.RabidRabbit писал(а): ↑21 авг 2026, 22:50 Т.е. вот такое "кольцо" дескрипторов D1[0]->D1[1]->D1[2]->...->D1[99]->D2[0]->D2[1]->...->D2[99]->D1[0] обеспечит двойной буфер на 3200 отсчётов, где дескрипторы D1 и D2 относятся соответственно к первому и второму буферу, а у дескрипторов D1[99] и D2[99] взведены флаги генерации прерывания.
Вам про примерно такую схему, кстати, коллега с ником "Мерседес" и рассказывал.
Спасибо за консультации. Про то, как построить цепочки дескрипторов я от Вас понял, в РП совсем не внятно об этом написано.
А если нужно 10 000 отсчетов за один одно прерывание, или 50 000, это сколько же мне надо дескрипторов описывать? А памяти хватит?
Хотелось бы еще иметь возможность программно изменять объемы выборок. Это что же, мне нужно будет делать количество дескрипторов по максимуму? Ограничения на это количество я в РП не помню.
Ладно, это так, "старческое бурчание".
Учиться надо!
С уважением, Виктор.
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
вот это, пояснение от ИИ работы цепочки дескрипторов.
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
Спасибо, посмотрю.
Моя Алиса Яндексовна тоже неплохие перлы выдала по этому вопросу.
С уважением, Виктор.
