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.

[参考译文] MSPM0G3507-Q1:有关 TIMx 事件和 DMA 传输模式的问题

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

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1499232/mspm0g3507-q1-questions-about-timx-event-and-dma-transfer-mode

器件型号:MSPM0G3507-Q1
主题:SysConfig 中讨论的其他器件

工具/软件:

您好 MSP 团队:

我有一些关于 PWM 和 DMA 传输 模式的 TIMx 事件的问题。

1)一个 FSUB_x 寄存器可以与7ch 的 PWM 共享?

-周期:1.25 μ s

-所需的 PWM 通道:5-7通道

-需要更改每个周期的占空比

-有两种工作模式,它随机出来(存储在 DMA 中)

已使用  DMA ->成通道-> TIMx  设置  占空比值(不使用 CPU 中断)

- 有两个 FSUB 通道用于从 DMA 订阅值,但它需要控制多达7个通道。

->它是 为了使用一个通道(FSUB_0)而实现的、但客户需要 确认其他 PWM 通道是否也可以 使用 相同的 FSUB_0。

实际上、我无法完全了解什么 是 FSUB_x 寄存器、以及事件如何与 GEN 通道配合使用。 您能否解释一下并确认客户的问题?

2) DMA 触发模式

-他们用数据做缓冲,以改变职责

-当 DMA 触发时,他们希望发送缓冲区数据,并 在最后发送缓冲区中的最后一个数据时停止

在这种情况下、哪种模式最适合? 您能解释一下什么情况以及每种单次传输和重复单次传输模式的区别吗?

我认为单次转接适用于此案例、您能否确认?

我也想知道每个 DAMSA、DMADA 和 DMASZ 是什么意思,以及它是如何工作的。

感谢您的帮助。

非常感谢、

