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.

SCI RX interrupt couldn't be triggered

Other Parts Discussed in Thread: TMS320F28335, CONTROLSUITE

I am using TMS320f28335. While trying to send data from  PC, a receive interrupt couldn't be triggered wheres as TX interrupt  is working properly, provided that data is written to TX buffer by software  initially.  would you  help me in solving the problem? Thank you a lot. My code is as follows:

interrupt void SCIBRXINT_ISR(void);
interrupt void SCIBTXINT_ISR(void);

void DataSend(void);

Unit16 counter;

void main(void)
{

 counter = 0;

SendData = 0; 

InitSysCtrl();

InitScibGpio();

InitVectTable();

InitCpuTimers();
ConfigCpuTimer(&CpuTimer0, 100, 100000); // 100MHz Clock under 20MHz  oscillator 

InitScis();

PieCtrlRegs.PIECTRL.bit.ENPIE = 1; 
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; 
PieCtrlRegs.PIEIER9.bit.INTx3 = 1;
PieCtrlRegs.PIEIER9.bit.INTx4 = 1;

IER = M_INT1|M_INT9;

EINT; // Enable Global interrupt INTM

ERTM; // Enable Global realtime interrupt DBGM
//============================================================================================


for(;;)
{

if(SendData)

{

DataSend();
SendData = 0;

}

}

}


//============================================================================================

void InitScis(void)
{


// 1 stop bit, No loopback, No parity,8 char bits, async mode, idle-line protocol

//--------------------------------------------------------------------------
// SCI b
//Uint16 SCICHAR:3; // 2:0 Character length control
//Uint16 ADDRIDLE_MODE:1; // 3 ADDR/IDLE Mode control
//Uint16 LOOPBKENA:1; // 4 Loop Back enable
//Uint16 PARITYENA:1; // 5 Parity enable
//Uint16 PARITY:1; // 6 Even or Odd Parity
//Uint16 STOPBITS:1; // 7 Number of Stop Bits
//Uint16 rsvd1:8; // 15:8 reserved
ScibRegs.SCICCR.all =0x0007;

//Uint16 RXENA:1; // 0 SCI receiver enable
//Uint16 TXENA:1; // 1 SCI transmitter enable
//Uint16 SLEEP:1; // 2 SCI sleep
//Uint16 TXWAKE:1; // 3 Transmitter wakeup method
//Uint16 rsvd:1; // 4 reserved
//Uint16 SWRESET:1; // 5 Software reset
//Uint16 RXERRINTENA:1; // 6 Recieve interrupt enable
//Uint16 rsvd1:9; // 15:7 reserved
ScibRegs.SCICTL1.all =0x0003;

//Uint16 TXINTENA:1; // 0 Transmit interrupt enable
//Uint16 RXBKINTENA:1; // 1 Receiver-buffer break enable
//Uint16 rsvd:4; // 5:2 reserved
//Uint16 TXEMPTY:1; // 6 Transmitter empty flag
//Uint16 TXRDY:1; // 7 Transmitter ready flag
//Uint16 rsvd1:8; // 15:8 reserved

ScibRegs.SCICTL2.all =0x0003;
ScibRegs.SCICTL2.bit.TXINTENA =1; 
ScibRegs.SCICTL2.bit.RXBKINTENA =1; 



ScibRegs.SCIHBAUD =0x0000;

// 57600

ScibRegs.SCILBAUD =0x0035; // 53 = 0x35

ScibRegs.SCICTL1.all =0x0023; // sw reset


//------------------------------------------------------
// SCI 
// TXFFIL:5; 0 // 4:0 Interrupt level : 
// TXFFIENA:1; 0 // 5 Interrupt enable
// TXFFINTCLR:1; 1 // 6 Clear INT flag
// TXFFINT:1; 0 // 7 INT flag
// TXFFST:5; 0 // 12:8 FIFO status
// TXFIFOXRESET:1; 1 // 13 FIFO reset
// SCIFFENA:1; 1 // 14 Enhancement enable
// SCIRST:1; 1 // 15 SCI reset rx/tx channels


// TXFFIL:5; 01000 // 4:0 Interrupt level 
// TXFFIENA:1; 1 // 5 Interrupt enable
// TXFFINTCLR:1; 0 // 6 Clear INT flag
// TXFFINT:1; 0 // 7 INT flag
// TXFFST:5; 0 // 12:8 FIFO status
// TXFIFOXRESET:1; 0 // 13 FIFO reset
// SCIFFENA:1; 0 // 14 Enhancement enable
// SCIRST:1; 0 // 15 SCI reset rx/tx channels

// SCI B

// org ScibRegs.SCIFFTX.all=0xE040; // TX FIFO enable
// org ScibRegs.SCIFFRX.all=0x0028; // RX FIFO enable
ScibRegs.SCIFFTX.all=0xA040; // TX FIFO diable
ScibRegs.SCIFFRX.all=0x204f; // RX FIFO disable

ScibRegs.SCIFFCT.all=0x00;

//ScibRegs.SCIFFTX.bit.TXFIFOXRESET=1;
//ScibRegs.SCIFFRX.bit.RXFIFORESET=1;

ScibRegs.SCICTL1.bit.SWRESET = 1;
ScibRegs.SCICTL1.bit.TXENA = 1;
ScibRegs.SCICTL1.bit.RXENA = 1;


}

void InitVectTable(void)

{

DINT; //Disable Global Interrupt
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;

PieVectTable.TINT0 = &cpu_timer0_isr;
PieVectTable.SCIRXINTB = &SCIBRXINT_ISR;

PieVectTable.SCITXINTB = &SCIBTXINT_ISR;

EDIS;
}

void DataSend(void)

{

ScibRegs.SCICTL2.bit.TXINTENA = 1

ScibRegs.SCITXBUF = 0xAA;

}

interrupt void cpu_timer0_isr(void)
{

SendData = 1;

PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1;

}

interrupt void SCIBRXINT_ISR(void) 
{
Uint16 InByte;

PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; 

InByte = (ScibRegs.SCIRXBUF.all & 0x00ff);

}

/*********************************************************************/
interrupt void SCIBTXINT_ISR(void) 
{
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; 

ScibRegs.SCITXBUF =  counter++;
}

  • Hi Fikadu,

    Did you try referring scia_loopback_interrupts example in controlSuite:
    C:\ti\controlSUITE\device_support\f2833x\v141\DSP2833x_examples_ccsv5\scia_loopback_interrupts

    Just disable the loopback feature.

    Regards,
    Gautam