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.

[参考译文] TMS320F28P550SJ:CLA 在下电上电后无法写入 ePWM

Guru**** 2462060 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1501481/tms320f28p550sj-cla-fails-to-write-to-epwm-after-power-cycle

器件型号:TMS320F28P550SJ
主题:SysConfig 中讨论的其他器件

工具/软件:

您好:

标题很好地总结了它。 刷写后、CLA 能够写入 ePWM 计数器比较。 即使处理器复位后、ePWM 仍然能够写入。 但在下电上电后、计数器比较绝不会发生变化。

我的另一个调试结果显示 CLA 正确引导、任务已被触发并按预期运行。 我正在使用 SysConfig 设置我的工程、并且 CLA 具有完全读/写访问权限。 我使用 driverLib 函数 配置占空比。

在刷写 MCU 之后、下电上电之前、CLA 对其进行重新编程、会立即覆盖触发内核写入 ePWM。 但在下电上电后、尽管 CLA 明确调用函数来覆盖内核的占空比、但该占空比始终不会被覆盖。

鉴于此、在我看来、CLA 由于某种原因无法写入 ePWM。 通过串行端口进行的调试表明、SYSCTL 中的读取/写入访问权限在下电上电后仍然有效、因此并不是这样。 除此之外、我不确定从哪里开始。

提前感谢。

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

    更新:我能够将调试配置设置为在目标运行时附加。 我发现(也是刷写后的情况)我收到对 EPWM->CMPA 的 CLA1写入访问违例(0x406B、我尝试为占空比设置的寄存器)。 参考手册第145页中的此注释似乎说明了具体情况:

    如果我正确解释该注释、连接调试器可使 CLA 绕过写保护。 我猜对处理器进行下电上电会重置、这正是我一直在努力的事情。 但如果 EPWM1_AC 寄存器中的 CLA1_ACC 显示 CLA 具有完整的读取/写入权限、我不能完全确定为什么会遇到 CLA1写入访问违例。

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

    尊敬的 Donavon:

    我有几个澄清问题:

    • 通过"下电上电"、您指的是以下哪一项? 请参阅 此处的 TRM 部分、 了解每个模块的说明。  
    • 下电上电后、如何重新连接到 JTAG 和每个内核?
    • 您如何验证以下内容?  任务中的__ mdebugstop ();行还是 GPIO 切换?
    • Donavon Facey 说:
      尽管 CLA 明确调用该函数来覆盖它

    在您包含的 TRM 说明中、调试器"访问"此处是指您是否要在内存浏览器或表达式视图中通过 CCS 修改受保护的存储器。 如果您从 CLA 代码编写寄存器、这不会被视为调试器访问、因此我认为该注释不适用于此场景。

    此致、

    Delaney  

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

    尊敬的 Delaney:

    1.通过"下电上电"我指的是 POR。

    2.我在 CCS 中添加了一个单独的调试配置、并在配置中使用"仅加载符号"。 我只将调试器连接到主内核、然后查看寄存器视图。 因此、我遵循以下顺序:

      a) Flash 项目

      b)断开系统的电源

      c)为系统通电

      d)使用仅加载符号配置连接调试器

    3、在修改寄存器前将 GPIO 线拉高、在修改寄存器后立即拉低。 我的代码中的任何位置都没有 CLA 断点。

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

    我想跟进此问题、以防其他人遇到类似问题:

    我采用了 SysConfig 生成的宏

    请定义此 PIN 1

    #define that_pin 2.

    并将它们放置在一个常量数组中、以便更容易编制索引

    const uint16_t GPIO_Pins ={this_PIN、that_PIN};

    这些常量包含在 CLA 文件中、因此它没有引发任何编译器错误、但我相信它们被编译成了 CLA 无法访问的内存段。 我不确定 CLA 如何在0x6B 处创建写入访问违例(如果它无法从存储器读取0x406B)、或者上电复位为什么更改了其中任何一个)、但这可能与我的确切实现有关。 现在我只是明确地标记这些常量数组以进入 CLA/CPU 共享数据内存、这似乎没问题。