forked from PAWPAW-Mirror/lib_xua
Feedback calc allows a couple of extra bits for the multiplication to allow for a better range of mclk/samplerate combos
This commit is contained in:
@@ -319,7 +319,10 @@ int AudioClassRequests_2(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp, c
|
|||||||
i_tmp = MCLK_441;
|
i_tmp = MCLK_441;
|
||||||
}
|
}
|
||||||
|
|
||||||
setG_curSamFreqMultiplier(g_curSamFreq/(i_tmp/512));
|
unsigned mult = (g_curSamFreq*512*4)/i_tmp;
|
||||||
|
setG_curSamFreqMultiplier(mult);
|
||||||
|
|
||||||
|
asm("ecallf %0"::"r"(mult));
|
||||||
#ifdef ADAT_RX
|
#ifdef ADAT_RX
|
||||||
/* Configure ADAT SMUX based on sample rate */
|
/* Configure ADAT SMUX based on sample rate */
|
||||||
outuint(c_clk_ctl, SET_SMUX);
|
outuint(c_clk_ctl, SET_SMUX);
|
||||||
@@ -854,7 +857,6 @@ int AudioClassRequests_2(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp, c
|
|||||||
maxFreq = MAX_FREQ_FS;
|
maxFreq = MAX_FREQ_FS;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
if((currentFreq44 <= maxFreq) && (currentFreq44 >= MIN_FREQ))
|
if((currentFreq44 <= maxFreq) && (currentFreq44 >= MIN_FREQ))
|
||||||
@@ -1083,8 +1085,7 @@ int AudioEndpointRequests_1(XUD_ep ep0_out, XUD_ep ep0_in, USB_SetupPacket_t &sp
|
|||||||
i_tmp = MCLK_441;
|
i_tmp = MCLK_441;
|
||||||
}
|
}
|
||||||
|
|
||||||
//setG_curSamFreqMultiplier(g_curSamFreq/(i_tmp/512));
|
setG_curSamFreqMultiplier((g_curSamFreq*512*4)/i_tmp);
|
||||||
setG_curSamFreqMultiplier((g_curSamFreq*512)/i_tmp);
|
|
||||||
|
|
||||||
/* Instruct audio thread to change sample freq */
|
/* Instruct audio thread to change sample freq */
|
||||||
outuint(c_audioControl, SET_SAMPLE_FREQ);
|
outuint(c_audioControl, SET_SAMPLE_FREQ);
|
||||||
|
|||||||
@@ -410,6 +410,7 @@ void buffer(register chanend c_aud_out, register chanend c_aud_in,
|
|||||||
/* Number of MCLKS this SOF, approx 125 * 24 (3000), sample by sample rate */
|
/* Number of MCLKS this SOF, approx 125 * 24 (3000), sample by sample rate */
|
||||||
GET_SHARED_GLOBAL(cycles, g_curSamFreqMultiplier);
|
GET_SHARED_GLOBAL(cycles, g_curSamFreqMultiplier);
|
||||||
cycles = ((int)((short)(u_tmp - lastClock))) * cycles;
|
cycles = ((int)((short)(u_tmp - lastClock))) * cycles;
|
||||||
|
cycles >>= 2; /* /4 */
|
||||||
|
|
||||||
/* Any odd bits (lower than 16.23) have to be kept seperate */
|
/* Any odd bits (lower than 16.23) have to be kept seperate */
|
||||||
remnant += cycles & mask;
|
remnant += cycles & mask;
|
||||||
|
|||||||
Reference in New Issue
Block a user