Skip to content
Snippets Groups Projects
Commit fd5bb8de authored by Erik von Reis's avatar Erik von Reis
Browse files

RCG: correct dac duotone amplitude

DAC duotone is a straight copy of the ADC duotone signal
into a DAC channel.  This code takes into account the different
bit resolution of the various parts so that DAC duotone
amplitude is the same for the various combinations of
ADC and DAC.
parent 7f650ca3
No related branches found
No related tags found
4 merge requests!439RCG 5.0 release fro deb 10,!395Next dev build,!393RCG: correct dac duotone amplitude,!368RCG: correct dac duotone amplitude
......@@ -209,6 +209,7 @@ typedef struct CDS_HARDWARE{
int dacCount; /* Number of DAC modules found */
long pci_dac[MAX_DAC_MODULES]; /* Remapped addresses of DAC modules */
int dacType[MAX_DAC_MODULES];
int dacDuoToneMultiplier[MAX_DAC_MODULES]; /* scale amplitude of duotone up for higher bit DACs */
int dacInstance[MAX_DAC_MODULES];
int dacSlot[MAX_DAC_MODULES];
int dacConfig[MAX_DAC_MODULES];
......@@ -217,6 +218,7 @@ typedef struct CDS_HARDWARE{
int adcCount; /* Number of ADC modules found */
long pci_adc[MAX_ADC_MODULES]; /* Remapped addresses of ADC modules */
int adcType[MAX_ADC_MODULES];
int adcDuoToneDivisor[MAX_ADC_MODULES]; /* scale amplitude of duotone down for higher bit ADCs */
int adcInstance[MAX_ADC_MODULES];
int adcSlot[MAX_ADC_MODULES];
int adcChannels[MAX_ADC_MODULES];
......
......@@ -121,6 +121,7 @@ gsc16ai64Init( CDS_HARDWARE* pHardware, struct pci_dev* adcdev )
pHardware->pci_adc[ devNum ] =
(long)pci_alloc_consistent( adcdev, 0x2000, &adc_dma_handle[ devNum ] );
pHardware->adcType[ devNum ] = GSC_16AI64SSA;
pHardware->adcDuoToneDivisor[ devNum ] = 1;
pHardware->adcInstance[ devNum ] = pHardware->card_count[ GSC_16AI64SSA ];
pHardware->card_count[ GSC_16AI64SSA ] ++;
pHardware->adcChannels[ devNum ] = GSAI_CHAN_COUNT;
......
......@@ -80,6 +80,7 @@ gsc16ao16Init( CDS_HARDWARE* pHardware, struct pci_dev* dacdev )
(long)pci_alloc_consistent( dacdev, 0x200, &dac_dma_handle[ devNum ] );
pHardware->dacAcr[ devNum ] = (int)( _dacPtr[ devNum ]->ASSC );
pHardware->dacType[ devNum ] = GSC_16AO16;
pHardware->dacDuoToneMultiplier[ devNum ] = 1;
pHardware->dacCount++;
pHardware->dacInstance[ devNum ] = pHardware->card_count[ GSC_16AO16 ];
pHardware->card_count[ GSC_16AO16 ] ++;
......
......@@ -135,6 +135,7 @@ gsc18ai32Init( CDS_HARDWARE* pHardware, struct pci_dev* adcdev )
pHardware->pci_adc[ devNum ] =
(long)pci_alloc_consistent( adcdev, 0x2000, &adc_dma_handle[ devNum ] );
pHardware->adcType[ devNum ] = GSC_18AI32SSC1M;
pHardware->adcDuoToneDivisor[ devNum ] = 4;
pHardware->adcInstance[ devNum ] = pHardware->card_count[ GSC_18AI32SSC1M ];
pHardware->card_count[ GSC_18AI32SSC1M ] ++;
pHardware->adcConfig[ devNum ] |= autocal;
......
......@@ -126,6 +126,7 @@ gsc18ai64Init( CDS_HARDWARE* pHardware, struct pci_dev* adcdev )
pHardware->pci_adc[ devNum ] =
(long)pci_alloc_consistent( adcdev, 0x2000, &adc_dma_handle[ devNum ] );
pHardware->adcType[ devNum ] = GSC_18AI64SSC;
pHardware->adcDuoToneDivisor[ devNum ] = 4;
pHardware->adcInstance[ devNum ] = pHardware->card_count[ GSC_18AI64SSC ];
pHardware->card_count[ GSC_18AI64SSC ] ++;
pHardware->adcConfig[ devNum ] = adc18Ptr->ASSC;
......
......@@ -115,6 +115,7 @@ gsc18ao8Init( CDS_HARDWARE* pHardware, struct pci_dev* dacdev )
(long)pci_alloc_consistent( dacdev, 0x200, &dac_dma_handle[ devNum ] );
pHardware->dacAcr[ devNum ] |= ((int)( dac18bitPtr->ASY_CONFIG ) & DAC_ACR_MASK);
pHardware->dacType[ devNum ] = GSC_18AO8;
pHardware->dacDuoToneMultiplier[ devNum ] = 4;
pHardware->dacCount++;
pHardware->dacInstance[ devNum ] = pHardware->card_count[ GSC_18AO8 ];
pHardware->card_count[ GSC_18AO8 ] ++;
......
......@@ -135,6 +135,7 @@ gsc20ao8Init( CDS_HARDWARE* pHardware, struct pci_dev* dacdev )
// Return the device type to main code.
pHardware->dacType[ devNum ] = GSC_20AO8;
pHardware->dacDuoToneMultiplier[ devNum ] = 8;
pHardware->dacCount++;
pHardware->dacInstance[ devNum ] = pHardware->card_count[ GSC_20AO8 ];
pHardware->card_count[ GSC_20AO8 ] ++;
......
......@@ -156,7 +156,8 @@ iop_dac_write( )
if ( ( dt_diag.dacDuoEnable ) && ( chan == ( num_outs - 1 ) ) &&
( card == 0 ) )
{
dac_out = adcinfo.adcData[ 0 ][ ADC_DUOTONE_CHAN ];
dac_out = adcinfo.adcData[ 0 ][ ADC_DUOTONE_CHAN ]
* cdsPciModules.dacDuoToneMultiplier[0] / cdsPciModules.adcDuoToneDivisor[0];
}
// Code below is only for use in DAQ test system.
#ifdef DIAG_TEST
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment