16+
Четверг
19 сентября
Вход |Карта сайта |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Схемы, платы, компоненты

 
Новая темаПравила РегистрацияСтатистика Архив
Вернуться в конференциюТопик полностью
Adept  (08.05.2019 18:25 - 08.05.2019 18:34) , в ответ на Как обнаруживаете начало/конец передачи, при таком подходе? автор: AlexBi
Да просто там всё, как "ситцевые трусы" :) 
для слейва: - триггер готовности к приёму взводится по таймауту отсутствия принятых байт более 250мкс, тогда же обнуляется счётчик байт принятого пакета, - после этого слушаем линию на предмет синхробайта 0x55 (вообще там синхрослово 0xFF55, но ищем именно 0x55 - как нашли - читаем заголовок (в котором на первом месте адрес абонента DevID) Если пакет - чужой, то сбрасываем счётчик байт и опять пытаемся ловить синхрослово (теперь уже ищем именно 0xFF55, пока не будет очередной таймаут). Если пакет свой, то продолжаем его принимать (за DevID следует длина пакета, служебные байты и собственно данные, в конце CRC16 CCITT) - по окончании приёма (а длину мы уже считали и знаем), ищется CRC, проверяется, если всё ОК, то пакет идёт на распарсивание, если нет, то всё сбрасывается на состояние готовности к приёму для мастера примерно то же (он же тоже принимает пакеты от слейвов), за исключением того, что он всегда инициатор обмена и он генерит скан-пакеты в шину между пакетами есть гарантированное мёртвое время 300мкс. Интервал следования пакетов опроса состояния слейвов (скан-пакетов) и их коротких ответов 1мс (транзакция занимает примерно 300мкс, в некоторых случаях возможно до 600). Если мастеру нужны большие блоки данных от слейва, то он кратно 1мс увеличивает период следования скан-пакетов Время приёма одного байта примерно 10мкС, так что таймаут ожидания синхрослова скорее всего сокращу до 100мкс (больше уже неразумная нагрузка на процессор) Да, крутится вся эта байда (в мастере) на XMEGе с тактом 29,4912МГц (слейвы - мега 16 на 14,7556МГц), ну помимо этого там ещё системный аппаратный таймер 250nS/1mS (+ привязанные к нему софтовые таймеры более длинных интервалов), планировщик на 16 задач, обслуживание символьнострочного дисплея на 10 знакомест c ШИМ-управлением яркостью и разными режимами мигания и бегущей строкой, клавиатурка, управление сигнальными светодиодиками (RGB с разными режимами мигания), разные настроечные меню, 2 активных ком-порта на 115200 с приёмом и распарсиванием других пакетов, интерпретатор команд, обрабатывающий кольцевой буфер команд, ну и ещё всякого по мелочи (типа замер батареи, генерация и показ служебных baloon-сообщений, часики, пищалка и т.п.) Ничего друг другу не мешает (систему событий и DMA не задействовал. Всё пока исключительно на прерываниях. В слейвах примерно такая же программная среда (с планировщиком и прочим :)) как-то так примерно.
...делать нужно так, как нужно. А как ненужно - делать не нужно (С) Винни-Пух :)
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7528 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXIX