This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28388D: SCI RX interrupt is not working

Part Number: TMS320F28388D
Other Parts Discussed in Thread: C2000WARE

Hi,

I'm trying to receive serial data from a sensor using the SCI ports.

So far, I used the C2000ware SCI interrupt example and checked that communication runs just fine.

However, as soon as I implement the example code into my own project, the SCI_RX interrupt won't run.

I also tried to get data without the interrupt, but the RXFFST or RXRDY flag doesn't seem to set even though I can see the data being sent with a signal analyzer.

I've double checked and I'm pretty sure I got the SCI related settings correctly, can't figure out why the SCI is not working.

Here are the settings and interrupt function I'm using.

void SCI_init(uint32_t base)
{
SCI_disableModule(SCIA_BASE);
//
// 8 char bits, 1 stop bit, no parity. Baud rate is 9600.
//
SCI_setConfig(SCIA_BASE, DEVICE_LSPCLK_FREQ, 115200, (SCI_CONFIG_WLEN_8 |
SCI_CONFIG_STOP_ONE |
SCI_CONFIG_PAR_NONE));

SCI_disableLoopback(SCIA_BASE);
// SCI_disableFIFO(SCIA_BASE);
SCI_resetChannels(SCIA_BASE);
SCI_enableFIFO(SCIA_BASE);

__interrupt void sciaRXFIFOISR(void)
{
SCI_readCharArray(SCIA_BASE, rDataA, 2);
SCI_rData = ((uint16_t)rDataA[1]<<8) | (uint16_t)rDataA[0];

SCI_intcnt++;

SCI_clearOverflowStatus(SCIA_BASE);

SCI_clearInterruptStatus(SCIA_BASE, SCI_INT_RXFF);

Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
}

//
// RX and TX FIFO Interrupts Enabled
//
// SCI_enableInterrupt(SCIA_BASE, (SCI_INT_RXFF | SCI_INT_TXFF));
SCI_enableInterrupt(SCIA_BASE, SCI_INT_RXFF);
SCI_disableInterrupt(SCIA_BASE, SCI_INT_RXERR);

//
// The transmit FIFO generates an interrupt when FIFO status
// bits are less than or equal to 2 out of 16 words
// The receive FIFO generates an interrupt when FIFO status
// bits are greater than equal to 2 out of 16 words
//
SCI_setFIFOInterruptLevel(SCIA_BASE, SCI_FIFO_TX2, SCI_FIFO_RX2);
SCI_performSoftwareReset(SCIA_BASE);
//
SCI_resetTxFIFO(SCIA_BASE);
SCI_resetRxFIFO(SCIA_BASE);

SCI_enableModule(SCIA_BASE);
}