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.

CCS/TMS320F28069: SCI in F28069

Part Number: TMS320F28069


Tool/software: Code Composer Studio

Hi..

The last time i ask a question on this forum , i was think that my program is going well. But,  it wasn't. I try o send data from Arduino Uno to TI through SCI-A. I hope that the serial monitor of TI (i'm using PuTTY) can show the arduino data. If I use the default program, specially this part :

void
scia_msg(char * msg)
{
int i;
i = 0;

while (msg[i] != '\0')
{
scia_xmit(msg[i]);
i++;
}
}

the PuTTY can show the main MESSAGE (Hello World,etc) , but the data that i send from arduino is not sent completely. For example, if i send "123456", PuTTY only shows :

Hello World

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

Enter a charachter :    Data A':  1

Enter a charachter :    Data A':  0

Enter a charachter :    Data A':  

Enter a charachter :    Data A': 

Enter a charachter :    Data A': 

Enter a charachter :

But,  if i change the program like this :

void
scia_msg(char * msg)
{
int i;
i = 0;

while (msg[i] =='#')   //because i'm using '#' for enter operation in arduino program
{
scia_xmit(msg[i]);
i++;
}
}

 


serial monitor of TI (PuTTY) can shows the data that i send from arduino completely. But the main MESSAGE (Hello World, etc) of CCS program is not show on the PuTTY. 

The point is, i wanna show the main MESSAGE (Hello World, etc) and the data that i send from arduino (keypad)  completely. 

Here my CCS code (I'm using sci_echoback example code):

//###########################################################################
//
// FILE: Example_2806xScia_Echoback.c
//
// TITLE: SCI Echo Back Example
//
//! \addtogroup f2806x_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 2806x 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: F2806x Support Library v2.04.00.00 $
// $Release Date: Tue Jun 26 03:13:59 CDT 2018 $
// $Copyright:
// Copyright (C) 2009-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 "DSP28x_Project.h" // Device Headerfile and Examples Include File

//
// Function Prototypes
//
void scia_echoback_init(void);
void scia_fifo_init(void);
void scia_xmit(int a);
void scia_msg(char *msg);

//
// Globals
//
Uint16 LoopCount;
Uint16 ErrorCount;
Uint16 ReceivedChar;

//
// Main
//
void main(void)
{

char *msg;

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

//
// Step 2. Initalize GPIO:
// This example function is found in the F2806x_Gpio.c file and
// illustrates how to set the GPIO to its 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 F2806x_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 F2806x_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 F2806x_DefaultIsr.c.
// This function is found in F2806x_PieVect.c.
//
InitPieVectTable();

//
// Step 4. Initialize all the Device Peripherals:
// This function is found in F2806x_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
//
}

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

//
// Echo character back
//
msg = " Data A': \0";
scia_msg(msg);
scia_xmit(ReceivedChar);

LoopCount++;
}
}

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

//
// 1 stop bit, No loopback, No parity,8 char bits, async mode,
// idle-line protocol
//
SciaRegs.SCICCR.all =0x0007;

//
// enable TX, RX, internal SCICLK, Disable RX ERR, SLEEP, TXWAKE
//
SciaRegs.SCICTL1.all =0x0003;

SciaRegs.SCICTL2.bit.TXINTENA = 1;
SciaRegs.SCICTL2.bit.RXBKINTENA = 1;

//
// 9600 baud @LSPCLK = 22.5MHz (90 MHz SYSCLK)
//
SciaRegs.SCIHBAUD =0x0001;
SciaRegs.SCILBAUD =0x0024;

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=a;
}

//
// scia_msg -
//
void
scia_msg(char * msg)
{
int i;
i = 0;

while (msg[i] != '\0')
{
scia_xmit(msg[i]);
i++;
}
}

//
// scia_fifo_init - Initalize the SCI FIFO
//

void
scia_fifo_init()
{
SciaRegs.SCIFFTX.all=0xE040;
SciaRegs.SCIFFRX.all=0x2044;
SciaRegs.SCIFFCT.all=0x0;
}

void
Scia_gpio()
{
#if DSP28_SCIA
InitSciaGpio();
#endif // endif DSP28_SCIA

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.GPIO7 = 0; // Enable pull-up for GPIO7 (SCIRXDA)

GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0; // Enable pull-up for GPIO29 (SCITXDA)
// GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0; // Enable pull-up for GPIO12 (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)
// GpioCtrlRegs.GPAQSEL1.bit.GPIO7 = 3; // Asynch input GPIO7 (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.GPAMUX1.bit.GPIO7 = 2; // Configure GPIO7 for SCIRXDA operation

GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; // Configure GPIO29 for SCITXDA operation
// GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 2; // Configure GPIO12 for SCITXDA operation

EDIS;
}

//#endif
//===========================================================================
// No more.
//===========================================================================


//
// End of File
//

Anyone, do you know something about my problem?

- Amir

 

  • hi Amir,

    " I try o send data from Arduino Uno to TI through SCI-A."
    " to show the main MESSAGE (Hello World, etc) and the data that you send from arduino (keypad) completely."

    Isn't this an echoback example " scia_echoback_init()" where data is sent from the putty ?

    Is the example without the arduino working correctly?

    what is the keyboard intervention here ?

    if its just data sent over SCI to the TX you need only the RX part of the example and not echoback right ?

    Why should the # being the enter character have to change the program ? it would still be receiving characters which have /0 as the end right ?

    1. So the data sent from the arduino to the TI MCU ie ReceivedChar , doesn't receive correctly?
    Can you check with the arduino to the hyper terminal separately to remove the TI board dependency and check them individually?

    2. For the issue with receiving all characters , is the baud between the 2 boards set correctly?

    regards.
  • Thanks for reply...

    So, i will explain to you about my project . Actually i'm not really good in TI programming because i just learned.

    I input data from arduino uno using keypad. When I enter character or number, it was sent properly in serial.

    I hope that the data is also sent properly in TI and TI sends the data back to the Arduino (displayed on the Arduino LCD or serial monitor). But, It didn't work, instead I found a problem like the one I asked above.

    About your questions :
    1. Yes, the data doesn't sent correctly
    2. I already set the baudrate , i set all 9600.