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

📄 pcm_test.c

📁 samsung 最新芯片2450 的测试程序.
💻 C
📖 第 1 页 / 共 5 页
字号:
		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.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);//ext 32.768, msb after high, 16fs*n	
			}
				PCM_SetPort(g_oPCMState.PCMPort);
				PCM_SelClkSrc(g_oPCMState.PCMPort,  g_oPCMState.PCMClkSrc, 1);
			PCMOut(1, 1);//dma	
		}
		break;		
	}
}

static void PCMMSBTest2(void)
{
	int i, _size;

	printf("msb test(recording/playing pcm)\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:
		printf("recording playing External clock msb after sync test\n");		
		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);
			PCMInOut(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);
			PCMInOut(1, 1);//dma	
		}
		break;
		
		default:
		printf("recording playing 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.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);//ext 32.768, msb after high, 16fs*n	
			}
				PCM_SetPort(g_oPCMState.PCMPort);
				PCM_SelClkSrc(g_oPCMState.PCMPort,  g_oPCMState.PCMClkSrc, 1);
			PCMInOut(1, 1);//dma	
		}
		break;		
	}
}

static bool PCMDMATxEnableTest(void)
{
	unsigned int destsizeByte;
	PCM_State setting;
	
	bool bret;
	int failcnt=0;	
	
	printf("playing DMA PCLK clock,  DMA tx enable full Test\n");		
	
	//init
	PCM_DATA_2chpattern_making( &destsizeByte,
							  (unsigned int)(PCM_REC_BUF), (unsigned int)6,4400, 16);
	setting=sPCMtestInfo_Def1[0];
	setting.PCMPort=g_oPCMState.PCMPort;				
	PCM_Display(setting);				
	PCM_AUTO_set(setting);//pclk, msb during high, 16fs*n		
	
	//setting
	PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
	PCM_CodecInitPCMOut(g_oPCMState.PCMSync, g_oPCMState.PCMMSBPosition, g_oPCMState.PCMSClk, g_oPCMState.PCMClkSrc);						 
	PCM_SetPort(g_oPCMState.PCMPort);
	
	//play
	g_oPCMState.Playmode = PCM_DMA;
	PCM_PCMSetting();
	bret = PCM_PCMOutDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_TX_DMA_EN);//ok
	if(bret==FALSE) failcnt++;
	bret = PCM_PCMOutDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_PCM_ENABLE_TX);//ok
	if(bret==FALSE) failcnt++;	
	bret = PCM_PCMOutDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_FIFOENABLE_TX);//ok
	if(bret==FALSE) failcnt++;	
	
	bret = PCM_PCMOutDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_CTL_SERCLK_EN_TX);//ok
	if(bret==FALSE) failcnt++;	
	
	//... fill more.
	
	//exit
	PCM_CodecExitPCMOut();	
	
	printf("############## Fail count %d ##############\n", failcnt );
	
	if( failcnt != 0 ) return FALSE;
	else return TRUE;
	

}

static bool PCMDMATxFULLDetailTest(void)
{
	unsigned int destsizeByte;
	PCM_State setting;
	
	bool bret;
	int failcnt=0;	
	
	printf("playing DMA PCLK clock,  DMA tx detail full Test\n");		
	
	//init
	PCM_DATA_2chpattern_making( &destsizeByte,
							  (unsigned int)(PCM_REC_BUF), (unsigned int)6,4400, 16);
	setting=sPCMtestInfo_Def1[0];
	setting.PCMPort=g_oPCMState.PCMPort;				
	PCM_Display(setting);				
	PCM_AUTO_set(setting);//pclk, msb during high, 16fs*n		
	
	//setting
	PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
	PCM_CodecInitPCMOut(g_oPCMState.PCMSync, g_oPCMState.PCMMSBPosition, g_oPCMState.PCMSClk, g_oPCMState.PCMClkSrc);						 
	PCM_SetPort(g_oPCMState.PCMPort);
	
	//play
	g_oPCMState.Playmode = PCM_DMA;
	PCM_PCMSetting();
	bret = PCM_PCMOutDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_TXALMOSTFULL);// ok.
	if(bret==FALSE) failcnt++;
	bret = PCM_PCMOutDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_TXFULL);//ok
	if(bret==FALSE) failcnt++;
	bret = PCM_PCMOutDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_TXOVERFLOW);//ok
	if(bret==FALSE) failcnt++;
