Initial addition of adat sample transfer into audio core

This commit is contained in:
Ross Owen
2015-01-30 16:05:58 +00:00
parent 9877618786
commit a9de259963

View File

@@ -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
} }
} }