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.

[参考译文] Starterware/TMS320C6748:API &quot 的实施不正确;CacheEnable"

Guru**** 2540820 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/597947/starterware-tms320c6748-incorrect-implementation-of-api-cacheenable

器件型号:TMS320C6748

工具/软件:Starterware

您好!

在我们的产品中使用 C6748 StarterWare 版本1.20.04时、我们发现配置 L1P、L1D 和 L2高速缓存配置的 CacheEnable API 实现不正确。

文件:\system_config\c674x\cache.c

行:154.

原因:"memCfg"值未正确使用、应将其移动以获取 L1P 的正确值

重构:

      /*启用 L1P 缓存*/
       HWREG (SOC_Cache_0_regs + DSPCACHE_L1PCFG)=
           (HWREG (SOC_Cache_0_regs + DSPCACHE_L1PCFG)和
           ~DSPCACHE_L1PCFG_L1PMODE)|((memCfg >>((L1P_MEM_UNIQUE >> 1)* 4))和 DSPCACHE_L1PCFG_L1PMODE);
       

行:166.

原因:"memCfg"值未正确使用、应将其移动以获取 L1D 的正确值

重构:

     /*启用 L1D 高速缓存*/
       HWREG (SOC_Cache_0_regs + DSPCACHE_L1DCFG)=
           (HWREG (SOC_Cache_0_regs + DSPCACHE_L1DCFG)和
           ~DSPCACHE_L1DCFG_L1DMODE)|(((memCfg >>((L1D_MEM_UNIQUE >> 1)* 4))和 DSPCACHE_L1DCFG_L1DMODE);

行:178

原因:"memCfg"值未正确使用、应将其移动以获取 L2的正确值

重构:

       /*启用 L2缓存*/
       HWREG (SOC_Cache_0_regs + DSPCACHE_L2CFG)=
           (HWREG (SOC_Cache_0_regs + DSPCACHE_L2CFG)和
           ~DSPCACHE_L2CFG_L2MODE)|((memCfg >>((L2_MEM_UNIQUE >> 1)* 4))和 DSPCACHE_L2CFG_L2MODE);

谢谢

Shrikrishna

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的线程似乎被 TI 人忽略了。 通常与 OMAP-L13x/C674x等 相关的线程会移至 DSP 论坛。 CacheEnable()的问题在2014年对2012线程的答复中被注意到。
    e2e.ti.com/.../230523
    版本1.20.04是最后一个"独立"版本。 SDK 中嵌入了一个新版本、显然完全重新编写且与以前的版本不兼容。 因此、修复此错误的可能性很小。 实际上、L1P 设置确实起作用、因为移位是0。 无论传入的配置如何、L1D 和 L2将始终设置为禁用(0)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Shrikrishna

    n`t 使用在 dspcache.h 中定义的宏、则不需要操作该函数内的 memcfg 值。

    例如、如果您使用
    高速缓冲使能(L1PCFG_L1PMODE_32K)

    宏定义为:
    #define L1DCFG_L1DMODE_16K(0x3 <<((L1D_MEM_UNIQUE >> 1)* 4))

    因此代码将正确地将 L1P 配置为32K 高速缓存。

    这些高速缓存 API 旨在使用 dspcache.h 中提供的宏来使用。尽管注释和代码可能已经被不同地写入以强制使用。

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为 Shrikrishna 正在使用宏常量、但仍然存在几个错误。 在 CacheEnable()中,将 memCfg 参数复制到适当寄存器的典型形式为:

    HWREG (SOC_Cache_0_regs + DSPCACHE_L1DCFG)=
    (HWREG (SOC_Cache_0_regs + DSPCACHE_L1DCFG)和
    ~DSPCACHE_L1DCFG_L1DMODE)|(memCfg 和 DSPCACHE_L1DCFG_L1DMODE);

    本质上、memCfg 的底部3位复制到寄存器的底部3位。

    问题是 memCfg 包含分别上移0、4和8的 L1PMODE、L1DMODE 和 L2MODE 值。 Shrikrishna 的修复方法是在复制到寄存器之前将模式值移回最低3位。 适用于 L1P、因为移位是0。 对于 L1D 和 L2、会错误地复制 memCfg 的底部3位。 memCfg 的底部3位碰巧是所需的 L1P 设置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    同意。 我查看了宏并确实看到了您突出显示的点。 遗憾的是、Starterware 软件处于维护模式、因此我将在 Starterware 文档中记录此内容、但我们可能无法提供更新版本。

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Rahul 和 Norman。 已同意对 Starterware 不进行更新。 因此、我将在 Starterware 存储库中对客户进行修改。
    我想问的一个问题是、StarterWare 的替代方案是什么?

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

    Shrikrishna

    我们计划通过在 Processor SDK RTOS 中添加对该器件的支持来更新该器件的软件。 在该软件包中、Starterware 将替换为寄存器 CSL 和功能 CSL (CSL-FL)。 这将使 API 和函数与新一代 C66x DSP 保持一致、并涵盖 TI ARM 和 DSP 系列中的所有 SOC 架构。 我们还将为可在非操作系统和 TI RTOS 中使用的外设添加低级驱动程序。

    如果您想查看代码流、可在 Web 上查看此器件的一些基于 CSL 的示例:

    processors.wiki.ti.com/.../QuickStartOMAPL1x_rCSL

    处理器 SDK RTOS 4.0版将于本月末或七月初在网上提供。

    此致、

    Rahul