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.

[参考译文] TMS320F28379D:未处理 SPIA Rx 中断

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1281568/tms320f28379d-spia-rx-interrupt-not-serviced

器件型号:TMS320F28379D
主题中讨论的其他器件: C2000WARE

大家好!

我使用 TMS320F28379D 时遇到无法正常工作的情况。

首先、我们使用具有一个微控制器和大量接口的定制 PCB、以便控制机电原型(电机、传感器、CAN 等)。

我现在遇到的是一种奇怪的情况。 基本上、我有2个计时器(使用 CPU1.Timer1和 CPU1.TIMER2)和2个不执行任何操作的 ISR (为了进行调试、我只需在这里放置_asm (" NOP")来停止调试器)、1个 SPI 是 Rx FIFO 中断、其中我从传感器(从 FIFO)读取一些值。 问题在于即使 SPI 的 ISR 配置正确(参见下面的屏幕截图)、它也没有被处理、并且中断似乎也应该被正确处理(参见 SPI 寄存器)。 在 SPI ISR 内部、我清除正确的 ACK 组(6)、而在另外2个组中、我不清除3.4.4.2 SPRUHM8I 中所述的任何内容;此外、我不使用嵌套中断。

调试一点问题我发现如下:

  1. 如果我只是将 CPU1.Timer1与 SPI INT 一起使用、 是否正确保养。
  2. 如果我只是将 CPU1.TIMER2与 SPI INT 一起使用、则 SPI ISR 没有正确处理。
  3. 如果我将 CPU1.Timer1 + CPU1.TIMER2与 SPI INT 一起使用、则 未正确处理 SPI ISR

我必须排除所有与硬件相关的问题、因为我确信我正在读取的传感器工作正常(上面列表中的第1点以及之前所做的大量调试)。

我不知道我能执行什么其他测试,但我可以提供任何你想要的。

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

    尊敬的 Elia:

    SPIFFRX 寄存器值似乎没有问题、中断看起来应该设置为正确处理(中断信息看起来就像您描述的那样是从传感器接收到的)。 您能否提供 SPI 设置和 SPI 中断的配置设置、以便更详细地了解 CPUTIMER 的连接背景? 另外、您是否仔细检查 FIFO 模式是否 设置正确以及 PIE 是否被启用以处理中断?

    此致、

    艾里森

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

    是:这是我设置 SPI 的方式

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // setup rx interrupt
    #define FTSENS_SPI_BASE SPIA_BASE
    Interrupt_register(INT_SPIA_RX, &channelDataReceivedISR);
    SPI_clearInterruptStatus(FTSENS_SPI_BASE, SPI_INT_RXFF| SPI_INT_RXFF_OVERFLOW);
    SPI_setFIFOInterruptLevel(FTSENS_SPI_BASE, SPI_FIFO_TX8, SPI_FIFO_RX8);
    SPI_enableInterrupt(FTSENS_SPI_BASE, SPI_INT_RXFF | SPI_INT_RXFF_OVERFLOW);
    SPI_setConfig(FTSENS_SPI_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA0, SPI_MODE_MASTER, 1000000, 16);
    SPI_enableModule(FTSENS_SPI_BASE);
    Interrupt_enable(INT_SPIA_RX);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    我还可以确认在 PIEIER 6.1中正确启用了中断

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

    尊敬的 Elia:

    您的 CPUTIMER 1和 CPUTIMER 被调用的频率是多少?  

    此致、

    艾里森

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

    尊敬的 Elia:

    您还可以确认确认也确认了计时器中断吗?

    此致、

    艾里森

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

    尊敬的 Allison:

    据我所知、TimerInt1和2不需要确认、因为它们不是组的一部分。 我错了吗?

    无论如何、2个计时器的频率是100Hz (计时器2)和200Hz (计时器1)、而 SPI Rx 应以1500Hz 的频率出现。

    看起来如果缓冲区增加到超过电平、int 不再被触发。 我还得说、我们读取传感器的当前设置是:当传感器的 DATARDY 引脚有效时、我在 TXBUFF 中移动虚拟数据以激活时钟(使用 XINT 和 DMA 上的组合)、并且我读取2个数据字。 我执行此操作4次、因为我们必须对传感器的4个通道进行采样、总共8个字。 该设置是否会以某种方式产生中断问题?

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

    尊敬的 Elia:  

    Ah 是的、没错、您正确的是确认 不适用于 CPU1中断、因为它们不会通过 PIE 模块(只有 CPU0计时器会)。 此外、我相信您已经这么做了、但请仔细检查、在您的 ISR 中、您应该:

    1. 读取所有内容将 SPIRX FIFO 清空。 这样做是为了删除中断源。
    2. 然后、通过使用 SPI_clearInterruptStatus (SPI_BASEADDRESS、SPI_INT_RXFF_OVERPLOOP)清除 RXFFOVF 标志;

    如果您尚未参考以下 F2837xd SPI 示例、我还强烈建议您参考:  spi_ex3_external_loopback_fifo_interrupts.c (在 C2000Ware > driverlib > f2837xd > examples > CPU1 > SPI 中找到)。  

    您是否还可以同时与我共享更多的代码(SPI/计时器配置/ISR)以便获得更高的可见性?

    此致、

    艾里森

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

    尊敬的 Allison:

    目前我无法访问硬件。 我将在下周初尝试用一个最低限度的工作示例来向您展示。

    非常感谢!

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

    听起来不错、Elia。 是的、请在可以的情况下随时更新、如果您有其他问题、请告诉我!

    此致、

    艾里森