ZHCADN6 January   2024 AM67 , AM67A , AM68 , AM68A , AM69 , AM69A , DRA821U , DRA821U-Q1 , DRA829J , DRA829J-Q1 , DRA829V , DRA829V-Q1 , TDA4AEN-Q1 , TDA4AH-Q1 , TDA4AL-Q1 , TDA4AP-Q1 , TDA4APE-Q1 , TDA4VE-Q1 , TDA4VEN-Q1 , TDA4VH-Q1 , TDA4VL-Q1 , TDA4VM , TDA4VM-Q1 , TDA4VP-Q1 , TDA4VPE-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1UART 简介
    1. 1.1 Jacinto 7 UART 概述
    2. 1.2 Jacinto 7 UART 特性
    3. 1.3 Jacinto 7 UART 功能简介
  5. 2UART 使用概述
    1. 2.1 WKUP_UART0 用法
    2. 2.2 MCU_UART0 用法
    3. 2.3 MAIN_UARTx 用法
  6. 3软件模块上的日志级设计
  7. 4更改 UART 实例
    1. 4.1 更改 MAIN 域的 MAIN_UARTx
    2. 4.2 为 DSP/MCU 设置独立 UART 端口
  8. 5总结
  9. 6参考资料

为 DSP/MCU 设置独立 UART 端口

