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.

[参考译文] TMS320F28P650DH:SPI_Ex5_loopback_DMA

Guru**** 2474130 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1464095/tms320f28p650dh-spi_ex5_loopback_dma

器件型号:TMS320F28P650DH
主题中讨论的其他器件:SysConfigC2000WARE

工具与软件:

大家好、我使用 SPI_Ex5_loopback_dma 实现我的架构:DSP 作为从器件、PC 作为主机。 目前、SPI_DMA 接收到 DMA 接收完成中断中的一个字节;SPI_DMA 发送可变字节。 具体实施如下:
1) SPI DMA 接收一个字节进入 DMA 完全中断------- ---- ---- -----软件触发发送;
2) SPI 的 DMA 将数据发送给调用函数------------------------------------------------------- SPI_DMA_StartTransaction (uint16_t * Data、uint16_t spibase、uint16_t length、uint16_t txdly)

//*数据代表发送数组
//spibase 表示 SPI 基址
//长度表示要发送的数据的长度
//txdly 表示发送延迟

void SPI_DMA_StartTransaction (uint16_t * Data、uint16_t spibase、uint16_t length、uint16_t txdly)

//有关以下函数的说明、请参阅 dma.c。
//
/ /
// SPI 配置
/ /

SPI_setcharLength (spibase、16);
//将 TX/RX FIFO 缓冲器复位为默认状态
SPI_disableFIFO (spibase);//禁用 FIFO 寄存器
SPI_enableFIFO (spibase);//启用 FIFO 寄存器

//配置 FIFO 发送延迟
SPI_setTxFifoTransmitDelay (spibase、txdly);

uint16_t burst_size = 0;
uint16_t transfer_size = 1;

//根据要发送/接收的字数确定16级字的数量
uint16_t numofSixteenWords = length / SPI_FIFO_TXFULL;
//根据要发送/接收的字数确定剩余字的数量
uint16_t remainingWords =长度% SPI_FIFO_TXFULL;

if (numofSixteenWords)

SPI_setFIFOInterruptLevel (spibase、SPI_FIFO_TXEMPTY、SPI_FIFO_RXFULL);
burst_size = 16u;
transfer_size = numofSixteenWords;
}
设计

SPI_setFIFOInterruptLevel (spibase、SPI_FIFO_TXEMPTY、(SPI_RxFIFOLevel) remainingWords);
burst_size = remainingWords;
TRANSFER_SIZE = 1;
}

//SPI_enableInterrupt (spibase、SPI_INT_RXFF);

//初始化 DMA
DMA_initController ();
/ /
// DMA TX 通道配置
/ /
断言(DMA_isBaseValid (DMA_CH5_BASE));
dma_startChannel (dma_ch5_BASE);
INTERRUPT_ENABLE (DMA_CH5_BASE);
INTERRUPT_REGISTER (DMA_CH5_BASE、&INT_mySPI0_TX_DMA_ISR);
uint16_t * psrcAddr =数据;
uint16_t * pdestAddr =(uint16_t *)(spibase + SPI_O_TXBUF);

DMA_configAddresses (DMA_CH5_base、pdestAddr、psrcAddr);
DMA_configBurst (DMA_CH5_BASE、BURST_SIZE、1、0);
DMA_configTransfer (DMA_CH5_BASE、TRANSFER_SIZE、1、0);
DMA_CONFIGMode (DMA_CH5_BASE、DMA_TRIGGER_SOFTWARE、DMA_CFG_Oneshot_disable | DMA_CFG_CONTINUOUS_ENABLE |
DMA_CFG_SIZE_16BIT);
DMA_setInterruptMode (DMA_CH5_BASE、DMA_INT_AT_END);
DMA_enableInterrupt (DMA_CH5_BASE);
DMA_disableOverrunInterrupt (DMA_CH5_BASE);
DMA_enableTrigger (DMA_CH5_BASE);
DMA_forcestrigger (DMA_CH5_BASE);

}

接收配置

问题:

1.我可以询问专家此配置是否正确吗?

如果 SPI_DMA 的接收优先级大于 SPI_DMA 的发送优先级、则 SPI_DMA 的接收优先级为 DMA_CH1_BASE、SPI_DMA 的发送优先级为 DMA_CH5_BASE。

