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.

[参考译文] CC3235SF:SPI DMA 计时

Guru**** 2484615 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1263602/cc3235sf-spi-dma-clocking

器件型号:CC3235SF

我正在尝试使用 DMA 从外部 DAC 读取数据。
每个读取的数据都需要为32位、我需要读取至少100 (有时大于100)个字(32位)
每30 μ s 应在 PWM 脉冲的上升沿启动每次读取。  我已经对其进行了设置、所有信号都存在、然后我将向 DMA 缓冲区中写入适量的数据。

问题在于、当我的 ADC 不提供数据时、读取请求脉冲之间存在 SPI 时钟。  这会导致我的缓冲器大多填充为0。
如何告知 SPI 时钟  在 PWM 脉冲后仅在32位时存在?
下面是显示该问题的逻辑布线。

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

    如何设置 SPI 事务?

    似乎 你想每30usec 读取1个32b 字(而不是每次读取100个字)。  我漏掉了什么吗?   

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

    尊敬的 Kobi:

    感谢您的答复!
    我想您不会遗漏任何东西。
    是的、根据100个 PWM 脉冲的 PWM 脉冲、每30us 一个32b 字。
    不确定在没有 CPU 交互的情况下可以实现哪些目标。  

    //创建事务对象
    SPI_Transaction 传输;
    transaction.count =长度;
    transaction.txBuf = NULL;
    transaction.rxBuf =数据;

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

    我认为通过 CPU 交互是不可能实现的。  

    因此、您应该  将 spiParams.dataSize 设置为32b 并使用 TRANSACTION_COUNT = 1 ->、这应将时钟设置 为仅接收32位。

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

    手册中说明我可以执行与我需要的操作非常相似的操作: 我只需要设置我认为的突发尺寸。


    9.3.3 DMA 操作
    每个定时器都有一个专用的 μ µDMA 通道、并且可以向 μ µDMA 控制器提供一个请求信号。 脉冲
    请求由一个定时器使用它自己的 dma_req 信号来生成。 µDMA μ DMA 提供 dma_done 信号
    对每个计时器、以指示传输完成并在 GPTM Raw 中触发 µDMA 完成中断(DMAnRIS)
    中断状态寄存器(GPTMRIS)寄存器。 该请求是突发类型的、每当计时器原始
    中断条件发生。 μ µDMA 传输的仲裁数目应与需要传输的数据单元数相同
    发生计时器事件时应传输 I2C 数据。

    例如、要每10ms 传输256个项目、或者一次传输8个项目、配置一个定时器来产生一个周期性的
    10ms 超时。 配置 μ µDMA 传输总量为256个项目、每次突发传送8个项目。 每次
    该定时器超时、μ µDMA 控制器传输8个项目、直到所有256个项目传输完毕。


    GPTM DMA 事件(GPTMDMAEV)寄存器启用可导致 dma_req 信号的事件类型
    由计时器模块断言。 应用软件可以使用 GPTMDMAEV 寄存器为每个计时器的匹配、捕获或超时事件启用 dma_req 触发。 对于单个计时器、所有活动计时器触发事件
    通过 GPTMDMAEV 寄存器启用的 DMA 一起进行"或"运算、以创建单个 dma_req 脉冲
    并发送到 μ µDMA。 当 μ µDMA 传输完成时、DMA_DONE 信号会发送到定时器。
    从而使 GPTMRIS 寄存器的 DMAnRIS 位置位。

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

    请仔细检查您的配置(或提供配置代码以供查看)、因为在超时时时时-请求的字多于1个字。