реклама на сайте
подробности

 
 
7 страниц V  « < 4 5 6 7 >  
Reply to this topicStart new topic
> STM32F407 + прерывание + время реакции, Меняется время реакции на внешнее событие
jcxz
сообщение Aug 1 2015, 21:18
Сообщение #76


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Когда дело доходит до подсчёта тактов при работе с периферией, тут однозначно надо искать аппаратные пути решения. Только так, имхо.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 2 2015, 07:42
Сообщение #77


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(aaarrr @ Aug 1 2015, 21:14) *
Загрузка - 2 такта, сравнение - 1, переход - 2. У меня получается минимум 5.

Кейл показывает, что переход длится 1 такт, недавно смотрел для STM32F303.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 2 2015, 08:30
Сообщение #78


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ViKo @ Aug 2 2015, 10:42) *
Кейл показывает, что переход длится 1 такт, недавно смотрел для STM32F303.

А TRM говорит, что не меньше двух, и ему я почему-то доверяю больше:
Цитата
Branches take one cycle for instruction and then pipeline reload for target instruction. Non-taken branches are 1 cycle total.
Taken branches with an immediate are normally 1 cycle of pipeline reload (2 cycles total). Taken branches with register
operand are normally 2 cycles of pipeline reload (3 cycles total). Pipeline reload islonger when branching to unaligned 32-bit
instructions in addition to accesses to slower memory. A branch hint is emitted to the code bus that permits a slower system
to pre-load. This can reduce the branch target penalty for slower memory, but never less than shown here.
Go to the top of the page
 
+Quote Post
ШСА
сообщение Aug 2 2015, 18:05
Сообщение #79


Местный
***

Группа: Участник
Сообщений: 291
Регистрация: 11-04-14
Из: Саратов
Пользователь №: 81 335



Цитата(ШСА @ Jul 31 2015, 22:00) *
Но эксперимент (критерий истины) показал, что эффект влияния фоновой программы остался!


Придётся мне покритиковать самого себя. Неправда это, Явление исчезло!
А этот результат, оказывается, произошёл оттого, что я в процессе экспериментов отключил кэш команд, а потом забыл включить! Извините за дезинформацию.

Цитата(ШСА @ Aug 1 2015, 18:39) *
Теперь изображение на мониторе просто перепрыгивает - то левее, то правее в соответствии с переключением отображаемой страницы! Получается, что задержка вывода из CCM и из SRAM отличается очень сильно, а именно на 190 нс.


Величина "прыжка" однозначно зависит от частоты тактирования шин. Когда я повысил частоту тактирования шины AHB1 вдвое (до 168 МГц), "прыжок" уменьшился ровно вдвое.

Чем больше вожусь с этой системой, тем больше хочется задействовать DMA. Но как в этом случае организовать вывод байтов по тетрадам?

Сообщение отредактировал ШСА - Aug 2 2015, 18:09
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 3 2015, 03:58
Сообщение #80


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ШСА @ Aug 3 2015, 00:05) *
Чем больше вожусь с этой системой, тем больше хочется задействовать DMA. Но как в этом случае организовать вывод байтов по тетрадам?

1.Выбрать другой МК со свободным Quad-SPI либо SDIO либо каким другим интерфейсом, на котором можно такое сделать.
2.Сгородить внешнюю схему мультиплексора.
3.Выбрать МК с бОльшим кол-вом ОЗУ и писать тетрадные буфера.
Go to the top of the page
 
+Quote Post
ШСА
сообщение Aug 3 2015, 04:09
Сообщение #81


Местный
***

Группа: Участник
Сообщений: 291
Регистрация: 11-04-14
Из: Саратов
Пользователь №: 81 335



Спасибо. Но ведь и здесь пока есть варианты, например такой - На вывод отправлять не не всю видеостраницу, состоящую из тетрад, а только одну строку, уже в виде целых байтов. Главное, успевать за 10 мкс. их обновлять.

Сообщение отредактировал ШСА - Aug 3 2015, 04:09
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 3 2015, 05:50
Сообщение #82


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Мы же не знаем куда у вас там подключены ножки, и доступен ли этот адрес из ДМА. Также мы не знаем сколько бит вам надо в паралель выплевывать наружу.

Там даже есть вариант по ДМА грузить интервалы таймера, а тот чтобы ногой дергал, в режиме ШИМ... Более подробно скажите что там куда выпихивается...
Go to the top of the page
 
+Quote Post
ШСА
сообщение Aug 3 2015, 07:32
Сообщение #83


Местный
***

Группа: Участник
Сообщений: 291
Регистрация: 11-04-14
Из: Саратов
Пользователь №: 81 335



Цитата(Golikov A. @ Aug 3 2015, 08:50) *
Мы же не знаем куда у вас там подключены ножки, и доступен ли этот адрес из ДМА. Также мы не знаем сколько бит вам надо в паралель выплевывать наружу.


Впараллель надо выплёвывать 4 бита - это видеосигнал (там ещё множество управляющих сигналов, но они однобитовые). А с доступностью то какие проблемы? DMA работает с устройствами и памятью. А у АРМ-ов все порты отображены на адресное пространство. Так что плеваться надо "память - память".
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 3 2015, 07:36
Сообщение #84


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



