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.

[参考译文] TMS570LS1224:长度为&gt 的 SPI 通信接收字;16位

Guru**** 2350610 points
Other Parts Discussed in Thread: TMS570LS1224, HALCOGEN
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/607983/tms570ls1224-spi-communication-receiving-words-with-length-16-bits

器件型号:TMS570LS1224
主题中讨论的其他器件: HALCOGEN

您好!

我现在正在开发一款配备 TMS570ls1224微控制器的 TMS570ls12X Launchpad。

要使用我的应用程序,我需要与18位 ADC (AD7608  )通信

我计划将其连接到 SPI3模块上(无 MibSPI,无并行:简单和经典 SPI)。 我可以弄清楚如何物理连接它(MOSI、MISO、CLCK 和 CS)、但我不确定如何实际获取数据

因此,我想就以下一般性问题回答一些问题:

-当 ADC 为每个转换的通道发送18位时,我应该如何配置 SPI 模块,因为最大字长是16位? 对于 exemple,是否可以将帧大小设置为9位为每次转换读取两个字(我想这需要一些“连续”接收配置,如启用连续接收、获取第一个字、在获取第二个字时禁用连续接收等?)

-是否有用于此的 halcogen 配置的示例?

我对这一点非常不了解、非常感谢您的帮助!

可卑的

Audry

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我忘记提及以下信息:
    -ADC 没有 MOSI 线路,所以 CPU 不能向它发送任何内容(甚至不能发送“虚拟传输”),那么我应该如何继续读取数据?
    -根据 ADC 数据表、它只能发送18位的"完整"数据包(可以一次读取8个通道的全部144位数据或读取8×18位数据、但不能更少)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Audry、

    您可以尝试 charlen=9和 blocksize=16 (8个通道* 2)。 V1通道的实际数据为 DATA[0]<< 9 + DATA[1](AD7608为 MSB)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 QJ、
    感谢您的回答!
    从您的回答中,我假设“数据”所指的是由两个9位缓冲区组成的缓冲区,对吧? 如果是这样,我就知道 DATA[0]<<9 + DATA[1]这是一个按正确顺序排列的18位寄存器[MSB...lsb]的含义,您是否确认?
    但是、在 Halcogen 中、我没有任何"blocksize"参数、只有"charlen"参数... 您能告诉我块大小的含义以及如何配置它吗?

    再次感谢

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

    请来?

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

    您好 Audry、

    你是对的。 数据是9位 SPI 接收数据:DATA[I]=SPI->BUF;DATA[0]和 DATA[1]将是 ADC 通道0的数据、DATA[2]和 DATA[3]用于通道1、...DATA[15]和 DATA[16]用于通道7。  

    blocksize 是要接收的数据数、它是16 (9位* 16 = 18位/通道* 8通道=144位 ADC VI 数据)。 块大小的定义是 SW。

    在 SPI 配置中、请设置 CSHOLD=1、WDELAY=0

    CSHOLD=1意味 着芯片选择信号在一个传输结束时保持有效、直到一个包含新数据和控制信息的控制字段被载入 SPIDAT1。

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

    大家好、感谢您的支持。

    我今天尝试用你的帮助来设置这个通信,但我感到困惑:在 HalCogen,我不能设置 CSHOLD 引脚... 在 THS SW 中也不是。 在阅读数据表时,CSHOLD 仅可用于 MibSPI 而不是简单 SPI,对吧?

    如果是这样,我想知道您是否会为我提供一些教程或说明,介绍什么是 MibSPI,它与简单 SPI 有何区别,以及如何配置它? 对于我的情况,一个简单的示例(需要读取16×9位数据,8×18 Vin)和 HalCogen 图片和/或代码样本将非常好...

    很抱歉,我要这么多帮助,我不熟悉 SPI,从来没有听说过 MibSPI 功能:-(

    谢谢!

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

    您好 Audry、

    CSHOLD 在 SPIDAT1中为28位。 它在 SW 中启用/禁用、并且 HALCoGen 没有 CSHOLD 的光导。以下示例展示了如何启用 CSHOLD。

    /*用户代码开始(2)*/

    UINT16 RX_Data[18]={0};

    /*用户代码结束*/

    void main (void)

    /*用户代码开始(3)*/

    spiDAT1_t 数据通信 fig1_t;

    dataconfig1_t.CS_hold = true;

    dataconfig1_t.WDEL  = false;

    dataconfig1_t.DFSEL = SPI_FMT_0;

    dataconfig1_t.CSNR  = 0xFE;

    /*通过 CPSR 启用 CPU 中断*/

    //_enable_IRQ ();

    /*根据 GUI 配置初始化 SPI 模块

    * SPI2 -从 器件(SIMO、SOMI、CLK、CS0)

    ***/

    spiInit();

    /*通过轮询模式启动 SPI2接收*/

    piveData (spiREG2、&dataconfig1_t、18、RX_Data); //blcksize=18

    while (1);

    /*用户代码结束*/

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

    您好 Qj、

    再次感谢! 我在 YouTube 上观看了 TI 的一段视频、其中包含了视频和您的答案、我将努力让我的通信在明天发挥作用!

    我将告诉您它是怎么发生的。

    再次感谢

    Audry