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/TMS320F28335:清除现有 SOCA 事件

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/665363/ccs-tms320f28335-clearing-existing-soca-event

器件型号:TMS320F28335

工具/软件:Code Composer Studio

您好!

我使用的是仅由 PWM 子模块的 SOCA 触发的 DMA。

由于开关频率是可变的、PWM 和控制任务不同步。

在控制任务的某个时刻、我想禁用 DMA、使用 CPU 移动一些数据并重新启用 DMA。 当我重新启用 DMA 时、我必须确保 DMA 操作与 SOCA 事件同步进行。 如果锁存了 SOCA 事件、我不会触发 DMA。

如何在启用 SOCA (SOCAEN=1;)之前擦除现有的 SOCA 事件?

谢谢你

此致

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

    Rga88、

    您是否使用事件触发器子模块生成 SOCA? 查看 ePWM 参考指南、它介绍了事件触发器子模块的功能。 图44"事件触发中断发生器"应该有用。

    • 如果设置了 SOCA 事件、则可以使用 ETCLR[INT]清除该事件。
    • 根据 ETPS[INTPRD]的配置、2位计数器可能处于未知状态、您可以通过写入 ETPS[INTPRD]来重置计数器。
    • 另外、请务必检查 ETSEL[INTSEL]选择的标志是否被清除、因为它也会立即触发中断。

    此致、
    Cody  

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

    我们将生成 SOCA 信号以触发多个 DMA 通道(例如、得益于 DMA SPRUFB8D 文档的图2和表1中的 PERINTSEL=20)。
    我假设 ePWM 文档的图45适用(而不是44)。 是这样吗?
    要同时(完全)禁用所有 DMA 通道、必须禁用 SOCA 事件(例如 SOCAEN=0)
    如果在 SOCAEN=0期间发生 SOCA 事件、则2位计数器递增、且其输出为1。 ETCLR[SOCA]=1清零 ETFLG[SOCA]、但2位计数器的输出没有。 是这样吗?

    我们有第一个事件配置(ETPS[SOCAPRD]=1)。 我能否将 ETPS[SOCAPRD]从1更改为0以使2位计数器输出为0、并且在数据被 CPU 移动后重新启用 SOCA 事件、再次强制 ETPS[SOCAPRD]=1? 这是稳健的、还是2位计数器可能进入未知状态?

    我们将 ETSEL[SOCASEL]=4。 PWM 不会停止(它正在控制功率级并且它必须保持工作)、因此 SOCASEL 多路复用器中的事件将会出现。 阅读 ETSEL[SOCASEL]描述时、我知道我无法通过 SOCASEL 位禁用 SOCAEVENT、因为只有有效配置为1、2、4、5、6、7、但必须避免0和3。 是这样吗?

    为了进行优化、执行 SOCA 禁用的正确方法是什么、以确保 SOCA 的启用过程在重新启用时丢弃以前的事件?

    谢谢、

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

    Rga88、

    是图45专门用于生成"SOCA"触发器。  

    更正了2位计数器似乎不会被复位。

    该文档指出、写入 SOCAPRD 将清除两个位计数器、因此我认为您可以简单地重写 SOCAPRD=1的配置来复位计数器、而无需先写入0。 这很可靠、但请记住、一旦发生 CTRL=CMPA 事件、计数器就会递增。

    如果您未使用向上/向下计数模式、或其中一个 CMPx 事件、则可以确保其中一个事件不会发生。 例如、如果在向上计数模式下、CTRD= CMPx 将永远不会发生。 这是使用 SOCASEL 禁用它的一种可能方法。  

    禁用 SOCA 的正确方法是使用 SOCAEN。 重新启用时、应首先通过写入 SOCAPRD 来清除2位计数器、因为它将处于未知状态。  

    此致、
    Cody  

x 出现错误。请重试或与管理员联系。