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.

[参考译文] TMS570LC4357:具有24位数据缓冲器发送的 SPI

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/891189/tms570lc4357-spi-with-24-bit-data-buffer-transmit

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

您好!  

大家好、我正在将 DAC80508 与 TMS570LC4357 控制器集成。 我将评估模块用于这两个芯片。 根据数据表中的说明进行连接。 配置有1MHz 时钟的 SPI 5 (希望在初始时使用低时钟速度进行测试)。 我已经在 HalcogGen 中发送了24位(0x81 00 00)、配置为8位。 我遇到了每8个时钟脉冲之间存在间隙的问题。 从器件期望连续24位时钟脉冲和要同步的数据。 如何实现这一点? 请帮帮我。

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

    您好!

    如果您在循环中将数据写入 SPIDAT 寄存器、则间隙应非常小或两个字之间没有间隙。  

    SPI 是同步的、因此小间隙不应导致问题。

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

    你(们)好  

    使用写入 SPIDAT 寄存器的循环捕获上述数据。

    我们还有其他方法来处理24位模式吗?

    Chandra

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

    您好 Chandra、

    我以前用过同样的方法:字长=8位、CSHOLD=1

    为什么每3个字的差距就更大?

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

    您可以分享一个示例项目吗?

    我将检查电路板上的示波器。 不知道为什么...

    Chandra

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

    您好 Chandra、

    我在 PC 上的上一篇文章中没有提到该示例。 以下示例是我用于读取支持32位字长的器件的函数。  

    uint32_t Data_Write_32 (uint16_t 地址、uint32_t 数据)

    spiDAT1_t 数据通信 fig1_t;
    uint8_t txData[8]、DataLength、blocksize;
    uint32_t spiErrorFlag;

    DataLength = 1;// 32位字的数量
    blocksize = DataLength * 4 + 4;/*字节数*/

    dataconfig1_t.CS_hold = true;
    dataconfig1_t.WDEL = true;
    dataconfig1_t.DFSEL = SPI_FMT_0;  //8位字长  
    dataconfig1_t.CSNR =(0xFF ^(0x1 << SPI_CS));/*0xFB、CS2*/

    txData[0]= data_write_opcode;
    txData[1]=(地址和0xFF00)>> 0x8;
    txData[2]=(地址& 0x00FF)>>0x0;
    txData[3]= DataLength;
    txData[4]=(数据>> 24)& 0xFF;
    txData[5]=(数据>> 16)& 0xFF;
    txData[6]=(数据>> 8)& 0xFF;
    txData[7]=(数据>> 0)& 0xFF;

    ErrorFlag = spiTransmitData (SPI_PORT、&dataconfig1_t、blocksize、&txData[0]);
    返回错误 spiFlag;

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

    您好、Wang、

    上述函数中的块大小计算是否正确?

    我想、如果我们要传输8位数据块、那么大小只有4个正确.. 或者我的理解是错误的?

    Chandra

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

    您好、Chandra、

    此函数用于发送4字节数据加上1字节操作码、2字节地址和1字节数据长度(32位)。 这取决于从器件的 SPI 通信协议。