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.

[参考译文] AM2732-Q1:使用 RCSS_SPIA 作为从器件时出现回调中断问题

Guru**** 2795085 points

Other Parts Discussed in Thread: AM2732, SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1605067/am2732-q1-callback-interrupt-problem-when-using-rcss_spia-as-slave

器件型号: AM2732-Q1
Thread 中讨论的其他器件: AM2732SysConfig

您好:

我在 AM2732 器件中将 RCSS_SPIA 接口用作从器件。 AM2732 器件通过 J1 连接器与 FPGA 器件连接、FPGA 器件每 10ms 在 RCSS 上发送一次 SPI 主帧(数据发送仿真如下所示)。

image.png

问题是、在 AM2732 器件中、我只在开始时获得一个中断、然后在内存中写入正确的数据、再也没有获得任何中断。
下面显示了 syscfg 和使用的代码。
image.png

uint32_t intr_callback_cnt = 0;
uint16_t gMibspiRxBuffer[1];

void Spi_Callback(MIBSPI_Handle handle, MIBSPI_Transaction *transaction)
{
CacheP_wbInv(gMibspiRxBuffer, sizeof(gMibspiRxBuffer), CacheP_TYPE_ALLD);
intr_callback_cnt++;
if(intr_callback_cnt == 4){
     DebugP_log("4 spi transfers\r\n");
}
}

void spi_slave(void *args)
{
    //int32_t             status = SystemP_SUCCESS;
    uint32_t            i;
    int32_t             transferOK;
    MIBSPI_Transaction  spiTransaction;

    Drivers_open();
    Board_driversOpen();

    DebugP_log("[MIBSPI] Digital Loopback EDMA example started ...\r\n");

    /* Memfill buffers */
    for(i = 0U; i < sizeof(gMibspiRxBuffer); i++)
    {
        gMibspiRxBuffer[i] = 0U;
    }

    CacheP_wbInv(gMibspiRxBuffer, sizeof(gMibspiRxBuffer), CacheP_TYPE_ALLD);
    
    /* Initiate transfer */
    spiTransaction.count        = sizeof(gMibspiRxBuffer);
    spiTransaction.txBuf        = NULL;
    spiTransaction.rxBuf        = (void *)gMibspiRxBuffer;
    spiTransaction.peripheralIndex   = 0U;
    spiTransaction.arg          = NULL;
  

    transferOK = MIBSPI_transfer(gMibspiHandle[CONFIG_MIBSPI0], &spiTransaction);
    if((SystemP_SUCCESS != transferOK))
    {
        DebugP_assert(FALSE); /* MIBSPI transfer failed!! */
    }
    else
    {
        DebugP_log("All tests have passed!!\r\n");
    }
    
    

}

