I am using the MSP430F5510 to transfer a block of bytes out on the UART (USCI_A1). This works as expected. But: the MSP is hooked up to an infrared transceiver that has the nasty behaviour of immediately echoing back all bits that are sent to it.
Therefore I disable the RX interrupt upon initiating the DMA transfer and I enable the DMA interrupt. I expect the DMA interrupt to fire when the transfer is 'done' so I then enable the UART RX interrupt again. This way I expect no echoed bytes triggering the RX interrupt. Or at least; I expect only the LAST sent byte to possible triggering the RX interrupt, because the TX buffer can only hold one byte. The software is capable of detecting this last byte.
But what I see is the last 3 bytes (of a packet of 9 bytes) actually triggering the RX interrupt as soon as this is enabled in the DMA ISR. So I see the last 3 of the 9 bytes echoed back in my RX routine. How is this possible? It seems that the DMA ISR fires prematurely? Or that there somehow is some more buffering going on?! The IRDA transceiver does not do such a thing, it (more or less) immediately echoes back, and definitely does not delay a complete byte or so.
Edit: What I can check tomorrow is invert a pin of the MSP430 in the DMA ISR and see when this happens compared to the output bits on the UART TX...