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.

[参考译文] CCS/TM4C129XNCZAD:从微控制器到 DAC 的20位数据传输

Guru**** 2393725 points
Other Parts Discussed in Thread: TM4C129XNCZAD

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/806456/ccs-tm4c129xnczad-20-bit-data-transfer-from-microcontroller-to-dac

器件型号:TM4C129XNCZAD
主题中讨论的其他器件: TM4C123

工具/软件:Code Composer Studio

尊敬的所有人

 有人能不能建议如何从微控制器 tm4c129xnczad 向 DAC ad5791发送20位数据。 我在 ssiconfigsetexpclk 中看到的数据仅为4至16位。 请告诉我如何操作

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

    在我看来、AD5791需要24位传输。

    为此、您可以手动切换 GPIO 引脚为低电平以启动同步、然后执行3个8位传输、然后将 SYNC 设置为高电平。 也可以使用 SSIAdvFrameHoldEnable()函数来操纵 FSS 信号以执行同步函数。

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

    尊敬的所有人:

        我正在使用 eval ad5791板并尝试与德州仪器的 tm4c129x 通信。 我正在通过串行接口(SSI)发送数据。 但我无法获得任何输出。 我已检查 VDD=14V VSS=-14、Vcc=3.3V iovcc=3.3V、LDAC=0、RESET =1 CLR=1、在这种情况下、LDAC 被并行地短接至 GND。 .reset 是 iovcc 短接。 CLR 处于逻辑1、我是

    以8位模式发送数据、因此我在3个周期内发送数据。 在我第一次发送数据0x20012时。 然后是0x1ffff 以获得最大输出、但我无法获得任何输出。 请帮助我获取输出。 我随附了该代码

    include "stdbool.h"
    #include "stdint.h"
    #include "gpio.h"
    #include "rom_map.h"
    #include "sysctl.h"
    #include "hw_memmap.h"
    #include "pin_map.h"
    #include "ipt32x2_duattrab.id_u32h
    
    
    
    
    
    
    
    ;
    
    
    包含"tidt32nattr.ipt.id_u32nath #include "u32nattr.ipt.id_u32nath;包含"u32nattr.ipt.id.id_u32nath #t.id_u32nath #t.id_u32nath
    
    和 ipt/ipt.id_u32nath #t.ipt.id.id.id.id.idt.id.idt.u32nath #include "u32nath;t.id.id.id.idt.idt.u32nath #t.id.
    void DAC_normal (void);
    void DAC_LDAC (void);
    #define GPIO_PA2_SSI0CLK 0x0000080F
    #define GPIO_PA3_SSI0FSS 0x00000C0F
    #define GPIO_PA4_SSI0RX 0x0000100F
    #define GPIO_PA5_SSI0TX 0x0000140F
    #define NUM_SSI_DATA 3
    #define SYS_TICK 延迟10000
    
    uint32_t ui32SysClock;
    
    void DAC_LDAC ()
    {
    MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIO);
    MAP_GPIOPinTypeGPIOOutput (GPIO_PORTS_BASE、GPIO_PIN_7);//同步脉冲
    MAP_GPIOPinTypeGPIOOutput (GPIO_PORTS_BASE、GPIO_PIN_6);//CLR 为高电平
    MAP_GPIOPinWrite (GPIO_PORTS_BASE、GPIO_PIN_7、GPIO_PIN_7);//同步脉冲高电平
    MAP_GPIOPinWrite (GPIO_PORTS_BASE、GPIO_PIN_6、GPIO_PIN_6);
    
    }
    
    
    void DAC_normal()
    {
    pui32DataTx = 0x200312;
    SSI_DATA ();
    // pui32DataTx = 0x400002;
    // SSI_DATA ();
    
    }
    
    
    
    void SSI_DATA ()
    {
    
    pui32DataTx1= pui32DataTx & 0x0000ff;
    pui32DataTx2=(pui32DataTx & 0x00ff00)>> 8;
    pu32DataTx3=(pu32DataTx3=(pinu_pitu0_gpin0_gpitx)
    ;pini32_gpit_gpio0 (pin0_pin0_pin0_gpin0_gpioport);pin0_pin_pio0、pin0_
    
    pui32DataTx3);
    
    MAP_GPIOPinWrite (GPIO_PORTS_BASE、GPIO_PIN_6、0);/SYNC 低电平
    while (SSIBusy (SSI0_BASE))
    {
    }
    SSIDataPut (SSI0_BASE、pui32DataTx2);
    
    while (SSIBusy (SSI0_BASE))
    {
    }
    SSIDataPut (SSI0_BASE、pui32DataTx1);
    
    while (SSIBusy (SSI0_BASE))
    {
    }
    
    
    SSIIntClear (SSI0_BASE、SSI_RXFF);
    MAP_GPIOPinWrite (GPIO_PORTS_BASE、GPIO_PIN_7、GPIO_PIN_7);//同步高
    
    
    
    电平}
    int main (void)
    {
    
    ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |SYSCTL_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_320)、
    10000000);
    SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
    GPIOPinConfigure (GPIO_PA2_SSI0CLK);
    GPIOPinConfigure (GPIO_PA3_SSI0FSS);
    GPIOPinConfigure (GPIO_PA4_SSI0RX);
    GPIOPinConfigure (GPIO_PA5_SSI0TX);
    DAC_LDAC ();
    MAP_GPIOPinWrite (GPIO_PORTS_BASE、GPIO_PIN_7、GPIO_PIN_7);
    GPIOPinTypeSSI (GPIO_Porta_base、GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 | GPIO_PIN_2);
    SSIConfigSetExpClk (SSI0_BASE、SysCtlClockGet ()、SSI_FRF_MOTO_MODE_0、
    SSI_MODE_MASTER、100000、8);
    SSIEnable (SSI0_BASE);
    DAC_NORMAL ();
    
    
    while (1)
    {
    pui32DataTx = 0x1fff;
    SSI_DATA();
    
    }
    //返回0;
    } 

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

    TX 和 RX 引脚标记错误。 您是否正确连接了它们? PA4为 TX、PA5为 RX。

    此外、不要 在 TM4C129x 器件上使用 SysCtlClockGet ()函数(第102行)。 该功能仅适用于 TM4C123器件。  请改用变量 ui32SysClock。

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

    是的、我已正确对其进行硬接线、我也在示波器上观察到、但任何输入上的输出为0v

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

    感谢您的帮助

    问题已解决