c_mclk_change -> c_audio_rate_change

This commit is contained in:
Ed
2024-01-22 14:32:03 +00:00
parent e8317eae36
commit 3be17bf8cc
8 changed files with 56 additions and 57 deletions

View File

@@ -19,35 +19,35 @@
* This function drives I2S ports and handles samples to/from other digital * This function drives I2S ports and handles samples to/from other digital
* I/O threads. * I/O threads.
* *
* \param c_aud Audio sample channel connected to the mixer() thread or the * \param c_aud Audio sample channel connected to the mixer() thread or the
* decouple() thread * decouple() thread
* *
* \param clk_audio_mclk Nullable clockblock to be clocked from master clock * \param clk_audio_mclk Nullable clockblock to be clocked from master clock
* *
* \param clk_audio_bclk Nullable clockblock to be clocked from i2s bit clock * \param clk_audio_bclk Nullable clockblock to be clocked from i2s bit clock
* *
* \param p_mclk_in Master clock inport port (must be 1-bit) * \param p_mclk_in Master clock inport port (must be 1-bit)
* *
* \param p_lrclk Nullable port for I2S sample clock * \param p_lrclk Nullable port for I2S sample clock
* *
* \param p_bclk Nullable port for I2S bit * \param p_bclk Nullable port for I2S bit clock
* *
* \param p_i2s_dac Nullable array of ports for I2S data output lines * \param p_i2s_dac Nullable array of ports for I2S data output lines
* *
* \param p_i2s_adc Nullable array of ports for I2S data input lines * \param p_i2s_adc Nullable array of ports for I2S data input lines
* *
* \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 transmitter 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 ep_buffer of an mclk frequency change and sync for stable clock * \param c_audio_rate_change Channel notifying ep_buffer of an mclk frequency change and sync for stable clock
* *
* \param dfuInterface Interface supporting DFU methods * \param dfuInterface Interface supporting DFU methods
* *
* \param c_pdm_in Channel for receiving decimated PDM samples * \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,
@@ -67,7 +67,7 @@ void XUA_AudioHub(chanend ?c_aud,
, chanend c_dig , chanend c_dig
#endif #endif
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC || XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN || defined(__DOXYGEN__)) #if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC || XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN || defined(__DOXYGEN__))
, chanend c_mclk_change , chanend c_audio_rate_change
#endif #endif
#if (((XUD_TILE != 0) && (AUDIO_IO_TILE == 0) && (XUA_DFU_EN == 1)) || defined(__DOXYGEN__)) #if (((XUD_TILE != 0) && (AUDIO_IO_TILE == 0) && (XUA_DFU_EN == 1)) || defined(__DOXYGEN__))
, server interface i_dfu ?dfuInterface , server interface i_dfu ?dfuInterface

View File

@@ -53,7 +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 , chanend c_audio_rate_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
@@ -89,7 +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 , chanend c_audio_rate_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

View File

