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.

[参考译文] TMS320F28075:使用 SPI 将 MCP4921 DAC 与 tms320f28075连接

Guru**** 2609955 points
Other Parts Discussed in Thread: TMS320F28075

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/689726/tms320f28075-interfacing-mcp4921-dac-with-tms320f28075-using-spi

器件型号:TMS320F28075

您好!

我必须使用 SPI 总线将 MCP4921 DAC 芯片连接到 tms320f28075。 为此、我将使用控制器的 SPIB 模块。 我使用 GPIO 引脚22、23、24、25作为 SPI 引脚。 我已进行了必要的更改,这些更改也反映在寄存器中。 问题是我无法在引脚上看到 SPI 时钟。请帮助。

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

    是否确保正确配置 GPIO 组多路复用器? 对于 GPIO22、GPAGMUX2 =1、GPAMUX2 = 2。
    您使用的是什么硬件? 这是 LaunchPad、controlCARD 还是定制硬件? 您是否已验证您的硬件是否正确?
    请参阅我最近对此主题的 SPI 操作响应: e2e.ti.com/.../689215 您是否还尝试传输任何数据? 在发生数据传输之前、SPI 不会切换时钟。

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

    Mark、您好!

    回答您的问题、

    1) 1)是的、多路复用器已正确配置。 我已经验证了 GPAMUX2和 GPGAMUX2的寄存器状态。

    2) 2)启用模块后、我正在传输一个16位数据字。 我的是定制硬件。

    我在非 FIFO 模式下使用 SPI,仅用于传输数据。

    我使用片选引脚作为常规 GPIO 引脚、并仅通过软件处理。

    这里是我用于初始化和传输数据的代码。 我已经使用了 C2000器件的 driverlib 中为28075控制器提供的函数。 请告诉我缺少什么 、或者它是生成时钟和传输数据的正确方法。

    我还想知道 SPIDAT 寄存器何时加载 SPITXBUF 数据。 因为我观察到数据传入 SPITXBUF、但 SPIDAT 加载了0xffffffff。

    我还在连接运行前后的寄存器状态快照。

    void spiInitDAC()

      /*初始化设备时钟*/

      SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_SPIB);

      //时钟   

      GPIO_setPinConfig (GPIO_22_SPICLKB);

      GPIO_setDirectionMode (22、GPIO_DIR_MODE_OUT);

      //SIMO

      GPIO_setPinConfig (GPIO_24_SPISIMOB);

      GPIO_setQualificationMode (24、GPIO_QUAL_异 步);

      //SOMI

      GPIO_setPinConfig (GPIO_25_SPISOMIB);

      GPIO_setPadConfig (25、GPIO_PIN_TYPE_PULLUP);

      GPIO_setQualificationMode (25、GPIO_QUAL_异 步);

      //芯片选择仅作为 GPIO 引脚

      GPIO_setPadConfig (23、GPIO_PIN_TYPE_STD);

      GPIO_setDirectionMode (23、GPIO_DIR_MODE_OUT);

      GPIO_writePin (23、1);

      /*必须在配置 SPI 之前将其置于复位状态*/

      SPI_disableModule (SPIB_BASE);

      /*SPI 配置。 使用1MHz SPICLK 和16位字大小。*/

      SPI_setConfig (SPIB_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA0、

             SPI_MODE_MASTER、1000000、16);

      /*16位数据传输完成后停止*/

      SPI_setEmulationMode (SPIB_BASE、SPI_emulation_stop_after_transmit);

      /*配置完成。 启用模块。*/

      SPI_enableModule (SPIB_BASE);

    void config_mcp4921()

     uint16_t write_command ={0x3C20};

     GPIO_writePin (23、0);

     SPI_writeDataNonBlocking (SPIB_BASE、WRITE_COMMAND);

     GPIO_writePin (23、1);

    Befor Run

    运行后

    谢谢、

    Anvaya

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

    您是否在示波器上观察过您的过程? 运行后寄存器的状态表示传输完成、SPIDAT 中的值是 SPI 实际接收的值。

    如果您能够移除 DAC 芯片并再次执行该过程、会出现什么情况?

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