|
AXI или TCM |
|
|
|
Apr 11 2016, 09:17
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 4-09-10
Пользователь №: 59 282

|
Добрый день! Объясните, по возможности, какой вариант интерфейса AXI или TCM в STM32F7 дает большую предсказуемость по времени выполнения кода? Спасибо.
|
|
|
|
|
Apr 11 2016, 09:32
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 4-09-10
Пользователь №: 59 282

|
Цитата(scifi @ Apr 11 2016, 13:24)  А почему вы интересуетесь? Просто праздный интерес или какую-то задачу надо решить? Пардон, что отвечаю вопросом на вопрос. В коде есть циклы, которые должны выполняться за определенное кол-во тактов, как в STM32F4. Просто у F4 силенок не хватает на пару фильтров. Пришлось на переходить на F7, но там хитрые конвейеры команд и т. д.
|
|
|
|
|
Apr 11 2016, 10:09
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 4-09-10
Пользователь №: 59 282

|
Цитата(scifi @ Apr 11 2016, 13:50)  Вот именно. Хитрые конвейеры и т.д. Весьма вероятно, что там просто невозможно гарантировать повторяемость числа тактов. Но если очень надо, попробуйте, конечно. Я бы начал с TCM и исполнял бы код из ITCM RAM. А что, к таймерам привязаться не получается? Есть один цикл, который должен выполняться за только за 35 тактов, так что с таймером не успеет. Как это гарантировать, вот это вопрос. А можно ли в ходе исполнения программы переключаться с ITCM RAM на что-то другое?
|
|
|
|
|
Apr 11 2016, 10:31
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(quandr @ Apr 11 2016, 13:09)  Есть один цикл, который должен выполняться за только за 35 тактов, так что с таймером не успеет. А что произойдёт, если будет выполняться быстрее, чем за 35 тактов? У меня подозрение, что вы не с того конца к задаче подходите. Цитата(quandr @ Apr 11 2016, 13:09)  А можно ли в ходе исполнения программы переключаться с ITCM RAM на что-то другое? Нужная шина выбирается автоматически в зависимости от адреса, по которому идёт доступ к памяти. Делаете переход на адрес в флеш, к примеру, и программа будет выполняться оттуда.
|
|
|
|
|
Apr 11 2016, 10:51
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 4-09-10
Пользователь №: 59 282

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

Группа: Участник
Сообщений: 50
Регистрация: 4-09-10
Пользователь №: 59 282

|
Цитата(scifi @ Apr 11 2016, 15:01)  Скажем так, не все детали ясны из этого объяснения. Но я почти уверен, что есть возможность сделать так, что никакие "циклы за 35 тактов ровно" не понадобятся. 35 циклов подразумевает 175 нс при частоте 200 МГц. Т.е. каждые 175 нс необходимо выдавать на цап новые данные.
|
|
|
|
|
Apr 11 2016, 11:36
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 4-09-10
Пользователь №: 59 282

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

Группа: Участник
Сообщений: 50
Регистрация: 4-09-10
Пользователь №: 59 282

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

Группа: Участник
Сообщений: 50
Регистрация: 4-09-10
Пользователь №: 59 282

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