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

 
 
> Коммуникация между двумя ATmega640, Выбор конфигурации.
Dikoy
сообщение Jul 18 2012, 21:13
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 4-03-09
Из: Богота, Колумбия
Пользователь №: 45 676



Есть плата с двумя мега640 (схема резервирования).
Думаю как лучше организовать межчиповую связь.
Девайс в металле, схему коннекта между чипами прилагаю.

http://s017.radikal.ru/i414/1207/53/5d906e6272a7.gif (25 кБ)

Между чипами идёт SPI, I2C и две дополнительные дороги, которые можно использовать для контроля.
На и2ц висит ещё барометр, который должен читаться первым чипом.
Лапы MOSI/MISO имеют вывод на джамперы и я могу соединить их как хочу. На схеме показано соединение по умолчанию.

Итак. Надо гонять данные между камнями, причём траффик от второго к первому ощутимо больше, чем наоборот. Раз так в 1000. Фактически, первый запрашивает у второго отчёт, второй отчитывается. Так и живут.

Изначально я думал сделать жёстко. От первого ко второму по I2C (за одно и барометр читать). От второго к первому по SPI. Никаких коллизий, всё чётко.

Сейчас лезут мысли про мультимастерный SPI и прочие изыски.

Что скажет купечество? Принимаю идеи, критику и просто добрые слова sm.gif

Сообщение отредактировал Dikoy - Jul 18 2012, 21:14
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ILYAUL
сообщение Jul 23 2012, 13:59
Сообщение #2


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

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



Я уже посчитал выход , кстати он 4 такта.
Вместо
Код
sts Buffer_spi,temp
Код
st X+,temp
для много байт , тогда уже (-1 такт)
Также можно выбросить 1 и предпоследнюю строку т.к. SREG в прерывании не изменяется . 32 такта для asm - это очень много и в любом раскладе байт будет принят. SEI обычно решено в самом начале программы и без особой на то нужды (например запись чтение 16 байтных регистров) его не дергают.
Учитывая , что мастер может в любой момент остановить обмен ( появилось более важное прерывание) то задача вполне решаема на такой скорости и с прерываниями.


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

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 23 2012, 15:35
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ILYAUL @ Jul 23 2012, 16:59) *
Я уже посчитал выход , кстати он 4 такта.

Да, минимум 4.

Цитата(ILYAUL @ Jul 23 2012, 16:59) *
Вместо
Код
sts Buffer_spi,temp
Код
st X+,temp
для много байт , тогда уже (-1 такт)

Это если на асме, а на Си
Код
st X+,temp
не пройдёт, то есть ещё и загрузку/выгрузку X надо делать и чтение-сохранение Buffer_spi.

Цитата(ILYAUL @ Jul 23 2012, 16:59) *
Также можно выбросить 1 и предпоследнюю строку т.к. SREG в прерывании не изменяется .

SREG можно не сохранять, но мастер не должен читать больше чем можно и буфер тольно прямой, без зацикливания.

Цитата(ILYAUL @ Jul 23 2012, 16:59) *
SEI обычно решено в самом начале программы и без особой на то нужды (например запись чтение 16 байтных регистров) его не дергают.

Вложенные прерывания ещё один случай такой нужды.
Go to the top of the page
 
+Quote Post
Dikoy
сообщение Aug 2 2012, 19:17
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 4-03-09
Из: Богота, Колумбия
Пользователь №: 45 676



Цитата(_Артём_ @ Jul 23 2012, 18:35) *
Это если на асме, а на Си st X+,temp не пройдёт, то есть ещё и загрузку/выгрузку X надо делать и чтение-сохранение Buffer_spi.

На си получается 65 тактов.
С указателем 47.

IAR не любит асм вставки, а полностью писать проект на асме я не могу по целому набору причин.

Цитата(_Артём_ @ Jul 23 2012, 18:35) *
Вложенные прерывания ещё один случай такой нужды.

Вложеные прерывания есть вероятный источник рассинхронизации, что совсем не есть хорошо.
Пусть луше оно лишних 20 тактов отмолотит, но зато гарантия отсутствия рассинхронизации.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Aug 2 2012, 19:54
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Dikoy @ Aug 2 2012, 22:17) *
IAR не любит асм вставки, а полностью писать проект на асме я не могу по целому набору причин.

Есть ещё вариант: Mixing C and assembler. Прерывание написать на асме в отдельном файле.

Цитата(Dikoy @ Aug 2 2012, 22:17) *
Вложеные прерывания есть вероятный источник рассинхронизации, что совсем не есть хорошо.
Пусть луше оно лишних 20 тактов отмолотит, но зато гарантия отсутствия рассинхронизации.

Хм..что за рассинхронзация, не знаю отчего ей возникнуть.

Цитата(Dikoy @ Aug 2 2012, 22:17) *
Пусть луше оно лишних 20 тактов отмолотит, но зато гарантия отсутствия рассинхронизации.

Ну, если и так годится, то почему бы и нет.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dikoy   Коммуникация между двумя ATmega640   Jul 18 2012, 21:13
- - _Артём_   Цитата(Dikoy @ Jul 19 2012, 00:13) Изнача...   Jul 18 2012, 22:21
- - Dikoy   У I2C громоздкое прерывание. Даже не смотря на то,...   Jul 19 2012, 00:27
|- - _Артём_   Цитата(Dikoy @ Jul 19 2012, 03:27) У I2C ...   Jul 19 2012, 00:49
- - Dikoy   Вложенное прерывание? Ну не знаю... Не люблю я их ...   Jul 19 2012, 01:02
|- - _Артём_   Цитата(Dikoy @ Jul 19 2012, 04:02) Вложен...   Jul 19 2012, 01:16
|- - Dikoy   Цитата(_Артём_ @ Jul 19 2012, 05:16) Всег...   Jul 19 2012, 20:38
|- - _Артём_   Цитата(Dikoy @ Jul 19 2012, 23:38) SPI до...   Jul 19 2012, 21:25
- - ILYAUL   ЦитатаНа схеме показано соединение по умолчанию Ст...   Jul 19 2012, 21:13
|- - Dikoy   Цитата(ILYAUL @ Jul 20 2012, 01:13) Стран...   Jul 22 2012, 20:58
- - ILYAUL   У Вас , как уже писали выше ~ 32 такта. КодINT_SPI...   Jul 23 2012, 06:28
|- - _Артём_   Цитата(ILYAUL @ Jul 23 2012, 09:28) У Вас...   Jul 23 2012, 10:53


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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 09:35
Рейтинг@Mail.ru


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