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.

[参考译文] TMS320F2800157:成熟的 SPI Tx 中断

Guru**** 2538310 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1358772/tms320f2800157-pre-mature-spi-tx-interrupt

器件型号:TMS320F2800157

我正在尝试将 Tx FIFO 为空中断设置为在向主设备写入7个字后发生在 SPI 从设备上。 但是、我可以看到、它在启用中断后立即进入中断。 使用调试器、我可以看到寄存器不指示任何 SPI 中断标志已设置(即使是非 FIFO 中断标志)。 即使 FIFO 状态也显示剩余7个字、FFIL 设置为0。 我在这里遗漏了什么吗?

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

    Anurag,

    TXFFST 和 TXFFINT 设置为什么? 如附加的图像所示、当 TXFFIENA (TX FIFO 中断使能)位置位后 TXFFST 和 TXFFIL 匹配时、产生发送 FIFO 中断。 确保  SPI 发送和接收侧的 FIFO 电平均设置为7。

    艾什瓦里亚

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

     当它进入 Tx FIFO ISR 时、根据调试器、TXFFST 设置为7、TXFFINT 设置为0。

    为什么 Rx 和 Tx 上的 FIFO 级别都需要设置为7?

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

    Anurag,

    根据 TXFFIL 设置、当发送 FIFO 为0时将生成中断、启用中断时始终是这种情况。 可能需要更改中断配置设置。

    在 ePIE 以及剩余的 SPI 状态寄存器中、存储了哪些有关中断的详细信息/可能发生的任何其他情况? 可能会发生 SPI 中断、但在您读取这些值时、标志会被清除。

    艾什瓦里亚

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

    因此我在启动时将 TXFFIL 值设置为7、绝不更改该值、因此该值应始终为0。

    这当前是我的 SPI 驱动器的写入函数。 我在 SPI_RESET 之后有一个断点、我在这里使用调试器检查 FIFO 状态是否为0。 TX FIFO 中断条目中有另一个断点。  在第一个断点之后运行、我会在发送任何字节之前立即到达 TX FIFO ISR 中的下一个断点。  即使有另一个 ISR 将其清除、我也不认为 TXFFINT=0时它会进入这个中断。

    为了确认 Rx FIFO 设置根本不影响 Tx FIFO 中断、是吗?

    我需要再次运行此测试并收集 ePIE 和其他 SPI 寄存器数据。 当 FIFO 被启用并且除了 RX FIFO 之外没有其它中断被启用时、其它的 SPI 寄存器看起来也一样正确。

        /* Reset SPI Tx FIFOs */
        SPI_resetTxFIFO(main_spi_BASE);
    
        for(uint16_t i = 0; i < len; i++)
        {
            SPI_writeDataNonBlocking(main_spi_BASE, buf[i]);
        }
    
        /* TODO: Why is the Tx interrupt occurring before the FIFO is emptied? */
        /* Enable FIFO empty Tx interrupt */
        Interrupt_enable(INT_main_spi_TX);
        /* Clear interrupt flag */
        SPI_clearInterruptStatus(main_spi_BASE, SPI_INT_TXFF);

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

    Anurag,

    所以我在启动时将 TXFFIL 值设置为7而不更改它,所以它应该始终为0。

    在上一篇文章中、您提到 TXFFIL 值设置为0? 为了清楚起见、如果希望 TX FIFO 中断仅在 TX 缓冲区为空时发生、则需要将其设置为0。 同样、中断基于缓冲区的级别、而不是 FIFO 本身。 有关该配置、请再次参阅该部分(2.3.7 SPI FIFO 说明)

    并仅为了确认 Rx FIFO 设置根本不会影响 Tx FIFO 中断,正确吗?

    不、不能。

    艾什瓦里亚

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

    Anurag,

    您是否能够解决此问题? 如果没有其他问题、我将继续、关闭此主题  

    此致、

    艾什瓦里亚