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 的 MibSPI2

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/603559/tms570lc4357-mibspi2-w-dma

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

我目前正在使用 DMA 设置 MibSPI2。 出于某种原因,当我尝试写入数据时,DMA 不会将数据传输到 MibSPI RAM (如果我调用 MibspiSetData(),则输出数据)。 我看了 HalCoGen 文件夹中的示例、并看了这些论坛上的一些其他示例、似乎我正在执行与这些示例相同的过程、但它似乎不起作用。 到目前为止、这是我的代码过程:

mibspiInit();
dmaConfigCtrlPacket();
dmaSetCtrlPacket (dma_CH0、dmaCtrlPckWrite);
dmaReqAssign (dma_CH0、 DMA_REQ3);
dmaReqAssign (DMA_CH1、DMA_REQ2);
dmaSetChEnable (DMA_CH0、DMA_HW);
dmaSetChEnable (DMA_CH1、DMA_HW);
dmaEnableInterrupt (DMA_CH0、FTC、DMA_INTA);
mibspiDmaConfig (mibspiRegister、0、0、1);
dmaEnable();
mibspiTransfer (mibspiRegister、0); 

我的 DMA 配置中是否缺少内容? 我不知道为什么它不会将数据从我的缓冲区复制到 mibspiRAM。

谢谢

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

    在 TMS570LC43器件上、MibSPI2模块与 NHET 模块共用引脚。 您是否为 MibSPI2配置了引脚多路复用器?

    在 HALCoGen 中、选择 pinmux 选项卡、在 PI mux pChannel 下、请启用"MibSPI2"。

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

    是的、我确实为 MibSPI2配置了引脚多路复用器。 我遵循了您在生成代码时提到的相同步骤。 我使用 TI 的这个教程来配置 HalCoGen (除了 MibSPI2而不是 MibSPI1):

    training.ti.com/hercules-tutorial-mibspi-and-dma-overview

    谢谢、

    密耳

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

    您好、Milin、

    我注意到 Tony 先生有类似的问题、并在修改代码后修复了。 RM57和 TMs570LC43x 具有相同的 MibSPI 和 DAM。

    以下是链接:

    请告诉我它是否对您有所帮助。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看了这个帖子的变化、我唯一不同的做法是使用 DMA CH 0/1而不是2/3。 我将其更改为使用 DMA CH3、因此默认情况下、请求线路应映射到 MIBSPI2[0]、即传输。 代码现在如下所示:

    mibspiInit();
    dmaConfigCtrlPacket();
    dmaSetCtrlPacket (DMA_CH3、dmaCtrlPckWrite);
    dmaSetChEnable (DMA_CH3、DMA_HW);
    dmaSetChEnable (DMA_CH2、DMA_HW);
    dmaEnableInterrupt (DMA_CH3、FTC、DMA_INTA);
    mibspiDmaConfig (mibspiRegister、0、0、1);
    dmaEnable();
    mibspiTransfer (mibspiRegister、0);

    这似乎与您提到的帖子相同。 在我的案例中、"charlen"字段对于 MibSPI1/MibSPI2是相同的、因此这不适用、我不确定为什么 TGCTRL PSTAMRTx 是128而不是127、因为 TRM 说最大值是127。 我尝试将其改为128、但我没有看到任何变化。

    我不确定问题是什么。 我可以看到 DMACTRL COUNTX 发生了变化、但我仍然看不到任何数据输出或被传输到 MibSPI2 RAM。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Milin、

    您可以与我分享您的项目吗? 我将在工作台上尝试。

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

    我正在将此代码作为无法共享的大型项目的一部分进行测试。 不过、我已附加了 mibspi 代码的相关文件。 调用"Eeprom25lc512_Init()"函数将运行我正在测试的代码。

    e2e.ti.com/.../8372.mibspi2.zip

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

    您是否能够确定问题的根源?

    我遇到了完全相同的问题、无法弄清为何不触发 DMA ...

    谢谢、

    Arthur