forked from PAWPAW-Mirror/lib_xua
Add in plumbing between ep_buffer and audio for PLL stability synch
This commit is contained in:
@@ -38,12 +38,16 @@
|
|||||||
*
|
*
|
||||||
* \param i_SoftPll Interface to software PLL task
|
* \param i_SoftPll Interface to software PLL task
|
||||||
*
|
*
|
||||||
* \param c_spdif_tx Channel connected to S/PDIF transmiter core from lib_spdif
|
* \param c_spdif_tx Channel connected to S/PDIF transmitter core from lib_spdif
|
||||||
*
|
*
|
||||||
* \param c_dig Channel connected to the clockGen() thread for
|
* \param c_dig Channel connected to the clockGen() thread for
|
||||||
* receiving/transmitting samples
|
* receiving/transmitting samples
|
||||||
*
|
*
|
||||||
* \param c_mclk_change Channel notifying clockgen of an mclk frequency change
|
* \param c_mclk_change Channel notifying ep_buffer of an mclk frequency change and sync for stable clock
|
||||||
|
*
|
||||||
|
* \param dfuInterface Interface supporting DFU methods
|
||||||
|
*
|
||||||
|
* \param c_pdm_in Channel for receiving decimated PDM samples
|
||||||
*/
|
*/
|
||||||
void XUA_AudioHub(chanend ?c_aud,
|
void XUA_AudioHub(chanend ?c_aud,
|
||||||
clock ?clk_audio_mclk,
|
clock ?clk_audio_mclk,
|
||||||
@@ -61,12 +65,14 @@ void XUA_AudioHub(chanend ?c_aud,
|
|||||||
#endif
|
#endif
|
||||||
#if (XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN || defined(__DOXYGEN__))
|
#if (XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN || defined(__DOXYGEN__))
|
||||||
, chanend c_dig
|
, chanend c_dig
|
||||||
|
#endif
|
||||||
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC || XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN || defined(__DOXYGEN__))
|
||||||
, chanend c_mclk_change
|
, chanend c_mclk_change
|
||||||
#endif
|
#endif
|
||||||
#if (XUD_TILE != 0) && (AUDIO_IO_TILE == 0) && (XUA_DFU_EN == 1)
|
#if (((XUD_TILE != 0) && (AUDIO_IO_TILE == 0) && (XUA_DFU_EN == 1)) || defined(__DOXYGEN__))
|
||||||
, server interface i_dfu ?dfuInterface
|
, server interface i_dfu ?dfuInterface
|
||||||
#endif
|
#endif
|
||||||
#if (XUA_NUM_PDM_MICS > 0)
|
#if (XUA_NUM_PDM_MICS > 0 || defined(__DOXYGEN__))
|
||||||
, chanend c_pdm_in
|
, chanend c_pdm_in
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ void XUA_Buffer(
|
|||||||
#endif
|
#endif
|
||||||
, chanend c_aud
|
, chanend c_aud
|
||||||
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) || defined(__DOYXGEN__)
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) || defined(__DOYXGEN__)
|
||||||
|
, chanend c_mclk_change
|
||||||
#if (!XUA_USE_SW_PLL) || defined(__DOXYGEN__)
|
#if (!XUA_USE_SW_PLL) || defined(__DOXYGEN__)
|
||||||
, client interface pll_ref_if i_pll_ref
|
, client interface pll_ref_if i_pll_ref
|
||||||
#endif
|
#endif
|
||||||
@@ -88,6 +89,7 @@ void XUA_Buffer_Ep(chanend c_aud_out,
|
|||||||
, chanend c_buff_ctrl
|
, chanend c_buff_ctrl
|
||||||
#endif
|
#endif
|
||||||
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) || defined(__DOYXGEN__)
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) || defined(__DOYXGEN__)
|
||||||
|
, chanend c_mclk_change
|
||||||
#if (!XUA_USE_SW_PLL) || defined(__DOXYGEN__)
|
#if (!XUA_USE_SW_PLL) || defined(__DOXYGEN__)
|
||||||
, client interface pll_ref_if i_pll_ref
|
, client interface pll_ref_if i_pll_ref
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -641,6 +641,8 @@ void XUA_AudioHub(chanend ?c_aud, clock ?clk_audio_mclk, clock ?clk_audio_bclk,
|
|||||||
#endif
|
#endif
|
||||||
#if (XUA_ADAT_RX_EN || XUA_SPDIF_RX_EN)
|
#if (XUA_ADAT_RX_EN || XUA_SPDIF_RX_EN)
|
||||||
, chanend c_dig_rx
|
, chanend c_dig_rx
|
||||||
|
#endif
|
||||||
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC || XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
|
||||||
, chanend c_mclk_change
|
, chanend c_mclk_change
|
||||||
#endif
|
#endif
|
||||||
#if (XUD_TILE != 0) && (AUDIO_IO_TILE == 0) && (XUA_DFU_EN == 1)
|
#if (XUD_TILE != 0) && (AUDIO_IO_TILE == 0) && (XUA_DFU_EN == 1)
|
||||||
@@ -807,12 +809,12 @@ void XUA_AudioHub(chanend ?c_aud, clock ?clk_audio_mclk, clock ?clk_audio_bclk,
|
|||||||
|
|
||||||
/* User code should configure audio harware for SampleFreq/MClk etc */
|
/* User code should configure audio harware for SampleFreq/MClk etc */
|
||||||
AudioHwConfig(curFreq, mClk, dsdMode, curSamRes_DAC, curSamRes_ADC);
|
AudioHwConfig(curFreq, mClk, dsdMode, curSamRes_DAC, curSamRes_ADC);
|
||||||
#if (XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC || XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
|
||||||
/* Notify clockgen of new mCLk */
|
/* Notify clockgen of new mCLk */
|
||||||
c_mclk_change <: mClk;
|
c_mclk_change <: mClk;
|
||||||
c_mclk_change <: curFreq;
|
c_mclk_change <: curFreq;
|
||||||
|
|
||||||
/* Wait for ACK back from clockgen to signal clocks all good */
|
/* Wait for ACK back from clockgen or ep_buffer to signal clocks all good */
|
||||||
c_mclk_change :> int _;
|
c_mclk_change :> int _;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ void XUA_Buffer(
|
|||||||
#endif
|
#endif
|
||||||
, chanend c_aud
|
, chanend c_aud
|
||||||
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
||||||
|
, chanend c_mclk_change
|
||||||
#if(XUA_USE_SW_PLL)
|
#if(XUA_USE_SW_PLL)
|
||||||
, chanend c_sw_pll
|
, chanend c_sw_pll
|
||||||
#else
|
#else
|
||||||
@@ -145,6 +146,7 @@ void XUA_Buffer(
|
|||||||
, c_buff_ctrl
|
, c_buff_ctrl
|
||||||
#endif
|
#endif
|
||||||
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
||||||
|
, c_mclk_change
|
||||||
#if(XUA_USE_SW_PLL)
|
#if(XUA_USE_SW_PLL)
|
||||||
, c_sw_pll
|
, c_sw_pll
|
||||||
#else
|
#else
|
||||||
@@ -199,6 +201,7 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
|
|||||||
, chanend c_buff_ctrl
|
, chanend c_buff_ctrl
|
||||||
#endif
|
#endif
|
||||||
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
||||||
|
, chanend c_mclk_change
|
||||||
#if (XUA_USE_SW_PLL)
|
#if (XUA_USE_SW_PLL)
|
||||||
, chanend c_sw_pll
|
, chanend c_sw_pll
|
||||||
#else
|
#else
|
||||||
@@ -1030,14 +1033,22 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
|
|||||||
break;
|
break;
|
||||||
#endif /* ifdef MIDI */
|
#endif /* ifdef MIDI */
|
||||||
|
|
||||||
#if ((XUA_SYNCMODE == XUA_SYNCMODE_SYNC) && XUA_USE_SW_PLL)
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
||||||
|
case c_mclk_change :> u_tmp:
|
||||||
|
unsigned selected_mclk_rate = u_tmp;
|
||||||
|
c_mclk_change :> u_tmp; /* Sample rate we discard */
|
||||||
|
c_mclk_change <: 0; /* ACK back to audio to release */
|
||||||
|
break;
|
||||||
|
|
||||||
|
#if (XUA_USE_SW_PLL)
|
||||||
/* This is fired when sw_pll has completed initialising a new mclk_rate */
|
/* This is fired when sw_pll has completed initialising a new mclk_rate */
|
||||||
case inuint_byref(c_sw_pll, u_tmp):
|
case inuint_byref(c_sw_pll, u_tmp):
|
||||||
printstr("SWPLL synch\n");
|
printstr("SWPLL synch\n");
|
||||||
|
|
||||||
//TODO - hold off audio until we get this ACK
|
//TODO - hold off audio until we get this ACK
|
||||||
break;
|
break;
|
||||||
#endif /* ((XUA_SYNCMODE == XUA_SYNCMODE_SYNC) && XUA_USE_SW_PLL) */
|
#endif /* (XUA_USE_SW_PLL) */
|
||||||
|
#endif /* (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) */
|
||||||
|
|
||||||
#ifdef IAP
|
#ifdef IAP
|
||||||
/* Received word from iap thread - Check for ACK or Data */
|
/* Received word from iap thread - Check for ACK or Data */
|
||||||
|
|||||||
@@ -315,6 +315,9 @@ void usb_audio_io(chanend ?c_aud_in,
|
|||||||
#if (XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
|
#if (XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
|
||||||
, client interface pll_ref_if i_pll_ref
|
, client interface pll_ref_if i_pll_ref
|
||||||
#endif
|
#endif
|
||||||
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
||||||
|
, chanend c_mclk_change
|
||||||
|
#endif
|
||||||
#if ((XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN) && XUA_USE_SW_PLL)
|
#if ((XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN) && XUA_USE_SW_PLL)
|
||||||
, port p_for_mclk_count_aud
|
, port p_for_mclk_count_aud
|
||||||
, chanend c_sw_pll
|
, chanend c_sw_pll
|
||||||
@@ -328,7 +331,6 @@ void usb_audio_io(chanend ?c_aud_in,
|
|||||||
#if (XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
|
#if (XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
|
||||||
chan c_dig_rx;
|
chan c_dig_rx;
|
||||||
chan c_mclk_change; /* Notification of new mclk freq to clockgen */
|
chan c_mclk_change; /* Notification of new mclk freq to clockgen */
|
||||||
|
|
||||||
#if XUA_USE_SW_PLL
|
#if XUA_USE_SW_PLL
|
||||||
/* Connect p_for_mclk_count_aud to clk_audio_mclk so we can count mclks/timestamp in digital rx*/
|
/* Connect p_for_mclk_count_aud to clk_audio_mclk so we can count mclks/timestamp in digital rx*/
|
||||||
|
|
||||||
@@ -381,6 +383,8 @@ void usb_audio_io(chanend ?c_aud_in,
|
|||||||
#endif
|
#endif
|
||||||
#if (XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
|
#if (XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
|
||||||
, c_dig_rx
|
, c_dig_rx
|
||||||
|
#endif
|
||||||
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC || XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
|
||||||
, c_mclk_change
|
, c_mclk_change
|
||||||
#endif
|
#endif
|
||||||
#if (XUD_TILE != 0) && (AUDIO_IO_TILE == 0) && (XUA_DFU_EN == 1)
|
#if (XUD_TILE != 0) && (AUDIO_IO_TILE == 0) && (XUA_DFU_EN == 1)
|
||||||
@@ -496,6 +500,9 @@ int main()
|
|||||||
|
|
||||||
#if ((XUA_SYNCMODE == XUA_SYNCMODE_SYNC || XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN) && XUA_USE_SW_PLL)
|
#if ((XUA_SYNCMODE == XUA_SYNCMODE_SYNC || XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN) && XUA_USE_SW_PLL)
|
||||||
chan c_sw_pll;
|
chan c_sw_pll;
|
||||||
|
#endif
|
||||||
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
||||||
|
chan c_mclk_change; /* Notification of new mclk freq to ep_buffer */
|
||||||
#endif
|
#endif
|
||||||
chan c_sof;
|
chan c_sof;
|
||||||
chan c_xud_out[ENDPOINT_COUNT_OUT]; /* Endpoint channels for XUD */
|
chan c_xud_out[ENDPOINT_COUNT_OUT]; /* Endpoint channels for XUD */
|
||||||
@@ -589,6 +596,7 @@ int main()
|
|||||||
#endif
|
#endif
|
||||||
, c_mix_out
|
, c_mix_out
|
||||||
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
||||||
|
, c_mclk_change
|
||||||
#if (!XUA_USE_SW_PLL)
|
#if (!XUA_USE_SW_PLL)
|
||||||
, i_pll_ref
|
, i_pll_ref
|
||||||
#else
|
#else
|
||||||
@@ -632,6 +640,9 @@ int main()
|
|||||||
#if (XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
|
#if (XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
|
||||||
, i_pll_ref
|
, i_pll_ref
|
||||||
#endif
|
#endif
|
||||||
|
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
|
||||||
|
, c_mclk_change
|
||||||
|
#endif
|
||||||
#if ((XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN) && XUA_USE_SW_PLL)
|
#if ((XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN) && XUA_USE_SW_PLL)
|
||||||
, p_for_mclk_count_audio
|
, p_for_mclk_count_audio
|
||||||
, c_sw_pll
|
, c_sw_pll
|
||||||
|
|||||||
Reference in New Issue
Block a user