forked from PAWPAW-Mirror/lib_xua
I2S_MODE_TDM now XUA_PCM_FORMAT
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user