forked from PAWPAW-Mirror/lib_xua
- Set I2S clocks to 8mA drive on XS3
- Set sample-delay on ADC data lines in TDM mode - Stare some port config code between I2S slave and master modes
This commit is contained in:
@@ -122,7 +122,6 @@ static inline unsigned DoSampleTransfer(chanend ?c_out, const int readBuffNo, co
|
|||||||
if(dsdMode == DSD_MODE_DOP)
|
if(dsdMode == DSD_MODE_DOP)
|
||||||
dsdMode = DSD_MODE_OFF;
|
dsdMode = DSD_MODE_OFF;
|
||||||
#endif
|
#endif
|
||||||
#pragma xta endpoint "received_command"
|
|
||||||
return command;
|
return command;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -35,11 +35,16 @@ void ConfigAudioPorts(
|
|||||||
#if (I2S_CHANS_DAC != 0) || (I2S_CHANS_ADC != 0)
|
#if (I2S_CHANS_DAC != 0) || (I2S_CHANS_ADC != 0)
|
||||||
|
|
||||||
#if (CODEC_MASTER == 0)
|
#if (CODEC_MASTER == 0)
|
||||||
|
#ifdef __XS3A__
|
||||||
|
/* Increase drive strength of clock ports to 8mA */
|
||||||
|
asm volatile ("setc res[%0], %1" :: "r" (p_bclk), "r" (0x200006));
|
||||||
|
asm volatile ("setc res[%0], %1" :: "r" (p_lrclk), "r" (0x200006));
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Note this call to stop_clock() will pause forever if the port clocking the clock-block is not low.
|
/* Note this call to stop_clock() will pause forever if the port clocking the clock-block is not low.
|
||||||
* deliver() should return with this being the case */
|
* deliver() should return with this being the case */
|
||||||
stop_clock(clk_audio_bclk);
|
stop_clock(clk_audio_bclk);
|
||||||
|
|
||||||
|
|
||||||
if(!isnull(p_lrclk))
|
if(!isnull(p_lrclk))
|
||||||
{
|
{
|
||||||
clearbuf(p_lrclk);
|
clearbuf(p_lrclk);
|
||||||
@@ -73,26 +78,13 @@ void ConfigAudioPorts(
|
|||||||
configure_out_port_no_ready(p_lrclk, clk_audio_bclk, 0);
|
configure_out_port_no_ready(p_lrclk, clk_audio_bclk, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (I2S_CHANS_DAC != 0)
|
if(XUA_PCM_FORMAT == XUA_PCM_FORMAT_TDM)
|
||||||
/* Clock I2S output data ports from clock block */
|
{
|
||||||
for(int i = 0; i < numPortsDac; i++)
|
for(int i = 0; i < I2S_WIRES_ADC; i++)
|
||||||
{
|
set_port_sample_delay(p_i2s_adc[i]);
|
||||||
configure_out_port_no_ready(p_i2s_dac[i], clk_audio_bclk, 0);
|
}
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (I2S_CHANS_ADC != 0)
|
#elif (CODEC_MASTER)
|
||||||
/* Clock I2S input data ports from clock block */
|
|
||||||
for(int i = 0; i < numPortsAdc; i++)
|
|
||||||
{
|
|
||||||
configure_in_port_no_ready(p_i2s_adc[i], clk_audio_bclk);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Start clock blocks ticking */
|
|
||||||
start_clock(clk_audio_bclk);
|
|
||||||
|
|
||||||
#else /* CODEC_MASTER */
|
|
||||||
|
|
||||||
/* Stop bit and master clock blocks */
|
/* Stop bit and master clock blocks */
|
||||||
stop_clock(clk_audio_bclk);
|
stop_clock(clk_audio_bclk);
|
||||||
@@ -100,8 +92,9 @@ void ConfigAudioPorts(
|
|||||||
/* Clock bclk clock-block from bclk pin */
|
/* Clock bclk clock-block from bclk pin */
|
||||||
configure_clock_src(clk_audio_bclk, p_bclk);
|
configure_clock_src(clk_audio_bclk, p_bclk);
|
||||||
|
|
||||||
|
configure_in_port_no_ready(p_lrclk, clk_audio_bclk);
|
||||||
|
|
||||||
/* Do some clocking shifting to get data in the valid window */
|
/* Do some clocking shifting to get data in the valid window */
|
||||||
/* E.g. Only shift when running at 88.2+ kHz TDM slave */
|
/* E.g. Only shift when running at 88.2+ kHz TDM slave */
|
||||||
int bClkDelay_fall = 0;
|
int bClkDelay_fall = 0;
|
||||||
if(curSamFreq * I2S_CHANS_PER_FRAME * 32 >= 20000000)
|
if(curSamFreq * I2S_CHANS_PER_FRAME * 32 >= 20000000)
|
||||||
@@ -112,6 +105,9 @@ void ConfigAudioPorts(
|
|||||||
|
|
||||||
set_clock_fall_delay(clk_audio_bclk, bClkDelay_fall);
|
set_clock_fall_delay(clk_audio_bclk, bClkDelay_fall);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if (I2S_CHANS_DAC != 0)
|
#if (I2S_CHANS_DAC != 0)
|
||||||
/* Clock I2S output data ports from b-clock clock block */
|
/* Clock I2S output data ports from b-clock clock block */
|
||||||
for(int i = 0; i < I2S_WIRES_DAC; i++)
|
for(int i = 0; i < I2S_WIRES_DAC; i++)
|
||||||
@@ -128,10 +124,9 @@ void ConfigAudioPorts(
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
configure_in_port_no_ready(p_lrclk, clk_audio_bclk);
|
/* Start clock blocks ticking */
|
||||||
|
|
||||||
start_clock(clk_audio_bclk);
|
start_clock(clk_audio_bclk);
|
||||||
#endif
|
|
||||||
#endif
|
#endif //#if (I2S_CHANS_DAC != 0) || (I2S_CHANS_ADC != 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user