⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcm_test.c

📁 samsung 最新芯片2450 的测试程序.
💻 C
📖 第 1 页 / 共 5 页
字号:
		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 + -