Part Number: LAUNCHXL-F280049C
Tool/software:
Hello Group,
It would seem there is a misprint in the TRM SCIFFRX register description field, to clear a read only bit 7 when bit 6 is R/W? Bit zero is real in base 10 and not considered bit 1, a typo?
The defines used to R/W the SCIFFRX interrupt status and clear seems incorrect, not reading clearing correct bits in FIFFO level interrups mode. Oddly suspicious SCI_RXST_BRKDT in SCI_O_RXST register returns status being used in FIFO level mode to only drive the RXISR via interruptStatus |= SCI_INT_RXRDY.
Thought the debug GEL register names the bit field (RXWAKE) the flag bit is not at all a PIE/CPU interrupt status flag? Perhaps in blocking mode some of the C2KWare status and clear calls work correctly to clear blocking flags via the read buffer. Also, for FIFO level mode interrupts TRM states to place RX buffer overflow error detection routine inside the ISR and enable BRKDT interrupt for early error detection. Yet the receiver flags OE, PE, FE status flags were cleared after entry to the SCIRXFFE ISR by calling SCI_clearInterruptStatus().
Seemingly C2Kware needs to separate TX/RX buffer read mode ISR's and SCIFIFRX/TX interrupt status and interrupt clear functions FIFO level mode. C2KWare driver library forces both ISR modes into one function respectively and forces RX error SW reset when that is to be put inside the RXISR. Result of library mayhem; SCIFFRX interrupt not being cleared there are random OE errors, the wrong bits defines (sci.h) for SCIFFRX register shown below.

SCI_clearInterruptStatus():
if((HWREGH(base + SCI_O_FFRX) & SCI_FFRX_RXFFINT) == SCI_FFRX_RXFFINT)
{
interruptStatus |= SCI_INT_RXFF; // 0x10U ??
}
SCI_getInterupt Status()
if((HWREGH(base + SCI_O_FFRX) & SCI_FFRX_RXFFINT) == SCI_FFRX_RXFFINT)
{
interruptStatus |= SCI_INT_RXFF; // 0x40U ??
}
