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

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

|
Да что вы заморачиваетесь, если обработка в прерывании устраивает (хотя я бы так не делал) то сделал бы примерно так (помойму в атхмеге есть команда на изменение значения 1 ноги): 1. на приемнике прерывание на управляющей ноге по спаду сигнала Это код для передатчика, для приемника будет похожий, но с обработкой 1 прерывания и мониторингом состояния активного сигнала. Код SendSignal=1;//Устанавливаем активный сигнало о готовности к передаче; while(ReadyToSend);// Тут ожидаем от 10 ноги сигнала, тчо приемник вошел в прерывание и готов принимать. Можно тут добавить еще пожарный таймер, что бы вышел из цикла если долго ожидает. for(ushort i=0; i<1536;i++) { SendSignal=1;// Управляющая нога сбрасывается в 1 Portx=buf[i]; SendSignal=0;// Устанавливаем сигнал в активное состояние - для мониторинга приемником } В принципе если выдерживать эту последовательность то и вставлять nop не придется, т.к. вместо него будут выполняться полезные такты - инкремент счетчика, сброс активного сигнала управления и загрузка регистра с новым значением. Как раз на прием должно хватать. Ну если что можно довести нопами если приемник не будет успевать.
|
|
|
|
|
Mar 23 2016, 07:49
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(ЯadiatoR @ Mar 23 2016, 11:21)  Да что вы заморачиваетесь, если обработка в прерывании устраивает (хотя я бы так не делал) то сделал бы примерно так for(ushort i=0; i<1536;i++){ SendSignal=1;// Управляющая нога сбрасывается в 1 Portx=buf[i]; SendSignal=0;// Устанавливаем сигнал в активное состояние - для мониторинга приемником }[/code] скомпилируйте это и посмотрите что получится, напомню у ТС есть всего 4 такта я так понимаю без дма можно сделать только :loop IN REG, PORT ST Y+, REG RJMP loop NOP NOP NOP NOP будет как раз четыре такта на цикл, и выходить из этого бесконечного цикла придётся по прерыванию от таймера или от внешнего, исправляя адрес возврата на стэке чтобы на те нопы после цикла выпрыгнуть
|
|
|
|
|
Mar 23 2016, 08:48
|
Участник

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

|
Цитата(_pv @ Mar 23 2016, 12:49)  я так понимаю без дма можно сделать только :loop IN REG, PORT ST Y+, REG RJMP loop NOP NOP NOP NOP
будет как раз четыре такта на цикл, и выходить из этого бесконечного цикла придётся по прерыванию от таймера или от внешнего, исправляя адрес возврата на стэке чтобы на те нопы после цикла выпрыгнуть С прерыванием от таймер -- это тоже хорошо. И, кстати, в икс-меге обязательно нужно возвращаться из прерывания (но не обязательно в то же место, где прерывание начали обрабатывать; в меге можно было бы вообще не возвращаться из прерыания от таймера, а только убрать адрес возврата из стека). Но если памяти хватает, то можно тупо повторить 1536 раз фрагмент: in reg, PORT_PIN st Y+, reg rjmp 1f 1: Вот так: .rep 1536 in reg, PORTx_PIN st Y+, reg rjmp 1f 1: .endr Если устраивает три такта на передачу байта, то rjmp заменить на nop. Илья
Сообщение отредактировал 501-q - Mar 23 2016, 08:52
|
|
|
|
|
Mar 23 2016, 09:10
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(501-q @ Mar 23 2016, 14:48)  Но если памяти хватает, то можно тупо повторить 1536 раз фрагмент: in reg, PORT_PIN st Y+, reg rjmp 1f 1:
Вот так: .rep 1536 in reg, PORTx_PIN st Y+, reg rjmp 1f 1: .endr Если устраивает три такта на передачу байта, то rjmp заменить на nop. от прерывания по таймеру из цикла придётся выходить на передатчике, на приёмнике можно таймер сэкономить и заканчивать по внешнему прерыванию от передатчика. и что-то не припомню наличие аппаратных циклов у xmegи, то есть вот этот макрос .rep он не бесплатный, а всё равно развернётся в dec и brne, так что тактов на нормальный цикл там в любом случае не хватит. а вот ценой нескольких кб флэша цикл можно действительно полностью развернуть, и передать всё за пару тактов на байт или за ~100мкс.
|
|
|
|
Сообщений в этой теме
zombi Передать блок данных с мк на мк Mar 22 2016, 14:20 ЯadiatoR При 32МГц в 200мкс 6400 тактов. Как раз должно хва... Mar 22 2016, 14:52 zombi Цитата(ЯadiatoR @ Mar 22 2016, 17:52) Одн... Mar 22 2016, 15:28 ЯadiatoR Ну вариантов определения первого байта не много - ... Mar 22 2016, 15:37 zombi Цитата(ЯadiatoR @ Mar 22 2016, 18:37) (а ... Mar 22 2016, 15:46 _pv это если они от одного источника тактируются или о... Mar 22 2016, 16:08 Lerk _pv,
Цитата(zombi @ Mar 22 2016, 17:20) О... Mar 22 2016, 16:20 _pv да, действительно.
тогда проблем не должно быть, т... Mar 22 2016, 17:10 501-q Цитата(zombi @ Mar 22 2016, 19:20) Нужно ... Mar 23 2016, 04:21    501-q Цитата(_pv @ Mar 23 2016, 14:10) и что-то... Mar 23 2016, 09:23 ЯadiatoR Ну на деле есть 6400 тактов.
Конечно, компилятор р... Mar 23 2016, 07:59 _pv Цитата(ЯadiatoR @ Mar 23 2016, 13:59) Ну ... Mar 23 2016, 09:34 ЯadiatoR Ну флеш то заиспользовать не проблема - а принимат... Mar 23 2016, 09:18 ЯadiatoR rjmp это хорошо, а кто инкремент будет делать? Или... Mar 23 2016, 09:44 _pv Цитата(ЯadiatoR @ Mar 23 2016, 16:44) rjm... Mar 23 2016, 09:48  501-q Цитата(_pv @ Mar 23 2016, 14:48) ST Y+, r... Mar 23 2016, 10:36 ЯadiatoR сначала написал - потом подумал, жалко удалить ком... Mar 23 2016, 09:58 ILYAUL ЦитатаНо если памяти хватает, то можно тупо повтор... Mar 23 2016, 20:36 piroman SPI + DMA и нет проблем. Mar 24 2016, 11:41 ЯadiatoR Цитата(piroman @ Mar 24 2016, 14:41) SPI ... Mar 24 2016, 11:55 Kovrov Для приема:
Триггер ДМА завести по прерыванию внеш... Mar 28 2016, 12:21 zombi Цитата(Kovrov @ Mar 28 2016, 15:21) Тригг... Mar 28 2016, 13:51  501-q Цитата(zombi @ Mar 28 2016, 18:51) Предла... Mar 29 2016, 04:12   Kovrov Цитата(501-q @ Mar 29 2016, 09:12) Ч... Mar 29 2016, 07:06  Kovrov Цитата(zombi @ Mar 28 2016, 18:51) Предла... Mar 29 2016, 07:28   _pv Цитата(Kovrov @ Mar 29 2016, 13:28) Может... Mar 29 2016, 09:08 Склихасовский у меня был подобный опыт
реализация LVDS на хмега... Mar 29 2016, 05:27 ЯadiatoR Может тут имелась ввиду не сама сложность, а то, ч... Mar 29 2016, 07:10 Kovrov а кому нужен этот геморой
чтоб 1/5 времени проц то... Mar 29 2016, 09:16 _pv Цитата(Kovrov @ Mar 29 2016, 15:16) а ком... Mar 29 2016, 09:20 zombi to _pv - именно так и планирую делать и это единст... Mar 29 2016, 09:22 Kovrov мое мнение вам нужно в корне пересмотреть вашу иде... Mar 29 2016, 09:48 zombi Цитата(Kovrov @ Mar 29 2016, 12:48) мое м... Mar 29 2016, 10:26  Kovrov Цитата(zombi @ Mar 29 2016, 15:26) уточни... Mar 29 2016, 10:53   zombi Это задача а не идея. Mar 29 2016, 11:13 Kovrov ну остается только пожелать вам удачи в реализации... Mar 29 2016, 11:15
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|