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.

[参考译文] MSP430FR5994:HW_SPI DMA 块传输无法被有效配置

Guru**** 2482105 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1259978/msp430fr5994-hw_spi-dma-block-transfer-cannot-be-configured-efficiently

器件型号:MSP430FR5994

使用 MCU 硬件 SPI 接口时、预计 DMA 可以配置为块传输、传输字节为4字节、使用 DMA4通道、并且4个通道的触发模式由软件触发、具体代码如下。

;长度= 4 μ s

DMACTL1 = DMA3TSEL__UCA3RXIFG;//根据 SLASE54C 表6-11
DMACTL2 = 0;
// SPI Rx 端:单个、字节、递增目的、不是源。
_data20_write_long ((uintptr_t)和 DMA3SA、(uintptr_t)和 UCA3RXBUF);//_SFR_FARPTR 响应
_data20_write_long ((uintptr_t)和 DMA3DA、(uintptr_t) DataRx);//__SFR_FARPTR 响应
DMA3SZ =字节长度;
DMA3CTL= DMADT_1| DMADSTINCR_3| DMASRCINCR_0| DMADSTBYTE | DMASRCBYTE ;

DMA3CTL |= DMAEN;

DMA4CTL |= DMAEN;
DMA4SZ =字节长度;
//计时器+SPI Tx 侧:单个,字节,增量源,非目的
_data20_write_long ((uintptr_t)和 DMA4SA、(uintptr_t) DataTx);//__SFR_FARPTR 响应
_data20_write_long ((uintptr_t)和 DMA4DA、(uintptr_t)和 UCA3TXBUF);//_SFR_FARPTR 响应

DMA4CTL= DMADT_1| DMADSTINCR_0| DMASRCINCR_3| DMADSTBYTE | DMASRCBYTE ;

但在实际情况下、它只会发送16位、不会发出任何数据、请问这样的配置是否有问题? 同时、Rx 通道通过配置 DMA3通道并使用 RxIFG 作为触发源来获取4个字节的数据

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

    DMACTL2 = 0;

    您还需要为 Tx 侧启用触发器、类似于:

    > DMACTL2 = DMA4TSEL__UCA4TXIFG;//根据 SLASE54D 表9-11

    ----------------

    此外、您应该使用 DMADT_0、以便每个触发传输一个字节。

    ----------------

    流程的工作方式:

    1) TXIFG 触发导致 DMA4传输到 TXBUF、从而启动 SPI (时钟)

    2)当 Tx 字节移出时、Rx 字节会移入;当该字节完成时、 将触发 RXIFG。

    3) RXIFG 触发 DMA3读取 RXBUF。

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

    我能够使用单字节传输、使用软件来启用 DMAREQ、这需要被触发多次、以便 DMA 将完成4字节传输。 但是我希望能够使用 DMA 块传输、在配置之后、软件不再参与、但是在配置块传输无效之后。

    此外、您刚才提供的配置没有效果。 配置完成后、我手动启用 SPI 的 TxIFG、但无法触发传输

    DMACTL2 = DMA4TSEL__UCA3TXIFG ;  

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

    数据块传输(DMADT=1)不适用于您正在执行的操作-它会以单个脉冲的形式(根据第一个触发)写入所有(4倍)字节、这将会溢出 TXBUF 并丢失大部分字节。 而是想通过 DMADT=0进行4次单字节传输(基于4个 TXIFG 触发器)。

    ----------------

    DMA4CTL |= DMAEN;

    我刚注意到您在配置 DMA4之前就这样做了。 之后应该进行此操作。 此步骤将启动 DMA。

    ----------------

    我不知道 CPU (或调试器)设置 TXIFG 是否会导致 DMA 触发(我尚未尝试)。 我预计 TXIFG 将已经被置位。

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

    在 DMA 设置后、首先清除 TXIFG、然后手动触发、使其连续发送