默认情况下,J7 SOC 的 MCU 和 DSP 内核不会为串行端口输出设置单独的 UART。对于 TDA4X,默认情况下,除 A72 内核之外的每个内核的日志都将写入一个共享存储器,然后 A72 应用程序会读取这些日志并将其打印到 MAIN_UARTX 串行端口。但是,为了方便调试,通常有必要同时打印多个内核的日志,或者在内核 A 不能正常工作时继续打印日志。在这种情况下,需要为 MCU/DSP 内核配置一个单独的串行端口。下面以 TDA4VM 为例为 C7 设置单独的串行端口。

  1. 在 MAIN 函数中添加 UART 初始配置。
    diff --git a/vision_apps/platform/j721e/rtos/c7x_1/main.c 
    b/vision_apps/platform/j721e/rtos/c7x_1/main.c
    index 0dcfa4fd..e857838b 100755
    --- a/vision_apps/platform/j721e/rtos/c7x_1/main.c
    +++ b/vision_apps/platform/j721e/rtos/c7x_1/main.c
    @@ -88,7 +88,8 @@
    #include <ti/sysbios/family/c7x/Hwi.h>
    #include <ti/sysbios/family/c7x/Mmu.h>
    #endif
    +#include <ti/drv/uart/UART.h>
    +#include <ti/drv/uart/UART_stdio.h>
    /* For J7ES/J721E/TDA4VM the upper 2GB DDR starts from 0x0008_8000_0000 */
    /* This address is mapped to a virtual address of 0x0001_0000_0000 */
    #define DDR_C7X_1_LOCAL_HEAP_VADDR (DDR_C7X_1_LOCAL_HEAP_ADDR)
    @@ -96,18 +97,33 @@
    +extern int uart_print_test(void);
    +extern int uart_test(void);
    @@ -181,9 +197,13 @@ int main(void)
    {
    TaskP_Params tskParams;
    TaskP_Handle task;
    OS_init();
    +/* Set TDA4VM PINMUX UART2_RX(PIN Y1)&UART2_TX(PIN Y5)
    +*  We can get the register address from the datasheet
    +*/
    + *((int *)(0x00011C1DC))=0x50003;
    + *((int *)(0x00011C1E0))=0x10003;
    + uart_print_test();
    appC7xClecInitDru();
  2. 为 C7 创建 UART 实例。

    在路径 vision_apps/basic_demos/ 下创建 c7_uart_print 临时文件夹,并创建 c7_uart_print.c 和 concerto .mk 文件作为初始配置 UART 库。

    以下内容针对 c7_uart_print.c。

    #include <ti/drv/uart/UART.h>
    #include <ti/drv/uart/UART_stdio.h>
    #include <ti/board/src/j721e_evm/include/board_utils.h>
    #include <ti/board/board.h>
    #include <ti/board/src/j721e_evm/include/board_cfg.h>
    int uart_test(void)
    {
       UART_printf("\n=============================================\n");
       UART_printf("\n**********c7x uart printf********************\n"); 
       UART_printf("*                 UART Test                 *\n");
       UART_printf("*********************************************\n");
       return 0;
    }
    
    int uart_print_test(void)
    {
        Board_initParams_t initParams;
    
        /* Verify the SoC UART0 */
        Board_getInitParams(&initParams);
        initParams.uartInst = 2;
        initParams.uartSocDomain = BOARD_SOC_DOMAIN_MAIN;
        Board_setInitParams(&initParams);
        Board_init(BOARD_INIT_UART_STDIO);
    
        uart_test();
       
    return 0;
    }

    以下内容针对 concerto.mk。

    ifeq ($(TARGET_CPU),$(filter $(TARGET_CPU), x86_64 C71 C7120))
    
    include $(PRELUDE)
    TARGET      := c7_uart_print
    TARGETTYPE  := library
    CSOURCES    := $(call all-c-files)
    CPPSOURCES  := $(call all-cpp-files)
    CFLAGS+= -mv7100 --c11
    ifeq ($(TARGET_CPU), x86_64)
    IDIRS       += $(CGT7X_ROOT)/host_emulation/include/C7100
    CFLAGS += --std=c++14 -D_HOST_EMULATION -pedantic -fPIC -w -c -g -o4
    CFLAGS += -Wno-sign-compare
    endif
    
    include $(FINALE)
    
    endif
    
  3. 将输出日志从共享存储器更改为 UART FIFO。
    diff --git a/vision_apps/utils/console_io/src/app_log_writer.c b/vision_apps/utils/console_io/src/app_log_writer.c
    index a02a785c..561d1434 100755
    --- a/vision_apps/utils/console_io/src/app_log_writer.c
    +++ b/vision_apps/utils/console_io/src/app_log_writer.c
    @@ -220,6 +220,32 @@ int32_t  appLogWrPutString(app_log_wr_obj_t *obj)
     
         return status;
     }
    +#if defined C71
    +int32_t  c7x_appLogWrPutString(app_log_wr_obj_t *obj)
    +{
    +    int32_t status = 0;
    +    volatile uint32_t copy_bytes,num_bytes;
    +    volatile uint8_t *buf = (uint8_t*)obj->buf;
    +
    +
    +    if (0 == status)
    +    {
    +        num_bytes = strlen((char*)buf);
    +
    +        if (num_bytes <= 0)
    +        {
    +            status = -1;
    +        }
    +    }
    +
    +    if (0 == status)
    +    {
    +        UART_puts(buf,num_bytes);
    +    }
    +
    +    return status;
    +}
    +#endif
     
     void appLogPrintf(const char *format, ...)
     {
    @@ -266,6 +292,8 @@ void appLogPrintf(const char *format, ...)
                 printf(obj->buf);
                 #endif
             }
    +        #elif defined C71
    +        c7x_appLogWrPutString(obj);
             #else
             appLogWrPutString(obj);
             #endif
  4. 为编译二进制文件添加库路径。
    diff --git a/vision_apps/platform/j721e/rtos/concerto_c7x_inc.mak b/vision_apps/platform/j721e/rtos/concerto_c7x_inc.mak
    index 4e3c5a29..4a9c94db 100755
    --- a/vision_apps/platform/j721e/rtos/concerto_c7x_inc.mak
    +++ b/vision_apps/platform/j721e/rtos/concerto_c7x_inc.mak
    @@ -19,6 +19,10 @@ endif
     ifeq ($(RTOS),SAFERTOS)
            LDIRS += $(PDK_PATH)/packages/ti/osal/lib/safertos/$(SOC)/c7x/$(TARGET_BUILD)/
     endif
    +
    +LDIRS += $(PDK_PATH)/packages/ti/drv/uart/lib/$(SOC)/c7x/$(TARGET_BUILD)/
    +LDIRS += $(PDK_PATH)/packages/ti/drv/i2c/lib/$(SOC)/c7x/$(TARGET_BUILD)/
    +LDIRS += $(PDK_PATH)/packages/ti/board/lib/$(SOC)_evm/c7x/$(TARGET_BUILD)/
     LDIRS += $(PDK_PATH)/packages/ti/csl/lib/$(SOC)/c7x/$(TARGET_BUILD)/
     LDIRS += $(PDK_PATH)/packages/ti/drv/ipc/lib/$(SOC)/c7x_1/$(TARGET_BUILD)/
     LDIRS += $(PDK_PATH)/packages/ti/drv/udma/lib/$(SOC)/c7x_1/$(TARGET_BUILD)/
    @@ -45,6 +49,7 @@ STATIC_LIBS += vx_app_ptk_demo_common
     STATIC_LIBS += vx_kernels_common
     STATIC_LIBS += vx_target_kernels_img_proc_c71
     STATIC_LIBS += vx_app_c7x_voxel2point
    +STATIC_LIBS += c7_uart_print
     
     PTK_LIBS =
     PTK_LIBS += ptk_algos
    @@ -76,6 +81,9 @@ ADDITIONAL_STATIC_LIBS += ipc.ae71
     ADDITIONAL_STATIC_LIBS += dmautils.ae71
     ADDITIONAL_STATIC_LIBS += sciclient.ae71
     ADDITIONAL_STATIC_LIBS += udma.ae71
    +ADDITIONAL_STATIC_LIBS += ti.drv.uart.ae71
    +ADDITIONAL_STATIC_LIBS += ti.board.ae71
    +ADDITIONAL_STATIC_LIBS += ti.drv.i2c.ae71
     
     ifeq ($(RTOS),FREERTOS)
            ADDITIONAL_STATIC_LIBS += ti.kernel.freertos.ae71
    

    上面介绍了 SDK 级别的所有更改。只需要执行下一步操作即可重新编译 C7 固件并将其刷写到 SD 卡或 EMMC 中。