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.

LAUNCHXL-F28379D: Receiving data from launchpad and sending it to arduino uno

Part Number: LAUNCHXL-F28379D


Hi,

I am currently working on receiving data from launchpad and just let it pop up on arduino's terminal.  I'm currently using these pins in sci_echoback.

   GPIO_SetupPinMux(64, GPIO_MUX_CPU1, 6);
   GPIO_SetupPinOptions(64, GPIO_INPUT, GPIO_PUSHPULL);
   GPIO_SetupPinMux(65, GPIO_MUX_CPU1, 6);
   GPIO_SetupPinOptions(65, GPIO_OUTPUT, GPIO_ASYNC);

I connected 64 to arduino's tx and 65 to arduino's rx. I'm getting random values as output. Am i missing something?

 

  • Hi silsio,

    GPIO 64 and 65 are associate with SCI instance D. Is your code using this instance?

    Are you sure the baud rate configurations for both MCUs match? What about the packet format (#stop bits, parity bit enabled, parity polarity)?

    Does the other MCU have compatible IO levels when directly connected to the F28379D? (Vil, Vih, Vol, Voh)

    Have you verified that serial packets are as expected (format, baud, data, etc.) via scope or logic analyzer connected to the lines between the MCUs?
  • Hi, the data sheet shows that gpio 64 and 65 work with sci stance A. Can you please verify that?
    yes, I matched the baud rate and made sure that the packet format is the same.
    ARduino uno has same compatible levels as F28379D.
    No, I have not verified the serial packets transmissions. But, I am just running the same code as ecohoback.
  • Hi Silsio,

    Sorry, I did misread the datasheet; those pins are indeed associated with SCI-A.

    -Did you also comment out the original GPIO configurations in the SCI-echoback code?
    -In addition to the TX and RX pins, did you also connect the board grounds for the two MCU boards?
    -Are you still using the default SCI-echoback clocking setup? What are the PLL settings? Are you sure the C2000 is running at 200MHz off of the XTAL on the launchpad?

    I'm not sure what debug steps to take at this point other than to verify that the activity on the pins is as expected. You could also get an RS-232 transceiver and try to connect to a PC instead of the Arduino (and then do the same with the Arduino: test the communication from PC to Arduino via transceiver).
  • Hi,

    1. I fail to understand what you meant by original gpio pins. I have attached my code below. That is what i am trying to load. I connected TX-RX, RX-TX and GND_GND. I have added a predeifned symbol "_LAUNCHXL_F28379D". I assume this one sets up the system.

    //###########################################################################
    //
    // FILE:    Example_2837xDSci_Echoback.c
    //
    // TITLE:   SCI Echoback.
    //
    //! \addtogroup cpu01_example_list
    //! <h1>SCI Echoback (sci_echoback)</h1>
    //!
    //!  This test receives and echo-backs data through the SCI-A port.
    //!
    //!  The PC application 'hyperterminal' or another terminal
    //!  such as 'putty' 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 or another terminal such as putty:
    //!
    //!  For hyperterminal you can 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 dialogue and select the correct COM port.
    //!  -# Connect hyperterminal Call->Call
    //!  and then start the 2837xD 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, or you are using
    //!  a different terminal, you can open a COM port 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
    //!  - LoopCount - the number of characters sent
    //!
    //! \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: F2837xD Support Library v3.05.00.00 $
    // $Release Date: Thu Oct 18 15:48:42 CDT 2018 $
    // $Copyright:
    // Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/
    //
    // Redistribution and use in source and binary forms, with or without 
    // modification, are permitted provided that the following conditions 
    // are met:
    // 
    //   Redistributions of source code must retain the above copyright 
    //   notice, this list of conditions and the following disclaimer.
    // 
    //   Redistributions in binary form must reproduce the above copyright
    //   notice, this list of conditions and the following disclaimer in the 
    //   documentation and/or other materials provided with the   
    //   distribution.
    // 
    //   Neither the name of Texas Instruments Incorporated nor the names of
    //   its contributors may be used to endorse or promote products derived
    //   from this software without specific prior written permission.
    // 
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
    // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
    // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
    // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
    // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
    // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
    // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    // $
    //###########################################################################
    
    //
    // Included Files
    //
    #include "F28x_Project.h"
    
    //
    // Globals
    //
    Uint16 LoopCount;
    
    //
    // Function Prototypes
    //
    void scia_echoback_init(void);
    void scia_fifo_init(void);
    void scia_xmit(int a);
    void scia_msg(char *msg);
    
    //
    // Main
    //
    void main(void)
    {
        Uint16 ReceivedChar;
        char *msg;
    
    //
    // Step 1. Initialize System Control:
    // PLL, WatchDog, enable Peripheral Clocks
    // This example function is found in the F2837xD_SysCtrl.c file.
    //
       InitSysCtrl();
    
    //
    // Step 2. Initialize GPIO:
    // This example function is found in the F2837xD_Gpio.c file and
    // illustrates how to set the GPIO to it's default state.
    //
       InitGpio();
    
    //
    // For this example, only init the pins for the SCI-A port.
    //  GPIO_SetupPinMux() - Sets the GPxMUX1/2 and GPyMUX1/2 register bits
    //  GPIO_SetupPinOptions() - Sets the direction and configuration of the GPIOS
    // These functions are found in the F2837xD_Gpio.c file.
    //
       GPIO_SetupPinMux(64, GPIO_MUX_CPU1, 6);
       GPIO_SetupPinOptions(64, GPIO_INPUT, GPIO_PUSHPULL);
       GPIO_SetupPinMux(65, GPIO_MUX_CPU1, 6);
       GPIO_SetupPinOptions(65, GPIO_OUTPUT, GPIO_ASYNC);
    
    //
    // 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 F2837xD_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 F2837xD_DefaultIsr.c.
    // This function is found in F2837xD_PieVect.c.
    //
       InitPieVectTable();
    
    //
    // Step 4. User specific code:
    //
       LoopCount = 0;
    
       scia_fifo_init();       // Initialize the SCI FIFO
       scia_echoback_init();   // Initialize SCI for echoback
    Uint16 s=0;
    
       for(;;)
       {
           //msg = "\r\nEnter a character: \0";
           //scia_msg(msg);
    
           //
           // Wait for inc character
           //
           //while(SciaRegs.SCIFFRX.bit.RXFFST == 0) { } // wait for empty state
    
           //
           // Get character
           //
           ReceivedChar = s;
    
           //
           // Echo character back
           //
           //msg = "  You sent: \0";
           //scia_msg(msg);
           scia_xmit(ReceivedChar);
    
           DELAY_US(500000);
           s++;
           LoopCount++;
       }
    }
    
    //
    //  scia_echoback_init - 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.all = 0x0003;
        SciaRegs.SCICTL2.bit.TXINTENA = 1;
        SciaRegs.SCICTL2.bit.RXBKINTENA = 1;
    
        //
        // SCIA at 9600 baud
        // @LSPCLK = 50 MHz (200 MHz SYSCLK) HBAUD = 0x02 and LBAUD = 0x8B.
        // @LSPCLK = 30 MHz (120 MHz SYSCLK) HBAUD = 0x01 and LBAUD = 0x86.
        //
        SciaRegs.SCIHBAUD.all = 0x0002;
        SciaRegs.SCILBAUD.all = 0x008B;
    
        SciaRegs.SCICTL1.all = 0x0023;  // Relinquish SCI from Reset
    }
    
    //
    // scia_xmit - Transmit a character from the SCI
    //
    void scia_xmit(int a)
    {
        while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}
        SciaRegs.SCITXBUF.all =a;
    }
    
    //
    // scia_msg - Transmit message via SCIA
    //
    void scia_msg(char * msg)
    {
        int i;
        i = 0;
        while(msg[i] != '\0')
        {
            scia_xmit(msg[i]);
            i++;
        }
    }
    
    //
    // scia_fifo_init - Initialize the SCI FIFO
    //
    void scia_fifo_init()
    {
        SciaRegs.SCIFFTX.all = 0xE040;
        SciaRegs.SCIFFRX.all = 0x2044;
        SciaRegs.SCIFFCT.all = 0x0;
    }
    
    //
    // End of file
    //
    

    This is the basic code I have in ARduino ide to run a simple recongnition test:

    void setup() {
    // initialize serial communication at 9600 bits per second:
    Serial.begin(9600);
    pinMode(D0,INPUT);
    incomingByte = digitalRead(D0);
    // make the pushbutton's pin an input:
    }
    
    void loop() {
    
    // say what you got:
    Serial.print("I received: ");
    Serial.println(incomingByte, HEX);
    }
    
    

  • I got it working.