приёмом длинных частей известной длины через дма) ?
он я так понял не знает сколько придет! из-за этого ему нужен бубен!
грубо говоря у вас в модбасе может прийти 20 байт, а может 55 а я хочу к dma прикрутить, а не прерываниями дергать
а там заголовков, с указанием длины, нет?
в модбасе есть только вам надо принять тогда минимум 3 байта, вырвать длину, прибавить контрольную сумму 2 байта и пахнет костылями
по мне большой кольцевой буфер с сопутствующей обслугой, тоже неслабые костыли
нет полинга все на дма завязано и прерываниях плюс в старшей серии костыль таймера не надо точнее на новых сериях
как нет поллинга, а как догадаться что пакет пришёл? и зачем таймер? запулить кольцевой буфер через dma и вычитывать где-нибудь
по прерыванию? у вас само прерывание скажет, что конец пакета
Идея принимать пакет переменной длины по dma?
Я делал так: запускаю dma на заголовок пакета * 2 по прерыванию половины заполнения буфера в нём же считаю длины и прямо в регистрах меняю значения размера буфера и адрес приёма данных + чищу флаги. Работало как часы=)
Отличное решение имхо
Спасибо)
попробую, если сейчас не получится пример собрать
Перезапускать dma, кстати, в этом варианте как раз можно в перывании по окончании приёма.
почитай еще про IDLE в эррате что-то там было не так с ним в F1
я там у дядьки нашел пример он на ф1 написал поэтому надеюсь, что я протестирую, а своё на уже ф0 сделаю где буду тупо по биту RTO мониторить конец пакета
Обсуждают сегодня