主题中讨论的其他部件:TMS320F2.8335万
大家好,
我们正尝试将DA-Converter "AD5668BRUZ-3"与"DA8568D"进行交换,因为我们遇到了交付问题。
对于我们发现的交换,我们必须 将输入移位寄存器的DB31设置为0。
此外,我们还将Vref更换为2.5 V,并修复了计时问题。
新的发援会仍然不工作。 我们 是否忘记了任何更改?
真诚
Wilko
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.
大家好,
我们正尝试将DA-Converter "AD5668BRUZ-3"与"DA8568D"进行交换,因为我们遇到了交付问题。
对于我们发现的交换,我们必须 将输入移位寄存器的DB31设置为0。
此外,我们还将Vref更换为2.5 V,并修复了计时问题。
新的发援会仍然不工作。 我们 是否忘记了任何更改?
真诚
Wilko
您好,
感谢您的快速响应。
我们正在将外部参考电压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
}
以下说明介绍了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。