forked from PAWPAW-Mirror/lib_xua
@@ -58,27 +58,16 @@ static unsigned samplesIn[2][MAX(NUM_USB_CHAN_IN, IN_CHAN_COUNT)];
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int inDownsamplingCounter = 0;
|
static int inDownsamplingCounter = 0;
|
||||||
static int outDownsamplingCounter = 0;
|
#if (I2S_DOWNSAMPLE_FACTOR_IN > 1)
|
||||||
#if (I2S_DOWNSAMPLE_FACTOR_IN > 1) || (I2S_DOWNSAMPLE_FACTOR_OUT > 1)
|
|
||||||
#include "src.h"
|
#include "src.h"
|
||||||
static union ds3Data
|
static union ds3Data
|
||||||
{
|
{
|
||||||
long long doubleWordAlignmentEnsured;
|
long long doubleWordAlignmentEnsured;
|
||||||
/* delay lines = [Number of I2S channels][Number of samples/phases][Taps per phase] */
|
/* [Number of I2S channels][Number of samples/phases][Taps per phase] */
|
||||||
#if (I2S_DOWNSAMPLE_FACTOR_IN > 1)
|
|
||||||
int32_t inputDelayLine[I2S_DOWNSAMPLE_CHANS_IN][I2S_DOWNSAMPLE_FACTOR_IN][24];
|
int32_t inputDelayLine[I2S_DOWNSAMPLE_CHANS_IN][I2S_DOWNSAMPLE_FACTOR_IN][24];
|
||||||
#endif // (I2S_DOWNSAMPLE_FACTOR_IN > 1)
|
|
||||||
#if (I2S_DOWNSAMPLE_FACTOR_OUT > 1)
|
|
||||||
int32_t outputDelayLine[I2S_DOWNSAMPLE_CHANS_OUT][I2S_DOWNSAMPLE_FACTOR_OUT][24];
|
|
||||||
#endif // (I2S_DOWNSAMPLE_FACTOR_OUT > 1)
|
|
||||||
} ds3Data;
|
} ds3Data;
|
||||||
#if (I2S_DOWNSAMPLE_FACTOR_IN > 1)
|
|
||||||
static int64_t inputDs3Sum[I2S_DOWNSAMPLE_CHANS_IN];
|
static int64_t inputDs3Sum[I2S_DOWNSAMPLE_CHANS_IN];
|
||||||
#endif // (I2S_DOWNSAMPLE_FACTOR_IN > 1)
|
#endif // (I2S_DOWNSAMPLE_FACTOR_IN > 1)
|
||||||
#if (I2S_DOWNSAMPLE_FACTOR_OUT > 1)
|
|
||||||
static int64_t outputDs3Sum[I2S_DOWNSAMPLE_CHANS_OUT];
|
|
||||||
#endif // (I2S_DOWNSAMPLE_FACTOR_OUT > 1)
|
|
||||||
#endif // (I2S_DOWNSAMPLE_FACTOR_IN > 1) || (I2S_DOWNSAMPLE_FACTOR_OUT > 1)
|
|
||||||
|
|
||||||
#if (DSD_CHANS_DAC != 0)
|
#if (DSD_CHANS_DAC != 0)
|
||||||
extern buffered out port:32 p_dsd_dac[DSD_CHANS_DAC];
|
extern buffered out port:32 p_dsd_dac[DSD_CHANS_DAC];
|
||||||
@@ -734,8 +723,6 @@ unsigned static deliver(chanend c_out, chanend ?c_spd_out,
|
|||||||
#pragma xta endpoint "i2s_output_l"
|
#pragma xta endpoint "i2s_output_l"
|
||||||
|
|
||||||
#if (I2S_CHANS_DAC != 0) && (NUM_USB_CHAN_OUT != 0)
|
#if (I2S_CHANS_DAC != 0) && (NUM_USB_CHAN_OUT != 0)
|
||||||
if ((I2S_DOWNSAMPLE_FACTOR_OUT - 1) == outDownsamplingCounter)
|
|
||||||
{
|
|
||||||
index = 0;
|
index = 0;
|
||||||
#pragma loop unroll
|
#pragma loop unroll
|
||||||
/* Output "even" channel to DAC (i.e. left) */
|
/* Output "even" channel to DAC (i.e. left) */
|
||||||
@@ -749,7 +736,7 @@ unsigned static deliver(chanend c_out, chanend ?c_spd_out,
|
|||||||
/* Clock out the LR Clock, the DAC data and Clock in the next sample into ADC */
|
/* Clock out the LR Clock, the DAC data and Clock in the next sample into ADC */
|
||||||
doI2SClocks(divide);
|
doI2SClocks(divide);
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
#ifdef ADAT_TX
|
#ifdef ADAT_TX
|
||||||
TransferAdatTxSamples(c_adat_out, samplesOut, adatSmuxMode, 1);
|
TransferAdatTxSamples(c_adat_out, samplesOut, adatSmuxMode, 1);
|
||||||
#endif
|
#endif
|
||||||
@@ -870,8 +857,6 @@ unsigned static deliver(chanend c_out, chanend ?c_spd_out,
|
|||||||
index = 0;
|
index = 0;
|
||||||
#pragma xta endpoint "i2s_output_r"
|
#pragma xta endpoint "i2s_output_r"
|
||||||
#if (I2S_CHANS_DAC != 0) && (NUM_USB_CHAN_OUT != 0)
|
#if (I2S_CHANS_DAC != 0) && (NUM_USB_CHAN_OUT != 0)
|
||||||
if ((I2S_DOWNSAMPLE_FACTOR_OUT - 1) == outDownsamplingCounter)
|
|
||||||
{
|
|
||||||
/* Output "odd" channel to DAC (i.e. right) */
|
/* Output "odd" channel to DAC (i.e. right) */
|
||||||
#pragma loop unroll
|
#pragma loop unroll
|
||||||
for(int i = 1; i < I2S_CHANS_DAC; i+=I2S_CHANS_PER_FRAME)
|
for(int i = 1; i < I2S_CHANS_DAC; i+=I2S_CHANS_PER_FRAME)
|
||||||
@@ -883,11 +868,8 @@ unsigned static deliver(chanend c_out, chanend ?c_spd_out,
|
|||||||
#ifndef CODEC_MASTER
|
#ifndef CODEC_MASTER
|
||||||
doI2SClocks(divide);
|
doI2SClocks(divide);
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
++outDownsamplingCounter;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // !dsdMode
|
} // !dsdMode
|
||||||
#if (DSD_CHANS_DAC != 0) && (NUM_USB_CHAN_OUT > 0)
|
#if (DSD_CHANS_DAC != 0) && (NUM_USB_CHAN_OUT > 0)
|
||||||
|
|||||||
@@ -134,19 +134,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Output I2S (host to device) channels can be downsampled by a factor of 3.
|
|
||||||
*
|
|
||||||
* Default: 1 i.e. downsampling is disabled.
|
|
||||||
*/
|
|
||||||
#ifndef I2S_DOWNSAMPLE_FACTOR_OUT
|
|
||||||
#define I2S_DOWNSAMPLE_FACTOR_OUT (1)
|
|
||||||
#else
|
|
||||||
#if (I2S_DOWNSAMPLE_FACTOR_OUT != 3) && (I2S_DOWNSAMPLE_FACTOR_OUT != 1)
|
|
||||||
#error Unsupported I2S output downsampling configuration
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Only downsample one channel per input I2S frame.
|
* @brief Only downsample one channel per input I2S frame.
|
||||||
*
|
*
|
||||||
@@ -170,13 +157,6 @@
|
|||||||
#define I2S_DOWNSAMPLE_CHANS_IN I2S_CHANS_ADC
|
#define I2S_DOWNSAMPLE_CHANS_IN I2S_CHANS_ADC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Number of output (host to device) I2S channels to downsample.
|
|
||||||
*
|
|
||||||
* Default: The number of I2S output channels.
|
|
||||||
*/
|
|
||||||
#define I2S_DOWNSAMPLE_CHANS_OUT I2S_CHANS_ADC
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Max supported sample frequency for device (Hz). Default: 192000
|
* @brief Max supported sample frequency for device (Hz). Default: 192000
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user