Цитата(AHTOXA @ Sep 12 2014, 22:34)

Насчёт расхода процессорного времени я бы не был так уверен. DMA тоже выполняется процессором. И, боюсь, что 2(или даже 3 - ещё возможно надо будет записывать TXDMAEN в SPI_CR2) дополнительных канала DMA могут нагрузить процессор больше,
Вот это открытие так открытие! Кто-ж знал-то???
Я-то по скудости ума всегда думал, что DMA - это такой периферийный узел, главное назначение которого - разгрузить CPU от тупого перетаскивания байтов по шине. А значит - это совершенно разные узлы.
Ан нет, он оказывается тоже какая-то часть CPU... левая задняя нога наверное..
Цитата(AHTOXA @ Sep 12 2014, 22:34)

чем ма-а-аленькая процедурка прерывания с тремя командами внутри.
Маленькая процедурка с сохранением контекста на входе и выходе в ISR, десятком команд, с выборкой их из памяти (заполнение как минимум 2-3 prefetch-буферов по 128/256бит каждый),
+несколько обращений по шине для чтения/записи данных, и опять заполнение prefetch-буферов командами после возврата из ISR.
И Вы утверждаете, что это быстрее чем
заранее настроенному каналу DMA активироваться и сделать 2-3 пересылки по шине для записи управляющих регистров таймера или другого канала DMA
для запуска пакета из 16 операций обмена с SPI???
Ню-ню....
Цитата(AHTOXA @ Sep 12 2014, 22:34)

Ещё одно соображение: каналов DMA не так уж много, и это может быть более ценный ресурс, чем процессорное время.
Это уже разработчику решать - что ему важнее: потратить несколько DMA-каналов или по всему коду программы вводить жёсткие ограничения на длительность запретов прерываний,
понижать приоритеты других ISR (в которых тоже время реакции может оказаться критичным).
Если речь идёт о периоде событий порядка 10 мкс (и это только период стартовых импульсов, а время реакции на них значит ещё в разы меньше), то требования к времени реакции на прерывание
(если делать по прерыванию) весьма жёсткие. При таких требованиях имхо надо всё делать максимально без-процессорно, всё свалив на DMA.
Для того он и нужен.
А более медленную периферию можно и программно обслужить, если каналов DMA не хватит.
PS: Кстати - ТС указал период стартовых событий (10мкс), но забыл указать более важное - максимальное время реакции на стартовый импульс. Оно будет зависеть ещё от частоты SPI и необходимого
запаса времени между последней SPI-пересылкой и новым импульсом.