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

📄 iis_test.c

📁 samsung 最新芯片2450 的测试程序.
💻 C
📖 第 1 页 / 共 2 页
字号:
/*======================================================================

 Project Name : S3C2450

 Copyright 2007 by Samsung Electronics, Inc.
 All rights reserved.

 Project Description :
 This software is only for verifying functions of the S3C2450. 
 Anybody can use this code without our permission.

 File Name    : iis_test.c
 Description  : S3C2450 IIS module test code
 Author       : Dongjin Kim
 Dept         : AP
 Created Date : 2007.10.18
 Version      : 0.0
 History
   R0.0 (2007.10.18): draft
   		- S3C2450 IIS test code is derived from S3C2443 IIS test code.
		- S3C2443 IIS test code is derived from S3C2413A IIS test code.
		
=======================================================================*/

#include "System.h"
#include "iis.h"
#include "audiolibrary.h"

#define CLK_PCLK_XTAL_12	0//I2S_CODEC_CLK
#define CLK_PCLK_EXTCLK_169344	1//nor update is needed
#define CLK_PCLK_EXTCLK_12	2
/*
	CLK_EPLL_DIV_XTAL = 0x2;
	CLK_EPLL_DIV_EXTCLK = 0x3;
	CLK_EPLL_REF10_XTAL = 0x4;
	CLK_EPLL_REF10_EXTCLK = 0x5;
	CLK_EPLL_REF11_XTAL =0x6;
	CLK_EPLL_REF11_EXTCLK	=0x7;
	CLK_EXT_CODEC_CLK = 0x8;
*/	


#define PCLK_12__8_455	8455//I2S_CODEC_CLK_SPEED
#define PCLK_12__16_910	16910
#define PCLK_16_9344__16_9344 16934


/////////////////////////////////////////////////////
// Global variable
/////////////////////////////////////////////////////
extern IIS_State 		g_oI2SState;
int g_I2S_Port = I2S_PORT0;//default
int g_I2S_MasterSlave = I2S_MASTER;//default
int g_I2S_DmaPolling = I2S_DMA;//default
int g_I2S_Totch = 2;//default
/////////////////////////////////////////////////////
// Externs SFR & IP & Codec Functions
/////////////////////////////////////////////////////

//console.c
extern unsigned int AUTO_DownloadData(int downaddr);

//audiolibrary.c
extern unsigned int PCM_TestSourceDownload(unsigned int destaddr, char* string);
extern bool PCM_DATA_2chpattern_making( unsigned int* destsizeByte,
							  unsigned int destaddr, unsigned int totrepeat, int eachrepeat, int BitperCh);
extern bool PCM_DATA_masking(unsigned int destaddr, int datasizeByte, int bit, int Totalch, int maskingch);
extern bool PCM_DATA_2chexpanding(unsigned int destaddr, int destTotch, unsigned int* destsizeByte, 
								  unsigned int orgaddr , int orgTotch, unsigned int orgsizeByte, int orgBit);
extern bool PCM_ContinuousPCM2FifoFormat_converting(unsigned int destaddr, unsigned int* destsizeByte, int destbit,
						unsigned int orgaddr, int orgsizeByte, int orgbit);	

//audiounittest.c
extern bool I2S_unittest();


//iis.c
extern void IIC_open( unsigned int freq);		//	Hz order.
extern void IIC_close( void);
extern void IIS_PlayWave_DMA(int port, unsigned char *start_addr, unsigned int play_size, int bitperch);
extern void I2S_Testdataprepare();
extern void I2S_Testdataprepare2();
extern void I2S_Testdataprepare3();
extern void I2S_Testdataprepare4();

extern bool I2S_SFR_test(int Port);

//iisnew.c
extern bool I2S_Setting(int port, int MasterSlave, int trx, int i2sformat, int rootfs, int bitclkfs, int ch, int bit, int DmaPolling);
extern void I2S_PCLK_speed_change(int speed, int fin);
extern bool I2S_MasterBasicTestSub(	int Port, 
								int dataformat, int bit, int Totch,
								unsigned int sourceaddr, unsigned int sourcesize);