如果 DSP 的 SPI 用作从机、则只需要更改 SPI 模式、请勿更改它

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

    您好、Nie:

    虽然我无法查看和更正代码、但我可以帮助回答您可能遇到的任何具体问题。 与往常一样、您也可以参考有关类似主题的其他 E2E 主题来帮助进行配置。

    是的、这是正确的、因为 DMA 通道会根据通道编号遵循轮询优先级方案。 但是、请注意、CH1具有特殊的优先级、并且具有比所有其他通道更高的优先级。 TRM 的 SPI 部分提供了更多信息和示例。

    此外、如果要将 MCU SPI 用作目标、则需要在 SysConfig 中将 SPI 模式更改为"外设"。

    此致、

    Aishwarya.

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

    大家好、专家感谢您的答复、以上是我在 C2000WARE5.01中的程序、单击"调试"报告错误

    添加 spi_ex6_eeprom 项目后、我可以进行调试。 spi_ex5_loopback_dma 工程是否有任何问题

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

    图1  

    图2

    图 3

    图 4

    图5  

    图6  

    我使用了28P65开发板来测试 SPI_Ex5_loopback_DMA。 修改点如图4所示。 DSP 的 SPI 通过 SPI 与 USB 芯片连接到 PC、DSP 的 SPI 是从属计算机。 主机 CS 连接到从器件 CS、主机 MOSI 连接到从器件 MOSI、主机 MISO 连接到从器件 MISO、主机时钟连接到从器件时钟、图1-3显示了 DSP 的 GPIO 连接引脚。 DSP 发送数据、该 PC 无法接收数据?

    代码变化如图5所示。 这允许您根据 Done 的值手动发送数据。
    期待您的回复、DSP 配置有任何问题吗?

    图7  

    图8  

    我可以从寄存器判断 DSP 是否正确发送数据?

    如图8所示、手动点击 DONE===10来填充 DMA-TX 发送数据并开始发送 DMA、 但 DMA 发送完成断点未输入?μ s

    图9  

    图9显示主机成功发送了8 DATA、DSP Received data。

    DSP 没有接收到数据、也没有进入接收完成中断?

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

    为了验证 DSP 是否正确接收数据、我配置 SPI 的 FIFO 接收中断。 当 PC 发送数据时、DSP 不进入 SPI 接收中断;

    是 DSP-SPI 从器件和 SPI_PTE 右?多路复用

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

    NIE、  

    请允许我进一步探讨此问题、下周与您联系。 C2000WARE 示例应单独工作、无需进行任何修改。

    此致、

    Aishwarya.

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

    NIE、

    对于延迟、我们深表歉意。  如果您在运行示例和整合问题时仍遇到问题、可否告知我? 可以检查 SPIFFTX、SPIFFRX、SPITXBUF、和 SPIRXBUF。 您还可以利用 TRM 中关于 SPI DMA 事务的这一部分: TMS320F28P65x 实时微控制器技术参考手册(修订版 B)

    此致、

    Aishwarya.

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

    你好专家,谢谢你的答复。 DSP 从属机、PC 主机、我现在有调试问题:1-DSP 发送6个16位数据、PC 接收前32位数据总是丢失;2-PC 发送、DSP 正确接收;

    图1

    sData[0]= 0x7777;
    sData[1]= 0x8888;
    sData[2]= 0x9999;
    sData[3]= 0xAAAA;
    sData[4]= 0xBBBB;
    sData[5]= 0xCCCC;

    图1-DSP 发送数组 sData、USB2.0为接收状态、PC 接收的第一个32位数据总是丢失;

    图 2

    sData[0]= 0x1111;
    sData[1]= 0x2222;
    sData[2]= 0x3333;
    sData[3]= 0x4444;
    sData[4]= 0x5555;
    sData[5]= 0x6666;

    图2-DSP 发送数组 sData、USB2.0为接收状态、PC 接收的第一个32位数据总是丢失;

    图 3

    图3 -这可能在多次测试中偶尔发生

    2-pC 发送、DSP 正确接收;

    图 4

    图 4-PC USB2.0发送数据、DSP 正确接收阵列 RDATA

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. SPI 配置
    2. 目前、DSP 根据 main.c 的 donia 变量发送或接收;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nie:

    由于 Aishwarya 目前在下周不在办公室、敬请期待延迟回复。 对此造成的不便、我深表歉意。

    此致、

    Delaney