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.

Serial Communication F28035

Other Parts Discussed in Thread: MAX3232

Hello,

            Would my dsp malfunction after initialy i connect tx_data and rx_data pins on f28035 kit wrongly?

I checked the dsp in sci loopback mode and this works correctly. Now if i use sci echo back code, with tx_data of dsp directly connected to rx_data of dsp; i.e. i use no external MAX3232 circuit; so as to check the functionality of dsp;

       I find:

                The code to hang at line 

       while(SciaRegs.SCIFFRX.bit.RXFFST !=1) { } // wait for XRDY =1 for empty state

 

What is wrong?

Has my DSP malfunctioned?

Please Help,

Regards,

Shantanu

 

 

 

 

 

 

  • Shantanu,

    When you run the sci_echoback example, did the receive the following message in the hyperterminal?

    You must have seen these messages in hyperterminal:

    Hello World!

    You will enter a character, and the DSP will echo it back!

    Enter a character:                           

    Based on your message, this statement while(SciaRegs.SCIFFRX.bit.RXFFST !=1) { } put the device in an infinite loop till it receives the word from the hyperterminal. Since, it has entered infinite loop it tells me that the SCI in F28035 has not yet received the word from hyperterminal. I hope you have connected your PC to the device using DB9 Connector.

    Regards,

    Manoj

  • i continuously send data; also loop count is zero; 

     

    loop count shld increase if i had received data;

    i see tht receive buffer has the sent data;

    wht to do?

  • Shantanu,

    I presume you have made the necessary connections with DB9 connector and you are able to see the messages in the hyperterminal window correctly.

    LoopCount variable is not incremented because it is still stuck in the infinite loop (while(SciaRegs.SCIFFRX.bit.RXFFST !=1) { }). Did you check the value of SCIFFRX register (Bits 8:12)?

    Also, what is the character you are entering when the hyperterminal prompts "Enter the character"?

    Regards,

    Manoj

     

  • Hi All,

    I use the project SCI echoback for the Control Card Piccolo F28035.

    I set my Hyperterminal with baud rate 9600 and I see the message in the screen as good

    Hello World!
    You will enter a character, and the DSP will echo it back!

    Enter a character:

    I try to send some characters by type on my hyperterminal and press Enter but I don't receive any (LoopCount is still zero).

    Do you have any idea?

    (In the file I used both cases of

           //while(SciaRegs.SCIFFRX.bit.RXFFST !=1) { } // wait for XRDY =1 for empty state
           while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // wait for XRDY =1 for empty state

    )

    Thank you very much for your time.

    Jack 


    ////////////////////////////// This is my file/////////////////////////////////////////////////////////////////////////////

    //###########################################################################
    //
    //!  \addtogroup f2803x_example_list
    //!  <h1>SCI Echo Back(sci_echoback)</h1>
    //!
    //!  This test receives and echo-backs data through the SCI-A port.
    //!
    //!  The PC application 'hypterterminal' can be used to view the data
    //!  from the SCI and to send information to the SCI.  Characters received
    //!  by the SCI port are sent back to the host.
    //!
    //!  \b Running \b the \b Application   
    //!  -# Configure hyperterminal:
    //!  Use the included hyperterminal configuration file SCI_96.ht.
    //!  To load this configuration in hyperterminal
    //!    -# Open hyperterminal
    //!    -# Go to file->open
    //!    -# Browse to the location of the project and
    //!       select the SCI_96.ht file.
    //!  -# Check the COM port.
    //!  The configuration file is currently setup for COM1.
    //!  If this is not correct, disconnect (Call->Disconnect)
    //!  Open the File-Properties dialog and select the correct COM port.
    //!  -# Connect hyperterminal Call->Call
    //!  and then start the 2803x SCI echoback program execution.
    //!  -# The program will print out a greeting and then ask you to
    //!  enter a character which it will echo back to hyperterminal.
    //!
    //!  \note If you are unable to open the .ht file, you can create
    //!  a new one with the following settings
    //!  -  Find correct COM port
    //!  -  Bits per second = 9600
    //!  -  Date Bits = 8
    //!  -  Parity = None
    //!  -  Stop Bits = 1
    //!  -  Hardware Control = None
    //!
    //!  \b Watch \b Variables \n
    //!  - \b LoopCount, for the number of characters sent
    //!  - ErrorCount
    //!
    //! \b External \b Connections \n
    //!  Connect the SCI-A port to a PC via a transceiver and cable.
    //!  - GPIO28 is SCI_A-RXD (Connect to Pin3, PC-TX, of serial DB9 cable)
    //!  - GPIO29 is SCI_A-TXD (Connect to Pin2, PC-RX, of serial DB9 cable)
    //
    //###########################################################################
    // $TI Release: F2803x C/C++ Header Files and Peripheral Examples V1.25 $
    // $Release Date: August 26, 2011 $
    //###########################################################################

    #include "DSP28x_Project.h"     // Device Headerfile and Examples Include File

    // Prototype statements for functions found within this file.
    void scia_echoback_init(void);
    void scia_fifo_init(void);
    void scia_xmit(int a);
    void scia_msg(char *msg);

    // Global counts used in this example
    Uint16 LoopCount;
    Uint16 ErrorCount;

    void main(void)
    {

        Uint16 ReceivedChar;
        char *msg;

    // Step 1. Initialize System Control:
    // PLL, WatchDog, enable Peripheral Clocks
    // This example function is found in the DSP2803x_SysCtrl.c file.
       InitSysCtrl();

    // Step 2. Initalize GPIO:
    // This example function is found in the DSP2803x_Gpio.c file and
    // illustrates how to set the GPIO to it's default state.
       // InitGpio(); Skipped for this example

    // For this example, only init the pins for the SCI-A port.
    // This function is found in the DSP2803x_Sci.c file.
       InitSciaGpio();

    // Step 3. Clear all interrupts and initialize PIE vector table:
    // Disable CPU interrupts
       DINT;

    // Initialize PIE control registers to their default state.
    // The default state is all PIE interrupts disabled and flags
    // are cleared.
    // This function is found in the DSP2803x_PieCtrl.c file.
       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 DSP2803x_DefaultIsr.c.
    // This function is found in DSP2803x_PieVect.c.
       InitPieVectTable();

    // Step 4. Initialize all the Device Peripherals:
    // This function is found in DSP2803x_InitPeripherals.c
    // InitPeripherals(); // Not required for this example

    // Step 5. User specific code:

        LoopCount = 0;
        ErrorCount = 0;

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

        msg = "\r\n\n\nHello World!\0";
        scia_msg(msg);

        msg = "\r\nYou will enter a character, and the DSP will echo it back! \n\0";
        scia_msg(msg);

        for(;;)
        {
           msg = "\r\nEnter a character: \0";
           scia_msg(msg);

           // Wait for inc character
           //while(SciaRegs.SCIFFRX.bit.RXFFST !=1) { } // wait for XRDY =1 for empty state
           while(SciaRegs.SCIFFRX.bit.RXFFST ==0) { } // wait for XRDY =1 for empty state

           // Get character
           ReceivedChar = SciaRegs.SCIRXBUF.all;

           // Echo character back
           msg = "  You sent: \0";
           scia_msg(msg);
           scia_xmit(ReceivedChar);

           LoopCount++;
        }

    }

    // Test 1,SCIA  DLB, 8-bit word, baud rate 0x000F, default, 1 STOP bit, no parity
    void scia_echoback_init()
    {
        // Note: Clocks were turned on to the SCIA peripheral
        // in the InitSysCtrl() function

         SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                       // No parity,8 char bits,
                                       // async mode, idle-line protocol
        SciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                       // Disable RX ERR, SLEEP, TXWAKE
        SciaRegs.SCICTL2.bit.TXINTENA =1;
        SciaRegs.SCICTL2.bit.RXBKINTENA =1;

        SciaRegs.SCIHBAUD    =0x0000;  // 9600 baud @LSPCLK = 15MHz (60 MHz SYSCLK).
        SciaRegs.SCILBAUD    =0x00C2;

        SciaRegs.SCICTL1.all =0x0023;  // Relinquish SCI from Reset
    }

    // Transmit a character from the SCI
    void scia_xmit(int a)
    {
        while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}
        SciaRegs.SCITXBUF=a;

    }

    void scia_msg(char * msg)
    {
        int i;
        i = 0;
        while(msg[i] != '\0')
        {
            scia_xmit(msg[i]);
            i++;
        }
    }

    // Initalize the SCI FIFO
    void scia_fifo_init()
    {
        SciaRegs.SCIFFTX.all=0xE040;
        SciaRegs.SCIFFRX.all=0x2044;
        SciaRegs.SCIFFCT.all=0x0;

    }

    //===========================================================================
    // No more.
    //===========================================================================


  • I had a problem like that.

    The error was at the InitSciaGpio() function, it wasn't initializing the correct pin.  InitSciaGpio() was a copy of InitScibGpio() so it was configuring the pins for the Scib module. When I changed the gpio configuration (# 7 and #12 for scia in f28069)  in the the InitSciaGpio() function, the communication was succesfull.

    I Hope this helps.

    Rodrigo