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.

RTOS/TDA2EXEVM: uart2 no work

Part Number: TDA2EXEVM
Other Parts Discussed in Thread: TDA2

Tool/software: TI-RTOS

Hi Expert,

I'm running PROCESSOR SDK VISION v03.04.00 rtos on tda2eg.
TDA2 EVM and custom board both have.

I modify and run CSL uart test present here:
PROCESSOR_SDK_VISION_03_04_00_00\ti_components\drivers\pdk_01_10_00_08\packages\ti\csl\example\uart\uart_test

I call UARTConfigInit() to initial UART2 engine after pin mux setting finish.
but system get stuck problem when I call UARTConfigInit() API.

Could you please give me some advise?
Thanks in advance.

attach is source file.

/*
 *  Copyright (C) 2013-2017 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.
 *
 */

 /**
 *  \file   main.c
 *
 *  \brief This file demonstrates UART console input and output.
 *         Expects user to enter an input string and outputs the same
 *         on console.
 *
 **/

/* ========================================================================== */
/*                             Include Files                                  */
/* ========================================================================== */
#include <stdint.h>
#include <stdio.h>
#include <ti/csl/hw_types.h>
#include <ti/csl/soc.h>
#include <ti/csl/example/utils/uart_console/inc/uartConfig.h>
#if defined (SOC_AM574x) || defined (SOC_AM572x) || defined (SOC_AM571x)
#include <ti/board/board.h>
#endif

/* ========================================================================== */
/*                                 Macros                                     */
/* ========================================================================== */

/* Commented define TESTCASE_ID to test with default settings of
 * BAUD_RATE    = 115200,
 * WORD_LENGTH  = 8Bits,
 * STOP_BIT     = 1,
 * PARITY       = None.
 * Uncomment below define and set to appropriate test case number to test
 * specific configuration.
 */

/*
#define TESTCASE_ID     UART_19
*/

#if (TESTCASE_ID == UART_1)
#define BAUD_RATE       BAUD_RATE_9600
#endif

#if (TESTCASE_ID == UART_2)
#define BAUD_RATE       BAUD_RATE_14400
#endif

#if (TESTCASE_ID == UART_3)
#define BAUD_RATE       BAUD_RATE_19200
#endif

#if (TESTCASE_ID == UART_4)
#define BAUD_RATE       BAUD_RATE_38400
#endif

#if (TESTCASE_ID == UART_5)
#define BAUD_RATE       BAUD_RATE_57600
#endif

#if (TESTCASE_ID == UART_6)
#define BAUD_RATE       BAUD_RATE_115200
#endif

#if (TESTCASE_ID == UART_7)
#define BAUD_RATE       BAUD_RATE_230400
#endif

#if (TESTCASE_ID == UART_8)
#define BAUD_RATE       BAUD_RATE_460800
#define UART_MODE       UART_13x_MODE
#endif

#if (TESTCASE_ID == UART_9)
#define BAUD_RATE       BAUD_RATE_921600
#define UART_MODE       UART_13x_MODE
#endif

#if (TESTCASE_ID == UART_10)
#define WORD_LENGTH     UART_WORD_LENGTH_5
#endif

#if (TESTCASE_ID == UART_11)
#define WORD_LENGTH     UART_WORD_LENGTH_6
#endif

#if (TESTCASE_ID == UART_12)
#define WORD_LENGTH     UART_WORD_LENGTH_7
#endif

#if (TESTCASE_ID == UART_13)
#define WORD_LENGTH     UART_WORD_LENGTH_8
#endif

#if (TESTCASE_ID == UART_14)
#define STOP_BIT        UART_STOP_BIT_1
#endif

#if (TESTCASE_ID == UART_15)
#define STOP_BIT        UART_STOP_BIT_1_5_2
#define WORD_LENGTH     UART_WORD_LENGTH_5
#endif

#if (TESTCASE_ID == UART_16)
#define STOP_BIT        UART_STOP_BIT_1_5_2
#endif

#if (TESTCASE_ID == UART_17)
#define PARITY      UART_NO_PARITY
#endif

#if (TESTCASE_ID == UART_18)
#define PARITY      UART_PARITY_ODD
#endif

#if (TESTCASE_ID == UART_19)
#define PARITY      UART_PARTY_EVEN
#endif

#ifndef BAUD_RATE
#define BAUD_RATE       BAUD_RATE_115200
#endif

#ifndef WORD_LENGTH
#define WORD_LENGTH     UART_WORD_LENGTH_8
#endif

#ifndef STOP_BIT
#define STOP_BIT        UART_STOP_BIT_1
#endif

#ifndef PARITY
#define PARITY          UART_NO_PARITY
#endif

#ifndef UART_MODE
#define UART_MODE       UART_16x_MODE
#endif

#define UART_INST_NUM                    (1U)
uint32_t uartBaseAddr;
uint32_t uart2Addr;

#define df_uart1	1
#define df_uart2	1
/* ========================================================================== */
/*                            Global Variables                                */
/* ========================================================================== */
/* None */

/* ========================================================================== */
/*                          Function Definitions                              */
/* ========================================================================== */
#if 1
void delay(void)
{
    volatile uint32_t i;
    for (i = 0; i < 1000000; i++)
    {}
}
#endif
//'----------------------------------------------------------



