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.

[参考译文] DAC8568:尝试将AD5668-BRUZ与此DAC交换

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1098640/dac8568-trying-to-exchange-our-ad5668-bruz-with-this-dac

部件号:DAC8568
主题中讨论的其他部件:TMS320F2.8335万

大家好,

我们正尝试将DA-Converter "AD5668BRUZ-3"与"DA8568D"进行交换,因为我们遇到了交付问题。

对于我们发现的交换,我们必须 将输入移位寄存器的DB31设置为0。

此外,我们还将Vref更换为2.5 V,并修复了计时问题。

新的发援会仍然不工作。 我们 是否忘记了任何更改?

真诚

Wilko

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

    您好,

    感谢您考虑TI器件。  

    1.您使用的是内部还是外部参考?

    2.请分享寄存器写入顺序 以查看问题。

    谢谢  

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

    您好,  

    感谢您的快速响应。

    我们正在将外部参考电压5 V用于 "AD5668BRUZ-3",并将其与外部参考电压2.5 V用于 "DA8568D"交换。

    在下面的部分中,我有写在寄存器上的命令。 我们使用DMA和McBSP。

     

    void Init_DAC_structure(void)
    {
      char axis;
    
      for(axis=0; axis < MAX_AXIS ; axis++)
      {
        DAC_Axis[axis].Sinus.bits.channel = 2*axis;      // Channelnumber of DAC for Sinus of the axis
    
        DAC_Axis[axis].Sinus.bits.rsvd2 &= ~(1 << 4);	// Set Bit DB32 of the Input Shift Register to 0 (für DAC8568)
    
        if(axis == 0)
          DAC_Axis[axis].Sinus.bits.command = 2;         // write Input-Register of DAC und update alle Kanaele
        else
          DAC_Axis[axis].Sinus.bits.command = 0;         // write Input-Register of DAC
        DAC_Axis[axis].Cosinus.bits.channel = 2*axis+1;  // Channelnumber of DAC for Cosinus of the axis
        DAC_Axis[axis].Cosinus.bits.rsvd2 &= ~(1 << 4);	//  Set Bit DB32 of the Input Shift Register to 0 (für DAC8568)
        DAC_Axis[axis].Cosinus.bits.command = 0;         // Write Input-Register of DAC
      }
    }

    void Init_dma_4_mcbspa()
    {
      // Channel 1, McBSPA transmit
      EALLOW;
      DmaRegs.DMACTRL.bit.HARDRESET = 1;                                // DMA-Reset
      asm(" NOP");                                                      // 1 Cycle delay needed
      DmaRegs.DMACTRL.bit.PRIORITYRESET = 1;                            // needed for setting DMA-Channel to highest priority
      DmaRegs.PRIORITYCTRL1.bit.CH1PRIORITY = 1;                        // DMA-Kanal 1 (target value output) has the highest priority 
      DmaRegs.CH1.MODE.bit.CHINTE = 0;                                  // Interrupt to CPU through DMA-Kanal 1 disabled
      DmaRegs.CH1.MODE.bit.CHINTMODE = 1;                               // dont care, if  Interrupt to CPU then after transfer of all target values
      DmaRegs.CH1.MODE.bit.DATASIZE = 0;                                // 16-bit-Data-Transfer-Size
      DmaRegs.CH1.MODE.bit.SYNCSEL = 0;                                 // dont care
      DmaRegs.CH1.MODE.bit.SYNCE = 0;         	                        // No Sync-Signal
      DmaRegs.CH1.MODE.bit.CONTINUOUS = 0;                              // DMA is stopped after full data transfer (RUNSTS-Bit = 0)
      DmaRegs.CH1.MODE.bit.ONESHOT = 0;                                 // only 1 burst transfer per Event-Trigger (McBSPA)
    
      DmaRegs.CH1.MODE.bit.PERINTE = 1;                                 // Interrupt der DMA through Pheripherie (McBSPA) enabled
      DmaRegs.CH1.MODE.bit.OVRINTE = 0;                                 // Overflow Interrupt disabled, should not happen
      DmaRegs.CH1.MODE.bit.PERINTSEL = DMA_MXEVTA;                      // Peripheral-Interrupt-Quelle = McBSP MXSYNCA (14)
    
      DmaRegs.CH1.BURST_SIZE.all = 1;                                   // x+1 = 2 Words/Burst
      DmaRegs.CH1.SRC_BURST_STEP = -1;                                  // source address post-increment/decrement step size while processing a burst of data
      DmaRegs.CH1.DST_BURST_STEP = 1;                                   // destination address post-increment/decrement step size while processing a burst of data
    
      DmaRegs.CH1.TRANSFER_SIZE = 7;                                    // x+1 = 8 Bursts/Transfer
      DmaRegs.CH1.SRC_TRANSFER_STEP = -1;                               // Source-Adress after Burst increment by 1
      DmaRegs.CH1.DST_TRANSFER_STEP = -1;                               // Set adress of DXR1 to DXR2 
    
      DmaRegs.CH1.SRC_ADDR_SHADOW = (Uint32) &DAC_Axis[MAX_AXIS-1].Cosinus.all.HighWord;      // Starting Address = buffer
      DmaRegs.CH1.SRC_BEG_ADDR_SHADOW = (Uint32) &DAC_Axis[MAX_AXIS-1].Cosinus.all.HighWord;  // Not needed unless using wrap function
    
      DmaRegs.CH1.DST_ADDR_SHADOW = (Uint32) &McbspaRegs.DXR2.all;		  // Start Addresse = McBSPA DXR
      DmaRegs.CH1.DST_BEG_ADDR_SHADOW = (Uint32) &McbspaRegs.DXR2.all;  // Not needed unless using wrap function
      DmaRegs.CH1.DST_WRAP_SIZE = 0xFFFF;                               // Put to maximum - don't want destination wrap
      DmaRegs.CH1.SRC_WRAP_SIZE = 0xFFFF;                               // Put to maximum - don't want source wrap
      DmaRegs.CH1.DST_WRAP_STEP = 0;                                    // not used
      DmaRegs.CH1.SRC_WRAP_STEP = 0;                                    // not used
    
      DmaRegs.CH1.CONTROL.bit.ERRCLR = 1;                               // Clear Sync-Error-Flag
      DmaRegs.CH1.CONTROL.bit.SYNCCLR =1;                               // Clear Sync-Event-Flag
      DmaRegs.CH1.CONTROL.bit.PERINTCLR = 1;                            // Clear any spurious interrupt flags
      EDIS;
    }
    void InitMcbspa(void)
    {
    // McBSP-A register settings
    
        McbspaRegs.SPCR2.all=0x0000;		// Reset FS generator, sample rate generator & transmitter
    	McbspaRegs.SPCR1.all=0x0000;		// Reset Receiver, Right justify word
    	McbspaRegs.SPCR1.bit.DLB = 1;       // Enable loopback mode for test. Comment out for normal McBSP transfer mode.
    
    
    	McbspaRegs.MFFINT.all=0x0;			// Disable all interrupts
    
        McbspaRegs.RCR2.all=0x0;			// Single-phase frame, 1 word/frame, No companding	(Receive)
        McbspaRegs.RCR1.all=0x0;
    
        McbspaRegs.XCR2.all=0x0;			// Single-phase frame, 1 word/frame, No companding	(Transmit)
        McbspaRegs.XCR1.all=0x0;
    
        McbspaRegs.PCR.bit.FSXM = 1;		// FSX generated internally, FSR derived from an external source
    	McbspaRegs.PCR.bit.CLKXM = 1;		// CLKX generated internally, CLKR derived from an external source
    
        McbspaRegs.SRGR2.bit.CLKSM = 1;		// CLKSM=1 (If SCLKME=0, i/p clock to SRG is LSPCLK)
    	McbspaRegs.SRGR2.bit.FPER = 31;		// FPER = 32 CLKG periods
    
        //McbspaRegs.SRGR1.bit.FWID = 0;              // Frame Width = 1 CLKG period	//the new DAC needs at least 2 better 3 CLKG periods
    	McbspaRegs.SRGR1.bit.FWID = 2;				// Version for DAC8565 Lesezeichen
        McbspaRegs.SRGR1.bit.CLKGDV = CLKGDV_VAL;	// CLKG frequency = LSPCLK/(CLKGDV+1)
    
        delay_loop();                // Wait at least 2 SRG clock cycles
    
        McbspaRegs.SPCR2.bit.GRST=1; // Enable the sample rate generator
    	clkg_delay_loop();           // Wait at least 2 CLKG cycles
    	McbspaRegs.SPCR2.bit.XRST=1; // Release TX from Reset
    	McbspaRegs.SPCR1.bit.RRST=1; // Release RX from Reset
        McbspaRegs.SPCR2.bit.FRST=1; // Frame Sync Generator reset
    
    }
    

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

    您好,Moritz:

    抱歉,我无法理解源代码。 请共享 DAC的伪代码序列。

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

    以下说明介绍了DAC代码序列。

    Init_DAC_structure:
    
    for every DAC output do:
    {
    Define the even numbered DAC output channels as Sinus (in the Input Shift Register)
    
    Set Bit32 (DB32) of the Input Shift Register for the even channels to 0 (needed for DAC8568)
    
    if the for loop is on his first loop:
    {
    	Write the Input Register of the DAC and update all channels
    }
    else
    {
    	Write the Input Register of the DAC of the even numbers
    }
    Define the odd numbered DAC output channels as Cosinus (in the Input Shift Register)
    Set Bit32 (DB32) of the Input Shift Register for the odd channels to 0 (needed for DAC8568)
    Write the Input Register of the DAC for the odd channels to 0 (needed for DAC8568)
    } 
    

    希望这能让这部分更容易理解。 我也确实发送了其他部件,因为我们使用 McbSPA将数字数据从“TMS320F2.8335万”控制器发送到DAC。  

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

    您好,Mortiz:

    要缩小问题范围,第1个将在单个通道上尝试,而不是更新所有8个通道

    1.尝试通道0的顺序并检查其行为方式?

    2.分享您的示意图。

    3. SPI单个(SYNC,SCLK和DIN)的共享范围捕捉