ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
920055 Топик полностью
Adept (08.05.2019 18:25 - 18:34, просмотров: 325) ответил 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 не задействовал. Всё пока исключительно на прерываниях. В слейвах примерно такая же программная среда (с планировщиком и прочим :)) как-то так примерно.
...делать нужно так, как нужно. А как ненужно - делать не нужно (С) Винни-Пух :)