//	bret = PCM_PCMOutDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_NOTPENDING_TXFULL);
//	if(bret==FALSE) failcnt++;	

	
	//... fill more.
	
	//exit
	PCM_CodecExitPCMOut();	
	
	printf("############## Fail count %d ##############\n", failcnt );
	
	if( failcnt != 0 ) return FALSE;
	else return TRUE;
	

}

static bool PCMDMATxEMPTYDetailTest(void)
{
	unsigned int destsizeByte;
	PCM_State setting;
	
	bool bret;
	int failcnt=0;	
	
	printf("playing DMA PCLK clock,  DMA tx detail empty Test\n");		
	
	//init
	PCM_DATA_2chpattern_making( &destsizeByte,
							  (unsigned int)(PCM_REC_BUF), (unsigned int)6,4400, 16);
	setting=sPCMtestInfo_Def1[0];
	setting.PCMPort=g_oPCMState.PCMPort;				
	PCM_Display(setting);				
	PCM_AUTO_set(setting);//pclk, msb during high, 16fs*n		
	
	//setting
	PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
	PCM_CodecInitPCMOut(g_oPCMState.PCMSync, g_oPCMState.PCMMSBPosition, g_oPCMState.PCMSClk, g_oPCMState.PCMClkSrc);						 
	PCM_SetPort(g_oPCMState.PCMPort);
	
	//play
	g_oPCMState.Playmode = PCM_DMA;
	PCM_PCMSetting();
	bret = PCM_PCMOutDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_TXALMOSTEMPTY);//ok
	if(bret==FALSE) failcnt++;
	bret = PCM_PCMOutDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_TXEMPTY);//ok
	if(bret==FALSE) failcnt++;
	bret = PCM_PCMOutDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_TXSTARVE);//ok
	if(bret==FALSE) failcnt++;		
//	bret = PCM_PCMOutDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_NOTPENDING_TXEMPTY);
//	if(bret==FALSE) failcnt++;	

	
	//... fill more.
	
	//exit
	PCM_CodecExitPCMOut();	
	
	printf("############## Fail count %d ##############\n", failcnt );
	
	if( failcnt != 0 ) return FALSE;
	else return TRUE;
	

}



static bool PCMDMARxEnableTest(void)
{
	unsigned int destsizeByte;
	PCM_State setting;
	bool bret;
	int failcnt=0;
	
	printf("recording DMA PCLK clock,  DMA Rx disable Test\n");		
	
	//init
	setting=sPCMtestInfo_Def1[0];
	setting.PCMPort=g_oPCMState.PCMPort;				
	PCM_Display(setting);				
	PCM_AUTO_set(setting);//pclk, msb during high, 16fs*n		
	
	//setting
	PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
	PCM_CodecInitPCMIn(g_oPCMState.PCMSync, g_oPCMState.PCMMSBPosition, g_oPCMState.PCMSClk, g_oPCMState.PCMClkSrc);		//set external codec	
	PCM_SetPort(g_oPCMState.PCMPort);

	//record
	PCM_PCMSetting();
	g_oPCMState.Playmode = PCM_DMA;		
	bret = PCM_PCMInDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_RX_DMA_EN);//ok
	if(bret==FALSE) failcnt++;
	bret = PCM_PCMInDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_FIFOENABLE_RX);//ok
	if(bret==FALSE) failcnt++;	
//	bret = PCM_PCMInDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_PCM_ENABLE_RX);
//	if(bret==FALSE) failcnt++;
//	bret = PCM_PCMInDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_CTL_SERCLK_EN_RX);
//	if(bret==FALSE) failcnt++;
	
	
	
	//... fill more.
	
	//exit
	PCM_CodecExitPCMOut();
	
	
	printf("############## Fail count %d ##############\n", failcnt );
	
	if( failcnt != 0 ) return FALSE;
	else return TRUE;
}


