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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Передать блок данных с мк на мк, как лучше реализовать?
501-q
сообщение Mar 23 2016, 09:23
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 24-02-09
Из: Екатеринбург
Пользователь №: 45 296



Цитата(_pv @ Mar 23 2016, 14:10) *
и что-то не припомню наличие аппаратных циклов у xmegи, то есть вот этот макрос .rep он не бесплатный, а всё равно развернётся в dec и brne, так что тактов на нормальный цикл там в любом случае не хватит.
а вот ценой нескольких кб флэша цикл можно действительно полностью развернуть, и передать всё за пару тактов на байт или за ~100мкс.

.rep -- это директива ассемблера (в частности, gas), повторяет фрагмент до .endr указанное число раз.

И за пару тактов не получится. Передатчик не может тратить меньше трёх тактов на передачу байта. Вот если передатчик ПЛМ'ка какая... то тут возникает вопрос со стабильностью приёма, т.к. входной тракт вывода порта микроконтроллера требует стабильного состояния сигнала в течении двух тактов минимум.

Илья
Go to the top of the page
 
+Quote Post
_pv
сообщение Mar 23 2016, 09:34
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(ЯadiatoR @ Mar 23 2016, 13:59) *
Ну на деле есть 6400 тактов.
Конечно, компилятор развезет это на много операций. Я описал примерно алгоритм работы.
То есть вы собрались выйти из передачи только по таймеру заранее зная сколько прйдет тактов на операции?
А как будет приемник принимать данные за 3 такта? 3 такта это 93нс. Только если их соединить чуть ли не вплотную, ибо 10+МГц будет и принимать без синхронизации. Непонятно

6400 тактов есть для передачи 1536 байт, то есть по 4 такта на байт.
такты на операции у авров вполне себе предсказуемо считаются, и контроллеры работают от одного тактового сигнала, поэтому если в передачике сделать
LD .. 1 такт
OUT .. 1 такт
RJMP -2 2 такта
и предварительно завести таймер на N*4 вперёд то он сработает когда надо.

а в приёмнике
IN .. 1 такт
ST .. 1 такт
RJMP -2 2 такта

то передатчик будет выдавать данные каждые 4ре такта, а приёмник забирать.
синхронизацию можно сделать по самим данным отправив сначала несколько байт известной перамбулы перед данными, тогда приёмник потом сможет разобраться где именно начались данные.
единственное может пару nopов надо будет где-то воткнуть перед циклом чтобы приёмник не сэмплил данные именно на том же такте когда передатчик их меняет.
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Mar 23 2016, 09:44
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



rjmp это хорошо, а кто инкремент будет делать? Или он оффсетом будет идти?
Go to the top of the page
 
+Quote Post
_pv
сообщение Mar 23 2016, 09:48
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(ЯadiatoR @ Mar 23 2016, 16:44) *
rjmp это хорошо, а кто инкремент будет делать? Или он оффсетом будет идти?

ST Y+, reg у хмеги всё равно за 1 такт вроде, не?
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Mar 23 2016, 09:58
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



сначала написал - потом подумал, жалко удалить коммент нету кнопки
Go to the top of the page
 
+Quote Post
501-q
сообщение Mar 23 2016, 10:36
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 24-02-09
Из: Екатеринбург
Пользователь №: 45 296



Цитата(_pv @ Mar 23 2016, 14:48) *
ST Y+, reg у хмеги всё равно за 1 такт вроде, не?

Да. 'LD reg, Z+' 2 такта. Так что три такта -- минимум.

Синхронизацию можно глянуть на avrfreaks.net. Там есть проект вывода видеосигнала из икс-меги, и в нем есть синхронизация сигналов до такта. И я там же код для синхронизации приводил.

Илья

Цитата(_pv @ Mar 23 2016, 14:34) *
синхронизацию можно сделать по самим данным отправив сначала несколько байт известной перамбулы перед данными, тогда приёмник потом сможет разобраться где именно начались данные.


