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.

[参考译文] TMS320F280039C-Q1:将 SDFM 数据卸载到 DMA

Guru**** 2907110 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1644038/tms320f280039c-q1-offloading-sdfm-data-to-dma

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

您好:

 

我有一个功能正常的 SDFM 模块、它接收电压并输出值。 我想将这个值发送到我在程序中使用 DMA 定义的变量中

 

请参阅下面的、SDFM 的值当前存储在 test1 中(在程序的主循环中)。 该值保持在 ((int32_t *)(SDFM1_BASE + SDFM_O_SDDATA1 + 1)) 中、这与 0x5E16 和 0x5E17 中的 32 位值相对应。

image.png 

但该值不会被传输到我指定的变量。 我不确定我的 DMA 设置是否不正确或此问题是否在其他地方。

请参阅下面的 DMA 设置:
image.png

image.png

我根据以下类似的另一个查询初始化变量 voltageCountsPtr:

uint32_t voltageCounts[1];
const void * voltageCountsPtr = voltageCounts;
 
TI 能否确认是否设置了 DMA 设置以实现所需的影响?
 
谢谢您、
Randy Hirmiz
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Randy:

    需要检查的几个事项:

    1. 确保在变量视图窗口中持续刷新打开
    2. 尝试启用来自 DMA 的传输结束中断、添加一个断点、并查看是否有命中。 这会告知我们 DMA 是否认为它正在完成传输。
    3. 尝试在 CCS 的寄存器查看器中手动强制使用 DMA 触发 — 可以通过设置 CONTROL.PERINTFRC 寄存器字段来执行此操作

    除此之外、我将检查您的设置。 请允许我用 2-3 天时间进行此操作。

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您的提示!

    1.确认连续刷新已打开。 我有一个主循环计数器、它正在递增。

    2.确认 不断达到来自 DMA 的传输中断结束。

    3.在寄存器字段中将 CONTROL.PERINTFRC 设置为 1 似乎不会产生任何结果、它会立即切换回 0。

    谢谢您、

    Randy Hirmiz

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

    一个相关的问题是 DMA 中断是否与 CPU 分离? 它似乎不会使我的主代码无法执行。 我之前尝试使用 SDFM 中断来解释其样本、但它阻止了我的主代码执行。 DMA 中断似乎并不会导致同样的问题。

    谢谢您、

    Randy Hirmiz

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

    尊敬的 Randy:

    感谢您试用这些测试。 当我有机会查看您的设置时、我会回复您。 是的、DMA 与 CPU 完全分离、因此它不会因 CPU 程序的调试器停止而受影响。 但是、您可以更改 DMA 仿真模式、使其在调试器暂停时停止。 不过、您似乎在 SysConfig 中设置了自由运行仿真模式(其中显示“无论仿真暂停如何、都要继续 DMA 操作...“) 因此、即使在调试器暂停期间、DMA 也会继续运行。

    此致、

    Delaney  

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

    尊敬的 Randy:

    我很抱歉耽误你的时间。 我想我看到了您的问题。 voltageCounts 变量放置在地址 0xA8B8、即此器件上的 LSRAM5。  

    DMA 只能访问 GSRAM 存储器。 您能否添加以下代码行以指定给编译器、以便将 voltageCounts 变量放置在 GSRAM0 中?

    #pragma DATA_SECTION(voltageCounts, "ramgs0");

    根据您使用的链接器 cmd 文件、您可能必须在 SECTIONS{}中将以下行添加到该文件中、以创建 ramgs0 用户定义的段。  

       ramgs0 : > RAMGS0, type=NOINIT
    

    此致、

    Delaney

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

    这正是问题所在! 感谢你的评分