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.

[参考译文] DAC81416EVM:用于在 DAC61416上设置 SPI 通信的 C 或 C++代码。

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1137386/dac81416evm-c-or-c-code-to-set-up-the-spi-communication-on-dac61416

器件型号:DAC81416EVM
主题中讨论的其他器件:DAC61416ENERGIA

各位专家:

你好。

您是否有 C 或 C++代码来设置与 teensy 4.1和 DAC61416的 SPI 通信? DAC 应在每个通道中为我提供5V、6V、7V 和10V 的电压。

请保持安全。


此致、

乔塞尔

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

    你好、Joselito、

    您能用代码示例参考下面 e2e 中的类似请求。 我希望它能为您提供帮助。

    https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/986608/dac81416evm-dac81416

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

    您好、安布、

    我之前看到过这个帖子。 但是、您是否检查了代码是否可以使用?
    问题似乎没有解决。

    您能帮助提供一个易于使用的干净代码吗?

    请保持安全。


    此致、

    乔塞尔

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

    Josh、您好。

    我将与我的团队核实、然后返回给您。

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

    您好!

    我们没有适用于此器件的通用 C 或 C++代码。 下面是 Tiva Energia sketch 的代码示例、可以轻松修改。

    #define NUM_BYTES 3 //Number of bytes in SPI frame
    
    //SPIClass tivacSPI0(0); // SSI0
    //SPIClass tivacSPI1(1); // SSI1
    //SPIClass tivacSPI2(2); // SSI2
    //SPIClass tivacSPI3(3); // SSI3 on port F
    SPIClass tivacSPI3_Q(4); // SSI3 on port Q
    
    void setup() {
    uint8_t initTx0[NUM_BYTES], initTx1[NUM_BYTES], initTx2[NUM_BYTES], i;
    int8_t ret;
    uint8_t *initPtr;
    
    Serial.begin(9600);
    Serial.print("Starting DAC81416 Example");
    
    //tivacSPI0.begin();
    //tivacSPI1.begin();
    //tivacSPI2.begin();
    //tivacSPI3.begin();
    tivacSPI3_Q.begin();
    
    pinMode(PD_2, OUTPUT); // Configure PD2 as CLR
    digitalWrite(PD_2, HIGH); // set CLR HIGH by default
    
    //Range: +/- 20V
    initTx0[0] = 0x0A;
    initTx0[1] = 0xCC;
    initTx0[2] = 0xCC;
    initPtr = &initTx0[0];
    ret = tivacSPI3_Q.DACtransfer((uint8_t*)initPtr, (uint8_t)NUM_BYTES);
    
    //Range: +/- 20V
    initTx0[0] = 0x0B;
    initTx0[1] = 0xCC;
    initTx0[2] = 0xCC;
    initPtr = &initTx0[0];
    ret = tivacSPI3_Q.DACtransfer((uint8_t*)initPtr, (uint8_t)NUM_BYTES);
    
    //Range: +/- 20V
    initTx0[0] = 0x0C;
    initTx0[1] = 0xCC;
    initTx0[2] = 0xCC;
    initPtr = &initTx0[0];
    ret = tivacSPI3_Q.DACtransfer((uint8_t*)initPtr, (uint8_t)NUM_BYTES);
    
    //Range: +/- 20V
    initTx0[0] = 0x0D;
    initTx0[1] = 0xCC;
    initTx0[2] = 0xCC;
    initPtr = &initTx0[0];
    ret = tivacSPI3_Q.DACtransfer((uint8_t*)initPtr, (uint8_t)NUM_BYTES);
    
    //Power-up device
    initTx0[0] = 0x03;
    initTx0[1] = 0x0A;
    initTx0[2] = 0x84;
    initPtr = &initTx0[0];
    ret = tivacSPI3_Q.DACtransfer((uint8_t*)initPtr, (uint8_t)NUM_BYTES);
    
    //Power-up all channels
    initTx0[0] = 0x09;
    initTx0[1] = 0x00;
    initTx0[2] = 0x00;
    initPtr = &initTx0[0];
    ret = tivacSPI3_Q.DACtransfer((uint8_t*)initPtr, (uint8_t)NUM_BYTES);
    
    //Enable Broadcast for all Channels
    initTx0[0] = 0x05;
    initTx0[1] = 0xFF;
    initTx0[2] = 0xFF;
    initPtr = &initTx0[0];
    ret = tivacSPI3_Q.DACtransfer((uint8_t*)initPtr, (uint8_t)NUM_BYTES);
    
    //Write Code to all Channels
    initTx0[0] = 0x0F;
    initTx0[1] = 0xFF;
    initTx0[2] = 0xFF;
    initPtr = &initTx0[0];
    ret = tivacSPI3_Q.DACtransfer((uint8_t*)initPtr, (uint8_t)NUM_BYTES);
    }
    
    void loop() {
    int8_t rv, ldacFlag = 0;
    int32_t sampleCount;
    uint8_t *txPtr;
    uint8_t spiTx0[NUM_BYTES];
    
    //Write Mid-code
    spiTx0[0] = 0x10;
    spiTx0[1] = 0x7F;
    spiTx0[2] = 0xFF;
    txPtr = &spiTx0[0];
    rv = tivacSPI3_Q.DACtransfer((uint8_t*)txPtr, (uint8_t)(NUM_BYTES));
    
    delay(100);
    
    //Write Full-code
    spiTx0[0] = 0x10;
    spiTx0[1] = 0xFF;
    spiTx0[2] = 0xFF;
    txPtr = &spiTx0[0];
    rv = tivacSPI3_Q.DACtransfer((uint8_t*)txPtr, (uint8_t)(NUM_BYTES));
    
    delay(100);
    }
    
    //Addition to SPI.cpp
    
    int8_t SPIClass::DACtransfer(uint8_t* datapointer, uint8_t numBytes) {
    unsigned long rxtxData[MAX_BYTES];
    
    if(numBytes > MAX_BYTES){
    return -1;
    }
    if(datapointer == NULL){
    return -1;
    }
    
    for(int byteCount=0; byteCount < numBytes; byteCount++){
    rxtxData[byteCount] = datapointer[byteCount];
    }
    if(SSIBitOrder == LSBFIRST) {
    return -1;
    }
    for(int byteCount=0; byteCount < numBytes; byteCount++){
    ROM_SSIDataPut(SSIBASE, (uint8_t) rxtxData[byteCount]);
    }
    
    while(ROM_SSIBusy(SSIBASE));
    
    return (int8_t) 0;
    }

    这里是使用广播模式更新具有相同数据的所有通道的代码示例。 您可以使用 DAC_DATA 进行修改。

    在这种情况下、您需要对任何处理器上的 SPI 进行通用设置。 它如下所示:

    模式:模式1 (CPOL=0、CPHA=1)
    顺序:MSB 优先
    CS 极性:低电平有效
    字节数:3.

    如果需要、您可以将 GPIO 用于 LDAC 和 CLR。

    此致、

    AK