extern bool I2S_ChannelTest(int testsource, int port, int dataformat, int totch, int bit, int maskingch, bool testsourceredownload);


//iis_codec.c
extern void I2SCODEC_SendWmData(unsigned char reg_addr, unsigned short data);						

/////////////////////////////////////////////////////
// IP test Functions
/////////////////////////////////////////////////////
void I2S_Select_port(void);
void I2S_Select_dmapolling(void);

void I2S_SFR_test01(void);//1
bool I2S_Mastermode_I2S_linktest(void);//2

void I2S_Codec_interfaceTest(void);//3


bool I2S_CodecsoundoutDefaultTest(void);//5
bool I2S_CodecsoundoutTest(void);//6
bool I2S_CodecsoundoutTest2(void);//7

bool I2S_PlayingDatabitTest(void);//8
bool I2S_ChannelCummTest(int testsource, int port, int totch, int bit);//common
bool I2S_ChannelTestPattern(void);//9-1
bool I2S_ChannelTestWave(void);//9-2
bool I2S_DataformatTest(void);//10


bool I2S0_MasterClockSelectionTestEXT(void);//pclk -EXT
bool I2S0_MasterClockSelectionTest(void);
bool I2S0_SlaveClockSelectionTest0(void);
bool I2S0_SlaveClockSelectionTest1(void);
bool I2S_ClockSelectionTestSub(	int Port, int Opmode,
								int CodecClk, int ClkSpeed,
								int CodecChip,
								unsigned int sourceaddr, unsigned int sourcesize);

void I2S1_SFR_test(void);


/////////////////////////////////////////////////////
// Test functions Lists & Calls routine
/////////////////////////////////////////////////////

void * func_iisALL_test[][2]=
{	
	//  									"123456789012345678901"
	//IIS Function Test Item	

	(void *)I2S_Mastermode_I2S_linktest,	"I2S_Mastermode_I2S_linktest", //2

   	(void *)I2S_Codec_interfaceTest,		"I2S Codec interface test", //3
   	(void *)I2S_CodecsoundoutDefaultTest,	"I2S Codec sound out test(L+R) 16bit pcm",//5   	   	
   	(void *)I2S_CodecsoundoutTest,			"I2S Codec sound out test(L+R) with wave pcm format(little endian continous) check",//6
	(void *)I2S_CodecsoundoutTest2,			"I2S Codec sound out test2(L/ R) ",//7
	
	(void *)I2S_PlayingDatabitTest,			"I2S Master Data bit test(24bit) ",//8
	(void *)I2S_ChannelTestPattern,			"I2S Master ch/bit test(Test pattern)",//9-1
	(void *)I2S_ChannelTestWave,			"I2S Master ch/bit test(wave file)",//9-2
	(void *)I2S_DataformatTest,				"I2S Master Data format test(i2s/msb/lsb)",//10

	(void *)I2S0_MasterClockSelectionTestEXT,"I2S0 Master Clock selection test(PCLK-EXTCLK) ",
   	(void *)I2S0_MasterClockSelectionTest,	"I2S0 Master Clock selection test ",
   	
   	(void *)I2S_unittest,					"Unit test for tool",   	
	//IIS0+1 Function Test Item
    0,0
};


//default setting :
// master : i2s0
// slave : wm8580
// PCLK(XTAL), 12Mhz,
// codec clock 16.934Mhz 44000Hz, 384fs,DMA, tx, i2s format, 2ch

