Цитата(kurtis @ Dec 25 2008, 16:52)

Ну т.е. если используется Data Register Empty Interrupt и все работает, то особого смысла нету лезть и переделывать что-то под Transmit Compete Interrupt ?
UART имеет двойную буферизацию. Вы кладете байт в UDR, он "проваливается" в сдвигатель (UDR при этом оказывается свободным), и начинает передаваться из сдвигателя. В момент "проваливания" генерится прерывание UDRE, т.е. вы можете писать в UDR следующий байт и он будет ждать в UDR пока освободится сдвигатель. Сдвигатель освободился (заметьте, выданы только биты данных, биты четности и стоп-биты еще не переданы) - в него тут же будет записан новый байт из UDR (при этом UDR освободился и сгенерировано очередное прерывание UDRE), и после передачи стопового бита UART сможет сразу же, без пауз, начинать передачу очередного байта. Т.е. при передачи без пауз у вас есть запас по времени на запись очередного байта в UDR, равный времени передачи 8 бит+бита четности+стоп-битов.
Прерывание TXC возникает, когда выдвинут весь ваш байт из сдвигаетеля, после него выданы на выход бит четности (если включен) и стоп-биты, и к этому моменту в UDR нового байта нет. Если вы организуете запись в UDR по прерыванию TXC, то вы никак не сможете пердавать без пауз - после выдачи стоп-бита будет пауза пока вы отреагируете на прерывание и положите очередной байт в UDR.