diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 5340aaab..211bf644 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,9 +5,10 @@ lib_xua Change Log ----- * ADDED: Application note AN00246 - * RESOLVED: Runtime exeption issues when incorrect feedback calculated (introduced in sc_xud - 6.13) - * RESOLVED: Output sample counter reset on stream start. Caused playback issues on some Linux based hosts + * RESOLVED: Runtime exception issues when incorrect feedback calculated + (introduced in sc_xud 6.13) + * RESOLVED: Output sample counter reset on stream start. Caused playback + issues on some Linux based hosts 0.1.1 ----- diff --git a/examples/AN00246_xua_example/src/app_xua_simple.xc b/examples/AN00246_xua_example/src/app_xua_simple.xc index bc5a19ee..1d1bae6e 100644 --- a/examples/AN00246_xua_example/src/app_xua_simple.xc +++ b/examples/AN00246_xua_example/src/app_xua_simple.xc @@ -22,23 +22,23 @@ buffered in port:32 p_i2s_adc[] = {PORT_I2S_ADC0}; /* I2S Data-line(s) */ buffered out port:32 p_lrclk = PORT_I2S_LRCLK; /* I2S Bit-clock */ buffered out port:32 p_bclk = PORT_I2S_BCLK; /* I2S L/R-clock */ -/* Note, declared unsafe as sometimes we want to share this port -e.g. PDM mics and I2S use same master clock IO */ -port p_mclk_in_ = PORT_MCLK_IN; +/* Master clock for the audio IO tile */ +in port p_mclk_in = PORT_MCLK_IN; -unsafe -{ - /* TODO simplify this */ - unsafe port p_mclk_in; /* Audio master clock input */ -} +//unsafe +//{ +// /* TODO simplify this */ +// unsafe port p_mclk_in; /* Audio master clock input */ +//} +/* Resources for USB feedback */ in port p_for_mclk_count = PORT_MCLK_COUNT; /* Extra port for counting master clock ticks */ -in port p_mclk_in2 = PORT_MCLK_IN2; +in port p_mclk_in_usb = PORT_MCLK_IN_USB; /* Extra master clock input for the USB tile */ /* Clock-block declarations */ clock clk_audio_bclk = on tile[0]: XS1_CLKBLK_4; /* Bit clock */ clock clk_audio_mclk = on tile[0]: XS1_CLKBLK_5; /* Master clock */ -clock clk_audio_mclk2 = on tile[1]: XS1_CLKBLK_1; /* Master clock */ +clock clk_audio_mclk_usb = on tile[1]: XS1_CLKBLK_1; /* Master clock for USB tile */ /* Endpoint type tables - informs XUD what the transfer types for each Endpoint in use and also * if the endpoint wishes to be informed of USB bus resets */ @@ -54,7 +54,7 @@ int main() /* Channel for communicating SOF notifications from XUD to the Buffering cores */ chan c_sof; - /* Channel for audio data between buffering cores and audio IO core */ + /* Channel for audio data between buffering cores and AudioHub/IO core */ chan c_aud; /* Channel for communicating control messages from EP0 to the rest of the device (via the buffering cores */ @@ -66,7 +66,7 @@ int main() on tile[1]: XUD_Main(c_ep_out, 2, c_ep_in, 2, c_sof, epTypeTableOut, epTypeTableIn, null, null, -1 , - XUD_SPEED_HS, XUD_PWR_BUS); + XUD_SPEED_HS, XUD_PWR_SELF); /* Endpoint 0 core from lib_xua */ /* Note, since we are not using many features we pass in null for quite a few params.. */ @@ -75,20 +75,22 @@ int main() /* Buffering cores - handles audio data to/from EP's and gives/gets data to/from the audio I/O core */ /* Note, this spawns two cores */ on tile[1]: { - set_clock_src(clk_audio_mclk2, p_mclk_in2); - set_port_clock(p_for_mclk_count, clk_audio_mclk2); - start_clock(clk_audio_mclk2); + + /* Connect master-clock clock-block to clock-block pin */ + set_clock_src(clk_audio_mclk_usb, p_mclk_in_usb); /* Clock clock-block from mclk pin */ + set_port_clock(p_for_mclk_count, clk_audio_mclk_usb); /* Clock the "count" port from the clock block */ + start_clock(clk_audio_mclk_usb); /* Set the clock off running */ XUA_Buffer(c_ep_out[1], c_ep_in[1], c_sof, c_aud_ctl, p_for_mclk_count, c_aud); } - /* IOHub core does most of the audio IO i.e. I2S (also serves as a hub for all audio) */ + /* AudioHub/IO core does most of the audio IO i.e. I2S (also serves as a hub for all audio) */ on tile[0]: { - unsafe - { - p_mclk_in = p_mclk_in_; - } + //unsafe + //{ + // p_mclk_in = p_mclk_in_; + // } XUA_AudioHub(c_aud); } } diff --git a/examples/AN00246_xua_example/src/xk-audio-216-mc.xn b/examples/AN00246_xua_example/src/xk-audio-216-mc.xn index f9c5220f..c2e90f16 100644 --- a/examples/AN00246_xua_example/src/xk-audio-216-mc.xn +++ b/examples/AN00246_xua_example/src/xk-audio-216-mc.xn @@ -40,9 +40,10 @@ - + - + + --> diff --git a/lib_xua/src/core/audiohub/xua_audiohub.xc b/lib_xua/src/core/audiohub/xua_audiohub.xc index 296c8bad..49097a6d 100755 --- a/lib_xua/src/core/audiohub/xua_audiohub.xc +++ b/lib_xua/src/core/audiohub/xua_audiohub.xc @@ -100,7 +100,7 @@ extern buffered out port:32 p_bclk; unsigned dsdMode = DSD_MODE_OFF; /* Master clock input */ -extern unsafe port p_mclk_in; +extern in port p_mclk_in; extern in port p_mclk_in2; #if (XUA_SPDIF_TX_EN) diff --git a/lib_xua/src/core/buffer/decouple/decouple.xc b/lib_xua/src/core/buffer/decouple/decouple.xc index aaf74386..4e631dfb 100644 --- a/lib_xua/src/core/buffer/decouple/decouple.xc +++ b/lib_xua/src/core/buffer/decouple/decouple.xc @@ -492,7 +492,7 @@ __builtin_unreachable(); speedRem &= 0xffff; /* This patches up the case where the FB is well off, leading to totalSampsToWrite to also be off */ - /* This can be startup case, back mclk input etc */ + /* This can be startup case, bad mclk input etc */ if (totalSampsToWrite < 0 || totalSampsToWrite * g_curSubSlot_In * g_numUsbChan_In > g_maxPacketSize) { totalSampsToWrite = 0; @@ -834,6 +834,7 @@ void XUA_Buffer_Decouple(chanend c_mix_out /* Reset OUT buffer state */ SET_SHARED_GLOBAL(g_aud_from_host_rdptr, aud_from_host_fifo_start); SET_SHARED_GLOBAL(g_aud_from_host_wrptr, aud_from_host_fifo_start); + SET_SHARED_GLOBAL(aud_data_remaining_to_device, 0); /* NOTE, this is potentially usefull for UAC1 */ unpackState = 0; diff --git a/lib_xua/src/core/ports/audioports.xc b/lib_xua/src/core/ports/audioports.xc index 2f26b9af..80d2500a 100644 --- a/lib_xua/src/core/ports/audioports.xc +++ b/lib_xua/src/core/ports/audioports.xc @@ -7,7 +7,7 @@ -extern unsafe port p_mclk_in; +extern in port p_mclk_in; extern clock clk_audio_mclk; extern clock clk_audio_bclk;