// testpattern + 16bit
//2.
bool I2S_Mastermode_I2S_linktest(void)
{
	bool bret;
	int failnum;

	printf("set om pin to 0 for XTAL\n" );
	if(g_I2S_Port==I2S_PORT0)	
		printf("check I2S0 link CON19 LRCLK[3] bitclk[1] sdout[5] cdclk[2] sin[4] by logic analyzer auto triggered on lrclk\n" );
	else
		printf("check I2S0 link CON19 LRCLK[9] bitclk[7] sdout[11] cdclk[8] sin[10] by logic analyzer auto triggered on lrclk\n" );
	
	printf("check sout bit 16b'1000 0000 0000 0001 for lrclk(low) 1'b1 is moving left\n" );
	printf("	  sout bit 16b'1000 0000 0000 0001 for lrclk(high) 1'b1 is moving right\n" );

	//WM8580, master, PCLK,XTAL,12Mhz,
	//codec clock 16.934Mhz 44000Hz, 384fs,DMA, tx, i2s format, 2ch	
	printf("test for 2ch 16 bit data out\n");	
/*
	PCM_DATA_2chpattern_making( &destsizeByte,
							 (unsigned int)0x31000000, 500000/5000,5000,16);
	bret=I2S_MasterBasicTestSub(g_I2S_Port, I2S_FORMAT_I2S, 16, 2,
								0x31000000, destsize);
								//int Port, int bit, int Totch,
								//unsigned int sourceaddr, unsigned int sourcesize)	 
*/
	
	bret=I2S_ChannelTest(0, g_I2S_Port, I2S_FORMAT_I2S, 2, 16, 0, 1);//test pattern
						//int testsource, int port, int totch, int bit, int maskingch, bool testsourceredownload)
	if(!bret) failnum++;
	
	printf("test for 2ch 24 bit data out\n");
	bret=I2S_ChannelTest(0, g_I2S_Port, I2S_FORMAT_I2S, 2, 24, 0, 1);//test pattern
						//int testsource, int port, int totch, int bit, int maskingch, bool testsourceredownload)
	if(!bret) failnum++;
	
	printf("test for 2ch 8 bit data out\n");
	bret=I2S_ChannelTest(0, g_I2S_Port, I2S_FORMAT_I2S, 2, 8, 0, 1);//test pattern
						//int testsource, int port, int totch, int bit, int maskingch, bool testsourceredownload)
	if(!bret) failnum++;
	
	if(failnum>0) return 0;
	else return 1;
}


//3. I2S test
void I2S_Codec_interfaceTest(void)
{
	IIC_open( (unsigned int)200000);	//	Serial EEPROM IIC clk = 200KHz
	printf("codec write test, check SCL(FPGA IO b'd R187), SDA(FPGA IO b'd R186) line by logic analyzer, sigle triggered on scl, run to wait\n");
	
	printf("\nready to press any key\n");
	getchar();
	printf("\ncheck 8b'00110100+0 , 8'b01101010+0, 8'b00000000+0\n");
	I2SCODEC_SendWmData(53, 0x000);				// Reset WM8580
	printf("check wave form\n");
	
	printf("\nready to press any key\n");
	getchar();
	printf("check 8b'00110100+0 , 8'b0110010+0, 8'b00000010+0\n");
	I2SCODEC_SendWmData(50, 0x002);				// All Digital running, ADC disable, DAC1,2,3 enable, DACs under control of DACPD[3:0]
	printf("check wave form\n");
	
	//codec read part should be added here
	
	
	IIC_close();
	
	
	printf("\n");	
	printf("press for finish\n");
	getchar();
	
}


//with default setting check all with clock source selection playing are ok
// master : i2s0
// slave : wm8580
// PCLK(XTAL), 12Mhz,
// codec clock 16.934Mhz 44000Hz, 384fs,DMA, tx, i2s format, 2ch

