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

📄 pcm_test.c

📁 s3c6400 ADS下官方测试程序
💻 C
字号:
/********************************************************************************
* 
*	Project Name : S3C6400 Validation
*
*	Copyright 2006 by Samsung Electronics, Inc.
*	All rights reserved.
*
*	Project Description :
*		This software is only for verifying functions of the S3C6400.
*		Anybody can use this software without our permission.
*  
*--------------------------------------------------------------------------------
* 
*	File Name : PCM_test.c
*  
*	File Description :
*
*	Author	: Y.H.Lee
*	Dept. : AP Development Team
*	Created Date : 2007/03/16
*	Version : 0.1 
* 
*	History
*	- Version 0.1 (2007/03/16)
*	  -> Available with AK2440 PCM Codec.
*  
********************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include "def.h"
#include "option.h"
#include "library.h"
#include "sfr6400.h"
#include "system.h"
#include "gpio.h"
#include "intc.h"
#include "dma.h"

#include "ac97.h"
#include "pcm.h"

void PCM_Test(void);
static void PCMCodecRegWR(void);
static void PCMInOut(void);

static PCM_PORT 	ePcmPort;
static AC97_PORT 	eAc97Port; 
static PCM_SCLK 	ePcmSclk;
static PCM_CLKSRC 	ePcmClkSrc;

void PCM_Test(void)
{	
	const testFuncMenu pcm_function[]=
	{
		0,         			"Exit\n",	
		PCMCodecRegWR,		"PCM CODEC Register Write/Read Test",
		PCMInOut,			"PCM In/Out Test",
		
		0,							 0
	};

	#if(PCM_MODULE == PCM_MODULE0)
		ePcmPort = PCM_PORT0;
		eAc97Port = PORT1;
	#elif(PCM_MODULE == PCM_MODULE1)
		ePcmPort = PCM_PORT1;
		eAc97Port = PORT0;
	#endif	


	#if(PCMCLKSOURCE  == PCMCLKSOURCE_MOUT_EPLL)
		ePcmClkSrc = PCM_MOUT_EPLL;
	
	#elif(PCMCLKSOURCE == PCMCLKSOURCE_DOUT_MPLL)
		ePcmClkSrc = PCM_DOUT_MPLL;
	
	#elif(PCMCLKSOURCE == PCMCLKSOURCE_FIN_EPLL)
		ePcmClkSrc = PCM_FIN_EPLL;

	#elif(PCMCLKSOURCE == PCMCLKSOURCE_PCMCDCLK)
		ePcmClkSrc = PCM_PCMCDCLK;

	#elif(PCMCLKSOURCE == PCMCLKSOURCE_PCLK)
		ePcmClkSrc = PCM_PCLK;
	
	#endif	

	PCM_SetPort(ePcmPort);
	AC97_SetPort(eAc97Port);
	Delay(1000);	
	
	PCM_SelClkSrc(ePcmPort, ePcmClkSrc);
	
	Delay(1000);

	#if(PCMSCLK == PCMSCLK_128K)
		ePcmSclk = SCLK_128K;
	#elif(PCMSCLK == PCMSCLK_256K)
		ePcmSclk = SCLK_256K;
	#elif(PCMSCLK == PCMSCLK_512K)
		ePcmSclk = SCLK_512K;
	#endif	
	
	
	while (1)
	{
		u32 i, nSel;
		
		Disp("\n");

		Disp("========================================================\n");			

		for (i=0; (int)(pcm_function[i].desc)!=0; i++)
		{
			Disp("%2d: %s\n", i,pcm_function[i].desc);
		}

		Disp("========================================================\n");			
		Disp("\nSelect the function to test : ");

		nSel = GetIntNum();

		Disp("\n");

		if (nSel == 0)
			break;
		if (nSel>0 && nSel<(sizeof(pcm_function)/8-1))
			 (pcm_function[nSel].func)();
	}
	
}


static void PCMCodecRegWR(void)
{
	u32 i;

	#if (PCM_CODEC_NAME	== AK2430)	
		
	    Disp("\nIIC Test of AK2430 PCM Codec.\n");
		Disp("\nReg. Addr.	Reg. Data\n");	

		//for(i=0x2; i<0x1e; i++)
	       //	Disp("%2x		%2x \n", i, PCM_CODEC_IICRead(0x9e, i));		
		
		for(i=0;i<32;i++)
		{
			PCM_CODEC_IICWrite(0x9e, 0x15, i);
	       	//Disp("MASTERVOL: %2x \n", PCM_CODEC_IICRead(0x9e, 0x15));		
		}

	#elif (PCM_CODEC_NAME == WM9713)	
	
		u32 uOutVol;
	
		Disp("\nRegister W/R Test of WM9713 PCM Codec.\n");
	
		if(AC97_Init())
		{	
			for(i=0; i<32; i++)
			{
				AC97_CodecCmd(WRITE,0x04,i);		// Set HPL/R Volume 
				uOutVol = AC97_CodecCmd(READ,0x04,0x00000);
				Disp("HPL/R Volume: %2x \n", uOutVol);
			}
		}
	/////////////////////////////////////////////////////////////////////
	#elif (PCM_CODEC_NAME	== WM8753)	
		
	    Disp("\nIIC Test of WM8753 PCM Codec.\n");

		for(i=0; i<128; i++)
		{
			PCM_CODEC_IICWrite(0x34, 0x58, i);
			Disp(".");
	      	Delay(1000);
		} 
		
		Disp("\n");
	/////////////////////////////////////////////////////////////////////	
	#else
		Assert(0);
	#endif
	
}


static void PCMInOut(void)
{
	int i;
	
	Disp("\nSelect PCM In/Out Operation Mode\n");
	Disp("0: Interrupt, 1: DMA\n");
	i = GetIntNum();

	if(i==0)
	{
		PCM_CodecInitPCMIn(ePcmSclk);
		PCM_PCMInInt(PCM_REC_BUF, PCM_REC_LEN, ePcmClkSrc);
		PCM_CodecExitPCMIn();

		PCM_CodecInitPCMOut(ePcmSclk);
		PCM_PCMOutInt(PCM_REC_BUF, PCM_REC_LEN, ePcmClkSrc);	
	}
	else if(i==1)
	{
	
		PCM_CodecInitPCMIn(ePcmSclk);
		PCM_PCMInDMA(PCM_REC_BUF, PCM_REC_LEN, ePcmClkSrc);
		PCM_CodecExitPCMIn();

		PCM_CodecInitPCMOut(ePcmSclk);
		PCM_PCMOutDMA(PCM_REC_BUF, PCM_REC_LEN, ePcmClkSrc);
		
	}
	PCM_CodecExitPCMOut();	
}



⌨️ 快捷键说明

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