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.

CCS/TMS320F28379D: SCIA Settings for Receive Interrupt and Echoback

Part Number: TMS320F28379D

Tool/software: Code Composer Studio

I want to implement the Example_2837xDSCi_Echoback.c with a receive interrupt.

I tried with the following settings

InitPieCtrl();

//
// Disable CPU __interrupts and clear all CPU __interrupt flags:
//
   IER = 0x0000;
   IFR = 0x0000;

//
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the __interrupt
// is not used in this example.  This is useful for debug purposes.
// The shell ISR routines are found in F2837xD_DefaultIsr.c.

InitPieVectTable();
   EALLOW;  
      PieVectTable.SCIA_RX_INT = &sciaRxFifoIsr;

   EDIS; 
   
   scia_fifo_init();       // Initialize the SCI FIFO
   scia_echoback_init();   // Initialize SCI for echoback

   PieCtrlRegs.PIECTRL.bit.ENPIE = 1;   // Enable the PIE block
   PieCtrlRegs.PIEIER9.bit.INTx1 = 1;   // PIE Group 9, INT1
   PieCtrlRegs.PIEIER9.bit.INTx2 = 1;   // PIE Group 9, INT2
   IER = 0x100;                         // Enable CPU INT
   EINT;

void scia_echoback_init()
{
    SciaRegs.SCICCR.all = 0x0007;   
                                    
    SciaRegs.SCICTL1.all = 0x0003;  
    SciaRegs.SCICTL2.all = 0x0003;
    SciaRegs.SCICTL2.bit.TXINTENA = 1;
    SciaRegs.SCICTL2.bit.RXBKINTENA = 1;

    
    SciaRegs.SCIHBAUD.all = 0x0000;
    SciaRegs.SCILBAUD.all = 0x00C2;

    SciaRegs.SCICTL1.all = 0x0023;  
}

interrupt void sciaRxFifoIsr(void)
{
    Uint16 i;

    i=SciaRegs.SCIRXBUF.all;  // Read data

    scia_xmit(i);

    SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;   
    SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;   

    SciaRegs.SCIRXST.bit.RXRDY=1;

    PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;      
}

void scia_fifo_init()
{
    SciaRegs.SCIFFTX.all = 0xE040;
    SciaRegs.SCIFFRX.all = 0x2044;
    SciaRegs.SCIFFCT.all = 0x0;
}

It should be a simple code which accepts a uint16 and echos it back.

From the above settings, the interrupt subroutine itself is not getting triggered when a character is sent over the COM port.

  • Hi Soham,

    Do you see data being transmitted on the SCI pin? Do you see received data in the receive buffer/fifo but the ISR isn't triggered, or no data is received at all?

    Can you successfully run the sci_loopback_interrupts example and get RX interrupts? If yes, what is different vs. this code?