I2S_MODE_TDM now XUA_PCM_FORMAT

This commit is contained in:
xross
2022-06-29 13:07:38 +01:00
parent bb0dec4923
commit 5441081927
3 changed files with 18 additions and 13 deletions

View File

@@ -98,20 +98,25 @@
#define DSD_CHANS_DAC 0 #define DSD_CHANS_DAC 0
#endif #endif
#define XUA_PCM_FORMAT_I2S (0)
#define XUA_PCM_FORMAT_TDM (1)
/* TODO not required */ #ifdef XUA_PCM_FORMAT
#ifndef I2S_MODE_TDM #if (XUA_PCM_FORMAT != XUA_PCM_FORMAT_I2S) && (XUA_PCM_FORMAT != XUA_PCM_FORMAT_TDM)
#define I2S_MODE_TDM 0 #error Bad value for XUA_PCM_FORMAT
#endif
#else
#define XUA_PCM_FORMAT XUA_PCM_FORMAT_I2S
#endif #endif
/** /**
* @brief Channels per I2S frame. * * @brief Channels per I2S frame. *
* *
* Default: 2 i.e standard stereo I2S (8 if using TDM i.e. I2S_MODE_TDM). * Default: 2 i.e standard stereo I2S (8 if using TDM i.e. XUA_PCM_FORMAT_TDM).
* *
**/ **/
#ifndef I2S_CHANS_PER_FRAME #ifndef I2S_CHANS_PER_FRAME
#if (I2S_MODE_TDM == 1) #if (XUA_PCM_FORMAT == XUA_PCM_FORMAT_TDM)
#define I2S_CHANS_PER_FRAME 8 #define I2S_CHANS_PER_FRAME 8
#else #else
#define I2S_CHANS_PER_FRAME 2 #define I2S_CHANS_PER_FRAME 2
@@ -188,7 +193,7 @@
*/ */
#if (I2S_DOWNSAMPLE_MONO_IN == 1) #if (I2S_DOWNSAMPLE_MONO_IN == 1)
#define I2S_DOWNSAMPLE_CHANS_IN (I2S_CHANS_ADC / 2) #define I2S_DOWNSAMPLE_CHANS_IN (I2S_CHANS_ADC / 2)
#if ((I2S_DOWNSAMPLE_FACTOR_IN > 1) && (I2S_MODE_TDM == 1)) #if ((I2S_DOWNSAMPLE_FACTOR_IN > 1) && (XUA_PCM_FORMAT == XUA_PCM_FORMAT_TDM))
#error Mono I2S input downsampling is not avaliable in TDM mode #error Mono I2S input downsampling is not avaliable in TDM mode
#endif #endif
#else #else

View File

@@ -85,7 +85,7 @@ void InitPorts_slave(unsigned divide, buffered _XUA_CLK_DIR port:32 p_lrclk, buf
p_lrclk when pinseq(1) :> void; p_lrclk when pinseq(1) :> void;
p_lrclk when pinseq(0) :> void; p_lrclk when pinseq(0) :> void;
p_lrclk when pinseq(1) :> void; p_lrclk when pinseq(1) :> void;
#if I2S_MODE_TDM #if (XUA_PCM_FORMAT == XUA_PCM_FORMAT_TDM)
p_lrclk when pinseq(0) :> void; p_lrclk when pinseq(0) :> void;
p_lrclk when pinseq(1) :> void @ tmp; p_lrclk when pinseq(1) :> void @ tmp;
#else #else

View File

@@ -161,7 +161,7 @@ static inline int HandleSampleClock(int frameCount, buffered _XUA_CLK_DIR port:3
unsigned lrval = 0; unsigned lrval = 0;
p_lrclk :> lrval; p_lrclk :> lrval;
if(I2S_MODE_TDM) if(XUA_PCM_FORMAT == XUA_PCM_FORMAT_TDM)
{ {
/* Only check for the rising edge of frame sync being in the right place because falling edge timing not specified */ /* Only check for the rising edge of frame sync being in the right place because falling edge timing not specified */
if (frameCount == 1) if (frameCount == 1)
@@ -186,7 +186,7 @@ static inline int HandleSampleClock(int frameCount, buffered _XUA_CLK_DIR port:3
return syncError; return syncError;
#else #else
if(I2S_MODE_TDM) if(XUA_PCM_FORMAT == XUA_PCM_FORMAT_TDM)
{ {
if(frameCount == (I2S_CHANS_PER_FRAME-1)) if(frameCount == (I2S_CHANS_PER_FRAME-1))
p_lrclk <: 0x80000000; p_lrclk <: 0x80000000;
@@ -553,7 +553,7 @@ unsigned static AudioHub_MainLoop(chanend ?c_out, chanend ?c_spd_out
} }
#endif #endif
#if I2S_MODE_TDM #if (XUA_PCM_FORMAT == XUA_PCM_FORMAT_TDM)
/* Increase frameCount by 2 since we have output two channels (per data line) */ /* Increase frameCount by 2 since we have output two channels (per data line) */
frameCount+=1; frameCount+=1;
if(frameCount == I2S_CHANS_PER_FRAME) if(frameCount == I2S_CHANS_PER_FRAME)
@@ -724,7 +724,7 @@ void XUA_AudioHub(chanend ?c_aud, clock ?clk_audio_mclk, clock ?clk_audio_bclk,
while(1) while(1)
{ {
/* Calculate what master clock we should be using */ /* Calculate what master clock we should be using */
if ((MCLK_441 % curSamFreq) == 0) if (((MCLK_441) % curSamFreq) == 0)
{ {
mClk = MCLK_441; mClk = MCLK_441;
#ifdef ADAT_TX #ifdef ADAT_TX
@@ -733,7 +733,7 @@ void XUA_AudioHub(chanend ?c_aud, clock ?clk_audio_mclk, clock ?clk_audio_bclk,
adatMultiple = mClk / 44100; adatMultiple = mClk / 44100;
#endif #endif
} }
else if ((MCLK_48 % curSamFreq) == 0) else if (((MCLK_48) % curSamFreq) == 0)
{ {
mClk = MCLK_48; mClk = MCLK_48;
#ifdef ADAT_TX #ifdef ADAT_TX
@@ -746,7 +746,7 @@ void XUA_AudioHub(chanend ?c_aud, clock ?clk_audio_mclk, clock ?clk_audio_bclk,
/* Calculate master clock to bit clock (or DSD clock) divide for current sample freq /* Calculate master clock to bit clock (or DSD clock) divide for current sample freq
* e.g. 11.289600 / (176400 * 64) = 1 */ * e.g. 11.289600 / (176400 * 64) = 1 */
{ {
#if I2S_MODE_TDM #if (XUA_PCM_FORMAT == XUA_PCM_FORMAT_TDM)
/* I2S has 32 bits per sample. *8 as 8 channels */ /* I2S has 32 bits per sample. *8 as 8 channels */
unsigned numBits = 256; unsigned numBits = 256;
#else #else