📄 pcm_test.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 + -