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.

[参考译文] AM2634:单字节提供 SPI 数据接收中断

Guru**** 2455560 points
Other Parts Discussed in Thread: AM2634

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1488006/am2634-spi-data-reception-interrupt-on-single-byte

器件型号:AM2634

工具与软件:

 e2e.ti.com/.../mcspi_5F00_loopback_5F00_dma_5F00_am263x_2D00_cc_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.rar

尊敬的团队:

我想在具有 DMA 且当前使用的外设模式下使用 AM2634  mcspi_loopback_dma 作为参考的示例代码、对于8字节、此示例正常工作意味着它在获得配置的接收字节后生成中断     、但每当变为8更改为1时、它不再接收数据意味着我希望在每次接收字节时生成中断、

附加的图像显示当发送器(主器件)发送8个字节时它提供两次(黄色)中断、芯片选择(紫色)

请建议如何  在 DMA 中的单字节上配置 SPI 数据接收中断   

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

    尊敬的团队:

    最期待您的反馈  

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

    尊敬的 Rohal:

    您能告诉我您的 dataSize 是什么吗?

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

    数据大小不是固定的、它可以是20字节或50字节或任何东西、但我们可以将缓冲区的最大大小配置为255字节。

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

    您能尝试使用 DataSize=8吗。

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

    我曾经试过、如果接收器设置为8字节并且发送器也发送8字节、这是有效的、但我们的要求是不同的。

    要求-   AM2634不知道发件人将发送多少数据、可能是我50,100或200。。

    这就是我们针对每个字节选择中断并使用理想计时器来标识通信结束的原因、但它并不适用于每个字节并停止获取中断。  

    因此、请告诉我如何处理这种情况、

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

    Rohal,

    根据驱动程序的配置方式、您需要提供总字节数/计数和数据大小。 请检查的参数

    MCSPI_TRANSFER mcspi_v0.c 文件中的 API。  在此基础上、您将获得中断。  假设您的计数为128字节、数据大小为1Bytes。

    第1种方法(无 FIFO):   您将接收到的中断总数为128/1个字节。 例如、在每个事务上、您将收到 一个中断。

    第2种方式(使用 FIFO): 假设 FIFO 触发电平为16、即每隔16个字节、您将获得一个中断。 因此、在这种情况下、中断总数为128Bytes/16Bytes = 8。

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

    如何禁用 FIFO 、因为它无法实现清空

    #define APP_MCSPI_MSGSIZE (128U)

    MCSPI_Transaction 初始化(&spiTransaction);
    spiTransaction.channel = gConfigMcspi1ChCfg[0].chNum;
    spiTransaction.dataSize = 8U;
    spiTransaction .csDisable = true;
    spiTransaction.count = 1; //APP_MCSPI_MSGSIZE /(spiTransaction.dataSize/8);
    spiTransaction.txBuf = NULL;
    spiTransaction .rxBuf =(void *) gMcspiRxBuffer;
    spiTransaction .args = NULL;
    startTimeInUSec = ClockP_getTimeUsec ();
    对于(j = 0U;j < APP_MCSPI_TRANSFER_LOOPCOUNT;j++)

    transferOK = MCSPI_transfer (gMcspiHandle[CONFIG_MCSPI1]、&spiTransaction);
    }

    在每个字节上接收中断的配置是否正确?

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

    Rohal,

    spiTransaction 对象配置似乎正确。

    默认情况下、驱动程序使用 FIFO、无法从 GUI 或应用程序禁用 FIFO。 如果你仍然想,我可以指导,你的过程禁用它,但你需要在驱动程序中进行更改,我不建议这样做。

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

    请说明如何禁用驱动器中的 FIFO 以及让我检查该行为、如果该行为满足了我的要求、那么其他导线没问题、我将完成相反的操作   

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

       如果您处于轮询模式、是否可以尝试在 MCSPI_LLD_WRITE 和 MCSPI_LLD_READ API 中注释掉 MCSPI_setFifoConfig。 对于中断模式、请使用 MCSPI_LLD_readIntr 和 MCSPI_LLD_writeIntr。