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/TDA2SX:CCS9.2.0无法加载 EVE 可执行代码

Guru**** 3003130 points

Other Parts Discussed in Thread: SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/914274/ccs-tda2sx-ccs9-2-0-failed-to-load-eve-executable-code

器件型号:TDA2Sx
Thread 中讨论的其他器件:SysConfig

工具/软件:Code Composer Studio

您好,

我正在使用仿真器来调试 processor_sdk_vision_03_08_00_00。

指导文档中的描述如下:

但我在"Scripts"菜单中看不到"EVE MMU config"选项:

加载 EVE 可执行代码:时出错

请帮我解决这个问题、谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     您是否已从以下位置安装汽车设备支持文件 :

    http://processors.wiki.ti.com/index.php/Device_support_files

    此致、

    安州

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    我已安装器件支持文件:

    但 错误仍然存在。

    期待您的回复,谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     您是否按照 EV_SW_GET_Started 中所述的步骤操作:


    此致、

    安州

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Anshu,

    我完全执行了以下步骤:

    问题仍然存在。错误信息为:

    ARP32_EVE_1:读取长度为0x4的第1页上的0x1000000处的内存块时出现问题:(错误-1065 @ 0xB1000000)无法访问设备内存。 验证内存地址是否在有效内存中。 如果错误仍然存在、请确认配置、对电路板进行下电上电和/或尝试更可靠的 JTAG 设置(例如、较低的 TCLK)。 (仿真包8.3.0.00003)
    ARP32_EVE_1:文件加载器:验证失败:目标无法读取0xB1000000@数据
    ARP32_EVE_1:GEL:文件:D:\processor_sdk_vision_03_08_00_00\vision_sdk\binaries\apps\tda2xx_cascad_BIOS_radar\vision_sdk\bin\tda2xx-evm\vision_sdk_arp32_1_release.xearp32F:加载失败。

    期待您的回复,谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

       某些 MMU 配置似乎未正确执行。 您能否再次确认是否已在 TDA2xx_multicore_reset.gel 文件中将 EVE_SW_CONFIG 宏设置为1?

    此致、

    安州

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、常熟,我已经  在 TDA2xx_multicore_reset.gel 文件,中将 EVE_SW_CONFIG 宏设置为1、如下所示。

    谢谢、等待您的回复。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当我将代码加载到 EVE 时、会出现类似这样的错误消息

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

      您能否共享以下两个文件:  

    • "C:\ti\ \ccs_base\emulation\gel\TDA2x\TDA2xx_multicore_reset.gel"
    • 用于应用的链接器命令文件。

    此致、

    安州

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    / /
    /*此 GEL 文件加载到 Code Composer 的命令行  中*/
    /*每次启动时都会调用 startup()函数       *
    /* Code Composer。  您可以将此函数自定义为        *
    /*初始化等待状态或执行其他初始化。    *
    /*                                  *
    /* TDA2xx 多核复位配置                   *
    /*                                  *
    /*                                  *
    / /
    #define WR_MEM_32 (addr、data)  *(unsigned int*)(addr)=(unsigned int)(data)
    #define RD_MEM_32 (addr)      *(unsigned int*)(addr)
    #define UINT32_t         unsigned int
    #define DEBUG_PRINT       1
    #define VISION_SDK_CONFIG   0 /*仅适用于 Vision SDK 用户*
    #define VISION_SDK_CONFIG_OLD 0 //对于 VSDK 2.8,将其设置为1。
                     * VISION_SDK_CONFIG 也应设置为1
                     *
    #define EVE_SW_CONFIG      1 /*仅适用于 EVE_SW 用户
                     *仅在...时有效
                     * vision_sdk_config = 0
                     *
    /*********
        TDA2xx 寄存器映射定义:CortexA15_CPU1视图
    秘书长的报告 /
    #define GPMC_TAGG           0x00000000
    #define MPU_RAM            0x402F0000
    #define OCMC_RAM1_TAGR         0x40300000
    #define OCMC_RAM2_TAGR         0x40400000
    #define OCMC_RAM3_TAGR         0x4050000
    #define DSP1_L2_SRAM_TAGR       0x40800000
    #define DSP1_SYSTEM_TAGG        0x40D00000
    #define DSP1_MMU0CFG_TAGR       0x40D01000
    #define DSP1_MMU1CFG_TAGR       0x40D02000
    #define DSP1_FW0CFG_TAGR        0x40D03000
    #define DSP1_FW1CFG_TAGR        0x40D04000
    #define DSP1_EDMA_TC0_TAGR       0x40D05000
    #define DSP1_EDMA_TC1_TAGR       0x40D06000
    #define DSP1_NOC_TARG         0x40D07000
    #define DSP1_EDMA_CC_TAGR       0x40D10000
    #define DSP1_L1P_SRAM_TAGR       0x40E00000
    #define DSP1_L1D_SRAM_TAGR       0x40F00000
    #define DSP2_L2_SRAM_TAGG       0x41000000
    #define DSP2_SYSTEM_TAGG        0x41500000
    #define DSP2_MMU0CFG_TAGR       0x41501000
    #define DSP2_MMU1CFG_TAGR       0x41502000
    #define DSP2_FW0CFG_TAGG        0x41503000
    #define DSP2_FW1CFG_TAGG        0x41504000
    #define DSP2_EDMA_TC0_TAGR       0x41505000
    #define DSP2_EDMA_TC1_TAGR       0x41506000
    #define DSP2_NOC_TARG         0x41507000
    #define DSP2_EDMA_CC_TAGR       0x41510000
    #define DSP2_L1P_SRAM_TAGR       0x41600000
    #define DSP2_L1D_SRAM_TAGR       0x41700000
    #define OCMC_RAM1_CBUF_TAGR      0x41800000
    #define EVE1_TAGG           0x42000000
    #define EVE2_TARG           0x42100000
    #define EVE3_TAGG           0x42200000
    #define EVE4_TAGG           0x42300000
    #define EDMA_TPCC_TARG         0x43300000
    #define EDMA_TC0_TAGR         0x43400000
    #define EDMA_TC1_TAGR         0x43500000
    #define OCMC_ROM_TAGG         0x43A00000
    #define SN_L3_MAIN_TAGR        0x44000000
    #define McASP1_TAGG          0x45800000
    #define McASP2_TAGG          0x45C00000
    #define McASP3_TAGG          0x46000000
    #define L4_PER1_TAGR          0x48000000
    #define MPU_MA             0x482AF000
    #define L4_PER2_TAGG          0x48400000
    #define L4_PER3_TAGG          0x48800000
    #define OCMC_RAM2_CBUF_TAGR      0x49000000
    #define OCMC_RAM3_CBUF_TAGR      0x49800000
    #define L4_CFG_TAGG          0x4A000000
    #define L4_WKUP_TAGG          0x4AE00000
    #define QSPI_ADDRSP0_TAGR       0x4B300000
    #define EMIF1_CONF_REGS        0x4C000000
    #define EMIF2_CONF_REGS        0x4D000000
    #define DMM_CONF_REGS_TARG       0x4E000000
    #define GPMC_CONF_REGS_TARG      0x50000000
    #define IPU2_TARGET_TARG        0x55000000
    #define GPU_TAGG            0x56000000
    #define DSS_TAGG            0x58000000
    #define IPU1_TARGET_TARG        0x58800000
    #define BB2D_TAGG           0x59000000
    #define IVA_CONFIG_TAGG        0x5A000000
    #define IVA_SL2IF_TAGG         0x5B000000
    #define QSPI_ADDRSP1_TAGR       0x5C000000
    #define tiler             0x60000000
    #define EMIF1_SDRAM_CS0        0x80000000
    #define EMIF2_SDRAM_CS0        0xC0000000
    /*********
        L4_CFG 寄存器映射定义:CortexA15_CPU1视图
    秘书长的报告 /
    #define CTRL_MODULE_CORE        (L4_CFG_TAGG + 0x2000)
    #define CM_CORE_AON          (L4_CFG_TAGG + 0x5000)
    #define CM_CORE            (L4_CFG_TAGG + 0x8000)
    /*********
        L4_WKUP 寄存器映射定义:CortexA15_CPU1视图
    秘书长的报告 /
    #define PRM              (L4_WKUP_TAGR + 0x6000)
    /*********
        PRCM 寄存器映射定义:CortexA15_CPU1视图
    秘书长的报告 /
    #define IPU_CM_CORE_AON        (CM_CORE_AON + 0x500)
    #define DSP1_CM_CORE_AON        (CM_CORE_AON + 0x400)
    #define DSP2_CM_CORE_AON        (CM_CORE_AON + 0x600)
    #define EVE1_CM_CORE_AON        (CM_CORE_AON + 0x640)
    #define EVE2_CM_CORE_AON        (CM_CORE_AON + 0x680)
    #define EVE3_CM_CORE_AON        (CM_CORE_AON + 0x6C0)
    #define EVE4_CM_CORE_AON        (CM_CORE_AON + 0x700)
    #define CORE_CM_CORE          (CM_CORE + 0x700)
    #define IVA_CM_CORE          (CM_CORE + 0xF00)
    #define DSP1_PRM            (PRM + 0x400)
    #define IPU_PRM            (PRM + 0x500)
    #define CORE_PRM            (PRM + 0x700)
    #define IVA_PRM            (PRM + 0xF00)
    #define DSP2_PRM            (PRM + 0x1B00)
    #define EVE1_PRM            (PRM + 0x1B40)
    #define EVE2_PRM            (PRM + 0x1B80)
    #define EVE3_PRM            (PRM + 0x1BC0)
    #define EVE4_PRM            (PRM + 0x1C00)
    /*********
        IPU1地址映射定义:CortexA15_CPU1视图
    秘书长的报告 /
    #define RM_IPU1_RSTCTRL        (IPU_PRM + 0x10)
    #define RM_IPU1_RSTST         (IPU_PRM + 0x14)
    #define CM_IPU1_CLKSTCTRL       (IPU_CM_CORE_AON + 0x0)
    #define CM_IPU1_IPU1_CLKCTRL      (IPU_CM_CORE_AON + 0x20)
    #define IPU1_BASE_ADDR         (IPU1_TARGET_TAGG + 0x20000)
    #define IPU1_MMU_CFG          (IPU1_TARGET_TAGG + 0x80000)
    /*********
        IPU2地址映射定义:CortexA15_CPU1视图
    秘书长的报告 /
    #define RM_IPU2_RSTCTRL        (CORE_PRM + 0x210)
    #define RM_IPU2_RSTST         (CORE_PRM + 0x214)
    #define CM_IPU2_CLKSTCTRL       (CORE_CM_CORE + 0x200)
    #define CM_IPU2_IPU2_CLKCTRL      (CORE_CM_CORE + 0x220)
    #define IPU2_base_ADDR         (IPU2_TARGET_TAGG + 0x20000)
    #define IPU2_MMU_CFG          (IPU2_TARGET_TAGG + 0x80000)
    /*********
          IPU CPU 独立定义
    秘书长的报告 /
    #define RM_IPU_RSTCTRL         ((cpu_num ==1)? (RM_IPU1_RSTCTRL):(RM_IPU2_RSTCTRL)
    #define RM_IPU_RSTST          ((cpu_num ==1)? (RM_IPU1_RSTST):(RM_IPU2_RSTST)
    #define IPU_BASE_ADDR         ((cpu_num ==1)? (IPU1_BASE_ADDR):(IPU2_BASE_ADDR)
    #define IPU_MMU_CFG          ((cpu_num ==1)? (IPU1_MMU_CFG):(IPU2_MMU_CFG)
    /*********
        DSPSS1地址映射定义:CortexA15_CPU1视图
    秘书长的报告 /
    #define CM_DSP1_CLKSTCTRL       (DSP1_CM_CORE_AON + 0x0)
    #define CM_DSP1_DSP1_CLKCTRL      (DSP1_CM_CORE_AON + 0x20)
    #define RM_DSP1_RSTCTRL        (DSP1_PRM + 0x10)
    #define RM_DSP1_RSTST         (DSP1_PRM + 0x14)
    #define DSPSS1BOOTADDR         (CTRL_MODULE_CORE + 0x55C)
    #define DSPSS1BOOTADDRVALUE      (DSP1_L2_SRAM_TAGR - 0x40000000)
    /*********
        DSPSS2地址映射定义:CortexA15_CPU1视图
    秘书长的报告 /
    #define CM_DSP2_CLKSTCTRL       (DSP2_CM_CORE_AON + 0x0)
    #define CM_DSP2_DSP2_CLKCTRL      (DSP2_CM_CORE_AON + 0x20)
    #define RM_DSP2_RSTCTRL        (DSP2_PRM + 0x10)
    #define RM_DSP2_RSTST         (DSP2_PRM + 0x14)
    #define DSPSS2BOOTADDR         (CTRL_MODULE_CORE + 0x560)
    #define DSPSS2BOOTADDRVALUE      (DSP2_L2_SRAM_TAGR - 0x40800000)
    /*********
          DSPSS CPU 独立定义
    秘书长的报告 /
    #define CM_DSP_CLKSTCTRL        ((cpu_num ==1)? (CM_DSP1_CLKSTCTRL):(CM_DSP2_CLKSTCTRL)
    #define CM_DSP_DSP_CLKCTRL       ((cpu_num ==1)? (CM_DSP1_DSP1_CLKCTRL):(CM_DSP2_DSP2_CLKCTRL)
    #define RM_DSP_RSTCTRL         ((cpu_num ==1)? (RM_DSP1_RSTCTRL):(RM_DSP2_RSTCTRL)
    #define RM_DSP_RSTST          ((cpu_num ==1)? (RM_DSP1_RSTST):(RM_DSP2_RSTST)
    #define DSPSSBOOTADDR         ((cpu_num ==1)? (DSPSS1BOOTADDR):(DSPSS2BOOTADDR)
    #define DSPSSBOOTADDRVALUE       ((cpu_num ==1)? (DSPSS1BOOTADDRVALUE):(DSPSS2BOOTADDRVALUE)
    #define DSP_L2_SRAM_TAGG        ((cpu_num ==1)? (DSP1_L2_SRAM_TAGG):(DSP2_L2_SRAM_TAGG)
    /*********
        EVESS1地址映射定义:CortexA15_CPU1视图
    秘书长的报告 /
    #define CM_EVE1_CLKSTCTRL       (EVE1_CM_CORE_AON + 0x0)
    #define CM_EVE1_EVE1_CLKCTRL      (EVE1_CM_CORE_AON + 0x20)
    #define RM_EVE1_RSTCTRL        (EVE1_PRM + 0x10)
    #define RM_EVE1_RSTST         (EVE1_PRM + 0x14)
    #define EVE1_MMU0_BASE         (EVE1_TAGG + 0x81000)
    #define EVE1_MMU1_base         (EVE1_TAGG + 0x82000)
    /*********
        EVESS2地址映射定义:CortexA15_CPU1视图
    秘书长的报告 /
    #define CM_EVE2_CLKSTCTRL       (EVE2_CM_CORE_AON + 0x0)
    #define CM_EVE2_EVE2_CLKCTRL      (EVE2_CM_CORE_AON + 0x20)
    #define RM_EVE2_RSTCTRL        (EVE2_PRM + 0x10)
    #define RM_EVE2_RSTST         (EVE2_PRM + 0x14)
    #define EVE2_MMU0_BASE         (EVE2_TARG + 0x81000)
    #define EVE2_MMU1_base         (EVE2_TARG + 0x82000)
    /*********
        EVESS3地址映射定义:CortexA15_CPU1视图
    秘书长的报告 /
    #define CM_EVE3_CLKSTCTRL       (EVE3_CM_CORE_AON + 0x0)
    #define CM_EVE3_EVE3_CLKCTRL      (EVE3_CM_CORE_AON + 0x20)
    #define RM_EVE3_RSTCTRL        (EVE3_PRM + 0x10)
    #define RM_EVE3_RSTST         (EVE3_PRM + 0x14)
    #define EVE3_MMU0_BASE         (EVE3_TAGG + 0x81000)
    #define EVE3_MMU1_base         (EVE3_TAGG + 0x82000)
    /*********
        EVESS4地址映射定义:CortexA15_CPU1视图
    秘书长的报告 /
    #define CM_EVE4_CLKSTCTRL       (EVE4_CM_CORE_AON + 0x0)
    #define CM_EVE4_EVE4_CLKCTRL      (EVE4_CM_CORE_AON + 0x20)
    #define RM_EVE4_RSTCTRL        (EVE4_PRM + 0x10)
    #define RM_EVE4_RSTST         (EVE4_PRM + 0x14)
    #define EVE4_MMU0_BASE         (EVE4_TAGG + 0x81000)
    #define EVE4_MMU1_base         (EVE4_TAGG + 0x82000)
    /*********
          EVESS CPU 独立定义
    秘书长的报告 /
    #define CM_EVE_CLKSTCTRL        ((cpu_num ==1)? (CM_EVE1_CLKSTCTRL):(CPU_num ==2)? (CM_EVE2_CLKSTCTRL):(CPU_num ==3)? (CM_EVE3_CLKSTCTRL):(CM_EVE4_CLKSTCTRL)))
    #define CM_EVE_EVE_CLKCTRL       ((cpu_num ==1)? (CM_EVE1_EVE1_CLKCTRL):(CPU_num ==2)? (CM_EVE2_EVE2_CLKCTRL):(CPU_num ==3)? (CM_EVE3_EVE3_CLKCTRL):(CM_EVE4_EVE4_CLKCTRL))))
    #define RM_EVE_RSTCTRL         ((cpu_num ==1)? (RM_EVE1_RSTCTRL):(CPU_num ==2)? (RM_EVE2_RSTCTRL):(CPU_num ==3)? (RM_EVE3_RSTCTRL):(RM_EVE4_RSTCTRL)))
    #define RM_EVE_RSTST          ((cpu_num ==1)? (RM_EVE1_RSTST):(CPU_num ==2)? (RM_EVE2_RSTST):(CPU_num ==3)? (RM_EVE3_RSTST):(RM_EVE4_RSTST)))
    #define EVE_MMU0_BASE         ((cpu_num ==1)? (EVE1_MMU0_BASE):(CPU_num ==2)? (EVE2_MMU0_BASE):(CPU_num ==3)? (EVE3_MMU0_BASE):(EVE4_MMU0_BASE)))
    #define EVE_MMU1_base         ((cpu_num ==1)? (EVE1_MMU1_BASE):(CPU_num ==2)? (EVE2_MMU1_BASE):(CPU_num ==3)? (EVE3_MMU1_base):(EVE4_MMU1_base)))
    #define EVE_MMU_pagesize_1M      0
    #define EVE_MMU_pagesize_64K      1
    #define EVE_MMU_pagesize_4K      2.
    #define EVE_MMU_pagesize_16M      3.
    #define EVE_MMU_base         ((MMU_num =0)? (EVE_MMU0_BASE):(EVE_MMU1_BASE)
    #define EVE_MMU_SysConfig       (EVE_MMU_base + 0x10)
    #define EVE_MMU_SYSSTATUS       (EVE_MMU_base + 0x14)
    #define EVE_MMU_CNTL         (EVE_MMU_base + 0x44)
    #define EVE_MMU_FAULT_AD       (EVE_MMU_base + 0x48)
    #define EVE_MMU_CAM          (EVE_MMU_base + 0x58)
    #define EVE_MMU_RAM          (EVE_MMU_base + 0x5c)
    #define EVE_MMU_LOCK         (EVE_MMU_base + 0x50)
    #define EVE_MMU_LD_TLB        (EVE_MMU_base + 0x54)
    #define EVE_MMU_EMU_FAULT_AD     (EVE_MMU_base + 0x70)
    /*********
        IVASS 地址映射定义:CortexA15_CPU1视图
    秘书长的报告 /
    #define CM_IVA_CLKSTCTRL        (IVA_CM_CORE + 0x0)
    #define CM_IVA_IVA_CLKCTRL       (IVA_CM_CORE + 0x20)
    #define CM_IVA_SL2_CLKCTRL       (IVA_CM_CORE + 0x28)
    #define RM_IVA_RSTCTRL         (IVA_PRM + 0x10)
    #define RM_IVA_RSTST          (IVA_PRM + 0x14)
    #define ICONT1_ITCM          (IVA_CONFIG_TAGG + 0x08000)
    #define ICONT2_ITCM          (IVA_CONFIG_TAGG + 0x18000)
    菜单项"TDA2xx 多核初始化"
    /******** 启用所有从内核******* /
    热菜单 TDA2xx_multicore_EnableAllCores()
    {
      IPU1SSClkEnable_API ();
      IPU2SSClkEnable_API ();
      DSP1SSClkEnable_API ();
      DSP2SSClkEnable_API ();
      EVE1SSClkEnable_API ();
      EVE2SSClkEnable_API ();
      EVE3SSClkEnable_API ();
      EVE4SSClkEnable_API ();
      IVAHDSSClkEnable_API();
      PRUSS_1_2_ClkEnable();
    }
    /******** 启用 PRUSS 时钟******** /
    热菜单 PRUSS_1_2_ClkEnable()
    {
      GEL_TextOut ("--> PRUSS 1和2初始化正在进行... <<-\n");
      WR_MEM_32 (0x4a009718、0x0);//PRUSS_1_CLKCTRL
      WR_MEM_32 (0x4a009720、0x0);//PRUSS_2_CLKCTRL
      WR_MEM_32 (0x4a009718、0x2);//PRUSS_1_CLKCTRL
      WR_MEM_32 (0x4a009720、0x2);//PRUSS_2_CLKCTRL
      while ((RD_MEM_32 (0x4a0098FC)& 0x100)!= 0x100);//L4PER2 - ICSS_CLKACTIVITY
      GEL_TextOut ("--> PRUSS 1和2初始化正在完成... <<-\n");
    }
    /******** 启用 IPU1时钟******* /
    热菜单 IPU1SSClkEnable_API ()
    {
      IPUSSClkEnable (1);
    }
    /******** 启用 IPU2时钟********* /
    热菜单 IPU2SSClkEnable_API ()
    {
      IPUSSClkEnable (2);
    }
    /******** 启用 DSP1时钟******* /
    热菜单 DSP1SSClkEnable_API ()
    {
      DSPSSClkEnable (1);
    }
    /******** 启用 DSP2时钟******* /
    热菜单 DSP2SSClkEnable_API ()
    {
      DSPSSClkEnable (2);
    }
    /******** 启用 EVE1时钟******* /
    热菜单 EVE1SSClkEnable_API ()
    {
      EVESSClkEnable (1);
    }
    /******** 启用 EVE2时钟******* /
    热菜单 EVE2SSClkEnable_API ()
    {
      EVESSClkEnable (2);
    }
    /******** 启用 EVE3时钟******* /
    热菜单 EVE3SSClkEnable_API ()
    {
      EVESSClkEnable (3);
    }
    /******** 启用 EVE4时钟******* /
    热菜单 EVE4SSClkEnable_API ()
    {
      EVESSClkEnable (4);
    }
    /******** 启用 IVA 时钟******* /
    热菜单 IVAHDSSClkEnable_API()
    {
      IVAHDSSClkEnable();
    }
    IPUSSClkEnable (uint32_t cpu_num)
    {
      uint32_t regVal、regAddr;
      GEL_TextOut ("--> IPU%DSS 初始化正在进行... <<--\n"、、、、 cpu_num);
      对于 IPU CPU0、CPU1、单指令缓存和 MMU、//重置有效
      WR_MEM_32 (RM_IPU_RSTCTRL、0x7);
      //重置 IPU 单指令缓存/MMU 的失效状态*/
      WR_MEM_32 (RM_IPU_RSTST、0x7);
      WR_MEM_32 (RM_IPU_RSTCTRL、0x3);
      while ((RD_MEM_32 (RM_IPU_RSTST)& 0x4)!= 0x4);
      if (1 = vision_sdk_config)
      {
        /*---------- 设置 UNICACHE MMU --- *
        /*大页面翻译*/
        /*逻辑地址*/
        regAddr = IPU_MMU_CFG;
        regAddr += 0x800;
        WR_MEM_32 (regAddr、      0x40000000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x80000000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0xA0000000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x60000000);regAddr += 0x4;
        /*物理地址*/
        regAddr = IPU_MMU_CFG;
        regAddr += 0x820;
        WR_MEM_32 (regAddr、      0x40000000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x80000000);regAddr += 0x4;
        if (1 = vision_sdk_config_old)
        {
          WR_MEM_32 (regAddr、      0xA0000000);regAddr += 0x4;
        }
        其他
        {
          WR_MEM_32 (regAddr、      0x80000000);regAddr += 0x4;
        }
        WR_MEM_32 (regAddr、      0x40000000);regAddr += 0x4;
        /*策略寄存器*/
        regAddr = IPU_MMU_CFG;
        regAddr += 0x840;
        WR_MEM_32 (regAddr、      0x00000007);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x000B0007);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x00020007);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x00000007);regAddr += 0x4;
        /*---------- 小页 MMU----------- *
        regAddr = IPU_MMU_CFG;
        regAddr += 0x920;
        WR_MEM_32 (regAddr、      0x00000000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x40000000);regAddr += 0x4;
        regAddr = IPU_MMU_CFG;
        regAddr += 0x9A0;
        WR_MEM_32 (regAddr、      0x55020000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x55080000);regAddr += 0x4;
        regAddr = IPU_MMU_CFG;
        regAddr += 0xA20;
        WR_MEM_32 (regAddr、      0x0001000B);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x0000000B);regAddr += 0x4;
      }
      其他
      {
        /*---------- 设置 UNICACHE MMU --- *
        /*大页面翻译*/
        /*逻辑地址*/
        regAddr = IPU_MMU_CFG;
        regAddr += 0x800;
        WR_MEM_32 (regAddr、      0x40000000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x80000000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0xA0000000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x60000000);regAddr += 0x4;
        /*物理地址*/
        regAddr = IPU_MMU_CFG;
        regAddr += 0x820;
        WR_MEM_32 (regAddr、      0x40000000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x80000000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0xA0000000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x40000000);regAddr += 0x4;
        /*策略寄存器*/
        regAddr = IPU_MMU_CFG;
        regAddr += 0x840;
        WR_MEM_32 (regAddr、      0x00000007);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x000B0007);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x00020007);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x00000007);regAddr += 0x4;
        /*中页*/
        regAddr = IPU_MMU_CFG;
        regAddr += 0x860;
        WR_MEM_32 (regAddr、      0x00300000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x00400000);regAddr += 0x4;
        regAddr = IPU_MMU_CFG;
        regAddr += 0x8A0;
        WR_MEM_32 (regAddr、      0x40300000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x40400000);regAddr += 0x4;
        regAddr = IPU_MMU_CFG;
        regAddr += 0x8E0;
        WR_MEM_32 (regAddr、      0x00000007);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x00020007);regAddr += 0x4;
        /*小页*/
        regAddr = IPU_MMU_CFG;
        regAddr += 0x920;
        WR_MEM_32 (regAddr、      0x00000000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x40000000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x00004000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x00008000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x20000000);regAddr += 0x4;
        regAddr = IPU_MMU_CFG;
        regAddr += 0x9A0;
        WR_MEM_32 (regAddr、      0x55020000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x55080000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x55024000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x55028000);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x55020000);regAddr += 0x4;
        regAddr = IPU_MMU_CFG;
        regAddr += 0xA20;
        WR_MEM_32 (regAddr、      0x0001000B);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x0000000B);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x00010007);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x00000007);regAddr += 0x4;
        WR_MEM_32 (regAddr、      0x00000007);regAddr += 0x4;
      }
      /*---------- 写入 IPU IRAM 引导映像-------------------------------------------------------- *
      /*这会将内核置于虚拟循环中,以防止它们运行错误代码*/
      WR_MEM_32 (IPU_BASE_ADDR、0x10000);
      WR_MEM_32 (IPU_BASE_ADDR + 0x4、0x9);
      WR_MEM_32 (IPU_BASE_ADDR + 0x8、0xE7FE7FE);
      while (RD_MEM_32 (IPU_BASE_ADDR)!= 0x10000);
      while (RD_MEM_32 (IPU_BASE_ADDR + 0x4)!= 0x9);
      while (RD_MEM_32 (IPU_BASE_ADDR + 0x8)!= 0xE7FE7FE);
      /* IPU CPU0、CPU1的复位失效*/
      WR_MEM_32 (RM_IPU_RSTCTRL、0x0);
      /*检查复位状态:IPU CPU0、CPU1、单指令缓存和 MMU 已退出复位状态*/
      while ((RD_MEM_32 (RM_IPU_RSTST)& 0x3)!= 0x3);
      WR_MEM_32 (RM_IPU_RSTST、0x7);
      GEL_TextOut ("--> IPU%DSS 初始化完成! <<--\n"、、、、 cpu_num);
    }
    DSPSSClkEnable (uint32_t cpu_num)
    {
      uint32_t i、失败= 0;
      GEL_TextOut ("--> DSP%DSS 初始化正在进行... <<--\n"、、、、 cpu_num);
      /* DSPSS 引导地址*/
      WR_MEM_32 (DSPSSBOOTADDR、(DSPSSBOOTADDRVALUE >> 10));
      针对 DSP_LRST、DSP 缓存和从器件的/* Ware 复位被置为有效*/
      WR_MEM_32 (RM_DSP_RSTCTRL、0x3);
      /*为 DSPSS 启动软件强制唤醒*/
      WR_MEM_32 (CM_DSP_CLKSTCTRL、0x2);
      /*启用 DSPSS 时钟*/
      WR_MEM_32 (CM_DSP_DSP_CLKCTRL、0x1);
      /*检查 GFCLK 是否选通*/
      while ((RD_MEM_32 (CM_DSP_CLKSTCTRL)& 0x100)!= 0x100);
      如果(debug_print)
      {
        GEL_TextOut ("调试:时钟处于活动状态... \n");
      }
      针对 DSPSS 的/*复位失效*
      WR_MEM_32 (RM_DSP_RSTCTRL、0x1);
      /*检查复位状态:DSPSS */
      while ((RD_MEM_32 (RM_DSP_RSTST)& 0x2)!= 0x2);
      WR_MEM_32 (DSP_L2_SRAM_TAGR、0x0000A120);// DSP 自分支循环
      /*复位 DSP CPU 失效*/
      WR_MEM_32 (RM_DSP_RSTCTRL、0x0);
      /*检查复位状态:DSPSS 内核、高速缓存和从接口*/
      while ((RD_MEM_32 (RM_DSP_RSTST)& 0x3)!= 0x3);
      /*检查模块模式*/
      while ((RD_MEM_32 (CM_DSP_DSP_CLKCTRL)& 0x30000)!= 0x0);
      如果(debug_print)
      {
        GEL_TextOut ("调试:在 DSPSS L2RAM 中检查数据完整性... \n");
      }
      对于(I = 1;I < 16;I++)
      {
        WR_MEM_32 ((DSP_L2_SRAM_TAGR +(I << 2))、0x12345678);
      }
      对于(I = 1;I < 16;I++)
      {
        IF (RD_MEM_32 (DSP_L2_SRAM_TAGR +(I << 2))!= 0x12345678)
        {
          FAIL++;
          中断;
        }
      }
      如果(失败)
      {
        GEL_TextOut ("错误:GEM L2RAM 中的数据完整性检查失败! \n");
      }
      其他
      {
        如果(debug_print)
        {
          GEL_TextOut ("调试:GEM L2RAM 中的数据完整性检查成功! \n");
        }
      }
      GEL_TextOut ("--> DSP%DSS 初始化完成! <<--\n"、、、、 cpu_num);
    }
    EVESSClkEnable (uint32_t cpu_num)
    {
      GEL_TextOut ("--> EVE%DSS 初始化正在进行... <<--\n"、、、、 cpu_num);
      针对 EVE_LRST、EVE 高速缓存和从属设备的/* Ware 复位被置为有效*/
      WR_MEM_32 (RM_EVE_RSTCTRL、0x3);
      /*为 EVESS 启动软件强制唤醒*/
      WR_MEM_32 (CM_EVE_CLKSTCTRL、0x2);
      /*启用 EVESS 时钟*/
      WR_MEM_32 (CM_EVE_EVE_CLKCTRL、0x1);
      /*检查 GFCLK 是否选通*/
      while ((RD_MEM_32 (CM_EVE_CLKSTCTRL)& 0x100)!= 0x100);
      如果(debug_print)
      {
        GEL_TextOut ("调试:时钟处于活动状态... \n");
      }
      /*为 EVESS 重置无效*/
      WR_MEM_32 (RM_EVE_RSTCTRL、0x1);
      /*检查复位状态:EVESS */
      while ((RD_MEM_32 (RM_EVE_RSTST)& 0x2)!= 0x2);
      EVE_MMU0_Config (CPU_num);
      /*为 EVESS CPU 重置无效*/
      WR_MEM_32 (RM_EVE_RSTCTRL、0x0);
      /*检查复位状态:EVESS 内核、高速缓存和从接口*/
      while ((RD_MEM_32 (RM_EVE_RSTST)& 0x3)!= 0x3);
      /*检查模块模式*/
      while ((RD_MEM_32 (CM_EVE_EVE_CLKCTRL)& 0x30000)!= 0x0);
      WR_MEM_32 (RM_EVE_RSTST、0x3);
      GEL_TextOut ("--->>>EVE%DSS 初始化完成! <<--\n"、、、、 cpu_num);
    }
    IVAHDSSClkEnable()
    {
      GEL_TextOut ("--> IVAHD 初始化正在进行... <<-\n");
      /*为 IVASS 启动软件强制唤醒*/
      WR_MEM_32 (CM_IVA_CLKSTCTRL、0x2);
      /*启用 IVASS 时钟*/
      WR_MEM_32 (CM_IVA_IVA_CLKCTRL、0x1);
      /*启用 IVA SL2时钟*/
      WR_MEM_32 (CM_IVA_SL2_CLKCTRL、0x1);
      /*检查 GFCLK 是否选通*/
      while ((RD_MEM_32 (CM_IVA_CLKSTCTRL)& 0x100)!= 0x100);
      如果(debug_print)
      {
        GEL_TextOut ("调试:时钟处于活动状态... \n");
      }
      针对 CPU1、CPU2、IVA 逻辑器件的//热复位被置为有效
      WR_MEM_32 (RM_IVA_RSTCTRL、0x7);
      WR_MEM_32 (RM_IVA_RSTST、0x7);
      针对 CPU1、CPU2的/*热复位被置为有效*/
      WR_MEM_32 (RM_IVA_RSTCTRL、0x3);
      /*检查复位状态:IVA Logic */
      while ((RD_MEM_32 (RM_IVA_RSTST)& 0x4)!= 0x4);
      /*自分支指令*/
      WR_MEM_32 (ICONT1_ITCM、0xEAFFFFE);
      WR_MEM_32 (ICONT2_ITCM、0xEAFFFFE);
      针对 CPU1、CPU2的/*重置无效*
      WR_MEM_32 (RM_IVA_RSTCTRL、0x1);
      while ((RD_MEM_32 (RM_IVA_RSTST)& 0x6)!= 0x6);
      WR_MEM_32 (RM_IVA_RSTCTRL、0x0);
      while ((RD_MEM_32 (RM_IVA_RSTST)& 0x7)!= 0x7);
      WR_MEM_32 (RM_IVA_RSTST、0x7);
      GEL_TextOut ("--->>IVAHD 初始化完成! (笑声) <<-\n");
    }
    SetupEveMmutry (uint32_t cpu_num、uint32_t MMu_num、uint32_t entryNum、uint32_t virtAddr、uint32_t physAddr、 uint32_t pagesize)
    {
      GEL_TextOut ("调试:配置 EVE%d MMU%d TLB 条目%u:%x ->%x \n"、、、、、、 cpu_num、MMU_num、entryNum、virtAddr、physAddr);
      /*配置 MMU */
      /* CAM[1:0]  -页面大小:0=1MB、1=64KB、2=4KB、3=16MB */
      /* CAM[2]   -有效位*/
      /* CAM[3]   -保留(防止使用挡板)*/
      /* CAM[31:12]-虚拟地址标签*/
      /* CAM = 0xC --> 1 MB  */
      /* CAM = 0xF --> 16 MB  */
      /* RAM[6]   - Mixed page 属性:0使用 TLB 元素大小、1使用 CPU 元素大小*
      /* RAM[8:7]  -元素大小0=8位、1=16位、2=32位、3=无转换*/
      /* RAM[9]   -页面的字节序(0=Little、1=big)*/
      /* RAM[31:12]-页面的物理地址*/
      /* RAM = 0x1C0 -> CPU 元素大小、无转换*/
      WR_MEM_32 (EVE_MMU_CAM、0x0000000c |(pagesize 和3)|(virtAddr 和0xFFFFFFE000));
      WR_MEM_32 (EVE_MMU_RAM、0x000001c0 |(physAddr 和0xFFFFFFE000));
      WR_MEM_32 (EVE_MMU_LOCK、((RD_MEM_32 (EVE_MMU_LOCK))和0xFFFFFE0F)|(entryNum << 4));
      WR_MEM_32 (EVE_MMU_LD_TLB、1);
    }
    add_while1_at_resetVector (uint32_t addr)
    {
      /*在复位地址写入自分支循环(CPU 需要可靠连接)*/
      WR_MEM_32 (addr、0x00000100);
      WR_MEM_32 (addr + 0x100、0x004a03FF);
      WR_MEM_32 (addr + 0x104、0x03FF03FF);
    }
    EVE_MMU0_Config (uint32_t CPU_num)
    {
      uint32_t MMU_num = 0;
      uint32_t vec_BASE = 0;
      /*重置 MMU */
      GEL_TextOut ("调试:正在重置 EVE MMU... \n"、、、、、、 );
      WR_MEM_32 (EVE_MMU_SysConfig、2);
      /*等待 MMU 重置完成*/
      while ((RD_MEM_32 (EVE_MMU_SYSSTATUS)& 1)= 0);
      if (vision_sdk_config = 1)
      {
        if (cpu_num = 1)
        {
          VEC_BASE = 0x8000000;
        }
        if (cpu_num == 2)
        {
          VEC_BASE = 0x81000000;
        }
        if (cpu_num == 3)
        {
          VEC_BASE = 0x82000000;
        }
        if (cpu_num == 4)
        {
          VEC_BASE = 0x83000000;
        }
        add_while1_at_resetVector (vec_BASE);
        SetupEveMmutry (cpu_num、MMu_num、 1、0x00000000、  vec_BASE、 EVE_MMU_pagesize_4K);
        SetupEveMmutry (cpu_num、MMu_num、 2、  vec_BASE、  vec_BASE、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、 3、0x40000000、0x40000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、 4、0x48000000、0x48000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、 5、0x42000000、0x42000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、 6、0x4A000000、0x4A000000、 EVE_MMU_pagesize_16M);
      }
      其他
      {
        if (EVE_SW_CONFIG = 1)
        {
          VEC_BASE = 0x8000000;
        }
        其他
        {
          VEC_BASE = 0x40500000;
        }
        /*在矢量基址添加 while (1)循环以避免随机代码执行*/
        add_while1_at_resetVector (vec_BASE);
        SetupEveMmutry (cpu_num、MMu_num、 1、0x00000000、  vec_BASE、 EVE_MMU_pagesize_4K);
        /*启用对整个 DDR 的访问*/
        SetupEveMmutry (cpu_num、MMu_num、 2、0x80000000、0x80000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、 3、0x81000000、0x81000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、 4、0x82000000、0x82000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、 5、0x83000000、0x83000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、 6、0x84000000、0x84000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、 7、0x85000000、0x85000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、 8、0x86000000、0x86000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、 9、0x87000000、0x87000000、 EVE_MMU_pagesize_16M);
        /*启用对某些配置空间和 OCMC 存储器的访问*/
        SetupEveMmutry (cpu_num、MMu_num、10、0x40000000、0x40000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、11、0x4A000000、0x4A000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、12、0x45000000、0x45000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、13、0x48000000、0x48000000、 EVE_MMU_pagesize_16M);
        SetupEveMmutry (cpu_num、MMu_num、14、0x42000000、0x42000000、 EVE_MMU_pagesize_16M);
      }
      /*启用 MMU */
      WR_MEM_32 (EVE_MMU_CNTL、((RD_MEM_32 (EVE_MMU_CNTL))和0xFFFFFFFD)| 0x2);
      /******** /
      if (EVE_SW_CONFIG = 1)
      {
        GEL_TextOut ("调试:EVE%d MMU0根据 EVE_SW_LIBRARY 要求进行配置!!!!!!\n"、、、、、、 cpu_num);
      }
      if (vision_sdk_config = 1)
      {
        GEL_TextOut ("调试:EVE%d MMU0根据 VisionSDK 要求进行配置!!!!\n"、、、、、、、 cpu_num);
      }
    }
    您好、安州、
    GEL 就像这样。

    但是 、我的应用程序中没有链接器命令文件。我正在使用仿真器来调试 processor_sdk_vision_03_08_00_00。我只启动了目标配置文件、然后链接 TDA2X,的内核、然后将代码加载到它们,、当我将代码加载到 EVE 内核时、错误会出现。

    谢谢、等待您的回复。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

      从上面的 GEL 文件中可以看到、您访问的地址(OxB1000000)未映射到 MMU 表中。 当您构建 EVE 时、它必须使用 linker.cmd 文件、这是决定代码和其他存储器段的放置位置的文件。 您需要了解代码(.text)段为什么位于0xB1000000中。  

    此致、

    安州

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、安州、

    感谢你的答复。 我已更改了用例中的存储器映射、并将存储器从512M 增加到1GB。 我认为这可能是原因。 我应该如何使用 JTAG 将代码下载到 EVE?

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!
      我不理解您 的问题、如果 您是指如何将二进制文件加载到 EVE、请参阅 evesw_getting_started.pdf。


    此致、

    阿斯胡

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    当我在开始时问这个问题时、我遵循了这个文档、但我遇到了一个错误。 我是说如何解决该误差? 我需要编写一个 cmd 文件还是需要更改什么以解决此错误。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     我解释了出现此错误的原因、因为访问的存储器未映射到 MMU 表中。 这是您的自定义应用程序、还是您在使用发布时使用的内容?

    此致、
    安州