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/TMS320F28379D:存储器映射阻止读取映射的硬件寄存器。

Guru**** 2625265 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/898577/ccs-tms320f28379d-memory-map-prevented-reading-a-mapped-hardware-register

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

当通过板载 XDS100调试 我们的 LaunchXL-F2379D 时、我们无法看到与硬件外设关联的寄存器、尽管可以看到数据指针指向要执行此操作的存储器中的正确地址。 这仅在我们使用 CAN 的实现中发生、并且也与该模块隔离。 在 SCI 和 CPU 定时器等其他外设上执行类似的操作会产生预期的行为。 但是、对于 CAN 寄存器集、不仅在调试器视图中读取不可用(如下图所示、在最低级别读取指针"m_Reg "会返回错误)、 我们似乎也无法从编译的指令集更新寄存器、因为我们从寄存器窗口中实时观察它们。 当我们对上面提到的指针"m_Reg "进行直接写入时、这些值不会得到反映、因为它们应该在硬件寄存器中。 我还包含了我们的链接器命令文件。

尝试通过变量窗口查看寄存器是我们目前为止找到的最好线索。 展开数据指针,该指针指向寄存器,其包装程序类的名称是在告诉我们“内存映射阻止读取地址... "尽管看指针本身,我们看到它确实指向它所指的位置。 CAN 寄存器部分与 LOCATION 和 FUNCTION 中的其他外设分开、因此我认为我们缺少一些规则或语句、这些规则或语句会配置已编译的代码或调试器以正确读取它们。

此处定义的存储器段映射到此微处理器的正确位置、我们的源代码使用"#pragma DATA_SECTION ()"引用这些段。 我已包含链接器文件和寄存器定义文件、它们是提供的默认 C2000Ware 版本、并进行了一些修改。 我无法提供源代码、但如果有任何其他形式的数据会有所帮助、我很乐意提供这些数据。

