|
Коммуникация между двумя ATmega640, Выбор конфигурации. |
|
|
|
Jul 18 2012, 21:13
|

Местный
  
Группа: Участник
Сообщений: 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 и прочие изыски. Что скажет купечество? Принимаю идеи, критику и просто добрые слова
Сообщение отредактировал Dikoy - Jul 18 2012, 21:14
|
|
|
|
|
 |
Ответов
|
Jul 23 2012, 13:59
|

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

|
Я уже посчитал выход , кстати он 4 такта. Вместо Код sts Buffer_spi,temp Код st X+,temp для много байт , тогда уже (-1 такт) Также можно выбросить 1 и предпоследнюю строку т.к. SREG в прерывании не изменяется . 32 такта для asm - это очень много и в любом раскладе байт будет принят. SEI обычно решено в самом начале программы и без особой на то нужды (например запись чтение 16 байтных регистров) его не дергают. Учитывая , что мастер может в любой момент остановить обмен ( появилось более важное прерывание) то задача вполне решаема на такой скорости и с прерываниями.
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jul 23 2012, 15:35
|
Гуру
     
Группа: Свой
Сообщений: 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 байтных регистров) его не дергают. Вложенные прерывания ещё один случай такой нужды.
|
|
|
|
|
Aug 2 2012, 19:17
|

Местный
  
Группа: Участник
Сообщений: 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 тактов отмолотит, но зато гарантия отсутствия рассинхронизации.
|
|
|
|
|
Aug 2 2012, 19:54
|
Гуру
     
Группа: Свой
Сообщений: 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 тактов отмолотит, но зато гарантия отсутствия рассинхронизации. Ну, если и так годится, то почему бы и нет.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|