ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
879286 Топик полностью
evgeniy1294 (28.10.2018 01:14 - 01:20, просмотров: 145) ответил AlexBi_ на Что бы понять в каком байте ошибка придется проводить манипуляции с ДМА, нарушающие всю его работу. А если нужна возможность работы когда в каждом байте ошибка, то польза от ДМА может совсем потеряться.
У меня все на DMA, мастеров, которые строго требуют выдерживания паузы для ответа избегаю. Это архаизм уже, в новой аппаратуре типа delta, mitsubishi и др. такого не встречал.  Удобно же: port->write(pdata, size); // отправили, zero copy //........... uint32_t size = port->read(pdata); // Приняли, копирование из буфера. // А можно так, zero copy port->setbuf(pbuf); //........... bool check = port->rxCheck(); // Все делается на прерываниях типа IDLE и TC. Сам по себе порт построен как конечный автомат, поэтому можно легко и задержку впихнуть: hal::timer delay; //структура timer просто удобная оболочка взаимодействия с systick // В конечном автомате delay.set(3); state = state::delay; //........ case state::delay: if (delay.check()) { state = state::next; delay.stop(); // не обязательно } break; Контролировать целостность каждого байта не вижу смысла, есть CRC.