static bool PCMDMARxFULLDetailTest(void)
{
	unsigned int destsizeByte;
	PCM_State setting;
	bool bret;
	int failcnt=0;
	
	printf("recording DMA PCLK clock,  DMA rx disable Test\n");		
	
	//init
	setting=sPCMtestInfo_Def1[0];
	setting.PCMPort=g_oPCMState.PCMPort;				
	PCM_Display(setting);				
	PCM_AUTO_set(setting);//pclk, msb during high, 16fs*n		
	
	//setting
	PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
	PCM_CodecInitPCMIn(g_oPCMState.PCMSync, g_oPCMState.PCMMSBPosition, g_oPCMState.PCMSClk, g_oPCMState.PCMClkSrc);		//set external codec	
	PCM_SetPort(g_oPCMState.PCMPort);

	//record
	g_oPCMState.Playmode = PCM_DMA;	
	PCM_PCMSetting();
	bret = PCM_PCMInDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_RXALMOSTFULL);//ok
	if(bret==FALSE) failcnt++;
	bret = PCM_PCMInDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_RXFULL);//ok
	if(bret==FALSE) failcnt++;
	bret = PCM_PCMInDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_RXOVERFLOW);//ok
	if(bret==FALSE) failcnt++;	
//	bret = PCM_PCMInDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_NOTPENDING_RXFULL);
//	if(bret==FALSE) failcnt++;	
	
	
	//... fill more.
	
	//exit
	PCM_CodecExitPCMOut();
	
	
	printf("############## Fail count %d ##############\n", failcnt );
	
	if( failcnt != 0 ) return FALSE;
	else return TRUE;
}

static bool PCMDMARxEMPTYDetailTest(void)
{
	unsigned int destsizeByte;
	PCM_State setting;
	bool bret;
	int failcnt=0;
	
	printf("recording DMA PCLK clock,  DMA rx disable Test\n");		
	
	//init
	setting=sPCMtestInfo_Def1[0];
	setting.PCMPort=g_oPCMState.PCMPort;				
	PCM_Display(setting);				
	PCM_AUTO_set(setting);//pclk, msb during high, 16fs*n		
	
	//setting
	PCM_SelClkSrc(g_oPCMState.PCMPort, g_oPCMState.PCMClkSrc, 1);
	PCM_CodecInitPCMIn(g_oPCMState.PCMSync, g_oPCMState.PCMMSBPosition, g_oPCMState.PCMSClk, g_oPCMState.PCMClkSrc);		//set external codec	
	PCM_SetPort(g_oPCMState.PCMPort);

	//record
	g_oPCMState.Playmode = PCM_DMA;	
	PCM_PCMSetting();
//	bret = PCM_PCMInDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_RXALMOSTEMPTY);//ok
//	if(bret==FALSE) failcnt++;
//	bret = PCM_PCMInDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_RXEMPTY);//ok
//	if(bret==FALSE) failcnt++;
	bret = PCM_PCMInDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_RXSTARVE);
	if(bret==FALSE) failcnt++;
//	bret = PCM_PCMInDMA(PCM_REC_BUF, (g_oPCMState.PCMSync*2*20) , PCM_Detail_PCM_IRQ_NOTPENDING_RXEMPTY);
//	if(bret==FALSE) failcnt++;	
		
	//... fill more.
	
	//exit
	PCM_CodecExitPCMOut();
	
	
	printf("############## Fail count %d ##############\n", failcnt );
	
	if( failcnt != 0 ) return FALSE;
	else return TRUE;
}



/////////////////////////////////////////////////////////////////////
//  detail test functions
//
//
//

//////////////////////////////////////////////////
//		TX

//verify : pcm_tx_dma_en : 0 -disable 
//specify how it work :       DMA reqeust will not be occur at when fifo is not 'almost full.( >(32-8) , bigger than >= 25)
//							  when fifo cnt is <=24 , request will not be occur.
//test scenario : in the middle of dma playing set PCM_TX_DMA_EN to 0
bool PCM_Detail_PCM_TX_DMA_EN()
{
	int i, j;
	int tc1, tc2;
	int failnum=0;
	int testreg;
	unsigned int *rPCM_CTL=(g_oPCMState.PCMPort==0)?(unsigned int *)&rPCM_CTL0:(unsigned int *)&rPCM_CTL1;
	unsigned int *rPCM_CLKCTL=(g_oPCMState.PCMPort==0)?(unsigned int *)&rPCM_CLKCTL0:(unsigned int *)&rPCM_CLKCTL1;
	unsigned int *rPCM_TXFIFO=(g_oPCMState.PCMPort==0)?(unsigned int *)&rPCM_TXFIFO0:(unsigned int *)&rPCM_TXFIFO1;
	
	PCM_DisableInt();//interrupt will not be occur.	
	
	*rPCM_CLKCTL&= ~(PCM_SCLK_EN);		
	*rPCM_CTL&= ~(PCM_PCM_ENABLE);//pause

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -