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.

[参考译文] MSPM0L1306:DMA GPIO 输入源地址错误

Guru**** 2391545 points
Other Parts Discussed in Thread: SYSCONFIG, MSPM0L1306

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1484409/mspm0l1306-dma-gpio-input-source-address-error

器件型号:MSPM0L1306
主题中讨论的其他器件:SysConfig

工具与软件:

我想将 DMA 源地址设置为 GPIOA->DIN31_0、以便将其用作穷人的逻辑分析仪捕获。 置位

DMA->DMACHAN[DMA_CH0_CHAN_ID].DMASA =(uint32_t)(0x400A1280)

我收到地址错误。

我看了 TRM 图1-1。 MSPM0Lxx 总线结构图、GPIO 以橙色阴影、图例中显示为 PD1/PD0、CPU/DMA 访问。

第15页说明"GPIO DOUT 寄存器(数据输出)也在 PD1外设总线上可用、主要是为了使
DMA 可用于将值加载到 GPIO DOUT 寄存器。"

根据我的理解、DMA 可以正常地写入 GPIO。

我已经检查我的代码并进行监控、以验证当我将源地址设置为变量存储器或 SPI RXDATA 寄存器时、DMA 是否令人满意。

您是否可以对我可能做错的事情有任何提示?

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

    嗨 Antony Luton

    请检查 https://www.ti.com/tool/SYSCONFIG 以获取 mspm0基本代码生成。

    我是否可以知道、此代码是由 SysConfig 生成、还是来自 MSPM0-SDK 的示例代码

    谢谢

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

    您好、Xiaodong、如果我的代码出错、我已经尝试了资源库 dma_block_transfer_lp_MSPM0L1306_nortos_ticlang、并通过设置将其缩短为仅1个长度

    #define DMA_TRANSFER_SIZE_WORD (1)

    在以下情况下工作正常

     DL_DMA_setSrcAddr (DMA、DMA_CH0_CHAN_ID、(uint32_t)&gSrcData[0]);

    即、源代码是变量 SRAM 内存。

    但如果您进行设置

    DL_DMA_setSrcAddr (DMA、DMA_CH0_CHAN_ID、(uint32_t) 0x400A1380)

    它有地址错误。 我无法让 DMA 从任何 GPIO 寄存器获取源。

    设计人员是否已经保护 GPIO 外设寄存器不被从 DMA 读取(源地址被设定为 GPIOA 外设内存访问)?

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

    嗨 Antony Luton

    请检查此示例。 谢谢

    e2e.ti.com/.../dma_5F00_block_5F00_transfer_5F00_LP_5F00_MSPM0L1306_5F00_nortos_5F00_ticlang.zip

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

    尊敬的 Xiaodong:

    我完全按照提供的条件使用了您的项目、未经修改、对其进行了编译、并将其下载到了我的 MPM0L1306 LaunchPad 中。 地址错误位被置位:

    它在您的 LaunchPad 上是否正常工作?

    谢谢 Antony

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

    尊敬的  Antony:

    根据如下所示的 TRM 13.2.5、总结两点:

    1.我认为 GPIO 只允许 DMA 对 DOUT 寄存器进行写访问。  

    2.在执行 DMA 操作之前需要设置 DMAMASK 位。 (请参阅函数:DL_GPIO_enableDMAAccess (GPIO_Regs* GPIO、uint32_t 引脚)

    您可以前往 TRM 了解详情。

    这是为便于测试进行的快速修改:μ s

    下面是 "gDstData2"的定义

    uint32_t gDstData2[1] = {0xFFFFFFFF};

    测试结果:

    之前:

    之后:

    值得注意的是、如果您想要查看上述结果、其中地址0x400A1280为0xFFFFFFFF、则需要删除 SysConfig 中的所有 GPIO 配置、从而避免 CPU 在这些端口中运行。 这只是基于原始工程的简单测试、请根据应用需求在 SysConfig 中更改相应的 DMA 配置。

    此致、
    Peter

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

    尊敬的 Peter:

    回到原始查询、似乎不允许将 DMA 源地址设置为任何 GPIO 寄存器。 我觉得很遗憾、因为它有很多用途、包括我希望用于的用途-反馈通信总线信号以进行协议检查和分析。

    感谢您的帮助。