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++;
}