Kenny's suggestions are all good.
> If the UART can keep up with 200 bytes, why does it need a pause before the next block of data?
I'm interpreting that statement to say that the sender is sending 200 bytes as a "packet" of some sort, and the receiver is also expecting 200 bytes.
200/6 = 33.333
So you'll get 33 25% full interrupts, and then the last two bytes will sit in the FIFO until the timer goes off, or until the next message comes in and fills the FIFO up to the trigger point.
So if the sender waits long enough for the receive timer to go off it all works, but if it "pushes" them through it doesn't.
That suggests that whatever your receiving code does after receiving that "200 byte message" is the problem.
Somehow it is locking out the receiver interrupts. Maybe it is written to somehow reprogram or reset the UART every message. Maybe the receive buffer is "locked" or "full" and the receiver interrupt can't write the data (and doesn't count this as an error condition). Maybe the receiver is "wrapping the ring" without checking.
WHICH bytes go missing? Are they the first ones after the receiver does something (like process a message/packet)? How many does it drop at a time? The number (dropped) will tell you how long the receiver was locked out or getting errors.
Are you getting any UART receiver errors like overruns? Are you checking or counting them, or ignoring all errors? You should add error checking to the receiver.
Do you have a circular buffer, or a single buffer that needs to be "processed" at some point? Do you have "ping-pong" receive buffers? Do you handle/count/report software buffer overflow? Does your "end of circular buffer" code work properly?
Do you disable interrupts around ring pointer access in the mainline? Are all your shared variables marked "volatile"? If you've got any shared variables they may be suffering interrupt hazards.
Tom