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
|
#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
|
#pragma unsafe arrays
|
||||||
static inline unsigned DoSampleTransfer(chanend c_out, int readBuffNo, unsigned underflowWord)
|
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,
|
unsigned static deliver(chanend c_out, chanend ?c_spd_out,
|
||||||
#ifdef ADAT_TX
|
#ifdef ADAT_TX
|
||||||
chanend c_adat_out,
|
chanend c_adat_out,
|
||||||
|
unsigned adatSmuxMode,
|
||||||
#endif
|
#endif
|
||||||
unsigned divide, unsigned curSamFreq,
|
unsigned divide, unsigned curSamFreq,
|
||||||
#if(defined(SPDIF_RX) || defined(ADAT_RX))
|
#if(defined(SPDIF_RX) || defined(ADAT_RX))
|
||||||
@@ -409,11 +457,6 @@ unsigned static deliver(chanend c_out, chanend ?c_spd_out,
|
|||||||
unsigned tmp;
|
unsigned tmp;
|
||||||
unsigned index;
|
unsigned index;
|
||||||
|
|
||||||
#ifdef ADAT_TX
|
|
||||||
unsigned adatSmuxMode = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef RAMP_CHECK
|
#ifdef RAMP_CHECK
|
||||||
unsigned prev=0;
|
unsigned prev=0;
|
||||||
int started = 0;
|
int started = 0;
|
||||||
@@ -653,6 +696,10 @@ unsigned static deliver(chanend c_out, chanend ?c_spd_out,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined ADAT_TX
|
||||||
|
TransferAdatTxSamples(c_adat_out, samplesOut, adatSmuxMode);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef CODEC_MASTER
|
#ifndef CODEC_MASTER
|
||||||
#ifdef I2S_MODE_TDM
|
#ifdef I2S_MODE_TDM
|
||||||
if(frameCount == (I2S_CHANS_PER_FRAME-2))
|
if(frameCount == (I2S_CHANS_PER_FRAME-2))
|
||||||
@@ -1088,6 +1135,7 @@ chanend ?c_config, chanend ?c)
|
|||||||
#endif
|
#endif
|
||||||
#ifdef ADAT_TX
|
#ifdef ADAT_TX
|
||||||
c_adat_out,
|
c_adat_out,
|
||||||
|
adatSmuxMode,
|
||||||
#endif
|
#endif
|
||||||
divide, curSamFreq,
|
divide, curSamFreq,
|
||||||
#if defined (ADAT_RX) || defined (SPDIF_RX)
|
#if defined (ADAT_RX) || defined (SPDIF_RX)
|
||||||
@@ -1127,10 +1175,13 @@ chanend ?c_config, chanend ?c)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SPDIF
|
#ifdef SPDIF
|
||||||
/* Notify S/PDIF thread of impending new freq... */
|
/* Notify S/PDIF thread of impending new freq... */
|
||||||
outct(c_spdif_out, XS1_CT_END);
|
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
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user