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.

[参考译文] TMS570LC4357:DMA 寄存器配置中的问题

Guru**** 2473260 points
Other Parts Discussed in Thread: TMS570LC4357

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/995065/tms570lc4357-issue-in-dma-registers-configuration

器件型号:TMS570LC4357

大家好、

在 TMS570LC4357处理器的应用中、我们使用 DMA 引擎、其中我们使用 DMA 通道编号来建立通过 DMA 进行的通信。 在实施某些 DMA 功能时、我们发现了一些问题。  

为了配置触发类型、我们注意到寄存器没有根据需要进行更新。 根据 TRM、 HWCHENAS 用于配置硬件触发、而 SWCHENAS 寄存器用于软件触发。 但是、观察到  HWCHENAS 配置正确、但  SWCHENAS 寄存器未正确更新、即使我们处于特权模式。 让我知道我们需要如何实现此逻辑、以便为所需的触发器类型配置所需的 DMA 通道编号。

2.为了配置 DAM 通道优先级、我们还想了解我们需要如何实现这一点。 根据 TRM、我们有用于配置高优先级和低优先级的 CHPRIO 和 CHPRIOR 寄存器、但当我们尝试配置低优先级时、它不能正确更新该寄存器中所需的位。 在此、我们还想了解如何实现这一点、以便能够适当地配置通道优先级。 例如 、CH2表示低电平、CH5表示高电平、CH10表示高电平、CH15表示低电平。

此致、

Shivam

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

    Shivam、您好!  

    对于 DMA 软件请求、如果启用了 DMA、则通过写入 SW 通道使能置位寄存器(SWChnEnaSet)来触发传输。 在一帧传输或一个块传输后、该位也会被清零。 您检查 SWChnEnaSet 寄存器中的位是否已置位、配置该寄存器之前请勿启用 DMA。

    2.您可以将中的信道分配给高优先级队列或低优先级队列。 分配给高优先级队列的通道将首先得到服务。 每个队列都可以配置为使用固定优先级方案或旋转优先级方案。

    向 CHPRIO 寄存 器的相应位写1将该通道分配给高优先级队列、向 CHPRIOR 寄存器的相应位写1将该通道分配给低优先级队列。

    Ch5、CH10 --高优先级队列 --写1到 CHPRIO 的位5和位10 (0x420)

    CH2、CH15 --低优先级队列 --  向 CHPRIOR (0x8004)的位2和位15写入1。 写入1将清零 CHPRIO 寄存器中的相应位。  

    请注意:读取两个寄存 器(CHPRIOS 和 CHPRIOR)的值1表示相应的通道被分配给高优先级队列。  

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

    您好、Wang、

    感谢您的回答。 我们今天有机会重新测试这个问题。
    在秒方案中、我们观察到、每当我们尝试将优先级配置为低时、它实际上会重置所有其他先前设置的优先级。 例如、如果 ChnPrioSet/ChnPrioRst 为0x00100200、并且我们尝试向 ChnPrioRst 寄存器写入0x00000001以将优先级配置为低电平、那么它会干扰所有其他通道并读回0x00000000、如图所示。 请帮助我、我们如何根据对任何所需 DMA 通道的需求来配置高优先级和低优先级。

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

    在第一种情况下、我观察到的情况与在配置同一通道的通道优先级时观察到的情况类似。 首先将通道0配置为高优先级、然后再配置为低优先级后、实际上会读回该通道、因为该通道的两个优先级都配置如下:

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

    向 ChnPrioRst 寄存器的位0写入1只会清除 ChnPrioSet 的位0、不会影响其他位。 我刚刚进行了几次测试。 请确保您写入0x00000001而不是0x00100201。

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

    当然可以。 感谢您的响应、我针对优先级寄存器进行了这种尝试、现在看起来不错。 但是、对于硬件/软件触发方法、我仍然看到问题。

    我尝试了以下测试:

    dmaSetChEnable (DMA_CH20、DMA_HW);//通道20 - HW
    dmaSetChEnable (DMA_CH0、DMA_HW);//通道0 - HW
    dmaSetChEnable (DMA_CH20、DMA_SW);//通道20 - SW
    dmaSetChEnable (DMA_CH10、DMA_HW);//通道10 - HW
    dmaSetChEnable (DMA_CH20、DMA_HW);//通道20 - HW
    dmaSetChEnable (DMA_CH0、DMA_SW);//通道0 - SW

    我观察到、对于通道0或通道20、它表示同时启用了软件和硬件触发器方法、但在通道0的最后一步中、我们配置了软件触发、对于通道20、我们配置了硬件触发、但仍然表示启用了两种触发器类型。

    请为我提供有关如何 解决这种情况的帮助:

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

    Shivam、您好!

    [引用 userid="484499" URL"~/support/microcontrollers/other/f/other-microcontrollers-forum/995065/tms570lc4357-issue-in-dma-registers-configuration/3684106 #3684106"]但它仍然指示启用了这两种触发器类型。

    DMA 控制器在同一通道上支持硬件请求和软件请求的混合。 但我不建议对同一 DMA 通道同时使用硬件和软件请求、因为这可能会导致 DMA 通道和外设不同步。