Не-не-не. Так нельзя. Можно нарваться на чтение порта в нестабильном состоянии. Передатчик и приёмник должны быть синхронизированы с точностью до такта. Чтение первого байта любого пакета всегда должно отставать на некоторое (фиксированное!) число тактов от записи этого байта (и у нас должна быть возможность выбрать величину отставания). Если момент чтения сдвигается относительно момента записи (от пакета к пакету; в пределах пакета он точно двигаться не будет), то я бы не стал гарантировать работоспособность.

Цитата
единственное может пару nopов надо будет где-то воткнуть перед циклом чтобы приёмник не сэмплил данные именно на том же такте когда передатчик их меняет.

Ага, Ты тоже это понимаешь. Но если мы можем синхронизироваться в пределах передачи байта (т.е. в пределах 3-х тактов), то это значит, что мы можем синхронизироваться и в пределах пакета.

Илья
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Mar 23 2016, 20:36
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата
Но если памяти хватает, то можно тупо повторить 1536 раз фрагмент:
in reg, PORT_PIN
st Y+, reg
И без всяких jmp-ов и циклов
+
NOP - n раз для синхронизации , где n = 1,2,3.....


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
piroman
сообщение Mar 24 2016, 11:41
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 27-09-12
Пользователь №: 73 712



SPI + DMA и нет проблем.
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Mar 24 2016, 11:55
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



Цитата(piroman @ Mar 24 2016, 14:41) *
SPI + DMA и нет проблем.

А ничего, тчо тактовая 32Мгц и передавать придется со скоростью 61,5Mbps?
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Mar 28 2016, 12:21
Сообщение #25


Мастер-фломастер
****

Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700



Для приема:
Триггер ДМА завести по прерыванию внешнего входа
источник будет порт приема
назначение будет буфер озу с инкрементом
по истечению нужного колва байт в транзакции ДМА вывести запрос на прерывание у дма
вот и всего делоф.

Для передачи:
добавляем эвент контроллер дергания ноги строба.
загрузка проца минимальна.





--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 28 2016, 13:51
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(Kovrov @ Mar 28 2016, 15:21) *
Триггер ДМА завести...

Предлагаете и в приёмнике и в передатчике использовать DMA?
А сколько тактов необходимо для передачи одного байта из увв во внутр. память и наоборот?
И как оба процесса синхронизировать?
Go to the top of the page
 
+Quote Post
501-q
сообщение Mar 29 2016, 04:12
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 24-02-09
Из: Екатеринбург
Пользователь №: 45 296



Цитата(zombi @ Mar 28 2016, 18:51) *
Предлагаете и в приёмнике и в передатчике использовать DMA?

Человек не осознал сложность, поторопился. Этот вариант уже отвергли.
Цитата
А сколько тактов необходимо для передачи одного байта из увв во внутр. память и наоборот?

Не менее 5 тактов (я бы рассчитывал на значение более 7, но если нужно точно, то это можно проверить). Плюс задержки из-за конфликтов во время доступа ядра и DMA к шине данных (в SPI, USART и т.п. эти задержки сглаживаются наличием промежуточного буфера).

Илья
Go to the top of the page
 
+Quote Post
Склихасовский
сообщение Mar 29 2016, 05:27
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 29-11-06
Пользователь №: 22 912



у меня был подобный опыт
реализация LVDS на хмега
только там 3 порта вывода пришлось реализовывать и внешнюю срам ставить.
примерно 15 гц рефреша получилось
--
ваше беспокойство по поводу сколько тактов нужно чтобы данные успели отобразиться в порту
хотя это как правило 1,5 такта
решается банально таймером с PWM и двумя системами сравнения
этот же таймер будет вам генерировать стробы.
а ширину периода крутите как вам угодно.






Go to the top of the page
 
+Quote Post
Kovrov
сообщение Mar 29 2016, 07:06
Сообщение #29


Мастер-фломастер
****

Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700



Цитата(501-q @ Mar 29 2016, 09:12) *
Человек не осознал сложность, поторопился. Этот вариант уже отвергли.

если это для людей сложность..
нада зарплату пойти больше просить. :-)
----------------------


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Mar 29 2016, 07:10
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



Может тут имелась ввиду не сама сложность, а то, что не подходит по временным характеристикам?
Go to the top of the page
 
+Quote Post

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

 


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


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