Hi,
My configuration is below:
SciaRegs.SCICTL1.bit.SWRESET = 0;
SciaRegs.SCIFFTX.bit.SCIRST = 0;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 0;
SciaRegs.SCICCR.bit.STOPBITS = 0;
SciaRegs.SCICCR.bit.PARITYENA = 0;
SciaRegs.SCICCR.bit.LOOPBKENA = 0;
SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0;
SciaRegs.SCICCR.bit.SCICHAR = 0x7;
SciaRegs.SCICTL1.bit.RXERRINTENA = 0;
SciaRegs.SCICTL1.bit.TXWAKE = 0;
SciaRegs.SCICTL1.bit.SLEEP = 0;
SciaRegs.SCICTL1.bit.TXENA = 1;
SciaRegs.SCICTL1.bit.RXENA = 1;
SciaRegs.SCICTL2.bit.TXINTENA = 1;
SciaRegs.SCICTL2.bit.RXBKINTENA = 0;
SciaRegs.SCIFFTX.bit.SCIFFENA = 1;
SciaRegs.SCIFFTX.bit.TXFFIENA = 0;
SciaRegs.SCIFFTX.bit.TXFFINTCLR = 1;
SciaRegs.SCIFFTX.bit.TXFFIL = 0;
SciaRegs.SCIFFCT.all = 0x0;
SciaRegs.SCIHBAUD = 0x00;
SciaRegs.SCILBAUD = 11; // 937,500 bits/s
SciaRegs.SCICTL1.bit.SWRESET = 1;
SciaRegs.SCIFFTX.bit.SCIRST = 1;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
What I want to do is to send 8 bytes of information every 20ms, for which I use a timer. I do this in the following steps:
1. Enter timer interrupt.
2. Add 4 bytes of data in TX FIFO.
3. Enable TX FIFO interrupt.
4. Acknowledge timer interrupt and exit.
5. Enter TX FIFO interrupt when the FIFO is empty.
6. Add the last 4 bytes of data in TX FIFO.
7. Disable TX FIFO interrupt.
8. Acknowledge TX FIFO interrupt and exit.
9. Repeat.
However, for some reason the PIE flag for TX FIFO interrupt is set as soon as I enable the interrupt. Which means that the program exits the timer interrupt and IMMEDIATELY enters the TX FIFO interrupt, even though the TX FIFO is not yet empty. This causes me to lose about half of all my messages. Any idea how to fix this? I've tried clearing the TX FIFO interrupt before exiting the timer interrupt etc but it doesn't help.
Regards
Christian