Вообще говоря, это вопрос не по WinAVR как таковому, а по языку С и по организации программы.
В наиболее примитивном виде
Код
void USART_Transmit_block( void *ptr, size_t size)
{
uint8_t *p = (uint8_t*)ptr;
while(size--)
USART_Transmit( *p++);
}
...
USART_Transmit_block( &TX_Data, sizeof(TX_Data) );
В данном случае (8-битный процессор) о выравнивании можно не думать.