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/cc430f5137:我需要使用有关dac6311的示例代码。

Guru**** 2582405 points
Other Parts Discussed in Thread: DAC6311, DAC161S997, CC430F5137

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/666054/ccs-cc430f5137-i-want-example-code-about-dac6311-using

部件号:CC430F5137
主题中讨论的其他部件:DAC6311DAC161S997

工具/软件:Code Composer Studio

您好,

对于使用0-10V输出,我尝试通过I2C接口使用dac6311。

我找到了有关dac6311的数据表。

但是,我不理解这一点。

您能否提供dac6311用法的示例代码?

请为我提供建议。

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

    我们在CC430xx设备上工作的组没有该设备的驱动程序。 我建议您重新发布您的问题,但这次将DAC6311标记为您关心的设备。 然后E2E系统会将其转发给特定的DAC组,他们可能会提供帮助。

    抱歉,

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

    而且,我混淆了使用SPI的DAC6311。 所以,我想改变话题。

    能否提供SPI使用dac6311的示例代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请根据您的请求自行开始发布新帖子,我们将关闭此帖子。
    巴西
    Siri
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在这种情况下,我选择哪个论坛?

    我可以在您的系统中选择以下选项。

    请注意。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为您应该使用此工具:
    e2e.ti.com/.../73
    巴西
    Siri
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已向DAC小组的某个人发送了一封电子邮件,希望他能尽快回复。

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

    您好,

    是-因为您已正确识别出DAC6311接口确实是SPI而不是I2C。

    一般来说,在DAC中,我们选择不提供特定于设备的示例代码,因为:

    • 我们的接口实现与MCU/ DSP兼容的直向SPI,I2C或UART接口
      • DAC6311尤其如此-这只是16位帧,您可以使用CPOL =0或1,下降边缘是关键边缘
    • 示例代码是特定于平台的(即MSP430的示例代码在C2000上对您几乎没有什么作用),我们客户的平台差异极大

    我实际看到的价值是提供跨平台有用的内容,例如包含位字段定义的头文件,它以人类可读格式编写代码,使编写代码变得更加容易。 基本上,它看起来像下面的DAC161S997示例(请原谅E2E中的格式不正确)。

    /*********** 地址定义*********** /

    #define      Xfer_REG           0x0001

    #define      NOP                0x0002

    #define      WR_MODE            0x0003

    #define      DACCODE            0x0004

    #define      ERR_CONFIG         0x0005

    /******** 登记值定义******** /

    #define      DIS_retry_loop      0x0080

    #define      EN_RETRY_LOOP       0x0000

    #define      mask_SPI_ERR        0x0020

    #define      unmask_SPI_ERR      0x0000

    这使客户可以更直接地在伪代码中实施一些内容:

    通用函数:
    SPI_WRITE (地址,值);

    函数调用:
    SPI_WRITE (DACCODE, 0xff);                           //简单示例写入DAC数据寄存器
    SPI_WRITE (ERR_CONFIG,DIS_RETRY_LOOP || mask_SPI_ERR);//写入到具有位字段的寄存器的操作稍多

    这是我的团队将在新开发中支持的一项计划,但DAC6311尚不存在此类计划。 由于设备甚至没有寄存器,而只是16位输入帧中的位字段,因此提供简单的报头非常容易。

    请告诉我这是否值得关注。 否则,通用16位SPI示例代码可用作与DAC6311通信的基础。

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

    您好,

    与DAC6311的SPI通信存在一些问题。

    我尝试执行下面的代码,但是MCU不能运行“WFP 1.4 MCU/ PM_UCB0CLK”。

    请提供以下代码的建议。

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // SPI函数
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    #define SPI_PORT_SEL P1SEL
    #define SPI_PORT_OUT P1OUT
    #define SPI_PORT_REN P1REN
    #define SPI_PORT_DIR P1DIR


    #define DIN_PIN BIT3 // UCB0SIMO pin
    #define SCL_PIN BIT4 // UCB0CLK pin
    #define sync_PIN BIIT2 // CS pin

    Int PtrTransmit;
    unsigned char SPIBufferArray[66];
    无符号char I2CBuffer;

    void SPIInit()

    SPI_PORT_OUT = SYNC_PIN;// SYNC High
    SPI_PORT_DIR || SYNC_PIN + SCL_PIN;//设置为输出
    SPI_PORT_SEL || DIN_PIN + SCL_PIN;//将SPI引脚分配给USI_B0

    //建议的I2C模块初始化步骤,如用户指南中所示:
    UCB0CTL1 || UCSWRST;//启用软件重置
    UCB0CTL0 |= UCCKPH + UCMSB + UCMST + UCSYNC;// 3引脚,8位SPI主控制器
    UCB0CTL1 || UCSSEL__SMCLK;
    UCB0BR0 |= 0x02;///2
    UCB0BR1 = 0;//
    UCB0CTL1 &=~UCSWRST;//清除软件重置,恢复操作

    }

    void SPIWriteInit()

    UCB0CTL1 || UCTR;// UCTR = 1 =>传输模式(R/W位= 0)
    UCB0IFG &=~UCTXIFG;
    UCB0IE |= UCTXIE;//启用传输就绪中断

    __bis_sr_register(LPM0_bits + GIE);//输入带中断的LPM0
    }

    void SPI_Write(int DataVlaaue)

    Int SPIData = 0;

    如果(DataVlaue > 1023|| DataVlaue < 0)

    返回;
    }

    SPIData =(DataVlue << 4)和0x03FF;// 10位掩码(最大= 1023)

    SPI_PORT_OUT &=(~SYNC_PIN);

    while (UCB0STAT & UCBUSY);//等待移位寄存器和缓冲区为空的完成

    SPIBufferArray[1]=(DataVlaue和0xFF00)>> 8;// 1字节寄存器地址
    SPIBufferArray[0]= DataVlaue和0x00FF;
    PtrTransmit =1;//设置I2CBufferArray指针

    SPIWriteInit();

    while (UCB0STAT & UCBUSY);//等待移位寄存器和缓冲区为空的完成

    SPI_PORT_OUT ||(Sync_PIN);

    }
    //------------------
    // USI_B0数据ISR用于移动从I2C从属设备接收的数据
    //至MSP430内存。 它的结构可以用于接收
    //------------------
    #pragma vector = USI_B0_vector
    __interrupt void USI_B0_ISR(void)

    IF (UCB0IFG和UCTXIFG)

    UCB0TXBUF = SPIBufferArray[PtrTransmit];//加载TX缓冲区
    PtrTransmit--;// Decrement TX字节计数器
    IF (PtrTransmit < 0)

    while (!(UCB0IFG和UCTXIFG));
    UCB0IE &=~UCTXIE;//禁用中断。
    UCB0IFG &=~UCTXIFG;//清除USI_B0 TX int标志
    __BIC_SR_REGISTER_ON_EXIT (LPM0_bits);//退出LPM0
    }
    }
    否则IF (UCB0IFG和UCRXIFG)

    I2CBuffer = UCB0RXBUF;//将收到的数据存储在缓冲区中
    __BIC_SR_REGISTER_ON_EXIT (LPM0_bits);//退出LPM0
    }
    }

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

    我还有更多的问题。

    对于DAC6311,我要使时钟频率为50MHz。

    我试图找到示例代码,但它们不起作用。

    能否提供SPI 50MHz时钟的示例代码?

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

    配置SPI接口的SCLK是MCU平台/可用时钟的功能。 我建议您将有关时钟配置的查询发布到您正在使用的控制器的相应论坛。 基于CC430F5137的线程历史,支持这些产品的人员可能仍在“倾听”此线程。 否则,如果您愿意,我可以为您发帖。

    从DAC的角度来看,50MHz是可接受的SCLK,假设AVDD为3.6V至5.5V。 对于较低的电源电压,最大SCLK频率为20MHz。

    关于调试您发布的代码-您能否为DAC6311提供SCLK,SYNC和DIN信号的示波器捕获,以便我们查看总线上发生的情况? 任何有助于描述问题的详细信息都将很有帮助...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    我了解您的答案。  

    我尝试修改UCSCTLx和SPI寄存器。然后我在示波器中发现500纳米秒。它是2MHz,对吗?

    无论如何,我以另一种方式解决了DAC6311的通信问题。

    我发现DAC6311在较低时钟下工作。

    泰纳克斯