Transfer Complete is preferable to TX Empty when using a DMA since we could be polling the bit between transfers. TXE would be 1 but the DMA would be transfering another at the same time. TC takes the DMA into account
Each buffer should use its own byte index since the value would otherwise be overwritten when writing to other buffers