如果我想用CX3使用USB音频单声道,下面是最好的方法
A)自动DMA USB端点到I2S左通道单独,I2S右通道未初始化。
b)手动DMA USB端点到CPU,从CPU到I2S单独通道,I2S右通道未初始化。
我尝试了(A),以I2S连续模式如下。
*配置I2S接口。*/
CYU3PMESET((UIT88T**)和;I2SCFG,0,SIZEOF(I2SCFG));
I2SCFG. ISMONO=CyTrand;
I2SCFG.ILSBB1=CyFrE;
I2SCFG.ISDMA=Cyress;
I2SCFG.PADMODE = CYU-U3PII2SYPADYMODEA连续;
I2SCFG.SAMPLERATE=CYU-U3PII2SYSAMPPLYRATER 44×1KHz;
I2SCFG采样宽度=CyuU3pII2sWithth1616BIT;
状态= CYU3PI2SSETCONFIG(和;I2SCFG,NULL);
.
.
.
.
.
/*在两个套接字之间创建一个DMA自动通道
* U端口和L和R I2S套接字。设置DMA大小
*基于USB的速度。*/
大小=大小;
DMACFG计数=4;
DMACGF.PRODSCKID=SokKythIDIXCX3UAKSPSPKER生产者;
DcMcF.C.
DMACGF.DMAMODE=CYU-U3PY-DMAYMODEEY字节;
DMACFG通知=0;
DMACGF.CB=NULL;
DMACG.PRODHead=0;
DMACGF.PRODHOPETER=0;
DMACGF.CONSEADADER=0;
DMACFG。
状态= CYU3PDMACHANNEL CREATE(&GLCX3UAACIIILILFTTCH)
CYU-U3PYDMAX型汽车,DMACFG;
如果(状态)!= CYU-U3PY成功
{
CYU3pDebug(4),“CYU3PDMACHANNEAR CREA
tiON失败,错误代码= %DN”,状态;
CyFxAppErrorHandler(状态);
}
当我从主机(Android /Linux/Windows)流音频时,我每隔1秒听到一个嘀嗒声。这可以通过改变“I2SCFG.PADMODE=CyuU3PiI2SyPADYMODEIO连续”;“AS”I2SCFG.PADMODE =
CYU-U3PII2S1PADYMO正常;但是,有一个小背景噪音和音频来。
我的描述符将其广告为44.1kHz,每个采样间隔16位的单声道音频设备具有BSt= 4。无法共享项目。
1)这种周期性“嘀嗒”噪声的来源是什么?
2)I2S设置的建议I2S PADMODE应该是什么?
3)手动DMA或自动DMA最好的方法,人们使用的USB音频输出应用程序?
4)用于USB音频输出的工作原型的任何参考代码?
以上来自于百度翻译
以下为原文
If I want to use USB audio mono out with CX3, what is the best method among below
a) Auto DMA USB endpoint to I2S Left channel alone, I2S right channel uninitialized.
b) Manual DMA USB endpoint to CPU and from CPU to I2S Left channel alone, I2S right channel uninitialized.
I have tried (a), with I2S continuous mode as below.
/* Configure the I2S interface. */
CyU3PMemSet ((uint8_t *)&i2sCfg, 0, sizeof (i2sCfg));
i2sCfg.isMono = CyTrue;
i2sCfg.isL***First = CyFalse;
i2sCfg.isDma = CyTrue;
i2sCfg.padMode = CY_U3P_I2S_PAD_MODE_CONTINUOUS;
i2sCfg.sampleRate = CY_U3P_I2S_SAMPLE_RATE_44_1KHz;
i2sCfg.sampleWidth = CY_U3P_I2S_WIDTH_16_BIT;
status = CyU3PI2sSetConfig (&i2sCfg, NULL);
.
.
.
.
.
/* Create a DMA Auto channel between two sockets of the
* U port and the L and R I2S sockets. DMA size is set
* based on the USB speed. */
dmaCfg.size = size;
dmaCfg.count = 4;
dmaCfg.prodSckId = SOCKET_ID_CX3_UAC_SPK_PRODUCER;
dmaCfg.consSckId = CY_U3P_LPP_SOCKET_I2S_LEFT;
dmaCfg.dmaMode = CY_U3P_DMA_MODE_BYTE;
dmaCfg.notification = 0;
dmaCfg.cb = NULL;
dmaCfg.prodHeader = 0;
dmaCfg.prodFooter = 0;
dmaCfg.consHeader = 0;
dmaCfg.prodAvailCount = 0;
status = CyU3PDmaChannelCreate (&glCX3_UAC_I2sLeftCh,
CY_U3P_DMA_TYPE_AUTO, &dmaCfg);
if (status != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (4, "CyU3PDmaChannelCreate failed, Error code = %dn", status);
CyFxAppErrorHandler(status);
}
When I stream audio from the host (Android/Linux/Windows), I am hearing a tick noise every 1 second. This can be removed by changing the 'i2sCfg.padMode = CY_U3P_I2S_PAD_MODE_CONTINUOUS; ' as 'i2sCfg.padMode =
CY_U3P_I2S_PAD_MODE_NORMAL; '. But, then there a small background noise along with audio comes.
My descriptors advertise it as 44.1kHZ, 16 bit per sample mono audio device with bInterval=4. Cannot share the project.
1) What can be the source of such periodic 'tick' noise?
2) What shall be the suggested I2S padMode for I2S setting?
3) Manual DMA or Auto DMA best method people use for USB audio out applications?
4) Any reference code for a working prototype of USB audio out?