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.

[参考译文] RM46L852:DMA 模式下的 SPI 从属设备

Guru**** 2390755 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1078458/rm46l852-spi-slave-in-dma-mode

部件号:RM46L852

大家好!

我正在寻找 SPI 从属示例,王先生在这个线索中指出了其中的一些示例:

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1077752/rm46l852-spi-slave-example-code/3989360#3989360

我对 SPI DMA 传输非常感兴趣。

但本示例仅显示(但非常感谢)如何在 DMA 中将数据写入 SPI 从属设备。 但在 DMA 中从 SPI 从属设备读取数据的情况如何? 更准确地说,向 SPI 从属设备写入一些命令字节,并根据其读取同一 SPI 帧中仍在 DMA 中的 SPI 从属设备中的给定数据。

此致,

法比安

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

    您好,法比安,

    要开始 SPI 通信,主中继器必须发送时钟信号,并通过启用 CS 信号(通常为低有效)来选择从中继器。 SPI 是一个全双工接口;主和从都可以同时通过 MOSI 和味噌线路发送数据。 在 SPI 通信期间,数据同时传输(串行转移到 MOSI/SDO 总线上)并接收(总线上的数据(miso/SDI)被采样或读取)。 串行时钟边缘同步数据的移动和采样。

    每次将 TX 数据从 TXBUF 或 SPIDAT1复制到 TX 移位寄存器时,SPI 都会在 TX_DMA_REQ 行上生成请求。
    每次将收到的数据复制到 SPIBUF 时,SPI 都会在 RX_DMA_REQ 行上生成请求。

    应配置 SPI 从服务器并准备好在主服务器开始传输数据之前接收数据。

    对于 SPI 从 TX DMA 数据包设置:

    G_dmaCTRLPPT_TX.Sadd =&TX_DATA;/*源地址*/
    G_dmaCTRLPPT_TX.DADD =(((UINT32_t)(&(spireg1->DAT1))+ 2);/* SPI1配置为从属地址,目的地址*/
    G_dmaCTRLKPT_TX.CHCTRL = 0;/*通道控制*/
    G_dmaCTRLKPT_TX.FRCNT =帧计数;/*帧计数*
    G_dmaCTRLKPT_TX.ELCNT = ElmntCnt;/*元素计数*/
    G_dmaCTRLPKT_TX.ELDOFFSET = 0;/*元素目标偏移量*/
    G_dmaCTRLPKT_TX.ELSOFFSET = 0;/*元素目标偏移量*/
    G_dmaCTRLPKT_TX.FRDOFFSET = 0;/*帧目标偏移量*/
    G_dmaCTRLPKT_TX.FRSOFFSET = 0;/*帧目标偏移量*/
    G_dmaCTRLPKT_TX.PORTASGN = 4;/*端口 b *
    G_dmaCTRLKPT_TX.RDSIZE = ACCESS_16_BIT;/*读取大小*/
    G_dmaCTRLKPT_TX.WRSIZE = ACCESS_16_bit;/*写入大小*/
    G_dmaCTRLKPT_TX.tType =帧传输;/*传输类型*/
    G_dmaCTRLKPT_TX.ADDMADERD = ADDR_INC1;/*地址模式读取*/
    G_dmaCTRLPKT_TX.ADDMODEWR = ADDR_FIXED;/*地址模式写入*/
    G_dmaCTRLPPT_TX.AUTOINIT = AUTOINIT_ON;/* autocinit *

    对于 SPI 从属 RX DMA 数据包设置:

    G_dmaCTRLPPT_RX.Sadd =((UINT32_t)(&(spireg1->BUF))+ 2);/* SPI1配置为从属源地址*/
    G_dmaCTRLPPT_RX.DADD =&RX_DATA;/*目标地址*/
    G_dmaCTRLKPT_RX.CHCTRL = 0;/*通道控制*/
    G_dmaCTRLKPT_RX.FRCNT =帧计数;/*帧计数*/
    G_dmaCTRLKPT_RX.ELCNT = ElmntCnt;/*元素计数*/
    G_dmaCTRLKPT_RX.ELDOFFSET = 0;/*元素目标偏移量*/
    G_dmaCTRLKPT_RX.ELSOFFSET = 0;/*元素目标偏移量*/
    G_dmaCTRLKPT_RX.FRDOFFSET = 0;/*帧目标偏移量*/
    G_dmaCTRLKPT_RX.FRSOFFSET = 0;/*帧目标偏移量*/
    G_dmaCTRLPPKT_RX.PORTASGN = 4;/*端口 b *
    G_dmaCTRLKPT_RX.RDSIZE = ACCS_16_bit;/*读取大小*/
    G_dmaCTRLKPT_RX.WRSIZE = ACCS_16_bit;/*写入大小*/
    G_dmaCTRLPPT_Rx.tType =帧传输;/*传输类型*/
    G_dmaCTRLKPT_RX.ADDMADERD = ADDR_FIXED;/*地址模式读取*/
    G_dmaCTRLKPT_RX.ADDMODEWR = ADDR_INC1;/*地址模式写入*/
    G_dmaCTRLKPT_RX.AUTOINIT = AUTOINIT_ON;/*自动初始化*/

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

    王先生你好,

    感谢您的支持。

    此致,

    法比安