@@ -20,17 +20,17 @@ void PllRefPinTask(server interface pll_ref_if i_pll_ref, out port p_sync);
/** Clock generation and digital audio I/O handling. /** Clock generation and digital audio I/O handling.
* *
* \param c_spdif_rx channel connected to S/PDIF receive thread * \param c_spdif_rx channel connected to S/PDIF receive thread
* \param c_adat_rx channel connect to ADAT receive thread * \param c_adat_rx channel connect to ADAT receive thread
* \param i_pll_ref interface to taslk that outputs clock signal to drive external frequency synthesizer * \param i_pll_ref interface to taslk that outputs clock signal to drive external frequency synthesizer
* \param c_audio channel connected to the audio() thread * \param c_audio channel connected to the audio() thread
* \param c_clk_ctl channel connected to Endpoint0() for configuration of the * \param c_clk_ctl channel connected to Endpoint0() for configuration of the
* clock * clock
* \param c_clk_int channel connected to the decouple() thread for clock * \param c_clk_int channel connected to the decouple() thread for clock
* interrupts * interrupts
* \param c_mclk_change channel to notify of master clock change * \param c_audio_rate_change channel to notify of master clock change
* \param p_for_mclk_count_aud port used for counting mclk and providing a timestamp * \param p_for_mclk_count_aud port used for counting mclk and providing a timestamp
* \param c_sw_pll channel used to communicate with software PLL task * \param c_sw_pll channel used to communicate with software PLL task
* *
*/ */
void clockGen( streaming chanend ?c_spdif_rx, void clockGen( streaming chanend ?c_spdif_rx,
@@ -39,7 +39,7 @@ void clockGen( streaming chanend ?c_spdif_rx,
chanend c_audio, chanend c_audio,
chanend c_clk_ctl, chanend c_clk_ctl,
chanend c_clk_int, chanend c_clk_int,
chanend c_mclk_change chanend c_audio_rate_change
#if XUA_USE_SW_PLL #if XUA_USE_SW_PLL
, port p_for_mclk_count_aud , port p_for_mclk_count_aud
, chanend c_sw_pll , chanend c_sw_pll

View File

@@ -643,7 +643,7 @@ void XUA_AudioHub(chanend ?c_aud, clock ?clk_audio_mclk, clock ?clk_audio_bclk,
, chanend c_dig_rx , chanend c_dig_rx
#endif #endif
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC || XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN) #if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC || XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
, chanend c_mclk_change , chanend c_audio_rate_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)
, server interface i_dfu ?dfuInterface , server interface i_dfu ?dfuInterface
@@ -811,11 +811,11 @@ void XUA_AudioHub(chanend ?c_aud, clock ?clk_audio_mclk, clock ?clk_audio_bclk,
AudioHwConfig(curFreq, mClk, dsdMode, curSamRes_DAC, curSamRes_ADC); AudioHwConfig(curFreq, mClk, dsdMode, curSamRes_DAC, curSamRes_ADC);
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC || 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_audio_rate_change <: mClk;
c_mclk_change <: curFreq; c_audio_rate_change <: curFreq;
/* Wait for ACK back from clockgen or ep_buffer to signal clocks all good */ /* Wait for ACK back from clockgen or ep_buffer to signal clocks all good */
c_mclk_change :> int _; c_audio_rate_change :> int _;
#endif #endif
/* User should unmute audio hardware */ /* User should unmute audio hardware */

View File

@@ -105,7 +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 , chanend c_audio_rate_change
#if(XUA_USE_SW_PLL) #if(XUA_USE_SW_PLL)
, chanend c_sw_pll , chanend c_sw_pll
#else #else
@@ -146,7 +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 , c_audio_rate_change
#if(XUA_USE_SW_PLL) #if(XUA_USE_SW_PLL)
, c_sw_pll , c_sw_pll
#else #else
@@ -201,7 +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 , chanend c_audio_rate_change
#if (XUA_USE_SW_PLL) #if (XUA_USE_SW_PLL)
, chanend c_sw_pll , chanend c_sw_pll
#else #else
@@ -1025,10 +1025,10 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
#endif /* ifdef MIDI */ #endif /* ifdef MIDI */
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) #if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
case c_mclk_change :> u_tmp: case c_audio_rate_change :> u_tmp:
printstr("c_mclk_change\n"); printstr("c_audio_rate_change\n");
unsigned selected_mclk_rate = u_tmp; unsigned selected_mclk_rate = u_tmp;
c_mclk_change :> u_tmp; /* Sample rate is discarded as only care about mclk */ c_audio_rate_change :> u_tmp; /* Sample rate is discarded as only care about mclk */
#if (XUA_USE_SW_PLL) #if (XUA_USE_SW_PLL)
sw_pll_pfd_init(&sw_pll_pfd, sw_pll_pfd_init(&sw_pll_pfd,
sof_rate_hz / controller_rate_hz, /* How often the PFD is invoked */ sof_rate_hz / controller_rate_hz, /* How often the PFD is invoked */
@@ -1038,7 +1038,7 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
restart_sigma_delta(c_sw_pll, selected_mclk_rate); restart_sigma_delta(c_sw_pll, selected_mclk_rate);
/* Delay ACK until sw_pll says it is ready */ /* Delay ACK until sw_pll says it is ready */
#else #else
c_mclk_change <: 0; /* ACK back to audio to release I2S immediately */ c_audio_rate_change <: 0; /* ACK back to audio to release I2S immediately */
#endif /* XUA_USE_SW_PLL */ #endif /* XUA_USE_SW_PLL */
break; break;
@@ -1046,7 +1046,7 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
/* 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");
c_mclk_change <: 0; /* ACK back to audio to release */ c_audio_rate_change <: 0; /* ACK back to audio to release */
break; break;
#endif /* (XUA_USE_SW_PLL) */ #endif /* (XUA_USE_SW_PLL) */

View File

@@ -222,7 +222,7 @@ void clockGen ( streaming chanend ?c_spdif_rx,
chanend c_dig_rx, chanend c_dig_rx,
chanend c_clk_ctl, chanend c_clk_ctl,
chanend c_clk_int, chanend c_clk_int,
chanend c_mclk_change chanend c_audio_rate_change
#if XUA_USE_SW_PLL #if XUA_USE_SW_PLL
, port p_for_mclk_count_aud , port p_for_mclk_count_aud
, chanend c_sw_pll , chanend c_sw_pll
@@ -525,7 +525,7 @@ void clockGen ( streaming chanend ?c_spdif_rx,
This happens only on SDM restart and only once */ This happens only on SDM restart and only once */
if(require_ack_to_audio) if(require_ack_to_audio)
{ {
c_mclk_change <: tmp; c_audio_rate_change <: tmp;
require_ack_to_audio = 0; require_ack_to_audio = 0;
} }
break; break;
@@ -533,8 +533,8 @@ void clockGen ( streaming chanend ?c_spdif_rx,
#if (XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN) #if (XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
/* Receive notification of audio streaming settings change and store */ /* Receive notification of audio streaming settings change and store */
case c_mclk_change :> selected_mclk_rate: case c_audio_rate_change :> selected_mclk_rate:
c_mclk_change :> selected_sample_rate; c_audio_rate_change :> selected_sample_rate;
#if XUA_USE_SW_PLL #if XUA_USE_SW_PLL
mclks_per_sample = selected_mclk_rate / selected_sample_rate; mclks_per_sample = selected_mclk_rate / selected_sample_rate;
restart_sigma_delta(c_sw_pll, selected_mclk_rate); restart_sigma_delta(c_sw_pll, selected_mclk_rate);
@@ -543,7 +543,7 @@ void clockGen ( streaming chanend ?c_spdif_rx,
require_ack_to_audio = 1; require_ack_to_audio = 1;
#else #else
/* Send ACK immediately as we are good to go if not using SW_PLL */ /* Send ACK immediately as we are good to go if not using SW_PLL */
c_mclk_change <: 0; c_audio_rate_change <: 0;
#endif #endif
break; break;
#endif #endif

View File

@@ -316,7 +316,7 @@ void usb_audio_io(chanend ?c_aud_in,
, client interface pll_ref_if i_pll_ref , client interface pll_ref_if i_pll_ref
#endif #endif
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) #if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
, chanend c_mclk_change , chanend c_audio_rate_change
#endif #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
@@ -330,10 +330,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)
chan c_dig_rx; chan c_dig_rx;
chan c_mclk_change; /* Notification of new mclk freq to clockgen */ chan c_audio_rate_change; /* Notification of new mclk freq to clockgen and synch */
#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*/
unsigned x = 0; unsigned x = 0;
asm("ldw %0, dp[clk_audio_mclk]":"=r"(x)); asm("ldw %0, dp[clk_audio_mclk]":"=r"(x));
asm("setclk res[%0], %1"::"r"(p_for_mclk_count_aud), "r"(x)); asm("setclk res[%0], %1"::"r"(p_for_mclk_count_aud), "r"(x));
@@ -385,7 +384,7 @@ void usb_audio_io(chanend ?c_aud_in,
, c_dig_rx , c_dig_rx
#endif #endif
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC || XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN) #if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC || XUA_SPDIF_RX_EN || XUA_ADAT_RX_EN)
, c_mclk_change , c_audio_rate_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)
, dfuInterface , dfuInterface
@@ -412,7 +411,7 @@ void usb_audio_io(chanend ?c_aud_in,
c_dig_rx, c_dig_rx,
c_clk_ctl, c_clk_ctl,
c_clk_int, c_clk_int,
c_mclk_change c_audio_rate_change
#if XUA_USE_SW_PLL #if XUA_USE_SW_PLL
, p_for_mclk_count_aud , p_for_mclk_count_aud
, c_sw_pll , c_sw_pll
@@ -502,7 +501,7 @@ int main()
chan c_sw_pll; chan c_sw_pll;
#endif #endif
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) #if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
chan c_mclk_change; /* Notification of new mclk freq to ep_buffer */ chan c_audio_rate_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 */
@@ -596,7 +595,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 , c_audio_rate_change
#if (!XUA_USE_SW_PLL) #if (!XUA_USE_SW_PLL)
, i_pll_ref , i_pll_ref
#else #else
@@ -641,7 +640,7 @@ int main()
, i_pll_ref , i_pll_ref
#endif #endif
#if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC) #if (XUA_SYNCMODE == XUA_SYNCMODE_SYNC)
, c_mclk_change , c_audio_rate_change
#endif #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

View File

@@ -173,7 +173,7 @@ int main()
chan c_in[EP_COUNT_IN]; chan c_in[EP_COUNT_IN];
chan c_sof; chan c_sof;
chan c_aud_ctl; chan c_aud_ctl;
chan c_mclk_change; chan c_audio_rate_change;
interface pll_ref_if i_pll_ref; interface pll_ref_if i_pll_ref;
@@ -186,7 +186,7 @@ int main()
XUA_Buffer_Ep(c_out[1], /* USB Audio Out*/ XUA_Buffer_Ep(c_out[1], /* USB Audio Out*/
c_in[1], /* USB Audio In */ c_in[1], /* USB Audio In */
c_sof, c_aud_ctl, p_off_mclk, c_mclk_change, i_pll_ref c_sof, c_aud_ctl, p_off_mclk, c_audio_rate_change, i_pll_ref
); );
} }