Цитата(beer_warrior @ Jul 17 2006, 11:00)
Если байт попал в шифтер ничего уже сделать нельзя, автомат запущен, и сдвиг отработает.
Единственное, что можно попробовать, это обнулить UBRR, но это достаточно лихой номер и не факт, что сработает.
Ясно. Жаль. Задумка была нацелена на экономное решение приёма пакетов по протоколу MODBUS-RTU. Оно работает в симплексном режиме, и признаком ошибки является расстояние между байтами в пакете более 1.5 символа (ну, скажем 2, для круглости) и признаком конца пакета (и уже не ошибки) время простоя приёмника более 3.5 символов (для круглости 4). Думал, было бы, раз режим симплексный, отсчитывать интервалы самим UART-ом, пусть бы передатчик молотил и временные интервалы отмерял, но вот если кто-то будет отправлять байты на приём с паузами, то такой символьный таймер хрен остановишь, как выяснилось, и непонятно, что он там сможет намерять.
То есть, немного подробнее: когда приходит символ на приёмник, нужно запустить таймер. Некий абстрактный таймер с разрешением примерно 1 символ. Сгодился бы передатчик того-же UART, который бы пулял в космос, и генерил бы прерывания, которые я бы асинхронно считал.
Приём байт тоже асинхронный, так что корячится просто использование таймера, которых что-то мало осталось на чипе.
А касательно перенастройки ножки - сам включеный UART её переопределяет и он на ней самй главный.
В общем, опять AVR-ка показала свою негибкость.