您能告诉我出了什么问题吗?

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

    尊敬的 Dimitra:

    Each MIBSPI_transfer() will correspond to one RX transaction (with spiTransaction.count data unit). In your code, you only do MIBSPI_transfer() once, so, there will be only one TX trancsaction and one TX callback.

    。  MIBSPI_transfer() should be in a loop, so that the TX transactions will come in continuously.

    Best regards,

    Ming  

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

    尊敬的 Ming:

    我认为这解决了我的问题。 我还有最后一个问题。

    我将 spi_slave() 函数的末尾更改为:

        while(1){
        transferOK = MIBSPI_transfer(gMibspiHandle[CONFIG_MIBSPI0], &spiTransaction);
        if((SystemP_SUCCESS != transferOK))
        {
            DebugP_assert(FALSE); /* MIBSPI transfer failed!! */
        }
        else
        {
            //DebugP_log("All tests have passed!!\r\n");
        }
    
        ulEventsToProcess = ulTaskNotifyTake( pdFALSE, portMAX_DELAY );
        if (ulEventsToProcess > 1){
                ;
            }
        }
    我还将 spi_callback 函数更改为:
    // uint32_t startCycles;
    uint64_t curTime;
    float durationCallback[100];
    
    void Spi_Callback(MIBSPI_Handle handle, MIBSPI_Transaction *transaction)
    {
        if(intr_callback_cnt>0){
            durationCallback[(intr_callback_cnt-1)%100] = ClockP_getTimeUsec() - curTime;
            // durationCallback[(intr_callback_cnt-1)%100] = (CycleCounterP_getCount32() - startCycles - 15)*1000/400E6;
        }
    
        // startCycles = CycleCounterP_getCount32();
        curTime = ClockP_getTimeUsec();
    
        CacheP_wbInv(gMibspiRxBuffer, sizeof(gMibspiRxBuffer), CacheP_TYPE_ALLD);
        intr_callback_cnt++;
        BaseType_t TaskWoken = pdFALSE;
        vTaskNotifyGiveFromISR( gSPI_slave_Task, &TaskWoken );
        portYIELD_FROM_ISR( TaskWoken );
    }

    现在我的问题与时间测量有关。

    当我使用  ClockP_getTimeUsec() 时、我可以准确地测量从一个中断到另一个中断的 10ms 持续时间。 当我使用 CycleCounterP_getCount32 () 时,我总是得到约 78usec。 为什么这两种时间测量方法之间存在巨大差异。

    提前感谢您。

    Dimitra

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

    尊敬的 Dimitra:

     R5F 内核上的 CycleCounterP_getCount32 () 有一个已知错误。 R5F 内核的周期计数不准确。 但是、 C66x 内核的 CycleCounterP_getCount32 是准确的。 请使用其他方法(例如 GPIO 引脚切换)来测量两次中断之间的时间。  

    此致、

    Ming

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

    尊敬的 Ming:

    感谢您提供的信息。 我想就另一个问题寻求您的帮助。

    我设法从 FPGA 获取数据。 FPGA 每 10us 发送一个 16 位计数器、我所做的是修改代码、以便获得 256 个 16 位数据包、运行后我会观察到存储器中接收缓冲区 (gMibspiRxBuffer) 的内容、我发现所有数据都 是正确的。

    问题是当 FPGA 每 10us 发送 1024 个 数据包时,我正确地在接收缓冲区中获取数据,但前 5 个数据 包为零,正确的计数器值从第 6 个数据包开始。  

    你知道为什么会发生这种情况吗? 我还必须指出、在超过 1024 的包号中、出现了相同的问题。

    提前感谢您。

    Dimitra

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

    尊敬的 Dimitra:

    由于 AM273x 是 SPI 从器件、因此我认为问题出在作为 SPI 主器件的 FPGA 侧。  

    如果可以将 Saleae Logic Pro 连接到 MIBSPI CS、CLK、MISO、MOSI、则应该能够获取 FPGA 发送的数据日志。 如果它与 RX 缓冲区的内容匹配、则毫无疑问、问题出在 FPGA。

    此致、

    Ming  

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

    尊敬的 Ming:

    我确认 FPGA 提供的数据正确无误。 所以问题出在其他地方。

    当我每 10us 接收 1024 个数据包时、我的接收缓冲区如下图所示。 清楚地表明、虽然 FPGA 正确发送(已验证)、但未使用正确的值接收计数器的第一个数据包。 其余数据包(并非此屏幕截图中显示的是整个缓冲区)正确接收。

    你知道为什么会发生这种情况吗?

    此致、

    Dimitra

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

    尊敬的 Dimitra:

     尽管 FPGA 正确发送(已验证)

    您提到的验证位于 FPGA 侧或连接 FPGA 和 AM273x 的 SPI 总线上?

    从 gMibspiRxBuffer 的屏幕截图中、只显示 AM273x 接收到 6 个空数据包、但 SPI 总线上实际发送的信号是什么是关键。 底线是 AM273x 是 SPI 从器件、它只获取 SPI 主器件 (FPGA) 发送的内容。  

    如果您可以证明 SPI 总线确实具有前 6 个包含有效数据的数据包、但 AM273x 获得空数据、则问题出在 AM273x 侧。

    如果 SPI 总线上的前 6 个数据包为空、则问题出在 FPGA 上。

    请使用 Saleae Logic Pro 捕获前 6 个数据包的 SPI 总线信号 (CS、CLK、MOSI)

    此致、

    Ming

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

    您好 Ming、

    我使用示波器验证了 SPI 总线。 如下面的捕获中所示、前 6 个数据包不为空。  

    绿色信号是时钟、蓝色信号是 MOSI。 我还验证了 CS、但第三个探头出现了问题、无法将所有三个信号一起使用(已验证它是否正常工作)。

    这是否意味着问题出在 AM273x 中? AM273x 配置可能有问题吗?

    此致、

    Dimitra

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

    再次大家好:

    我设法在示波器中获得所有 SPI 总线信号。 下图显示了 CS(黄色)、CLK(绿色)和 MOSI(紫色)。

    下图显示了 在拍摄示波器图片的同一照射行程中收到的第一批数据的一部分。

    问题仍然存在。 为什么会发生这种情况?

    此致、

    Dimitra

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

    尊敬的 Ming:

    你有任何关于我的问题的消息吗?

    此致、

    Dimitra

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

    尊敬的 Dimitra:

    是否可以尝试更改“帧格式“(模式 0/1/2/3 等):

    此致、

    Ming

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

    您好 Ming、

    不幸的是,没有什么工作。

    您能否确认我的 EDMA 配置是否正确? 也许问题就在这里。

    这些是我的 syscfg 中的 EDMA 配置:

    提前感谢您!

    此致、

    Dimitra

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

    尊敬的 Dimitra:

    以下是 MIBSPI 和 EDMA 的 syscfg 设置:

    注意区域 ID 是区域 0(您的区域是区域 2)

    此致、

    Ming

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

    尊敬的 Ming:

    我尝试了 EDMA 设置、但这仍然无法解决我的问题。

    我忘记提到我的工程基于 FreeRTOS、但除了 spi_slave 任务之外、我自己没有其他正在运行的任务。

    此外、我的项目在 R5 上、而不是在 DSP 上。

    我有 3 个问题给你:

    1) 我在 R5 上试用这个并且您在 DSP 上使用它是不是一个问题?

    2) 为什么仍在使用 CCS 12.7、而不是像我这样使用 CCS 20.2? 这可能是个问题吗?

    3) 当我尝试重复我的例子,但没有启用 DMA(我保持该过程完全相同之前),我得到了一个错误  

    MIBSPI_TRANSFER 失败。 更具体地说、我在 mibspi_v0.c 驱动程序中找到此代码部分。 为什么会发生这种情况?

    此致、

    Dimitra

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

    尊敬的 Dimitra:

    1) R5F 内核似乎无法访问 RCSS_MIBSPIA 或 RCSS_MIBSPIB、至少 SYSCFG 不允许这样做。 您能在 C66x 内核上试用吗?

    2) 我更喜欢使用 CCS 12.7.0。 我认为这不会引起任何问题。

    3) 根据 mibspi_v0.c 中的 MIBSPI_transferCore() 、如果未定义 MultiiCount 支持、则不支持回调模式。 我不知道这是驱动程序或 IP 的限制。 现在请使用 EDMA。

    此致、

    Ming

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

    尊敬的 Ming:

    1) 关于 R5 内核的 RCSS_SPIA/RCSS_SPIB 可见性、它们都在我的 Sysconfig 中可见。 下面是所附的屏幕截图、证明它可用。

     

     

    2) 我将使用 EDMA、但我必须在哪里寻找正确的 EDMA 配置? TRM 没有清理内容、在我的项目中复制您的设置仍然无法解决问题。

     

     

    3) 我还尝试使用系统项目在 C66 DSP 上使用 RCSS_SPIA 重新生成您的设置。 我尝试了 FREERTOS/NORTOS、但仍然没有任何结果。 调用函数 MIBSPI_TRANSFER 时会发生错误。 具体而言、这就是其发生故障的地方(使用 EDMA)。

    [引述 userid=“669207" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1605067/am2732-q1-callback-interrupt-problem-when-using-rcss_spia-as-slave/6217472

    3) 当我尝试重复我的例子,但没有启用 DMA(我保持该过程完全相同之前),我得到了一个错误  

    MIBSPI_TRANSFER 失败。 更具体地说、我在 mibspi_v0.c 驱动程序中找到此代码部分。 为什么会发生这种情况?
    [/报价]

     

    此外、您如何将 DSP 作为独立工程运行? 如本线程中所述、在 NOBOOT 模式下无法实现。 它必须位于系统工程内部、否则您必须处于 QSPI 模式、在该模式下 、初始化 SBL 二进制文件已刷写、并将在 EVM 通电后立即运行。 您是处于 QSPI 模式还是处于 NOBOOT 模式?

     

     

    4) 我将再次简要地解释我的 SPI 测试,以确保我们的一致性。

    -我的 FPGA 设计有一个无符号的 16 位计数器,从 0 到 65535。 FPGA 每 10us 发送一次 16 位数据。

    -每次 FPGA 传输 16 位,保存计数器的值(也如我前面的帖子中显示的捕获从示波器)。 因此、基本上在“SPI 传输#0“处、我在 AM2732 处接收到值 0、在 “SPI 传输#1“处接收到值 1、然后在 AM2732 处接收到值 1、依此类推、随着计数器的递增。

     

    我的问题是: 我使用回调模式、AM2732 处于外设(从器件)模式。  当我将接收缓冲区 大小设置 为超过 128 个字 (uint16_t gMibspiRxBuffer[size]) 时、它永远不会完全正常工作。

     

    我注意到驱动程序使用 remainSize = dataLength % ramSize 处理确切的 128 字 RAM 限制—它会自动将传输拆分为 128 字块+余数。

    事实是:驱动程序将>128 个字的传输分成两个阶段:前 128 个字(在 sysconfig 中选择了 DMA 回调),然后是余数(阻止 SemaphoreP_Pend )。

    所以我假设:我的 129 字测试失败,因为 FPGA 在 1.29ms 内突发所有 129 个数据包(每个 10µs ),但驱动程序的第二个阻塞传输无法跟上。

    下面是运行此测试时收到的数据的屏幕截图:

    似乎没有收到应包含值 128 的数据包 129。 而是接收到一个 后来发送的数据包。

    我的问题是:

    -我可以修改代码,使第二个阶段不是阻塞,而是不阻塞?

    -我的传输之间的延迟 10 μ s 太快吗? 我应该知道的内容是否有限制?  

    -我应该如何处理这个问题,以便接收更大的缓冲区,但所有正确的数据和非阻塞功能?

    此致、

    Dimitra

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

    尊敬的 Dimitra:

    明是从办公室的个人休假直到 23 日,在此期间,我将尽力帮助你。

    此外、您如何将 DSP 作为独立项目运行? 如本线程中所述、在 NOBOOT 模式下无法实现。 它必须位于系统工程内部、否则您必须处于 QSPI 模式、在该模式下 、初始化 SBL 二进制文件已刷写、并将在 EVM 通电后立即运行。 您是处于 QSPI 模式还是处于 NOBOOT 模式?

    这不一定是真的。 就像该线程末尾所述、您需要确保要启动的目标配置也是运行 GEL 文件配置。 GEL 只是初始化脚本(包含在 CCS 安装中)、可与器件数据关联、以便在启动用于调试的目标配置时自动运行。 如果使用无引导模式、则必须确保所使用的目标配置在初始化脚本框中有路径。 如果不确定是否有此设置、请双击目标配置文件并与我共享打开的窗口、您应该能够看到类似的内容

    我理解您尝试进行的转接。 在收到任何异常标志的错误数据时、您是否检查了 mibspi 寄存器? 告诉控制器在给定时刻的状态将很有帮助。  

    你能捕捉 MMRS 时:你收到错误的 0 在第一对夫妇的数据包传输,当你收到你的第 128 次传输,当你收到你的第 129 次传输。

    此外、您能否确认 SPI 外设以多快的速度运行? 您是否尝试过降低时钟速度?  

    此致、

    Daniel

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

    尊敬的 Dimitra:

    听起来您使用的是 MIBSPI 的多缓冲模式、该模式具有多达 128 个缓冲区。 您是否可以尝试使用与标准 SPI 模式兼容的“兼容模式“:

     

    此致、

    Ming

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

    您好、

     

    我尝试在 SysConfig 中打开兼容模式、但它没有解决我的问题。

    我还有同样的问题。 您能给我一个硬件的有效 SPI 示例代码、该代码将演示 SPI 的使用、而不是仅引用 SDK 内的环回示例。

    此致、

    Dimitra

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

    尊敬的 Dimitra:

    请找到我在 AM273x EVM 上使用的 MIBSPI 从设备和主设备示例。 唯一的区别是 MIBSPI 数据大小是 8 位而不是 16 位。 我使用了两个 AM275x EVM。 一个作为 SPI 主器件、一个作为 SPI 从器件。 它们按预期工作。 这些示例基于 AM273x FreeRTOS SDK 09.02.00.60

    e2e.ti.com/.../mibspi_5F00_loopback_5F00_am273x_2D00_evm_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip(SPI 从器件)

    e2e.ti.com/.../mibspi_5F00_loopback_5F00_am273x_2D00_evm_5F00_r5fss0_2D00_0_5F00_freertos_5F00_ti_2D00_arm_2D00_clang.zip(SPI 主服务器)

    此致、

    Ming

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

    尊敬的 Ming:

     

    ->您在主从示例中所做的工作与我们的情况完全不同。 您可以看到下面的差异。

    1) 您已禁用 DMA。 (您指示我们使其保持启用状态。)

    2) 您正在进行 8 位传输、而我们正在进行 16 位传输。

    3) 您只传输 64 字节,而我们总共传输 1024 字节(512 x 16 位)。

    4) 您在主器件上使用 FreeRTOS、在从器件上使用 NORTOS、而从器件处于 FreeRTOS 中。

    5) 您不使用回调函数。 您只有阻塞模式。

    6) 您使用的是兼容模式。 我们不是。

    7) 在您的主 SysConfig 中、我们注意到您具有 CS 保持使能功能。 而我们的 FPGA 每次传输 16 位数据时只会将 CS 降至低电平。 该选项是否意味着在 64*8 位的整个传输过程中将 CS 保持在低电平?

    请尝试在不同 Sitara 之间重现我们的示例、并告知我们您的结果。

     

    ->另一个发现是,当我们更改  CacheP_wbInv() 函数的位置时,该函数以前位于回调函数内,并按照下面的代码所示放置,所有数据似乎都已正确接收。

    回调触发哪个中断?  在 DMA 传输完成之前是否会触发回调? 为什么 CacheP_wbInv() 函数的更改似乎会影响结果?

    #include "spi_dma_callback.h"
    #include <kernel/dpl/ClockP.h>
    #include <drivers/mibspi.h>
    
    TaskHandle_t gSPI_slave_Task = NULL;
    #define SPI_SLAVE_TASK_SIZE (2*256)
    
    #define SPI_TRANSFER_SIZE (1024)    // SPI transfer size in bytes
    
    uint16_t gMibspiRxBuffer[SPI_TRANSFER_SIZE/2];
    
    int32_t SPI_createtasks(void)
    {
        xTaskCreate(spi_slave, "SPI_slave", SPI_SLAVE_TASK_SIZE, NULL, SPI_SLAVE_TASK_PRI, &gSPI_slave_Task);  
        if(gSPI_slave_Task != NULL)
     {
      return SystemP_SUCCESS;
     }
     else
     {
      return SystemP_FAILURE;
     }
    }
    
    
    void Spi_Callback(MIBSPI_Handle handle, MIBSPI_Transaction *transaction)
    {
        BaseType_t TaskWoken = pdFALSE;
        vTaskNotifyGiveFromISR(gSPI_slave_Task, &TaskWoken);
        portYIELD_FROM_ISR(TaskWoken);
    }
    
    
    void spi_slave(void *args)
    {
        int32_t transferOK;
        MIBSPI_Transaction spiTransaction;
        uint32_t ulEventsToProcess;
    
        Drivers_open();
        Board_driversOpen();
    
        memset(gMibspiRxBuffer, 0xFF, SPI_TRANSFER_SIZE);
    
        spiTransaction.count = SPI_TRANSFER_SIZE;
        spiTransaction.txBuf = NULL;
        spiTransaction.rxBuf = (void *)gMibspiRxBuffer;
        spiTransaction.peripheralIndex = 0U;
        spiTransaction.arg = NULL;
    
        while(1){
            transferOK = MIBSPI_transfer(gMibspiHandle[CONFIG_MIBSPI0], &spiTransaction);
            if(SystemP_SUCCESS != transferOK)
            {
                DebugP_assert(FALSE); /* MIBSPI transfer failed!! */
            }
    
            ulEventsToProcess = ulTaskNotifyTake(pdFALSE, portMAX_DELAY);
    
            CacheP_inv(gMibspiRxBuffer, SPI_TRANSFER_SIZE, CacheP_TYPE_ALLD); // also seems to work with CacheP_wbInv
    
            if (ulEventsToProcess > 1){ ; }
        }
    }
     

    此致、

    Dimitra

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

    尊敬的 Dimitra:

    首先、我现在正在旅行。 我不会进行硬件设置来在 AM273x EVM 上测试您的用户用例。 我将在 2026年2月24日 上回到办公室。  

    您似乎也有一个有效的解决方案来解决您的问题。

    要回答有关 MIBSPI RX 回调函数的问题:

    1.回调函数由 MIBSPI ISR 调用、

    2.最后一个 DMA 可能已经提交但尚未完成。

    3.在上述代码中使用 CacheP_inv () 或 CacheP_wbInv () 的方式是正确的。 您不应在基于 1-2 的回调函数中调用它们

    此致、

    Ming

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

    尊敬的 Dimitra:

    我之前的回答是否对您有帮助? 如果无法解决您的问题、请回复此主题。 仅点击 REJECT 按钮对调试过程没有帮助。 如果它确实解决了您的问题、我可以关闭此主题吗?

    此致、

    Ming

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

    尊敬的 Ming:

    您可以关闭线程 yes。

    此致、

    Dimitra