void padConfig_prcmEnable()
{
#if defined (SOC_AM574x) || defined (SOC_AM572x) || defined (SOC_AM571x)
/*'
    // Pad configurations
    Board_initCfg boardCfg;
    boardCfg = BOARD_INIT_UNLOCK_MMR | BOARD_INIT_UART_STDIO | 
               BOARD_INIT_MODULE_CLOCK | BOARD_INIT_PINMUX_CONFIG;
    Board_init(boardCfg);  
*/	
#endif
#if defined (SOC_TDA2XX) || defined (SOC_TDA2PX) || defined (SOC_TDA2EX) || defined (SOC_DRA72x) || defined (SOC_DRA75x)

#if df_uart1	//'	uart1
    /*Pad configurations */
    HW_WR_REG32(SOC_CORE_PAD_IO_REGISTERS_BASE+CTRL_CORE_PAD_UART1_RXD,0x00040000);
    HW_WR_REG32(SOC_CORE_PAD_IO_REGISTERS_BASE+CTRL_CORE_PAD_UART1_TXD,0x00000000);
    /* Set the UART Parameters */
    UARTConfigInit(uartBaseAddr, BAUD_RATE, WORD_LENGTH, STOP_BIT, PARITY, UART_MODE);
#endif					

#if df_uart2	//'	uart2
    HW_WR_REG32(SOC_CORE_PAD_IO_REGISTERS_BASE+CTRL_CORE_PAD_UART2_RXD,0x00040000);
    HW_WR_REG32(SOC_CORE_PAD_IO_REGISTERS_BASE+CTRL_CORE_PAD_UART2_TXD,0x00000000);
    UARTConfigInit(uart2Addr, BAUD_RATE, WORD_LENGTH, STOP_BIT, PARITY, UART_MODE);	
#endif					
					
#endif
#if defined (SOC_TDA3XX) || defined (SOC_DRA78x)
/*'
    // Pad configurations
    HW_WR_REG32(SOC_CORE_PAD_IO_REGISTERS_BASE+CTRL_CORE_PAD_IO_SPI1_SCLK,0x00040001);
    HW_WR_REG32(SOC_CORE_PAD_IO_REGISTERS_BASE+CTRL_CORE_PAD_IO_SPI1_CS0,0x00000001);
    // Set the UART Parameters 
    UARTConfigInit(uartBaseAddr, BAUD_RATE, WORD_LENGTH, STOP_BIT, PARITY,
                    UART_MODE);
*/
#endif
}

int main(void)
{
    char     dataBuffer[100];
    uartBaseAddr = SOC_UART1_BASE;
	uart2Addr = SOC_UART2_BASE;

/*'
#if defined (SOC_TDA3XX) || defined (SOC_DRA78x)
    uartBaseAddr = SOC_UART3_BASE;
#endif
#if (defined (SOC_AM574x) || defined (SOC_AM572x)) || (defined (SOC_AM571x))
    uartBaseAddr = SOC_UART3_BASE;
#endif
*/

    /*Pad configuration and PRCM enable*/
    padConfig_prcmEnable();

	//'------------------------------------------------
	while(1){
		
#if df_uart1		
		UARTConfigPuts(uartBaseAddr, "--tnzaku02------ uart1\n", -1);
#endif

#if df_uart2
		UARTConfigPuts(uart2Addr, "--tnzaku02------ uart2\n", -1);
#endif		
		delay();

		
	}	
	
	
    /* UART receive and transmit operation */
    UARTConfigPuts(uartBaseAddr, "\nUART Test", -1);

    UARTConfigPuts(uartBaseAddr, "\nEnter some data to transmit:", -1);

    UARTConfigGets(uartBaseAddr, &dataBuffer[0], -1);

    UARTConfigPuts(uartBaseAddr, "\nData Received:", -1);

    UARTConfigPuts(uartBaseAddr, &dataBuffer[0], -1);

    UARTConfigPuts(uartBaseAddr, "\nUART Test Completed", -1);

	
    return 0;
}
/********************************* End of file ******************************/

  • Hi,

    How are you running this binary?
    This is a standalone example that should be run using CCS.
    You should make sure that you are not booting Vision SDK when you try to run this binary.
    Also you can't run UART test for UART2 on the EVM as there is no connection for UART2.

    Regards,
    Rishabh
  • Hi,

    command window > gmake csl_uart_test_app BOARD=tda2ex-evm CORE=ipu1_0
    Refer "Load using CCS" in VisionSDK_UserGuide_TDA2Ex.pdf to load and run csl_uart_test_app_ipu1_0_release.xem4

    Tested in TDA2 EVM and custom board.
    It is normal to only test uart1 printing, but after adding UARTConfigInit() to initial UART2, uart1 is nothing print out.
    So guess the initial UART2 has a problem.

    Thanks in advance.
  • Hi,

    As I specified previously you cannot use UART2 for communication as there is no connection between UART2 pins and FTDI chip. On custom board you have to check the schematics and find out if there is a route available for UART2. You also need to set the pin mux, IO expanders, etc depending on board schematics.

    Regards,
    Rishabh
  • Hi,

    On custom board previously used linux to confirm that uart2 is working.
    There is a route available for UART2.

    ---------------------------------------------------------------------------------------------

    As I specified previously: 
    It is normal to only test uart1 printing, but after adding UARTConfigInit() to initial UART2, uart1 is nothing print out.

    Tracking with CCS will stop at UARTConfigInit() to UART2.
    Why does UARTConfigInit() to UART2 the operation to stop?

    Thanks in advance.

  • Hi,

    UARTConfigInit() API modifies UART2 registers.
    Have you enabled UART2 in PRCM?
    If UART2 is not enable and you try to access the registers you will see a crash.

    Regards,
    Rishabh