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.

[参考译文] TMS570LS3137:MIBSPI + DMA -第一个事务全部为0's.

Guru**** 1825110 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/1385052/tms570ls3137-mibspi-dma---first-transaction-all-0-s

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

工具与软件:

您好!

因此、我的第一个事务似乎失败、始终输出0。

之后一切都正常、通过连续输出递增的16位数字进行检查:第一位为0 (应该为1)、第二位为2、第三位为3。 那么、这只是第一个问题。

好像第一次 DMA 传输没有发生-调用 mibspiTransfer 后、RAM 缓冲区仍为0。

我的两个器件上会发生这种情况、这两个器件按传输组、数据格式和 DMA 通道等分开

在传输之间、TX RAM 缓冲区控制不会改变、只有 DMA 改变其数据部分。

想去哪里找?

谢谢!

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

    Paul、你好!

    我怀疑此问题是由于以下提到的原因造成的:

    (+) TMS570LS3137:MibSPI 从器件->主传输第一个值缺失第一位-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    您可以尝试一下我在上面的线程中给出的权变措施一次吗?

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

    我试过,但它没有帮助。

    这是整个事务的0 ,虽然,而不仅仅是第一位。

    我真的认为这肯定是第一个 DMA 没有发生、但之后很好。 我无法弄清楚为什么第一个 DMA 会是虚幻的。 源数据位于未缓存的 RAM (BTW)中。

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

    请注意、如果不在 CCS 中按下重启按钮、SPI 根本无法正常工作。

    点击 CCS 中的 debug -->有时它会在 main ()暂停、有时它会继续。

    如果已暂停、则点击恢复->配置 IO 线路(CLK 变为低电平、MOSI 变为低电平)

    行上没有进一步的变化

    点击暂停然后重新启动-->返回到 main()

    按"resume"(恢复)-->"SPI transactions"(SPI 事务)(除第一个外)  

    通过所有这些、我有 CAN 数据包输出、当命中挂起时、处理器将在合理的位置停止。

    无 SPI (如果我按下开发套件上的 PORST 或复位按钮)

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

    一些有趣的发现

    最初、我会用默认值来设置 dmaSetCtrl/Tx Rx 结构、但不会 在 INIT 中调用 dmaSetCtrlPacket。

    相反、我正在完成结构(设置 src dST/dst、size 等)、然后  在 mibspiEnableGroupNotification 之前调用 dmaSetCtrlPacket。

    这导致上述症状。

    现在、如果我  在初始化时设置结构(因此具有不正确的 src / DST 等)之后添加 dmaSetCtrlPacket、那么设置正确的 DmaSetCtrlPacket src 等  每次传输、我确实会从加电状态获取所有传输、并且第一次传输不是零... 相反,它是无稽之谈(所以可能取消引用空指针并发送它)。

    因此我一直在犹豫、但我仍未找到在第一次传输中获得正确数据的方法。

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

    Paul、你好!

    我想为您提供一些 Hercules 中的 MibSPI DMA 参考、

    1.下面是视频教程:

    Hercules 教程:MibSPI 和 DMA 概述- YouTube

    2.浏览 HALCoGen 帮助主题

    在这里、您可以找到另一个逐步过程的示例

    3. (+)[常见问题解答] TMS570LS3137:具有 DMA 的 TMS570LS3137 MibSPI5 Tx 和 Rx -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    尝试验证所有这些示例、并尝试在最后解决问题

    如果他们无法帮助解决您的问题、那么如果可能、请在最后分享您的代码以进行快速调试

    ——
    谢谢、此致、
    Jagadish。

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

    好的、我想我找到了。

    它过早启用了 DMA 传输(而不是启动它们)。

    因此、当您  在 DMAxCTRL 中设置 RXDMAENAx 和 TXDMAENAx 时、它看起来会锁定 DMA 控制数据包。

    因此、将这些设置移动到配置后的第一个实际 SPI 传输(它的全部位置-正如它需要的那样)、而不是驱动程序初始化、似乎是这样的。

    虽然还不是很好。 仍在调查中...

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

    Paul、你好!

    [报价 userid="606822" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1385052/tms570ls3137-mibspi-dma---first-transaction-all-0-s/5301027 #5301027"]

    好的、我想我找到了。

    它过早启用了 DMA 传输(而不是启动它们)。

    [报价]

    很高兴听到保罗。

    虽然还不是很好。 仍在调查...[/报价]

    请耐心等待、如果您需要任何进一步的帮助、请告诉我。

    ——
    谢谢、此致、
    Jagadish。

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

    好的、现在明白了。

    最后几个问题主要是我的应用、并且也无法在 DMAxCTRL 中设置单触发位。

    感谢您的指导。