📄 pcm_test.c
字号:
PCM_SetPort(g_oPCMState.PCMPort);
PCM_PCMSetting();
PCM_PCMOutDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , NULL);
}
PCM_CodecExitPCMOut();
}
//scenario :
// sdo->sdi , playrec same time
// play
static void PCMInOutSametime()
{
g_oPCMState.Playmode = PCM_DMA;
PCM_SetPort(g_oPCMState.PCMPort);
//play & record
//bret = PCM_CodecInitPCMInOut(g_oPCMState.PCMSync, g_oPCMState.PCMMSBPosition, g_oPCMState.PCMSClk, g_oPCMState.PCMClkSrc);//play&rec ... ing.
//PCM_CodecInitPCMOut(g_oPCMState.PCMSync, g_oPCMState.PCMMSBPosition, g_oPCMState.PCMSClk, g_oPCMState.PCMClkSrc);//play
PCM_CodecInitPCMIn(g_oPCMState.PCMSync, g_oPCMState.PCMMSBPosition, g_oPCMState.PCMSClk, g_oPCMState.PCMClkSrc);//mic
PCM_PCMSetting();
PCM_PCMInOutDMA(0x31000000, 0x32000000, (g_oPCMState.PCMSync*2*20) , NULL);
getchar();
//play
PCM_CodecInitPCMOut(g_oPCMState.PCMSync, g_oPCMState.PCMMSBPosition, g_oPCMState.PCMSClk, g_oPCMState.PCMClkSrc);
PCM_PCMSetting();
PCM_PCMOutDMA(0x32000000, (g_oPCMState.PCMSync*2*20) , NULL);
PCM_CodecExitPCMOut();
}
///////////////////////////////////////////////////////////////
// Auto test
///////////////////////////////////////////////////////////////
//autotest
PCM_State sPCMtestInfo_Def1[] =
{
//CodecID,PCMPort,PCMClkSrc, EXTCDCLKFreq, PCMSync, PCMSClk, PCMMSBPosition
{WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_8K, SYNC_8K*16*1, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_16K, SYNC_16K*16*1, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_32K, SYNC_32K*16*1, DURING_PCMSYNC_HIGH},
{WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_48K, SYNC_48K*16*1, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_64K, SYNC_64K*16*1, DURING_PCMSYNC_HIGH},//ac9714 beyond spec
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_96K, SYNC_96K*16*1, DURING_PCMSYNC_HIGH},//ac9714 beyond spec
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_8K, SYNC_8K*16*2, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_16K, SYNC_16K*16*2, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_32K, SYNC_32K*16*2, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_48K, SYNC_48K*16*2, DURING_PCMSYNC_HIGH},
{WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_8K, SYNC_8K*16*16, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_16K, SYNC_16K*16*16, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_32K, SYNC_32K*16*16, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_8K, SYNC_8K*16*32, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_16K, SYNC_16K*16*32, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_32K, SYNC_32K*16*32, DURING_PCMSYNC_HIGH},
};
PCM_State sPCMtestInfo_Def2[] =
{
//CodecID,PCMPort,PCMClkSrc, EXTCDCLKFreq, PCMSync, PCMSClk, PCMMSBPosition
{WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_11025, SYNC_11025*16*1, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_22050, SYNC_22050*16*1, DURING_PCMSYNC_HIGH},
{WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_44100, SYNC_44100*16*1, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_88200, SYNC_88200*16*1, DURING_PCMSYNC_HIGH},//ac9714 beyond spec
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_11025, SYNC_11025*16*2, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_22050, SYNC_22050*16*2, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_44100, SYNC_44100*16*2, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_88200, SYNC_88200*16*2, DURING_PCMSYNC_HIGH},//ac9714 beyond spec
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_11025, SYNC_11025*16*16, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_22050, SYNC_22050*16*16, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_11025, SYNC_11025*16*32, DURING_PCMSYNC_HIGH},
// {WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_22050, SYNC_22050*16*32, DURING_PCMSYNC_HIGH},
};
PCM_State sPCMtestInfo_MSB2[] =
{
//CodecID,PCMPort,PCMClkSrc, EXTCDCLKFreq, PCMSync, PCMSClk, PCMMSBPosition
{WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_8K, SYNC_8K*16*1, AFTER_PCMSYNC_HIGH},
{WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_44100, SYNC_44100*16*1, AFTER_PCMSYNC_HIGH},
{WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_8K, SYNC_8K*16*2, AFTER_PCMSYNC_HIGH},
{WM9713,PCM_PORT1,PCM_PCLK, 0, SYNC_44100, SYNC_44100*16*2, AFTER_PCMSYNC_HIGH},
};
static void PCMLinkSclkTest(void)
{
int i, _size;
printf("recording playing PCLK clock, SCLK_Division, SYNC_Division Test\n");
printf("0.8/16/32/64/96KHz[D] 1. 11/22/44/88KHz\n");
switch(GetIntNum() )
{
case 1:
_size = sizeof(sPCMtestInfo_Def2)/sizeof(PCM_State);
for(i=0; i<_size ; i++)
{
{
PCM_State setting;
int ch;
setting=sPCMtestInfo_Def2[i];
setting.PCMPort=g_oPCMState.PCMPort;
setting.CodecID=PCM_CODEC_NAME;
PCM_Display(setting);
printf("do you want to skip a test? [s] for skip [x] for exit");
ch=getchar();
if(ch=='s')continue;
else if(ch=='x') break;
PCM_AUTO_set(setting);//pclk, msb during high, 16fs*n
}
PCM_SetPort(g_oPCMState.PCMPort);
PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
PCMOut(1, 1);//dma
}
break;
default:
_size = sizeof(sPCMtestInfo_Def1)/sizeof(PCM_State);
for(i=0; i<_size ; i++)
{
{
PCM_State setting;
int ch;
setting=sPCMtestInfo_Def1[i];
setting.PCMPort=g_oPCMState.PCMPort;
setting.CodecID=PCM_CODEC_NAME;
PCM_Display(setting);
printf("do you want to skip a test? [s] for skip [x] for exit");
ch=getchar();
if(ch=='s')continue;
else if(ch=='x') break;
PCM_AUTO_set(setting);//pclk, msb during high, 16fs*n
}
PCM_SetPort(g_oPCMState.PCMPort);
PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
PCMOut(1, 1);//dma
}
break;
}
}
static void PCMDMATest(void)
{
int i, _size;
printf("recording playing PCLK clock, SCLK_Division, SYNC_Division Test\n");
printf("0.8/16/32/64/96KHz[D] 1. 11/22/44/88KHz\n");
switch(GetIntNum() )
{
case 1:
_size = sizeof(sPCMtestInfo_Def2)/sizeof(PCM_State);
for(i=0; i<_size ; i++)
{
{
PCM_State setting;
int ch;
setting=sPCMtestInfo_Def2[i];
setting.PCMPort=g_oPCMState.PCMPort;
setting.CodecID=PCM_CODEC_NAME;
PCM_Display(setting);
printf("do you want to skip a test? [s] for skip [x] for exit");
ch=getchar();
if(ch=='s')continue;
else if(ch=='x') break;
PCM_AUTO_set(setting);//pclk, msb during high, 16fs*n
}
PCM_SetPort(g_oPCMState.PCMPort);
PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
PCMInOut(1, 1);//dma
}
break;
default:
_size = sizeof(sPCMtestInfo_Def1)/sizeof(PCM_State);
for(i=0; i<_size ; i++)
{
{
PCM_State setting;
int ch;
setting=sPCMtestInfo_Def1[i];
setting.PCMPort=g_oPCMState.PCMPort;
setting.CodecID=PCM_CODEC_NAME;
PCM_Display(setting);
printf("do you want to skip a test? [s] for skip [x] for exit");
ch=getchar();
if(ch=='s')continue;
else if(ch=='x') break;
PCM_AUTO_set(setting);//pclk, msb during high, 16fs*n
}
PCM_SetPort(g_oPCMState.PCMPort);
PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
PCMInOut(1, 1);//dma
}
break;
}
}
static void PCMEXTTest1(void)
{
int i, _size;
printf("external clock test(test pattern)\n");
printf("0.8/16/32/64/96KHz[D] 1. 11/22/44/88KHz\n");
switch(GetIntNum() )
{
case 1:
if(g_oPCMState.PCMPort ==0) printf("connect external clock(16.9344MHz) to pcm0 external port after codec init, detach before deinit\n" );
else printf("connect external clock(16.9344MHz) to TP57\n" );
getchar();
_size = sizeof(sPCMtestInfo_Def2)/sizeof(PCM_State);
for(i=0; i<_size ; i++)
{
{
PCM_State setting;
int ch;
setting=sPCMtestInfo_Def2[i];
setting.PCMPort=g_oPCMState.PCMPort;
setting.CodecID=PCM_CODEC_NAME;
setting.PCMClkSrc = PCM_PCMCDCLK;
setting.EXTCDCLKFreq = EXT_CLOCK_FREQ_B_16_9344;
PCM_Display(setting);
printf("do you want to skip a test? [s] for skip [x] for exit");
ch=getchar();
if(ch=='s')continue;
else if(ch=='x') break;
PCM_AUTO_set(setting);//ext 16.9344, msb during high, 16fs*n
}
PCM_SetPort(g_oPCMState.PCMPort);
PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
PCMOut(1, 1);//dma
}
break;
default:
printf("test pattern External clock msb after sync test\n");
if(g_oPCMState.PCMPort ==0) printf("connect external clock(32.768MHz) to pcm0 external port after codec init, detach before deinit\n" );
else printf("connect external clock(32.768MHz) to TP57\n" );
getchar();
_size = sizeof(sPCMtestInfo_Def1)/sizeof(PCM_State);
for(i=0; i<_size ; i++)
{
{
PCM_State setting;
int ch;
setting=sPCMtestInfo_Def1[i];
setting.PCMPort=g_oPCMState.PCMPort;
setting.CodecID=PCM_CODEC_NAME;
setting.PCMClkSrc = PCM_PCMCDCLK;
setting.EXTCDCLKFreq = EXT_CLOCK_FREQ_A_32_768;
PCM_Display(setting);
printf("do you want to skip a test? [s] for skip [x] for exit");
ch=getchar();
if(ch=='s')continue;
else if(ch=='x') break;
PCM_AUTO_set(setting);//ext 32.768, msb during high, 16fs*n
}
PCM_SetPort(g_oPCMState.PCMPort);
PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
PCMOut(1, 1);//dma
}
break;
}
}
static void PCMEXTTest2(void)
{
int i, _size;
printf("external clock test\n");
printf("0.8/16/32/64/96KHz[D] 1. 11/22/44/88KHz\n");
switch(GetIntNum() )
{
case 1:
if(g_oPCMState.PCMPort ==0) printf("connect external clock(16.9344MHz) to pcm0 external port after codec init, detach before deinit\n" );
else printf("connect external clock(16.9344MHz) to TP57\n" );
getchar();
_size = sizeof(sPCMtestInfo_Def2)/sizeof(PCM_State);
for(i=0; i<_size ; i++)
{
{
PCM_State setting;
int ch;
setting=sPCMtestInfo_Def2[i];
setting.PCMPort=g_oPCMState.PCMPort;
setting.CodecID=PCM_CODEC_NAME;
setting.PCMClkSrc = PCM_PCMCDCLK;
setting.EXTCDCLKFreq = EXT_CLOCK_FREQ_B_16_9344;
PCM_Display(setting);
printf("do you want to skip a test? [s] for skip [x] for exit");
ch=getchar();
if(ch=='s')continue;
else if(ch=='x') break;
PCM_AUTO_set(setting);//ext 16.9344, msb during high, 16fs*n
}
PCM_SetPort(g_oPCMState.PCMPort);
PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
PCMInOut(1, 1);//dma
}
break;
default:
printf("test pattern External clock msb after sync test\n");
if(g_oPCMState.PCMPort ==0) printf("connect external clock(32.768MHz) to pcm0 external port after codec init, detach before deinit\n" );
else printf("connect external clock(32.768MHz) to TP57\n" );
getchar();
_size = sizeof(sPCMtestInfo_Def1)/sizeof(PCM_State);
for(i=0; i<_size ; i++)
{
{
PCM_State setting;
int ch;
setting=sPCMtestInfo_Def1[i];
setting.PCMPort=g_oPCMState.PCMPort;
setting.CodecID=PCM_CODEC_NAME;
setting.PCMClkSrc = PCM_PCMCDCLK;
//setting.EXTCDCLKFreq = EXT_CLOCK_FREQ_A_32_768;
setting.EXTCDCLKFreq = EXT_CLOCK_FREQ_A_36_864;
PCM_Display(setting);
printf("do you want to skip a test? [s] for skip [x] for exit");
ch=getchar();
if(ch=='s')continue;
else if(ch=='x') break;
PCM_AUTO_set(setting);//ext 32.768, msb during high, 16fs*n
}
PCM_SetPort(g_oPCMState.PCMPort);
PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
PCMInOut(1, 1);//dma
}
break;
}
}
static void PCMMSBTest1(void)
{
int i, _size;
printf("msb test(test pattern)\n");
printf("0.8/16/32/64/96KHz[D] 1. 11/22/44/88KHz\n");
printf("0.Ext 32.768Mhz[D] 1. Ext 16.9344Mhz 2. PCLK\n");
switch(GetIntNum() )
{
case 1:
if(g_oPCMState.PCMPort ==0) printf("connect external clock(16.9344MHz) to pcm0 external port after codec init, detach before deinit\n" );
else printf("connect external clock(16.9344MHz) to TP57\n" );
getchar();
_size = sizeof(sPCMtestInfo_Def2)/sizeof(PCM_State);
for(i=0; i<_size ; i++)
{
{
PCM_State setting;
int ch;
setting=sPCMtestInfo_Def2[i];
setting.PCMPort=g_oPCMState.PCMPort;
setting.CodecID=PCM_CODEC_NAME;
setting.PCMClkSrc = PCM_PCMCDCLK;
setting.EXTCDCLKFreq = EXT_CLOCK_FREQ_B_16_9344;
setting.PCMMSBPosition = AFTER_PCMSYNC_HIGH;
PCM_Display(setting);
printf("do you want to skip a test? [s] for skip [x] for exit");
ch=getchar();
if(ch=='s')continue;
else if(ch=='x') break;
PCM_AUTO_set(setting);//ext16.9344, msb after high, 16fs*n
}
PCM_SetPort(g_oPCMState.PCMPort);
PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
PCMOut(1, 1);//dma
}
break;
case 2:
printf("recording playing PCLK clock msb after sync test\n");
getchar();
_size = sizeof(sPCMtestInfo_MSB2)/sizeof(PCM_State);
for(i=0; i<_size ; i++)
{
{
PCM_State setting;
int ch;
setting=sPCMtestInfo_MSB2[i];
setting.PCMPort=g_oPCMState.PCMPort;
setting.CodecID=PCM_CODEC_NAME;
setting.PCMMSBPosition = AFTER_PCMSYNC_HIGH;
PCM_Display(setting);
printf("do you want to skip a test? [s] for skip [x] for exit");
ch=getchar();
if(ch=='s')continue;
else if(ch=='x') break;
PCM_AUTO_set(setting);//pclk, msb after high, 16fs*n
}
PCM_SetPort(g_oPCMState.PCMPort);
PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
PCMOut(1, 1);//dma
}
break;
default:
printf("test pattern External clock msb after sync test\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -