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.

[参考译文] CCS/CC3200SDK:Code Composer Studio™︎论坛

Guru**** 2589265 points
Other Parts Discussed in Thread: CC3200

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/788601/ccs-cc3200sdk-code-composer-studio-forum

器件型号:CC3200SDK
Thread 中讨论的其他器件:CC3200

工具/软件:Code Composer Studio

你(们)好  

我正在使用 cc3200、我正在尝试使用具有基本模式的 DMA 将数据从"buffer1"发送到"SPI-TX"、然后使用  DMA 将数据从 RX-SPI 接收到"buffer2"、因此我对此操作有一些疑问。

 SPI 标志的确切含义是什么:"SPI_INT_DMATX"   和  "SPI_INT_DMARX"

2- 这些标志之间的区别是什么:  1)  “SPI_INT_DMATX” 和  “SPI_INT_TX_EMPTY”  

                                     2) 2)"SPI_INT_DMARX" 和 "SPI_INT_RX_FULLE"

3 -当所有传输完成时(所有数据在 buffer2中被接收)、我如何生成中断。 或者如何知道传输已完成。  

此致  

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

    您好!

    在 DMA 模式下运行 SPI 外设时、使用 SPI 标志 SPI_INT_DMATX 和 SPI_INT_DMARX。 在 DMA 模式下设置 SPI 外设时、会将其与 RX 和 TX DMA 通道相关联、该通道将管理 SPI FIFO 中的数据。 这些 DMA 通道脱离最大传输量为1024字的离散 DMA 传输运行。 DMA 传输完成后、您需要将 DMA 传输重新载入 DMA 控制表以继续传递数据。 这是 SPI_INT_DMATX 和 SPI_INT_DMARX 中断的出现位置。 这些中断通知应用 TX 和 RX DMA 传输分别已完成。 此时、中断处理程序可以重新加载传输、向主应用程序发出数据就绪信号、或以其他方式执行任何所需的处理。

    这些 DMA 标志和 SPI_INT_TX_EMPT/SPI_INT_RX_FULL 标志之间的区别在于、如果手动读取/写入 FIFO、与 FIFO 相关的标志主要是显著的。 如果您使用的是 DMA、您应该只离开 SPI_INT_DMATX 和 SPI_INT_DMARX 标志、因为 DMA 外设将为您处理 FIFO。

    至于确定传输何时完成、有几个选项可供选择。 第一种方法是使用 MAP_SPIWordCountSet()设置 SPI_XFERLEVEL->WCNT 寄存器、以设置要传输的 SPI 字数。 这将在目标字数已被发送时触发 EOW 中断。 此方法的主要问题是、您只能指示它在停止前传输65534个字。 如果要传输更多数据或让 SPI 接口连续传输、则不能依赖此方法。

    需要稍多开销的另一种方法是、每次 SPI_INT_DMATX 出现时、只需在 SPI 中断处理程序中增加一些 totalDataXfered 变量。 每次触发中断时、您都知道您将传输一定数量的数据(首先用于设置 DMA 传输)。 因此、您可以跟踪传输的总数据、一旦达到目标数量、就禁用 SPI 接口并停止传输。

    有关如何将 SPI 与 DMA 配合使用的详细参考、请参阅 CC3220的 SPI 驱动程序。 CC3200和 CC3220之间的硬件 SPI 和 DMA 外设相同、而 driverlib 也基本相同、因此您可以在 CC3200项目中使用相同的概念和功能。 请特别注意 spiHwiFxn()和 configDMA()。 我将它们附在这里是为了方便您。

    /cfs-file/__key/communityserver-discussions-components-files/968/8688.SPICC32XXDMA.c

    /cfs-file/__key/communityserver-discussions-components-files/968/7183.SPICC32XXDMA.h

    如果您需要更多的说明、或者您对 DMA 或 SPI 外设还有其他问题、请告诉我。

    此致、

    Michael

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

    感谢您的快速回答、非常有趣。
    我已经了解了有关 SPI_INT_DMATX 和 SPI_INT_DMARX 标志的另一个详细信息。
    您说:“这些中断通知应用程序 TX 和 RX DMA 传输已分别完成”。
    我的问题是:这些标志表示1个项目的传输已完成(因此我们需要更多的传输)或所有数据的传输已完成。
    如果所有传输都已完成:在我看来,使用此标志来指示传输是否已完成更好地使用 SPI 字的数量进行传输。
    如果传输了1个项目:我们可以使用此标志来计算传输的项目数、并根据传输的项目数了解传输何时完成。

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

    SPI_INT_DMA*标志不一定表示 SPI 传输的所有数据都已完成、但它们确实表示该特定 DMA 传输请求的所有数据都已完成。 如果您只执行大小小于1024字的 SPI 传输、则给定的 SPI 传输将只需要一个 DMA 传输、在这种情况下、SPI_INT_DMA*将指示 SPI 传输已完成。 下面是我的意思的图示:

    SPI 传输100个字:
    1.设置 SPI 接口
    2.将100字 DMA 传输请求加载到 DMA 外设中
    3.开始传输
    (笑声)
    接收到 SPI_INT_DMATX
    5.不再需要发送数据,因此停止接口

    SPI 传输2000个字:
    1.设置 SPI 接口
    2.将1024字 DMA 传输请求加载到 DMA 外设中
    3.开始传输
    (笑声)
    接收到 SPI_INT_DMATX。
    5.数据剩余,将剩余字载入 DMA 传输请求
    (笑声)
    6.收到 SPI_INT_DMATX。
    7.不再需要发送数据,因此停止接口。

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

    我想对您进行很多思考、因为这正是我需要的

    此致、
    法拉