Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AXI или TCM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
quandr
Добрый день!
Объясните, по возможности, какой вариант интерфейса AXI или TCM в STM32F7 дает большую предсказуемость по времени выполнения кода?
Спасибо.
scifi
А почему вы интересуетесь? Просто праздный интерес или какую-то задачу надо решить?
Пардон, что отвечаю вопросом на вопрос.
quandr
Цитата(scifi @ Apr 11 2016, 13:24) *
А почему вы интересуетесь? Просто праздный интерес или какую-то задачу надо решить?
Пардон, что отвечаю вопросом на вопрос.

В коде есть циклы, которые должны выполняться за определенное кол-во тактов, как в STM32F4. Просто у F4 силенок не хватает на пару фильтров. Пришлось на переходить на F7, но там хитрые конвейеры команд и т. д.
scifi
Цитата(quandr @ Apr 11 2016, 12:32) *
В коде есть циклы, которые должны выполняться за определенное кол-во тактов, как в STM32F4. Просто у F4 силенок не хватает на пару фильтров. Пришлось на переходить на F7, но там хитрые конвейеры команд и т. д.

Вот именно. Хитрые конвейеры и т.д. Весьма вероятно, что там просто невозможно гарантировать повторяемость числа тактов. Но если очень надо, попробуйте, конечно. Я бы начал с TCM и исполнял бы код из ITCM RAM.
А что, к таймерам привязаться не получается?
quandr
Цитата(scifi @ Apr 11 2016, 13:50) *
Вот именно. Хитрые конвейеры и т.д. Весьма вероятно, что там просто невозможно гарантировать повторяемость числа тактов. Но если очень надо, попробуйте, конечно. Я бы начал с TCM и исполнял бы код из ITCM RAM.
А что, к таймерам привязаться не получается?

Есть один цикл, который должен выполняться за только за 35 тактов, так что с таймером не успеет. Как это гарантировать, вот это вопрос. А можно ли в ходе исполнения программы переключаться с ITCM RAM на что-то другое?
scifi
Цитата(quandr @ Apr 11 2016, 13:09) *
Есть один цикл, который должен выполняться за только за 35 тактов, так что с таймером не успеет.

А что произойдёт, если будет выполняться быстрее, чем за 35 тактов?
У меня подозрение, что вы не с того конца к задаче подходите.

Цитата(quandr @ Apr 11 2016, 13:09) *
А можно ли в ходе исполнения программы переключаться с ITCM RAM на что-то другое?

Нужная шина выбирается автоматически в зависимости от адреса, по которому идёт доступ к памяти. Делаете переход на адрес в флеш, к примеру, и программа будет выполняться оттуда.
quandr
Цитата(scifi @ Apr 11 2016, 14:31) *
А что произойдёт, если будет выполняться быстрее, чем за 35 тактов?
У меня подозрение, что вы не с того конца к задаче подходите.


Нужная шина выбирается автоматически в зависимости от адреса, по которому идёт доступ к памяти. Делаете переход на адрес в флеш, к примеру, и программа будет выполняться оттуда.

На внешний ЦАП с параллельным интерфейсом передается массив за 500 мкс. В это же время выполняется оцифровка данных и их загрузка с АЦП в буферную память. ЦАП выполняет роль регулировки усиления. Потом данные из видеопамяти загружаются в RAM МК и обрабатываются. Длина массива данных из АЦП 20000 х 16 бит. F4 справляется с этой задачей и успевает обработать одним фильтром, на остальное не вполне хватает времени. Вообщем желательно именно фрагмент с ЦАПом выполнить четко.
scifi
Цитата(quandr @ Apr 11 2016, 13:51) *
На внешний ЦАП с параллельным интерфейсом передается массив за 500 мкс. В это же время выполняется оцифровка данных и их загрузка с АЦП в буферную память. ЦАП выполняет роль регулировки усиления. Потом данные из видеопамяти загружаются в RAM МК и обрабатываются. Длина массива данных из АЦП 20000 х 16 бит. F4 справляется с этой задачей и успевает обработать одним фильтром, на остальное не вполне хватает времени. Вообщем желательно именно фрагмент с ЦАПом выполнить четко.

Скажем так, не все детали ясны из этого объяснения. Но я почти уверен, что есть возможность сделать так, что никакие "циклы за 35 тактов ровно" не понадобятся.
quandr
Цитата(scifi @ Apr 11 2016, 15:01) *
Скажем так, не все детали ясны из этого объяснения. Но я почти уверен, что есть возможность сделать так, что никакие "циклы за 35 тактов ровно" не понадобятся.

