Part Number: LAUNCHXL-F28377S
Other Parts Discussed in Thread: C2000WARE
Tool/software: Code Composer Studio
I am using the following code to send serial data from Hyperterminal to the processor and receive it back on the HyperTerminal, after i press a key on the keyboard the same appears on the terminal after 5-10 secs and some of the data are also skipped. What is wrong?
#include "F28x_Project.h"
void TX(int x);
int RX();
__interrupt void TX_ISR();
__interrupt void RX_ISR();
char a;
Uint16 x;
//
void main()
{
char *msg;
InitSysCtrl();
InitGpio();
DINT;
PieCtrlRegs.PIECTRL.bit.ENPIE=1;
InitPieCtrl();
IER=0;
IFR=0;
InitPieVectTable();
EALLOW;
PieVectTable.SCIB_TX_INT=&TX_ISR;
PieVectTable.SCIB_RX_INT=&RX_ISR;
ClkCfgRegs.LOSPCP.bit.LSPCLKDIV=1;
EDIS;
EALLOW;
GPIO_SetupPinMux(87, GPIO_MUX_CPU1, 5);
GPIO_SetupPinOptions(87, GPIO_INPUT, GPIO_PUSHPULL);
GPIO_SetupPinMux(86, GPIO_MUX_CPU1, 5);
GPIO_SetupPinOptions(86, GPIO_OUTPUT, GPIO_ASYNC);
EDIS;
//initialisation//
ScibRegs.SCICCR.all = 0x0007;
ScibRegs.SCICTL1.all = 0x0003;
ScibRegs.SCIHBAUD.all = 0x0002;
ScibRegs.SCILBAUD.all = 0x008B;
ScibRegs.SCICTL2.all = 0x0003;
ScibRegs.SCICTL2.bit.TXINTENA = 1;
ScibRegs.SCICTL2.bit.RXBKINTENA = 1;
ScibRegs.SCICTL1.all = 0x0023;
//ScibRegs.SCICCR.bit.LOOPBKENA=1;
//fifo initialisation
ScibRegs.SCIFFTX.all = 0xE040;
ScibRegs.SCIFFRX.all = 0x2044;
ScibRegs.SCIFFCT.all = 0x0;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER9.bit.INTx3 = 1; // PIE Group 9, INT1
PieCtrlRegs.PIEIER9.bit.INTx4 = 1;
IER = 1; // Enable CPU INT
EINT;
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO12=1;
GpioCtrlRegs.GPADIR.bit.GPIO13=1;
EDIS;
while(1)
{
if(ScibRegs.SCIRXST.bit.RXRDY==1)
{
x=ScibRegs.SCIRXBUF.all;
TX(x);
}
}
}
void TX(int a)
{
while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}
ScibRegs.SCITXBUF.all =a;
}
int RX()
{ int ReceivedChar;
ReceivedChar = ScibRegs.SCIRXBUF.all;
return ReceivedChar;
}
__interrupt void TX_ISR()
{
ScibRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag
PieCtrlRegs.PIEACK.all|=0x100;
}
__interrupt void RX_ISR()
{
//ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag
ScibRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all|=0x100;
}