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;
|
||||
}
|
||||
|
||||
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
|
||||
/* Configure ADAT SMUX based on sample rate */
|
||||
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;
|
||||
}
|
||||
#endif
|
||||
|
||||
while(1)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
//setG_curSamFreqMultiplier(g_curSamFreq/(i_tmp/512));
|
||||
setG_curSamFreqMultiplier((g_curSamFreq*512)/i_tmp);
|
||||
setG_curSamFreqMultiplier((g_curSamFreq*512*4)/i_tmp);
|
||||
|
||||
/* Instruct audio thread to change 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 */
|
||||
GET_SHARED_GLOBAL(cycles, g_curSamFreqMultiplier);
|
||||
cycles = ((int)((short)(u_tmp - lastClock))) * cycles;
|
||||
cycles >>= 2; /* /4 */
|
||||
|
||||
/* Any odd bits (lower than 16.23) have to be kept seperate */
|
||||
remnant += cycles & mask;
|
||||
|
||||
Reference in New Issue
Block a user