35 циклов подразумевает 175 нс при частоте 200 МГц. Т.е. каждые 175 нс необходимо выдавать на цап новые данные.
scifi
Цитата(quandr @ Apr 11 2016, 14:13) *
35 циклов подразумевает 175 нс при частоте 200 МГц. Т.е. каждые 175 нс необходимо выдавать на цап новые данные.

Я, может быть, чего-то не понимаю. Но обычно это делается так: цифровой фильтр молотит числа и складывает в буфер на опережение, а из буфера это выдаётся на ЦАП при помощи, скажем, EMC (external memory interface).
quandr
Цитата(scifi @ Apr 11 2016, 15:26) *
Я, может быть, чего-то не понимаю. Но обычно это делается так: цифровой фильтр молотит числа и складывает в буфер на опережение, а из буфера это выдаётся на ЦАП при помощи, скажем, EMC (external memory interface).

Фильтры обрабатывают данные из буферной памяти, в которую за эти 500 мкс набросал АЦП. А ЦАП в эти 500 мкс выдает заранее подготовленные данные на регулировку усиления. АЦП оцифровывает сигнал с частотой 40 МГц, а МК загружает в ЦАП в это же время выдает данные гораздо медленнее, но с четко фиксированным интервалом. Задача состоит в том, чтобы этот интервал не "гулял".
scifi
Цитата(quandr @ Apr 11 2016, 14:36) *
МК загружает в ЦАП в это же время выдает данные гораздо медленнее, но с четко фиксированным интервалом. Задача состоит в том, чтобы этот интервал не "гулял".

Вариант 1. Повесить ЦАП на EMC и постараться настроить времянку так, чтобы всё соответствовало.
Вариант 2. Выдавать параллельные данные на ЦАП через DMA и GPIO по таймеру, а сигнал загрузки в ЦАП (WR или как его) формировать тем же таймером.
quandr
Цитата(scifi @ Apr 11 2016, 15:53) *
Вариант 1. Повесить ЦАП на EMC и постараться настроить времянку так, чтобы всё соответствовало.
Вариант 2. Выдавать параллельные данные на ЦАП через DMA и GPIO по таймеру, а сигнал загрузки в ЦАП (WR или как его) формировать тем же таймером.

Таймеру для прерывания нужно 24 такта туда и обратно. Или прерывание для DMA необязательно, хватит и переполнения?
scifi
Цитата(quandr @ Apr 11 2016, 14:56) *
Таймеру для прерывания нужно 24 такта туда и обратно. Или прерывание для DMA необязательно, хватит и переполнения?

Интересно, зачем нужен был бы DMA, если бы он тормозил так же, как и прерывания? Процессор может вообще спать, пока DMA работает.
У DMA есть некоторая задержка срабатывания. Именно поэтому я и написал, что сигнал WR должен вырабатываться отдельно. Его можно формировать тогда, когда DMA уже гарантированно сработал.
quandr
Цитата(scifi @ Apr 11 2016, 16:07) *
Интересно, зачем нужен был бы DMA, если бы он тормозил так же, как и прерывания? Процессор может вообще спать, пока DMA работает.
У DMA есть некоторая задержка срабатывания. Именно поэтому я и написал, что сигнал WR должен вырабатываться отдельно. Его можно формировать тогда, когда DMA уже гарантированно сработал.

Насчет WR понятно, а таймер на autoreload ставить?
scifi
Цитата(quandr @ Apr 11 2016, 15:14) *
Насчет WR понятно, а таймер на autoreload ставить?

Это уж смотрите сами. Совсем не хочется рассказывать, как работает таймер. Да, таймеры в STM32 несколько заморочные и с непривычки могут сбивать с толку. Почитайте, что ли, что нибудь. Да хотя бы мануал.

Кстати, я именно это уже делал. Но там была задача как раз разогнаться побыстрее. Вот, посмотрите.
quandr
Цитата(scifi @ Apr 11 2016, 15:21) *
Это уж смотрите сами. Совсем не хочется рассказывать, как работает таймер. Да, таймеры в STM32 несколько заморочные и с непривычки могут сбивать с толку. Почитайте, что ли, что нибудь. Да хотя бы мануал.

Кстати, я именно это уже делал. Но там была задача как раз разогнаться побыстрее. Вот, посмотрите.

Спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.