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.

[参考译文] RM48L952:DMA CH/DMA 请求线路关联

Guru**** 2466550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/666736/rm48l952-dma-ch-dma-req-line-association

器件型号:RM48L952

我面临着我想要分享的 DMA 的奇怪情况、询问您是否能找到比我所植入的解决方案更好的解决方案。


复位时、DMA 通道(16)和 DMA 请求(32)线路之间的关联为一对一、
由寄存器 DREQASI 制成。 所以:

通道 请求  
 0  0 0  
 1 1.    
 2 2.    
 3   3.  
 4 4.    
 5 5.    
(笑声) (笑声)  
15.   

现在、如果您要使用线路 MIB3线路2和3、您会看到它们链接到 DMA 请求线路4和5 (SPNS177D 的表6-32)。
要使用这些请求、必须将它们映射到 DMA 通道。 例如、我选择了 DMA_CH2和 DMA_CH3、
然后我调用

dmaReqAssign (DMA_CH2、4)
dmaReqAssign (DMA_CH3、5)

现在是关联表

通道 请求  
 0  0 0  
 1 1.     
 2 4.     
 3 5.    
 4 4.     
 5 5.     
(笑声) (笑声)  
15.    

现在问题开始出现:请参阅例如 REQ4、它触发 DMA_CH2 (这是我想要的) DMA_CH4 (不需要的/副作用)。  
如果 DMA_CH4未使用、则不会执行任何操作。 即使使用了 dmaReqAssign (DMA_CH4、REQx)和、也可能会调用 dmaReqAssign  
双重关联将消失。  

但现在假设(正如我所做的那样)、你在 DMA_CH3的链中使用 DMA_CH4、所以没有一个与 DMA_CH4相关联的物理请求、它由 DMA_CH3触发。 没有关联的物理请求我没有调用 dmaReqAssign (DMA_CH4、REQx)、因为没有 REQx。

这样、表保持双关联、并且 DMA_CH4被两次触发:由 REQ4 (不需要)和 DMA_CH3的链触发。

我看不到任何明确的方法来应对这种情况:

  • 可以初始化所有表、在 所有 DMA 通道上将 dmaReqAssign 调用给一个未使用的请求(并不是很巧妙、炸弹是隐藏的)
  • 调用 dmaReqAssign (DMA_CH4、REQx)仅在链接通道上(即使它无用)、使用未 使用的 REQx (不太巧妙、炸弹是隐藏的)

我是否有清晰的方法看不到? 有什么建议吗?

如果 DMA_CH 未绑定到 REQ 线、我更愿意在切断链路的 DMA_CH 上设置一个值、表示"未链接到 REQ"(就像使用 DMA 链时发生的那样)。

按照这样的方式、寄存器 DREQASI 的原理似乎与我预期的相反:对于与 req 相关的通道、我预期会说对于要触发的通道、req 是要触发的通道(在"触发的流"之后)。

谢谢、

Valerio

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

    我们已收到您的问题、稍后将再次答复您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢王、
    为了向讨论中添加元素、我尝试更改链通道的 HWCHENAS 和 SWCHENAS。 但要使链接通道正常工作、需要启用硬件(我使用 dmaSetChEnable (dma_CH、dma_HW))

    谢谢、
    Valerio