//5. I2S Codec sound out test(L+R) by 16bit pcm wave file uart downloading
// pcm + 16bit
bool I2S_CodecsoundoutDefaultTest(void)
{
	int failnum;
	bool bret=0;
	unsigned int destsize;
	unsigned int orgsize;

	orgsize=PCM_TestSourceDownload(PCM_TESTPLAYINGDATA_BASE, "please download 44000Hz 16bit 2ch stereo Wave pcm file\n");	
	
	printf("please set om[0] hardware pin to 0, and XTAL is installed with 12Mhz\n");
	printf("if not, please turn off board, set, then restart this test\n");
	
		
	//internal master
	printf("\n16.934Mhz, 44000Hz, 384fs, i2s format, 2ch, 16bit wave file\n");
	printf("\ncodec 2ch sound out(left+right) test with pcm format check to press any key\n");
	getchar();
	bret=I2S_MasterBasicTestSub(g_I2S_Port, I2S_FORMAT_I2S, 16, 2,
							PCM_TESTPLAYINGDATA_BASE+4+0x2c, orgsize-0x2c);
							//int Port, int bit, int Totch,
							//unsigned int sourceaddr, unsigned int sourcesize)
	if(!bret) failnum++;

	if(failnum>0) return 0;
	else return 1;
}


//with default setting check all with clock source selection playing are ok
// master : i2s0
// slave : wm8580
// PCLK(XTAL), 12Mhz,
// codec clock 16.934Mhz 44000Hz, 384fs,DMA, tx, i2s format, 2ch

//6. I2S PCM wave file format check
// pcm + 16bit(from 32bit to 16bit, 32bit to 24bit then to 16bit)
bool I2S_CodecsoundoutTest(void)
{
	int failnum;
	bool bret=0;
	unsigned int destsizeByte;
	unsigned int orgsize;

	orgsize=PCM_TestSourceDownload(PCM_WAVEFILE_ORG_BASE, "please download 44000Hz 32bit 2ch stereo Wave pcm file\n");
	
	printf("please set om[0] hardware pin to 0, and XTAL is installed with 12Mhz\n");
	printf("if not, please turn off board, set, then restart this test\n");
	
		
	//internal master

	//2ch 32bit pcm to 16bit
	PCM_ContinuousPCM2FifoFormat_converting(PCM_TESTPLAYINGDATA_BASE, &destsizeByte, 16,
						   PCM_WAVEFILE_ORG_BASE+4+0x2c, orgsize-0x2c, 32);
						//unsigned int destaddr, unsigned int* destsize, int destbit,
						//unsigned int orgaddr, int orgsize, int orgbit);
	printf("\n16.934Mhz, 44000Hz, 384fs, i2s format, 2ch, 16bit wave file\n");
	printf("\ncodec 2ch sound out(left+right) test with pcm format check to press any key\n");
	getchar();
	bret=I2S_MasterBasicTestSub(g_I2S_Port, I2S_FORMAT_I2S, 16, 2,
							PCM_TESTPLAYINGDATA_BASE, destsizeByte);
							//int Port, int bit, int Totch,
							//unsigned int sourceaddr, unsigned int sourcesize)
	if(!bret) failnum++;
	

	//2ch 24bit pcm to 16bit
	PCM_ContinuousPCM2FifoFormat_converting(PCM_TEMPORARILY_CONVERTING_BASE, &destsizeByte, 24,
						   PCM_WAVEFILE_ORG_BASE+4+0x2c, orgsize-0x2c, 32);
						//unsigned int destaddr, unsigned int* destsize, int destbit,
						//unsigned int orgaddr, int orgsize, int orgbit);
	PCM_ContinuousPCM2FifoFormat_converting(0x3100000, &destsizeByte, 16,
						   PCM_TEMPORARILY_CONVERTING_BASE, destsizeByte, 24);
						//unsigned int destaddr, unsigned int* destsize, int destbit,
						//unsigned int orgaddr, int orgsize, int orgbit);
	printf("\n16.934Mhz, 44000Hz, 384fs, i2s format, 2ch, 16bit wave file\n");
	printf("\ncodec 2ch sound out(left+right) test with pcm format check to press any key\n");
	getchar();
	bret=I2S_MasterBasicTestSub(g_I2S_Port, I2S_FORMAT_I2S, 16, 2,
							PCM_TESTPLAYINGDATA_BASE, destsizeByte);
							//int Port, int bit, int Totch,
							//unsigned int sourceaddr, unsigned int sourcesize)
	if(!bret) failnum++;
	
	
	if(failnum>0) return 0;
	else return 1;
}




