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.

[参考译文] RM46L852:处于从模式的 SPI 在启用 DMAREQEN 的情况下禁用 SPI 时设置 DMA RX PEND 位

Guru**** 2389990 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/1348472/rm46l852-spi-in-slave-mode-sets-dma-rx-pend-bit-when-spi-is-disabled-if-dmareqen-is-enabled

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

您好!


我在观察 SPI 信号后进行了观察;如果在从模式下使用 SPI 并且您禁用了它、则"假" PEND 位会设置为 DMA。 您能确认吗? 在参考手册中找不到有关此类行为的任何备注...

尝试这样做很琐碎、只需将 DMA 配置为对 SPI 请求感兴趣(未显示该部件)

在从模式下:
//配置 DMA 以侦听来自 SPI 的请求

ptSpi->GCR1=0U;//禁用&受控模式
ptSpi->INT0 = 0U;//删除 HALCoGen 设置的内容
ptSpi->INT0 |= SPI_INT0_DMAREQEN; //启用 DMA
ptSpi->GCR1 |= SPI_GCR1_EN;//启用 SPI ->这将为 TX 创建 PEND (应如此)
ptSpi->GCR1 &=(UINT32)~SPI_GCR1_EN;//关闭 SPI ->这会为 RX 通道创建挂起!!!

在主模式下、它可以正常工作:
//配置 DMA 以侦听来自 SPI 的请求

ptSpi->GCR1=0U;//禁用&受控模式
ptSpi->GCR1 |= SPI_GCR1_MASTER;//启用主模式
ptSpi->INT0 = 0U;//删除 HALCoGen 设置的内容
ptSpi->INT0 |= SPI_INT0_DMAREQEN; //启用 DMA
ptSpi->GCR1 |= SPI_GCR1_EN;//启用 SPI ->这将为 TX 创建 PEND (应如此)
ptSpi->GCR1 &=(UINT32)~SPI_GCR1_EN;//关闭 SPI -> RX 无挂起


在从模式下、如果在禁用之前移除 DMAREQEN、则不会创建 RX 挂起
...
ptSpi->INT0 &&~SPI_INT0_DMAREQEN; //删除 DMA
ptSpi->GCR1 &=(UINT32)~SPI_GCR1_EN;//关闭 SPI -> RX 无挂起

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

    我忘了提到 MIBSPI#137项目涵盖了这一个,但我在没有这种条件下观察到相同的(在本例中我们的 CS 线路处于3V3状态)
    "nSCS (芯片选择)引脚处于运行状态、但没有传输处于运行状态。"

    那么、最安全的方法是始终在禁用之前移除 DMAREQEN?

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

    您好、Jarkko:

    我开始处理您的问题、并会尽快为您提供更新。

    --
    谢谢。此致、
    Jagadish。

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

    我进一步对此进行了研究、看起来如果 PC0寄存器中的所有 CS 位都归零(转换为 GIO)、只有这样 PEND 位才不会在 SPI 禁用中设置。 DAT1: CSNR 值看起来没有影响。

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

    您好、Jarkko:

    我对此进行了进一步研究,似乎是如果所有 CS 位都在 PC0寄存器中归零(转换为 GIO),则 PEND 位不会在 SPI 禁用时设置。 DAT1:CSNR 值看起来没有影响。

    您可能要在 HALCoGen 中为所有 CS 引脚配置 SPI 功能。

    尝试仅为 CS0配置 SPI 功能、然后验证 w.r.t CS 状态:

    --
    谢谢。此致、
    Jagadish。

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

    正如我在前面所说的、这没有任何帮助。 需要从 PC0移除所有 CS 位。

    值= 0x030E01的 PC0生成 PEND
    值为0x030E00的 PC0不会生成挂起

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

    您好、Jarkko:

    很抱歉我的答复出现延误。

    今天,我测试了在我的 PC 上提到的行为。

    以下是启用 CS0功能并将其与 GND 连接时的输出:

    在上面的图中、PC0中的第0位表示 CS0功能、它为1表示 CS0功能设置为 CS0而不是 GIO。

    PC2中的0th 位表示 CS0的当前输入值、正如您可以看到的那样(即 CS 为 GND)

     在这种情况下、DMA CH0挂起位设置、即我们接收到了 SPI RX DMA REQ。

    以下是启用 CS0功能并与3.3V 电源连接时的输出:

    在本例中、您可以看到 CS0功能设置为与上述相同、但 CS0输入值现在为1 (即 CS 为3.3V)。

     在本例中、DMA CH0挂起位复位、即 在本例中我们没有接收 SPI RX DMA REQ。

    以下是我经过测试的代码、供您参考:

    e2e.ti.com/.../SPI_5F00_PEND_5F00_BIT_5F00_ISSUE_5F00_RM46.zip

    --
    谢谢。此致、
    Jagadish。

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

    我相信你的结果,但我的工作不同。 这是否因 CPU 而异?这个是 RM46L852ZWT。

    另外、CS0中也有示波器、用于捕获可能的短路信号且 scoobe 不会触发。

    启动情况

    和禁用后(使用调试器旋转 DISABLE 位)


    如果我从 PC0移除 CS、

    然后禁用挂起、它没有被设置

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

    您好、Jarkko:

    这很奇怪。

    这是否因 CPU 而有所不同这是 RM46L852ZWT。

    大多数情况下,这不应该是问题。  

    您使用的是哪种电路板? 是定制电路板吗? 您的原理图是否可共享?

    您能否分享您的完整项目?

    --
    谢谢。此致、
    Jagadish。