если 4 биты порта в памяти рядом (в пределах байта) и остальные биты порта неважны. А иначе надо лезть через спец регистры установки снятия бит, и тут встает вопрос есть ли к ним доступ ДМА, скорее всего есть, но надо проверить.

Ну и самое простое это по 4 бита, дополнить до байта 1 и 2 поле, и их выплевывать по очереди. Причем ДМА можно настроить циклически, и тогда он будет просто по кругу гнать картинку, даже не трогая проц, до тех пор пока картинку не поменяете, его даже перезапускать не надо будет.
Go to the top of the page
 
+Quote Post
ШСА
сообщение Aug 3 2015, 07:46
Сообщение #85


Местный
***

Группа: Участник
Сообщений: 291
Регистрация: 11-04-14
Из: Саратов
Пользователь №: 81 335



Ну да, а как иначе? В STM32F4 нет никаких видеосредств, все АЦП и ЦАП довольно медленные.

Цитата(Golikov A. @ Aug 3 2015, 10:36) *
Причем ДМА можно настроить циклически, и тогда он будет просто по кругу гнать картинку, даже не трогая проц, до тех пор пока картинку не поменяете, его даже перезапускать не надо будет.


А вот это заманчиво, но хватит ли ОЗУ? Там 2 видеостраницы находятся плотно упакованные, каждая по 58К. Для ещё одной полной видеостраницы в байтовом формате (т.е. по байту на точку) тут нет места. А вот сделать 1-2 строки и обновлять за 10 мкс и переключать их каждые 64 мкс - это можно. Вот как это организовать я и думаю.

Сообщение отредактировал ШСА - Aug 3 2015, 07:57
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 3 2015, 07:55
Сообщение #86


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Ну ДМА может гнать по кругу, и оно имеет прерывание половина прошла.
Делаете буфер размером 4 строки, запускаете ДМА, а по прерыванию Половину прошло, все прошло, подменяете данные в первой и второй половине буфере.
А ДМА будет их выпихивать со строгой времянкой.

Размер буфера можно сделать больше строк, чтобы было больше времени на обновление....

а почему там 4 бита? еще какая-то синхронизация что ли? или это 16 уровней сигнала?
Go to the top of the page
 
+Quote Post
ШСА
сообщение Aug 3 2015, 08:22
Сообщение #87


Местный
***

Группа: Участник
Сообщений: 291
Регистрация: 11-04-14
Из: Саратов
Пользователь №: 81 335



Цитата(Golikov A. @ Aug 3 2015, 10:55) *
Делаете буфер размером 4 строки, запускаете ДМА, а по прерыванию Половину прошло, все прошло, подменяете данные в первой и второй половине буфере.
А ДМА будет их выпихивать со строгой времянкой.

Размер буфера можно сделать больше строк, чтобы было больше времени на обновление....

а почему там 4 бита? еще какая-то синхронизация что ли? или это 16 уровней сигнала?


Ну, хорошо. Но строка не выводится непрерывно. Из 64 мкс часть времени идёт вывод, а потом заткнуться до прихода следующего синхроимпульса. Это время, я полагал, и можно использовать для подмены строки. А как сделать вывод нескольких строк, каждая из которых то выводится, то нет, что-то я слабо представляю.

4 бита - это цвета раскраски и надписей изображения + тень.

Сообщение отредактировал ШСА - Aug 3 2015, 08:36
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 3 2015, 08:57
Сообщение #88


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ДМА запускается по таймеру, таймер запускается по внешнему синхроимпульсу.

Значит ДМА выводит 1 строку, по прерыванию дма отработало, перенастраиваете на следующую строку.
Вывод очередного значение контролирует таймер (интервалы между точками)
Запуск таймера по внешнему синхросигналу
и всех делов.

Вам надо только успевать в прерывании данные подменять, а жесткую времянку выдержит периферия чем бы ядро не занималось. ДМА возможно будет за шину конкурировать, но там единицы тактов

более того можно сделать цепочку таймеров, и несколько каналов ДМА взять, и они смогут даже по сложной схеме друг друга запускать
Go to the top of the page
 
+Quote Post
ШСА
сообщение Aug 3 2015, 09:08
Сообщение #89


Местный
***

Группа: Участник
Сообщений: 291
Регистрация: 11-04-14
Из: Саратов
Пользователь №: 81 335



Отлично. Спасибо.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Sep 10 2015, 23:41
Сообщение #90


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aaarrr @ Aug 1 2015, 22:50) *
Одиночная LDR выполняется два такта; последовательность из двух LDR может быть выполнена за три такта (а из трех за четыре и т.д.), если адрес для последующей инструкции не зависит от результата предыдущей.

Подскажите пожалуйста название документа, в котором описаны такие нюансы растактовки.
На сайте ARMа есть что-то вроде для Cortex-M0, в котором почему-то нет зависимостей. Может зависимости (индивидуально к кажому ядру) описываются в другом документе? Интересуют нюансы двух видов - изменение аргумента текущей инструкции в предыдущей инструкции и задержки связанные с обращением к памяти, в том числе чередования чтения/записи, а так же одновременной подгрузке кода, особенно для M0, у которого одна общая шина.

Сообщение отредактировал GetSmart - Sep 11 2015, 02:36


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

7 страниц V  « < 4 5 6 7 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 03:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01485 секунд с 7
ELECTRONIX ©2004-2016