|
|
  |
Передать блок данных с мк на мк, как лучше реализовать? |
|
|
|
Mar 23 2016, 09:23
|
Участник

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

|
Цитата(_pv @ Mar 23 2016, 14:10)  и что-то не припомню наличие аппаратных циклов у xmegи, то есть вот этот макрос .rep он не бесплатный, а всё равно развернётся в dec и brne, так что тактов на нормальный цикл там в любом случае не хватит. а вот ценой нескольких кб флэша цикл можно действительно полностью развернуть, и передать всё за пару тактов на байт или за ~100мкс. .rep -- это директива ассемблера (в частности, gas), повторяет фрагмент до .endr указанное число раз. И за пару тактов не получится. Передатчик не может тратить меньше трёх тактов на передачу байта. Вот если передатчик ПЛМ'ка какая... то тут возникает вопрос со стабильностью приёма, т.к. входной тракт вывода порта микроконтроллера требует стабильного состояния сигнала в течении двух тактов минимум. Илья
|
|
|
|
|
Mar 23 2016, 09:34
|
Гуру
     
Группа: Свой
Сообщений: 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ов надо будет где-то воткнуть перед циклом чтобы приёмник не сэмплил данные именно на том же такте когда передатчик их меняет.
|
|
|
|
|
Mar 23 2016, 10:36
|
Участник

Группа: Участник
Сообщений: 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-х тактов), то это значит, что мы можем синхронизироваться и в пределах пакета. Илья
|
|
|
|
|
Mar 23 2016, 20:36
|

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

|
Цитата Но если памяти хватает, то можно тупо повторить 1536 раз фрагмент: in reg, PORT_PIN st Y+, reg И без всяких jmp-ов и циклов + NOP - n раз для синхронизации , где n = 1,2,3.....
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Mar 24 2016, 11:41
|
Участник

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

|
SPI + DMA и нет проблем.
|
|
|
|
|
Mar 29 2016, 04:12
|
Участник

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

|
Цитата(zombi @ Mar 28 2016, 18:51)  Предлагаете и в приёмнике и в передатчике использовать DMA? Человек не осознал сложность, поторопился. Этот вариант уже отвергли. Цитата А сколько тактов необходимо для передачи одного байта из увв во внутр. память и наоборот? Не менее 5 тактов (я бы рассчитывал на значение более 7, но если нужно точно, то это можно проверить). Плюс задержки из-за конфликтов во время доступа ядра и DMA к шине данных (в SPI, USART и т.п. эти задержки сглаживаются наличием промежуточного буфера). Илья
|
|
|
|
|
Mar 29 2016, 07:06
|

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

|
Цитата(501-q @ Mar 29 2016, 09:12)  Человек не осознал сложность, поторопился. Этот вариант уже отвергли. если это для людей сложность.. нада зарплату пойти больше просить. :-) ----------------------
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|