e2e.ti.com/.../2837xD_5F00_FLASH_5F00_lnk_5F00_cpu1_5F00_cmd.txte2e.ti.com/.../Can_5F00_Regs_5F00_hpp.txt

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

    您好 Jensen、

    这是一个已知问题。 请参阅以下主题:

    https://e2e.ti.com/support/tools/ccs/f/81/t/753701?tisearch=e2e-sitesearch&keymatch=%20user%3A388172

    您使用的是哪个版本的 CCS?

    谢谢

    Ki

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

    [报价用户="Ki"]您使用的 CCS 是什么版本?

    和哪种 C2000Ware 版本?

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

    Jensen 和我都在研究这个问题、他在使用9.0.1 CCS (我想、虽然 Jensen 需要验证)、而我使用的是9.3.0.00012、两者都有相同的问题。   我拥有的 C2000Ware 版本是 C2000Ware_3_01_00_00。  

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

    此问题需要两个修复程序、一个用于 CCS、另一个用于 C2000Ware (需要为具有修复程序的 CCS 版本迁移 C2000Ware)。 我与 C2000团队进行了检查、CCS 的修复程序应该在 CCS 10.0及更高版本中。 计划今年第3季度将 C2000Ware 迁移到 CCS 10.x。

    谢谢

    Ki

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

    此外、我还查看了另一个主题、但建议的解决方案对我不起作用。  更改寄存器结构中寄存器的值、虽然显示了存储器映射阻止读取消息、但会导致尝试写入的值不会反映在寄存器视图中、 因此、在这种情况下、只要使用寄存器视图就不是我可以看到的解决方案。

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

    您是否尝试更新到 CCS 10.0? CCS 中的修复程序可能足以让 Expressions 视图正确访问存储器。  

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

    谢谢。 如果这个问题不是很快解决的问题,是否有9.3的建议?

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

    编译期间的 seg 故障来自 CCS 10附带的编译器。 您可以将 CCS 10配置为使用 CCS 9.3.0中的编译器进行编译。  

    请参阅以下文章、了解如何让 CCS 发现其他编译器安装:

    https://software-dl.ti.com/ccs/esd/documents/ccs_compiler-installation-selection.html#compiler-discovery

    以及如何在不同的发现版本之间进行选择:

    https://software-dl.ti.com/ccs/esd/documents/ccs_compiler-installation-selection.html#compiler-selection

    谢谢

    Ki

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

    谢谢、我将尝试在10.0内使用9.30编译器进行重建、并查看此问题是否可以自行解决。

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

    听起来不错。 让我们随时了解您的进度。  

    谢谢

    Ki

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

    我在启动板时遇到了一些问题(卡在 itrap 中、但这可能是一个单独的问题)。   

    为了获得有关这个问题的更多信息、我首先尝试使用以下命令直接对寄存器进行实例处理

    #define testRegs
    #ifdef Regtests
    外部"C"

    /*
    *******************----------------------------------------------------------
    *存储器内 SCI 寄存器的链接实例
    *******************----------------------------------------------------------
    *

    #pragma DATA_SECTION ("CanaRegsFile")
    volatile struct f2837xd:CAN:::impl::regs::CAN_regs CanaRegs;

    #pragma DATA_SECTION ("CanbRegsFile")
    volatile struct f2837xd:CAN:::impl::regs::CAN_regs CanbRegs;


    #endif

    然后是直接实例化寄存器并尝试更改值的主函数。   我观察到、TSEG1和 TSEG2不会像预期的那样从0变为2。  我尝试了第3页上的 CAN 寄存器(同时设置了 cmd 和 GEL 文件)、并尝试在这两个页面上使用第1页、但在这两种情况下、我获得了相同的结果。

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

    将代码提升了一个更高级别、并使用一个包装程序类为寄存器提供访问 API 并获得相同的结果。 在这种情况下 、我确保在 tseg1和2之前设置初始化位、以查看寄存器是否正确响应。  遗憾 的是、如图所示、寄存器内容与寄存器活动没有关联、当我查看寄存器结构本身时、它们也不会保留我指定的值。


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

    John、

    您能否为我提供一个小示例测试案例、以便我在我的结尾处试用? 越简单越好。 我正在寻找完整的项目和源文件。 我只需要任何自定义文件、因为我安装了 C2000Ware。

    谢谢

    Ki

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

    下面是一个使用我们拥有的寄存器类的简化项目、该类具有与我在我们制作的顶级 API 类中观察到的相同的行为(写入的值未被观察到)。   希望该文件出现。  我清理了该项目、使其具有最小的引用、并且在我们的设计中没有引用其他文件。  在这种情况下、文件应该几乎是所有 TI 文件衍生产品。

    e2e.ti.com/.../F28379D_5F00_Sandbox_5F00_simple.7z

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

    谢谢 John。 我可以再现您描述的问题。 但是、表达式视图中的原始存储器映射错误在 CCSv10中似乎已经消失、因为它已正确映射到外设页面。

    至于当前问题、我认为这是 CAN 寄存器未正确初始化的问题? 这有点超出我的专业知识范围。 我需要提请 C2000专家注意这一点。

    谢谢

    Ki

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

    原始存储器映射错误似乎已解决、但这可能是由于迁移到 CCS 10所致。  9.3时、我们也将其设置为第3页、但没有任何运气。  但是、现在我们讨论的是当前的问题。

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

    我想我可能已经发现了这个问题:  我们需要在 pClk 寄存器(技术规格中为3.15.11.14)中设置位。   尝试一下、然后返回报告。

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

    这似乎是问题所在:   

    我为 PclkCr10Reg 添加了写入 API 以启用 CANA 和 CANB、并将其添加到我的启动序列中。   现在、寄存器正在按预期响应。  感谢你的帮助。

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

    很高兴听到您解决了该问题。 感谢您分享解决方案!

    Ki