是的  

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

    尊敬的 Yesol:

    1)在 MSPM0的事件模块中、一个事件发布者可以由许多外设的事件订阅者订阅。  

    2) DMA 的单次传输意味着每次传输都需要一个 DMA 触发、并且 DMA 将在 DMA 传输完成后被禁用。

       重复单次传输意味着在传输 DMA 大小后、DMA 将保持启用状态、并再次开始从初始状态进行传输。

    关于 DMA 项目:

    • DMASA:DMA 源地址
    • DMADA:DMA 目标地址
    • DMASZ:DMA 传输大小。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的信息、Pengfei。

    我还有一些问题。

    然后、如果 TIMx 发布事件以在每个周期获取 7个通道 PWM 的占空比值、并且 cc 值从 DMA 订阅、  

     整个7通道 PWM 是否可以订阅 DMA 缓冲器?

      -当我在 CCS 中将 PWM0~6配置为发布者,将 DMA 配置为订阅者时,只能为一个 PWM 通道(发布者)分配 DMA (订阅者)。

      -我很不清楚 哪一个应该是发布者,哪一个应该是订阅者,并想知道它实际上是通过一个 DMA 控制7通道 PWM 与通用事件实现的。

    此外、我对 DMA 通道很好奇。 如果每个7通道 PWM 的比较值不同、我能否在特定地址使用 DMA 通道指定每个值?

    提前感谢您的帮助。

    是的

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

    尊敬的 Yesol:

    我来澄清一下、MSPM0中的事件用于从触发事件传输到预定义操作。

    例如、如果使用 DMA 作为事件 发布者、则触发事件可能是 DMA 传输完成。 如果计时器是事件订阅者、则其重新定义的操作可以为零(将零加载到计数器)、LOAD (将计数器值加载到计数器)或 CC (将计数器值加载到 CC 寄存器)。 但我想这不是你想要的。

    我想您可以将一个计时器事件设置为发布者(例如、PWM 计数器归零事件)、并将 DMA 设置为订阅者、因此在每个 PWM 周期都会触发 DMA 传输。 DMA 源地址是您设置的缓冲区、目标地址可以是每个 PWM 通道的 CC 寄存器(在本例中不会测试、但 CC 寄存器地址可以在 TRM 中找到)。 您应该为每个 DMA 通道设置源地址和目标地址、每个 DMA 通道用于一个 PWM 通道。

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

    嗨、Pengfei、

    感谢您的解释。

    现在我想知道 FSUB_x 是否可以与7ch PWM 的发布者共享。

    如我所述、我们应该触发7ch PWM 的事件、但 DMA 似乎只有两个订阅者(FSUB_0、FSUB_1)来触发 DMA 的7个通道。

    在 CCS 中进行配置时、我只能设置两个索引通道 ID、即使全局事件配置并非针对每个通道也是如此。

    我认为似乎不可能使用 DMA 通道对7通道 PWM 进行活动。

    如果我有任何误解、请随时纠正我。

    非常感谢

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

    为了进一步阐述上面的问题、7通道 PWM 以 相同的时钟频率实现、并且希望同时触发 DMA。

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

    尊敬的 Yesol:

    由于7个 PWM 具有相同的频率并同时触发 DMA、因此 DMA 触发只需要一个事件发布者。

    但不能让7个 DMA 通道完全同时传输数据(例如、它们不能同时占用总线)、实现这一点的一种方法是使用 DMA 级联功能。 可以在最后一个 DMA 通道完成后触发下一次 DMA 通道传输。 有关更多详细信息、请参阅 TRM。   

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

    嗨、Pengfei、

    感谢您的解释。 我只得到了一个需要的事件。  

    但有一点感到困惑的是、当我们在 SysConfig 中配置"trigger Select"时、我可以为每7个 DMA 通道选择 FSUB_0、而不会出错、作为外部 DMA 通道触发类型。

    如您所 述、我了解为了传输到7个 DMA 通道、应将级联功能的内部触发器配置为在最后一个 DMA 通道完成后触发、因为 DMA 通道无法同时允许7个通道传输数据。

    如果我将7个 DMA 通道的所有触发选择配置为 FSUB_0、这是否重要?

    如果我应将其配置为通道1~6的内部触发器(例如、CH0触发 CH1、CH1触发 CH2...)、那么当计时器频率为1.25 μ s 时、它是否会导致每个周期更改占空比?

    非常感谢您的帮助。

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

    尊敬的 Yesol:

    • 7 DMA 通道由同一事件发布者触发也是一种实现功能的方法。  
    • 由于这些 DMA 通道不能同时运行、因此存在延迟、但具体时间可能视情况而定。 假设使用32MHz 时钟、为每个通道传输16位数据、估算延时时间可能约为4 μ s。  
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Pengfei、  

    我配置了以下计时器时钟、我将使用80MHz 时钟源使800kHz 作为具有100个周期计数的 PWM 频率。

    因此、 根据您的说明、使用80MHz 需要1.6us 的延迟时间。

    但我想知道 DMA 确实需要太多时间? 这意味着它需要128个周期来传输一个数据。

    您能否再次确认、在我们使用 DMA 80MHz 时钟源时、每个通道传输16位数据需要1.6us 时间?

    提前感谢您的帮助。

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

    尊敬的 Yesol:

    我根据 DMA 传输1位在1个周期内的假设来估算 DMA 传输时间。

    但实际上、对于32位数据总线、它应该可以在几个周期内一次传输32位数据。  

    因此、在80MHz 中、实际时间可能小于1.6us、您可以按照以下步骤进行测试:

    1.使用  DMA 级联通道功能。

    2.在生成第一个 DMA 触发时切换 GPIO。

    3.在最后一个 DMA 通道完成时再次切换 GPIO。

    4.观察 GPIO 脉冲时间推导延迟。

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

    嗨、Pengfei、

    我正在尝试、但不确定 DMA 级联通道功能的含义。  

    当我将整个通道的触发器选择配置为相同的 FSUB0时、这是否会在 CCS 中自动发挥作用?  

    此外、我卡在多通道 DMA 触发器的位置。 因此、我想使用块地址、同时传输多个通道源的每个数据到固定地址。 我在下面附上了我想实现的目标。

    现在、我可以看到 DMA 可以 在 传输第一个源数据后传输下一个通道。

    但为了控制7PWM、应在一次触发时传输所有通道 Scrarray[0]、然后增加 SrcData 的数组编号、并为下一个触发器再次传输 SCR 阵列[1]。

    SCR 阵列应该是独立的数据、此图用于帮助了解如何通过多个 DMA 通道传输数据。

    请帮我进行调试吗?

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

    尊敬的 Yesol:

    很抱歉晚才回复。

    #1至于 DMA 级联通道、这意味着一个 DMA 通道 (例如 CH1)可能由另一个 DMA 通道传输完成事件(例如 ch0完成)触发、请参阅下图。

    至于配置、可以通过将 CH0触发类型设置为外部 DMA 通道(FSUB_0)、将 CH1触发类型设置为内部 DMA 通道、并选择 DMA 通道0作为触发源来实现级联通道。 可以对 ch2~ch15进行相同的配置。  

    #2 I 使用 DMA 多通道触发进行了测试、结果显示仅当 DMA 通道0传输完成(传输大小减小到零)时才会触发 DMA 通道1。 这意味着我们只能在"fix addr to fix addr"模式下使用多通道触发器、否则通道1将等待所有通道0数据的传输、然后开始其传输。 我们需要手动更改源地址。  

    此致、

    Pengfei