forked from PAWPAW-Mirror/lib_xua
Initial addition of adat sample transfer into audio core
This commit is contained in:
@@ -160,6 +160,53 @@ static inline void doI2SClocks(unsigned divide)
|
||||
}
|
||||
#endif
|
||||
|
||||
#define ADAT_NUM_CHANNELS 8
|
||||
|
||||
#pragma unsafe arrays
|
||||
static inline void TransferAdatTxSamples(chanend c_adat_data, const unsigned samplesFromHost[], int smux)
|
||||
{
|
||||
/* SMUX 1 : Send 8 channels at sample rate (i.e. 44.1/48kHz)
|
||||
* SMUX 2 : Send 4 channels at sample rate (i.e. 88.2/96kHz)
|
||||
* SMUX 4 : Send 2 channels at sample rate (i.e. 176.4/192kHz)
|
||||
*
|
||||
* so..
|
||||
*
|
||||
* for (int i = 0; i < ADAT_NUM_CHANNEL/smux; i++)
|
||||
* {
|
||||
* outuint(c_adat_data, samplesFromHost[ADAT_TX_INDEX + i]);
|
||||
* }
|
||||
*
|
||||
* Lets un-roll for performance..
|
||||
*/
|
||||
switch (smux)
|
||||
{
|
||||
case 1:
|
||||
#pragma loop unroll
|
||||
for (int i = 0; i < ADAT_NUM_CHANNELS; i++)
|
||||
{
|
||||
outuint(c_adat_data, samplesFromHost[ADAT_TX_INDEX + i]);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
#pragma loop unroll
|
||||
for (int i = 0; i < (ADAT_NUM_CHANNELS/2); i++)
|
||||
{
|
||||
outuint(c_adat_data, samplesFromHost[ADAT_TX_INDEX + i]);
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
#pragma loop unroll
|
||||
for (int i = 0; i < (ADAT_NUM_CHANNELS/4); i++)
|
||||
{
|
||||
outuint(c_adat_data, samplesFromHost[ADAT_TX_INDEX + i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#pragma unsafe arrays
|
||||
static inline unsigned DoSampleTransfer(chanend c_out, int readBuffNo, unsigned underflowWord)
|
||||
{
|
||||
@@ -388,6 +435,7 @@ static inline void InitPorts(unsigned divide)
|
||||
unsigned static deliver(chanend c_out, chanend ?c_spd_out,
|
||||
#ifdef ADAT_TX
|
||||
chanend c_adat_out,
|
||||
unsigned adatSmuxMode,
|
||||
#endif
|
||||
unsigned divide, unsigned curSamFreq,
|
||||
#if(defined(SPDIF_RX) || defined(ADAT_RX))
|
||||
@@ -409,11 +457,6 @@ unsigned static deliver(chanend c_out, chanend ?c_spd_out,
|
||||
unsigned tmp;
|
||||
unsigned index;
|
||||
|
||||
#ifdef ADAT_TX
|
||||
unsigned adatSmuxMode = 0;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef RAMP_CHECK
|
||||
unsigned prev=0;
|
||||
int started = 0;
|
||||
@@ -653,6 +696,10 @@ unsigned static deliver(chanend c_out, chanend ?c_spd_out,
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined ADAT_TX
|
||||
TransferAdatTxSamples(c_adat_out, samplesOut, adatSmuxMode);
|
||||
#endif
|
||||
|
||||
#ifndef CODEC_MASTER
|
||||
#ifdef I2S_MODE_TDM
|
||||
if(frameCount == (I2S_CHANS_PER_FRAME-2))
|
||||
@@ -1088,6 +1135,7 @@ chanend ?c_config, chanend ?c)
|
||||
#endif
|
||||
#ifdef ADAT_TX
|
||||
c_adat_out,
|
||||
adatSmuxMode,
|
||||
#endif
|
||||
divide, curSamFreq,
|
||||
#if defined (ADAT_RX) || defined (SPDIF_RX)
|
||||
@@ -1127,10 +1175,13 @@ chanend ?c_config, chanend ?c)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef SPDIF
|
||||
/* Notify S/PDIF thread of impending new freq... */
|
||||
outct(c_spdif_out, XS1_CT_END);
|
||||
#endif
|
||||
#ifdef ADAT_TX
|
||||
/* Notify ADAT Tx thread of impending new freq... */
|
||||
outct(c_adat_out, XS1_CT_END);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user