forked from PAWPAW-Mirror/lib_xua
Moved DoSampleTransfer to a header file so it can still be inlined (but also used in unit tests). Resolves fails in test_i2s_loopback
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
// Copyright 2011-2022 XMOS LIMITED.
|
// Copyright 2011-2022 XMOS LIMITED.
|
||||||
// This Software is subject to the terms of the XMOS Public Licence: Version 1.
|
// This Software is subject to the terms of the XMOS Public Licence: Version 1.
|
||||||
#ifndef __XUA_AUDIOHUB_H__
|
#ifndef _XUA_AUDIOHUB_H_
|
||||||
#define __XUA_AUDIOHUB_H__
|
#define _XUA_AUDIOHUB_H_
|
||||||
|
|
||||||
#if __XC__
|
#ifdef __XC__
|
||||||
|
|
||||||
#include "xccompat.h"
|
#include "xccompat.h"
|
||||||
#include "xs1.h"
|
#include "xs1.h"
|
||||||
@@ -80,4 +80,4 @@ void UserBufferManagementInit();
|
|||||||
|
|
||||||
void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[]);
|
void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[]);
|
||||||
|
|
||||||
#endif // __XUA_AUDIOHUB_H__
|
#endif // _XUA_AUDIOHUB_H_
|
||||||
|
|||||||
@@ -90,68 +90,7 @@ unsigned dsdMode = DSD_MODE_OFF;
|
|||||||
#include "audiohub_adat.h"
|
#include "audiohub_adat.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#pragma unsafe arrays
|
#include "xua_audiohub_st.h"
|
||||||
unsigned DoSampleTransfer(chanend ?c_out, const int readBuffNo, const unsigned underflowWord)
|
|
||||||
{
|
|
||||||
if(XUA_USB_EN)
|
|
||||||
{
|
|
||||||
outuint(c_out, underflowWord);
|
|
||||||
|
|
||||||
/* Check for sample freq change (or other command) or new samples from mixer*/
|
|
||||||
if(testct(c_out))
|
|
||||||
{
|
|
||||||
unsigned command = inct(c_out);
|
|
||||||
#ifndef CODEC_MASTER
|
|
||||||
if(dsdMode == DSD_MODE_OFF)
|
|
||||||
{
|
|
||||||
#if (I2S_CHANS_ADC != 0 || I2S_CHANS_DAC != 0)
|
|
||||||
/* Set clocks low */
|
|
||||||
p_lrclk <: 0;
|
|
||||||
p_bclk <: 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#if(DSD_CHANS_DAC != 0)
|
|
||||||
/* DSD Clock might not be shared with lrclk or bclk... */
|
|
||||||
p_dsd_clk <: 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if (DSD_CHANS_DAC > 0)
|
|
||||||
if(dsdMode == DSD_MODE_DOP)
|
|
||||||
dsdMode = DSD_MODE_OFF;
|
|
||||||
#endif
|
|
||||||
return command;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#if NUM_USB_CHAN_OUT > 0
|
|
||||||
#pragma loop unroll
|
|
||||||
for(int i = 0; i < NUM_USB_CHAN_OUT; i++)
|
|
||||||
{
|
|
||||||
int tmp = inuint(c_out);
|
|
||||||
samplesOut[i] = tmp;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
inuint(c_out);
|
|
||||||
#endif
|
|
||||||
UserBufferManagement(samplesOut, samplesIn[readBuffNo]);
|
|
||||||
|
|
||||||
#if NUM_USB_CHAN_IN > 0
|
|
||||||
#pragma loop unroll
|
|
||||||
for(int i = 0; i < NUM_USB_CHAN_IN; i++)
|
|
||||||
{
|
|
||||||
outuint(c_out, samplesIn[readBuffNo][i]);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
UserBufferManagement(samplesOut, samplesIn[readBuffNo]);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int HandleSampleClock(int frameCount, buffered _XUA_CLK_DIR port:32 p_lrclk)
|
static inline int HandleSampleClock(int frameCount, buffered _XUA_CLK_DIR port:32 p_lrclk)
|
||||||
{
|
{
|
||||||
|
|||||||
63
lib_xua/src/core/audiohub/xua_audiohub_st.h
Normal file
63
lib_xua/src/core/audiohub/xua_audiohub_st.h
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#pragma unsafe arrays
|
||||||
|
inline unsigned DoSampleTransfer(chanend ?c_out, const int readBuffNo, const unsigned underflowWord)
|
||||||
|
{
|
||||||
|
if(XUA_USB_EN)
|
||||||
|
{
|
||||||
|
outuint(c_out, underflowWord);
|
||||||
|
|
||||||
|
/* Check for sample freq change (or other command) or new samples from mixer*/
|
||||||
|
if(testct(c_out))
|
||||||
|
{
|
||||||
|
unsigned command = inct(c_out);
|
||||||
|
#ifndef CODEC_MASTER
|
||||||
|
if(dsdMode == DSD_MODE_OFF)
|
||||||
|
{
|
||||||
|
#if (I2S_CHANS_ADC != 0 || I2S_CHANS_DAC != 0)
|
||||||
|
/* Set clocks low */
|
||||||
|
p_lrclk <: 0;
|
||||||
|
p_bclk <: 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#if(DSD_CHANS_DAC != 0)
|
||||||
|
/* DSD Clock might not be shared with lrclk or bclk... */
|
||||||
|
p_dsd_clk <: 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if (DSD_CHANS_DAC > 0)
|
||||||
|
if(dsdMode == DSD_MODE_DOP)
|
||||||
|
dsdMode = DSD_MODE_OFF;
|
||||||
|
#endif
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#if NUM_USB_CHAN_OUT > 0
|
||||||
|
#pragma loop unroll
|
||||||
|
for(int i = 0; i < NUM_USB_CHAN_OUT; i++)
|
||||||
|
{
|
||||||
|
int tmp = inuint(c_out);
|
||||||
|
samplesOut[i] = tmp;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
inuint(c_out);
|
||||||
|
#endif
|
||||||
|
UserBufferManagement(samplesOut, samplesIn[readBuffNo]);
|
||||||
|
|
||||||
|
#if NUM_USB_CHAN_IN > 0
|
||||||
|
#pragma loop unroll
|
||||||
|
for(int i = 0; i < NUM_USB_CHAN_IN; i++)
|
||||||
|
{
|
||||||
|
outuint(c_out, samplesIn[readBuffNo][i]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
UserBufferManagement(samplesOut, samplesIn[readBuffNo]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -356,9 +356,9 @@ void CheckBlock(unsigned samplesOut[], uint32_t expectedOut[], size_t len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* From xua_audiohub.xc */
|
/* From xua_audiohub.xc */
|
||||||
unsigned DoSampleTransfer(chanend ?c_out, const int readBuffNo, const unsigned underflowWord);
|
|
||||||
extern unsigned samplesOut[NUM_USB_CHAN_OUT];
|
extern unsigned samplesOut[NUM_USB_CHAN_OUT];
|
||||||
extern unsigned samplesIn[2][NUM_USB_CHAN_IN];
|
extern unsigned samplesIn[2][NUM_USB_CHAN_IN];
|
||||||
|
#include "xua_audiohub_st.h"
|
||||||
|
|
||||||
int Fake_XUA_AudioHub(chanend c_mix_aud, chanend c_stim)
|
int Fake_XUA_AudioHub(chanend c_mix_aud, chanend c_stim)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user