//with default setting check all with clock source selection playing are ok
// master : i2s0
// slave : wm8580
// PCLK(XTAL), 12Mhz,
// codec clock 16.934Mhz 44000Hz, 384fs,DMA, tx, i2s format, 2ch

//7. I2S Codec sound out test2(L/ R)
// pcm + 16bit
bool I2S_CodecsoundoutTest2(void)
{
	int failnum;
	bool bret=0;

	//internal master
	
	//1ch left : 2ch (right-high16) mask
	bret = I2S_ChannelTest(1,g_I2S_Port,I2S_FORMAT_I2S,2,16, 2, 1);//wave
							//int testsource, int port, int totch, int bit, int maskingch, bool testsourceredownload)
	if(!bret) failnum++;
	
	//2ch right : 1ch (left-low 16) mask
	bret = I2S_ChannelTest(1,g_I2S_Port,I2S_FORMAT_I2S,2,16, 1, 1);//wave
							//int testsource, int port, int totch, int bit, int maskingch, bool testsourceredownload
	if(!bret) failnum++;

	if(failnum>0) return 0;
	return bret;
}


// master : i2s0
// slave : wm8580
// PCLK(XTAL), 12Mhz,
// codec clock 16.934Mhz 44000Hz, 384fs,DMA, tx, i2s format, 2ch

//8. I2S Master Data bit test(24bit)
bool I2S_PlayingDatabitTest(void)
{
	printf("\ncodec 2ch 24bit sound out(left+right) test to press any key\n");
	getchar();
	return I2S_ChannelTest(1, g_I2S_Port, I2S_FORMAT_I2S, 2, 24, 0, 1);//wave
						//int testsource, int port, int totch, int bit, int maskingch, bool testsourceredownload
}


//with default setting check all with clock source selection playing are ok
// master : i2s0
// slave : wm8580
// PCLK(XTAL), 12Mhz,
// codec clock 16.934Mhz 44000Hz, 384fs,DMA, tx, i2s format,

//9-1. pcm + 16bit + 6ch
bool I2S_ChannelTestPattern(void)
{
	int i;
	printf("Channel test by test pattern\n");	
	printf("2CH. 1. 16bit,  2. 24bit,  3. 8bit \n");
	if(g_I2S_Port == I2S_PORT0)
	{
		printf("6CH. 4. 16bit,  5. 24bit,  6. 8bit \n");
		printf("4CH. 7. 16bit,  8. 24bit,  9. 8bit \n");		
	}
	i = GetIntNum(); 
	
	if(i==1) 	  return I2S_ChannelCummTest(0, g_I2S_Port, 2, 16);//test pattern
	else if(i==2) return I2S_ChannelCummTest(0, g_I2S_Port, 2, 24);//test pattern
	else if(i==3) return I2S_ChannelCummTest(0, g_I2S_Port, 2, 8);//test pattern

	if(g_I2S_Port != I2S_PORT0)	return 0;

	if(i==4) 	  return I2S_ChannelCummTest(0, g_I2S_Port, 6, 16);//test pattern
	else if(i==5) return I2S_ChannelCummTest(0, g_I2S_Port, 6, 24);//test pattern
	else if(i==6) return I2S_ChannelCummTest(0, g_I2S_Port, 6, 8);//test pattern
	
	else if(i==7) return I2S_ChannelCummTest(0, g_I2S_Port, 4, 16);//test pattern
	else if(i==8) return I2S_ChannelCummTest(0, g_I2S_Port, 4, 24);//test pattern
	else if(i==9) return I2S_ChannelCummTest(0, g_I2S_Port, 4, 8);//test pattern
	else return 0;
}



//with default setting check all with clock source selection playing are ok
// master : i2s0
// slave : wm8580
// PCLK(XTAL), 12Mhz,
// codec clock 16.934Mhz 44000Hz, 384fs,DMA, tx, i2s format,

⌨️ 快捷键说明

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