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.

[参考译文] LAUNCHXL-F28377S:使用 DMA 的具有多个从器件的 SPI

Guru**** 2576215 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/810052/launchxl-f28377s-spi-with-multiple-slaves-using-dma

器件型号:LAUNCHXL-F28377S

您好!

我正在尝试 使用 DMA 通过 SPI 执行多从器件通信(dlnware.com/.../spi_multi_slaves.png)。

我的设置如下:

SPI 通道 A

传感器 IMU VN 100-S (www.vectornav.com/.../vn-100-user-manual-(um001).pdf)

为了执行多从器件通信、我的目标是在 发送标头之前将 GPIO19与 SPISTEA 取消链接、并手动执行切换。

 GPIO19通过取消链接

   GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0; //启用 GPIO19上的上拉电阻器(SPISTEA)
   GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0;//将 GPIO19配置为 SPISTEA

并配置为

  GPIO_SetupPinMux (19、GPIO_MUX_CPU1、0);
  GPIO_SetupPinOptions (19、GPIO_OUTPUT、GPIO_PushPull);

然后拉高、因为 SPISTEA 通常应为高电平。
  GPIO_WritePin (19、1);

用于读取 IMU、

  GPIO_WritePin (CS_1_GPIO、0);
  StartDMACH6 ();                      //启动 SPI RX DMA 通道
  StartDMACH5 ();                      //启动 SPI TX DMA 通道
  GPIO_WritePin (CS_1_GPIO、1);

  DELAY_US (200);

  GPIO_WritePin (CS_1_GPIO、0);
  StartDMACH6 ();                      //启动 SPI RX DMA 通道
  StartDMACH5 ();                      //启动 SPI TX DMA 通道
  GPIO_WritePin (CS_1_GPIO、1);

遗憾的是、传感器的响应始终为0xFFFF。

有人对这个问题有什么想法吗?

-ps、我的代码基于 SPI_LOOP_DMA 示例。 当 GPIO19被连接至 SPISTEA 时、它运行良好。

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

    尊敬的 Juan:

    您可能会过快地将 SPISTEA (通道选择) GPIO 设置为高电平。 SPISTEA 信号为低电平有效、并且在整个通信期间(TX 和 RX 期间)需要保持低电平。

    [引用用户="Juan Gamba"]  GPIO_WritePin (CS_1_GPIO、0);
      StartDMACH6 ();                      //启动 SPI RX DMA 通道
      StartDMACH5 ();                      //启动 SPI TX DMA 通道
      GPIO_WritePin (CS_1_GPIO、1);//设置得太快

    当 GPIO19被"链接到 SPISTEA"时、它工作的原因很可能是 SPI 模块自动处理切换。

    最棒的

    Kevin

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

    您好!

    感谢你的帮助。 现在它正在工作:

       DONE = 0;                           //测试尚未完成
       GPIO_WritePin (CS_1_GPIO、0);
       StartDMACH6 ();                      //启动 SPI RX DMA 通道
       StartDMACH5 ();                      //启动 SPI TX DMA 通道

       while (!done);                       //等待 DMA 传输完成
       GPIO_WritePin (CS_1_GPIO、1);
       DELAY_US (200);

    谢谢

    Juan D Gamba