Hi,
I am using TMS320F28335. And I just want to exchange data between Transmit and Receive pins i.e in Loopback mode.
And below is the configuration I am using .
UART_Config()
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; // SCI-A
EDIS;
EALLOW;
/* Enable internal pull-up for the selected pins */
// Pull-ups can be enabled or disabled disabled by the user.
// This will enable the pullups for the specified pins.
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; // Enable pull-up for GPIO28 (SCIRXDA)
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0; // Enable pull-up for GPIO29 (SCITXDA)
/* Set qualification for selected pins to asynch only */
// Inputs are synchronized to SYSCLKOUT by default.
// This will select asynch (no qualification) for the selected pins.
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3; // Asynch input GPIO28 (SCIRXDA)
/* Configure SCI-A pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be SCI functional pins.
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; // Configure GPIO28 for SCIRXDA operation
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; // Configure GPIO29 for SCITXDA operation
EDIS;
SciaRegs.SCICCR.bit.SCICHAR = UART_EIGHT_BIT_DATA;
SciaRegs.SCICCR.bit.PARITYENA = SCI_DIS_PARITY;
SciaRegs.SCICCR.bit.STOPBITS = SCI_STOP_BIT_1;
/*LoopBack Enable*/
SciaRegs.SCICCR.bit.LOOPBKENA = SCI_LOOP_BK_ENA;
/* Clear SW_Reset */
SciaRegs.SCICTL1.bit.SWRESET = SCI_CLEAR_SW_RESET ;
/* Choose the baudrate */
SciaRegs.SCIHBAUD = SCI_37_5_BAUD_115200>> 8;
SciaRegs.SCILBAUD = SCI_37_5_BAUD_115200;
SciaRegs.SCIFFRX.bit.RXFFOVRCLR = SCI_CLEAR_RX_FIFO_OVF;
SciaRegs.SCIFFRX.bit.RXFIFORESET = SCI_RX_FIFO_RST;
SciaRegs.SCIFFRX.bit.RXFFIENA = SCI_RX_FIFO_INT_DIS;
SciaRegs.SCIFFRX.bit.RXFFINTCLR = SCI_RX_FIFO_INT_CLR;
SciaRegs.SCIFFRX.bit.RXFFIL = SCI_RX_FIFO_LEVEL_31; /* 0x001F */
/*
*
*/
SciaRegs.SCIFFTX.all = (SS_U16)0;
SciaRegs.SCIFFTX.bit.SCIRST = SCI_TX_RX_RESUME;
//SciaRegs.SCIFFTX.bit.SCIFFENA = SCI_FIFO_ENHANC_ENA;
SciaRegs.SCIFFTX.bit.SCIFFENA = SCI_FIFO_ENHANC_DIS;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = SCI_TX_FIFO_RESET;
SciaRegs.SCIFFTX.bit.TXFFIENA = SCI_TX_FIFO_INT_DIS;
SciaRegs.SCIPRI.bit.FREE = SCI_FREE_RUN;
SciaRegs.SCIFFCT.bit.CDC = SCI_DISABLE_AUTO_BAUD;
SciaRegs.SCIFFCT.bit.FFTXDLY = 0;
SciaRegs.SCICTL1.bit.SWRESET = SCI_SET_SW_RESET;
SciaRegs.SCICTL1.bit.RXENA=1;
SciaRegs.SCICTL1.bit.TXENA=1;
}
And below is the transmit and reception functions
void UART_Transmit()
{
if(SciaRegs.SCICTL2.bit.TXRDY IS 1)
{
/* Transmit Data Register is empty, transmit the data */
SciaRegs.SCITXBUF = dataToTransmit;
}
}
UART_Receive()
{
status = (SS_U16)SciaRegs.SCIFFRX.bit.RXFFST;
if (status != 0)
{
/* Put data in the hardware register to software buffer */
*receivedData = (SS_U8)SciaRegs.SCIRXBUF.bit.RXDT;
}
}
I am trying to transmit a string {"ABCD"}. The problem is I get no data on either Transmit or recieve pins(GPIO28 and GPIO29) when probed.The lines remain always High. But I can see the data on the registers. I do not want to use any FIFO, just a single transfer and receive should be fine for me.
Could anyone please let me know what might be the problem with my configuration. Is there any other method to configure the GPIO to work for SCIA. Is there something I am missing?
And the clock I am using is 150MHZ and so the LSPCLK will be 150Mhz/4 .
Please suggest .
Thanks
Rohini