Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
22.11.2007, 01:29
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,956
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Сообщение от dimonbest
|
Получается так: если слейв знает, что ему отсылать во время приема байта от мастера, то он это значение должен поместить в дата регистр. При этом за 8 тактов от мастера, значение дата регистра получит слейв, одновременно свое значение дата регистра отдаст мастеру.
|
Ну если только слейв поместит данные в SPDR до того, как мастер запустит цикл обмена.
Вообще такая система - master/slave - изначально не заточена под двусторонний обмен (я не принимаю во внимание реализации SPI в которых слейв может запросить переход мастера в слейв режим - не у всех это есть, да и как-то заумно и на мой взгляд ненадежно).
Когда мне однажды все же пришлось такое сделать на SPI - я поступил так. Организовал два независимых потока информации, посылками вида МАРКЕР-ДАННЫЕ-КС. Мастер по прерыванию сразу инициировал новый обмен, а если передавать было нечего - вместо маркера передавал нуль, который слейвом игнорировался. Слейв со своей стороны поступал точно так же. Работало вполне приемлемо, слейв всегда мог донести свои данные до мастера - благодаря постоянному потоку бесполезных нулей
|
|
|
|
23.11.2007, 16:00
|
|
Прохожий
Регистрация: 25.10.2007
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Я поступал также как предложил nml. Ну или почти также. Уважаемый nml обсалютно прав. Работало все сносно. Но мне нужна была скорость. Пришлость делать кучу ходов конем. А то вход и выход в прерывание если пишеш на CVAVR многовато тактов жрет в холостую.
|
|
|
|
23.11.2007, 16:32
|
|
Прописка
Регистрация: 22.09.2006
Адрес: Днепропетровск
Сообщений: 114
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от Zhyk_k_k
|
А то вход и выход в прерывание если пишеш на CVAVR многовато тактов жрет в холостую.
|
А CvAVR перед прерыванием еще можно такую директиву ставить #pragma savereg- ?
|
|
|
|
23.11.2007, 16:36
|
|
Прописка
Регистрация: 21.10.2005
Сообщений: 251
Сказал спасибо: 11
Сказали Спасибо 22 раз(а) в 17 сообщении(ях)
|
А вот если нужно оединить не 2 а скажем 5 устройств по SPI или USI,тогда как это будет оформлятся.Включить все устройства последовательно в кольцо ....... ![Бьюсь об стену](images/smilies/icon_obstenu.gif) ,а если в процессе сдвига данных одно из устройств возмет и подменит данные предидущего своими ........ 8O .Что-то не хорошо получается
|
|
|
|
23.11.2007, 18:45
|
|
Прописка
Регистрация: 22.09.2006
Адрес: Днепропетровск
Сообщений: 114
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от Beduin
|
А вот если нужно оединить не 2 а скажем 5 устройств по SPI или USI,тогда как это будет оформлятся.Включить все устройства последовательно в кольцо ....... ,а если в процессе сдвига данных одно из устройств возмет и подменит данные предидущего своими ........ 8O .Что-то не хорошо получается
|
Зачем в кольцо, можно - в квадрат ![Прикольно](images/smilies/icon_wink3.gif)
Одновременно на SPI обычно работают только два устройства.
|
|
|
|
24.11.2007, 10:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Сообщение от Beduin
|
А вот если нужно оединить не 2 а скажем 5 устройств по SPI или USI, ... Включить все устройства последовательно в кольцо .......
|
Ну, как-как... так же, как соединяют в кольцо "скажем 5" принтеров с одним компьютером... Печатать, правда, такая фигня не печатает, но простор для фантазии - огроменный! ![Подмигивание](images/smilies/icon_wink.gif) В протоколе SPI предусмотрены только двое - master и slave, все остальные - это уже к терапевту.
|
|
|
|
26.11.2007, 02:14
|
|
Прохожий
Регистрация: 25.10.2007
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Я бы ни когда в жизни не догодался соединить 5 устроиств по SPI кольцом. Личный маленький респект tempor_ю за грамотно описаную ситуацию. :P На практике соединял больше, причем в кучу и память и ведомые м/к. Но чтобы кольцом или квадратом. ![Смешно](images/smilies/icon_lol.gif) Кроме шуток, как время появится попробую 100%. И к вопросу о том что подменит. Конечно подменит. Если хоть в одном ведомом чтото будет. Он же их сдвигать будет и передоватьна следуюшие. Короче в моем понимании не разумно как минимум, но теоритически возможно.
Уважаемый delamoure, не пробовал ставить(#pragma savereg). Но как-то внутренее чутье говорит что сей момент работать будет навряд. Вопрос чисто ради интереса, ты после компиляции проэкта *.asm файлик глядиш? Так вот он там такое ТВАРит.... Все что может сохраняет и пере сохраняет (стеки итд.). Но могу тоже попробовать проверить. Правда не очень скоро есть срочная работа.
|
|
|
|
27.11.2007, 10:42
|
|
Прописка
Регистрация: 21.10.2005
Сообщений: 251
Сказал спасибо: 11
Сказали Спасибо 22 раз(а) в 17 сообщении(ях)
|
Вы немножко неправильно меня поняли .То что я хочу сказать на приложенном рисунке. Данные перекачиваются последовательно по кольцу .Мастер разумеется один ,а вот количество слейвов никто не ограничивал
-- Прилагается рисунок: --
![](https://kazus.ru/nuke/users_images/27112007/8511645.JPG)
-- Прилагается рисунок: --
![](https://kazus.ru/nuke/users_images/27112007/3290287.JPG)
|
|
|
|
27.11.2007, 10:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Сообщение от Beduin
|
Вы немножко неправильно меня поняли...
|
Да, нет - именно так и поняли... ![Бьюсь об стену](images/smilies/icon_obstenu.gif) Можешь привести пример, когда это нужно?
|
|
|
|
27.11.2007, 11:45
|
|
Прописка
Регистрация: 22.09.2006
Адрес: Днепропетровск
Сообщений: 114
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от Zhyk_k_k
|
Уважаемый delamoure, не пробовал ставить(#pragma savereg). Но как-то внутренее чутье говорит что сей момент работать будет навряд. Вопрос чисто ради интереса, ты после компиляции проэкта *.asm файлик глядиш? Так вот он там такое ТВАРит.... Все что может сохраняет и пере сохраняет (стеки итд.). Но могу тоже попробовать проверить. Правда не очень скоро есть срочная работа.
|
Конечно, гляжу. Недавно писал модуль для работы с USB. Там обработчик прерывания написан на ассемблере. Использовал pragma savereg- для ускорения работы. Плюс к тому ассемблерный код работает и с ранее объявленными в C переменными. Без всяких извратов. Могу дать пример.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Протокол CANopen???
|
phoenix84 |
Proteus, KiCAD и другие ECAD |
4 |
20.03.2012 18:13 |
протокол C-Bus
|
magneat |
Микроконтроллеры, АЦП, память и т.д |
0 |
23.09.2008 20:44 |
Протокол Атлас-3
|
spin722 |
Автоматика и аппаратура связи |
7 |
20.09.2008 16:40 |
Протокол Wiegand
|
Beduin |
Микроконтроллеры, АЦП, память и т.д |
0 |
05.06.2007 16:39 |
протокол
|
sergey2000 |
Микроконтроллеры, АЦП, память и т.д |
1 |
28.05.2006 10:55 |
Часовой пояс GMT +4, время: 18:01.
|
|