Exemple #1
0
void I2S_PCMDataInOutDMA(AUDIO_PORT rhs_ePort)
{
	UART_Printf("Supply Sound to I2S CODEC via Line In Connector.\n");
	UART_Printf("Press any key to record.\n");
	UART_Getc();
	UART_Printf("Recording...\n");	
	
	if ((g_oI2SInfor[rhs_ePort].m_CLKSRC != I2S_EXTERNALCDCLK) && (g_oI2SInfor[rhs_ePort].m_eOpMode == Master)) 
	{
		I2S_CDCLKOut(rhs_ePort);											
	}
	else if ((g_oI2SInfor[rhs_ePort].m_CLKSRC == I2S_FIN) && (g_oI2SInfor[rhs_ePort].m_eOpMode == Slave)) 
	{
		I2S_CDCLKOut(rhs_ePort);										//12MHz Out
	}
	else if ((g_oI2SInfor[rhs_ePort].m_CLKSRC != I2S_EXTERNALCDCLK) && (g_oI2SInfor[rhs_ePort].m_CLKSRC != I2S_FIN) && (g_oI2SInfor[rhs_ePort].m_eOpMode == Slave)) 
	{
		if ( g_oI2SInfor[rhs_ePort].m_dSamplingFreq % 11025)
			I2S_SetEpllCDCLKOut(rhs_ePort, I2S_USERCLKOUT2);					// 11.2896MHz Out
		else
			I2S_SetEpllCDCLKOut(rhs_ePort, I2S_USERCLKOUT1);					// 12.288MHz Out
	}
	
	#if (I2S_CODEC == WM8753)
		WM8753_CodecInitPCMIn(g_oI2SInfor[rhs_ePort].m_eDataFormat, (u32) g_oI2SInfor[rhs_ePort].m_dSamplingFreq, 
								g_oI2SInfor[rhs_ePort].m_eOpMode,  g_oI2SInfor[rhs_ePort].m_eWordLength, LINEIN, SMDK_I2S);
	#elif (I2S_CODEC == WM8990)
		WM8990_CodecInitPCMIn(g_oI2SInfor[rhs_ePort].m_eDataFormat, (u32) g_oI2SInfor[rhs_ePort].m_dSamplingFreq,
								g_oI2SInfor[rhs_ePort].m_eOpMode,  g_oI2SInfor[rhs_ePort].m_eWordLength, LINEIN, SMDK_I2S);
	#elif (I2S_CODEC == WM8580)
		WM8580_CodecInitPCMIn(g_oI2SInfor[rhs_ePort].m_eDataFormat, (u32) g_oI2SInfor[rhs_ePort].m_dSamplingFreq, 
								g_oI2SInfor[rhs_ePort].m_eOpMode, g_oI2SInfor[rhs_ePort].m_eWordLength, LINEIN, SMDK_I2S);
	
	#endif
	I2SMOD_SetTXR(rhs_ePort, RXOnly);
	I2S_DataInDMAStart(rhs_ePort);
	I2S_DataInDMAStop(rhs_ePort);

	UART_Printf("\nListen to Sound via Speak Out Connector.\n");
	UART_Printf("Press any key to play.\n");
	UART_Getc();	
	
	#if (I2S_CODEC == WM8753)
		WM8753_CodecInitPCMOut(g_oI2SInfor[rhs_ePort].m_eDataFormat, (u32) g_oI2SInfor[rhs_ePort].m_dSamplingFreq, 
								g_oI2SInfor[rhs_ePort].m_eOpMode,  g_oI2SInfor[rhs_ePort].m_eWordLength, SMDK_I2S);
	#elif (I2S_CODEC == WM8990)
		WM8990_CodecInitPCMOut(g_oI2SInfor[rhs_ePort].m_eDataFormat, (u32) g_oI2SInfor[rhs_ePort].m_dSamplingFreq,	
								g_oI2SInfor[rhs_ePort].m_eOpMode,  g_oI2SInfor[rhs_ePort].m_eWordLength, SMDK_I2S);
	#endif
	I2SMOD_SetTXR(rhs_ePort, TXOnly);
	I2S_DataOutDMAStart(rhs_ePort);
	I2S_DataOutDMAStop(rhs_ePort);
	
}
Exemple #2
0
//////////
// Function Name : EintSW_Test
// Function Description : SMDK6410 EINT SW Test
// Input : 	None
// Output :	None 
// Version : v0.1
void EintSW_Test(void)
{

	u32  usel;
	u32 uEintNo, uFltWidth ;
	u32  uIntType, uFltType;

	UART_Printf("[External Interrupt Test ]\n");
	UART_Printf("\nSelect EINT SW : 0:EINT9, 1:EINT10, 2:EINT11	: ");
	usel=UART_GetIntNum();
	UART_Printf("\n");

	GPIO_Init();
	
	switch(usel)
	{
		case 0: 
				UART_Printf("Selected EINT9 SW..... \n");
				uEintNo = 9;
				GPIO_EINT0ClrPend(uEintNo);
				INTC_SetVectAddr(NUM_EINT1,  Isr_Eint9);		// NUM_EINT1 : Eint[11:4]
				INTC_Enable(NUM_EINT1);
			     	break;
               
		case 1: 
				UART_Printf("Selected EINT10 SW ..... \n");
			     	uEintNo = 10;
			     	GPIO_EINT0ClrPend(uEintNo);
				INTC_SetVectAddr(NUM_EINT1, Isr_Eint10);		// NUM_EINT1 : Eint[11:4]
				INTC_Enable(NUM_EINT1);
			     	break;
		case 2: 
				UART_Printf("Selected EINT11 SW ..... \n");
				uEintNo = 11;
				GPIO_EINT0ClrPend(uEintNo);
				INTC_SetVectAddr(NUM_EINT1,  Isr_Eint11);		// NUM_EINT1 : Eint[11:4]
				INTC_Enable(NUM_EINT1);
			     	break;
			     	
		default : Assert(0);
	}
   
	
	UART_Printf("\nSelect Int. Type : 0:Low Level,  1:High Level,  2:Falling Edge,  3:Rising Edge, 4:Both Edge	: ");
	usel=UART_GetIntNum();
	UART_Printf("\n");

	switch(usel)
	{
		case 0: 
				uIntType= Low_Level;
			     	break;       
		case 1: 
				uIntType= High_Level;
			     	break;
		case 2: 
				uIntType= Falling_Edge;
			     	break;
		case 3: 
				uIntType=Rising_Edge;
			     	break;
	     	case 4: 
				uIntType=Both_Edge;
			     	break;
		default : Assert(0);
	}

	UART_Printf("\nSelect Filter Type : 0:Filter Disable,  1: Delay Filter,  2:Digital Filter	: ");
	usel=UART_GetIntNum();
	UART_Printf("\n");

	switch(usel)
	{
		case 0: 
				uFltType= eDisFLT;
			     	break;       
		case 1: 
				uFltType= eDLYFLT;
			     	break;
		case 2: 
				uFltType= eDIGFLT;
				UART_Printf("\nEnter Filter Width [1~0x3F] :    ");
				uFltWidth = UART_GetIntNum();
				UART_Printf("\n");			
			     	break;
		default : Assert(0);
	}


	GPIO_SetEint0(uEintNo, uIntType, (FLT_eTYPE)uFltType, uFltWidth);
	GPIO_EINT0DisMask(uEintNo);

	g_IntCnt = 0;
	UART_Printf("Press the EINT buttons or Press any key to exit.\n");


	UART_Getc();
	UART_Printf("EINT interrupt is occurred %d.\n", g_IntCnt);


	GPIO_EINT0EnMask(uEintNo);
	INTC_Disable(NUM_EINT1);
	
}
Exemple #3
0
//////////
// Function Name : Pause
// Function Description : This function is Pause
// Input :  none
// Output : none
// Version : 0.1
void Pause(void)			// Added by SOP on 2008/03/04
{
	UART_Printf("\nPress any key continue ...\n");
	UART_Getc();
}
Exemple #4
0
void I2S_LoopBackTest(AUDIO_PORT rhs_ePort)
{
	u32 uSel;
	AUDIO_PORT MasterPort, SlavePort;
	I2S_Infor TempInfor0 = g_oI2SInfor[AUDIO_PORT0], TempInfor1 = g_oI2SInfor[AUDIO_PORT1];
	u32 *pTXDataAddr, *pRXDataAddr;
	s32 uTransferLen = g_oI2SInfor[MasterPort].m_uPcmDataSize;
	//Set Port Mode
	while(1)
	{
		g_TestMode = I2S_DUAL;
		UART_Printf("Loop Back Mode?\n");
		UART_Printf("0. Single Port Mode		1. Loop Back Mode.\n");
		if (UART_GetIntNum() == 1)
		{			
			UART_Printf("Select Master Port\n");
			UART_Printf("0. Port0	1. Port1\n");
			uSel = UART_GetIntNum();
			if (uSel == 0)
			{
				UART_Printf("Master Port : 0, Slave Port : 1\n");
				MasterPort = AUDIO_PORT0;
				SlavePort = AUDIO_PORT1;
			}
			else
			{
				UART_Printf("Master Port : 1, Slave Port : 0\n");
				MasterPort = AUDIO_PORT1;
				SlavePort = AUDIO_PORT0;
			}
			UART_Printf("Data From Master Port to Slave Port\n");
			UART_Printf("Press Any key to start\n");
			UART_Getc();
			
			g_oI2SInfor[MasterPort].m_eOpMode 	= Master;
			g_oI2SInfor[SlavePort].m_eOpMode 	= Slave;
			
			g_oI2SInfor[SlavePort].m_eWordLength	= g_oI2SInfor[MasterPort].m_eWordLength;
			g_oI2SInfor[SlavePort].m_eDataFormat	= g_oI2SInfor[MasterPort].m_eDataFormat;
			g_oI2SInfor[SlavePort].m_eLRCLKPolarity	= g_oI2SInfor[MasterPort].m_eLRCLKPolarity;
			g_oI2SInfor[SlavePort].m_eRFS 		= g_oI2SInfor[MasterPort].m_eRFS;
			g_oI2SInfor[SlavePort].m_eBFS			= g_oI2SInfor[MasterPort].m_eBFS;
			
			I2SMOD_PutData(MasterPort, &(g_oI2SInfor[MasterPort]));
			I2SMOD_PutData(SlavePort, &(g_oI2SInfor[SlavePort]));
			
			I2S_CDCLKOut(MasterPort);
			
			I2SMOD_SetTXR(MasterPort, TXOnly);
			I2SMOD_SetTXR(SlavePort, RXOnly);
			// DMA Start
			I2S_DataOutDMAStart(MasterPort);
			I2S_DataInDMAStart(SlavePort);			

			g_uI2SRecDone[SlavePort]= 0;
			while(g_uI2SRecDone[SlavePort] == 0)
			{
				UART_Printf(".");
        			Delay(3000);
			}			
			 g_uI2SRecDone[SlavePort] = 0; 
			 
			I2S_DataInDMAStop(SlavePort);	
			I2S_DataOutDMAStop(MasterPort);
			
			I2SFIC_AutoFlush(MasterPort, TXRXBoth);
			I2SFIC_AutoFlush(SlavePort, TXRXBoth);
			// Data Test 
			pTXDataAddr = g_oI2SInfor[MasterPort].m_uPlayBufferStartAddr;
			pRXDataAddr = g_oI2SInfor[SlavePort].m_uRecBufferStartAddr;
			uTransferLen = g_oI2SInfor[MasterPort].m_uPcmDataSize;
			
			while(uTransferLen != 0)
			{
				if ( *pTXDataAddr++ == *pRXDataAddr++ );
				else
				{
					UART_Printf("Error!!\n");
					UART_Printf("Address : 0x%x\n", pRXDataAddr);
				}
				uTransferLen -= 4;
			}			
		}
		else
			break;
	}	
	g_TestMode = I2S_SINGLE;
	g_oI2SInfor[AUDIO_PORT0] = TempInfor0;
	g_oI2SInfor[AUDIO_PORT1] = TempInfor1;
}
Exemple #5
0
void I2S_AutoBFSRFSBLCTest(AUDIO_PORT rhs_ePort)
{
	I2S_LRCLKLength			eTempRFS = g_oI2SInfor[rhs_ePort].m_eRFS;
	I2S_EffectiveLength		eTempBFS = g_oI2SInfor[rhs_ePort].m_eBFS;
	PCMWordLength			eTempBLC = g_oI2SInfor[rhs_ePort].m_eWordLength;
	g_oI2SInfor[rhs_ePort].m_eRFS			= RFS_256fs;
	
	
	
	do				//Change the RFS
	{	
		g_oI2SInfor[rhs_ePort].m_eBFS 		= BFS_32fs;
		do			//Change the BFS
		{	
			g_oI2SInfor[rhs_ePort].m_eWordLength = Word16;
			do		//Change the BLC
			{
				I2SMOD_PutData(rhs_ePort, I2S_GetI2SInfor(rhs_ePort));
				UART_Printf("Test Condition\n");
				UART_Printf("RFS : %d\t",(u32) g_oI2SInfor[rhs_ePort].m_eRFS);UART_Printf("BFS: %d\t",(u32) g_oI2SInfor[rhs_ePort].m_eBFS);
				UART_Printf("Word Length : %d\n",(u32) g_oI2SInfor[rhs_ePort].m_eWordLength);
				UART_Printf("Press any key to Test.\n");	
				UART_Getc();
				
				UART_Printf("Supply Sound to I2S CODEC via Line In Connector.\n");
				if ((g_oI2SInfor[rhs_ePort].m_CLKSRC != I2S_EXTERNALCDCLK) && (g_oI2SInfor[rhs_ePort].m_eOpMode == Master)) 
				{
					I2S_CDCLKOut(rhs_ePort);											
				}
				else if ((g_oI2SInfor[rhs_ePort].m_CLKSRC == I2S_FIN) && (g_oI2SInfor[rhs_ePort].m_eOpMode == Slave)) 
				{
					I2S_CDCLKOut(rhs_ePort);										//12MHz Out
				}
				else if ((g_oI2SInfor[rhs_ePort].m_CLKSRC != I2S_EXTERNALCDCLK) && (g_oI2SInfor[rhs_ePort].m_CLKSRC != I2S_FIN) && (g_oI2SInfor[rhs_ePort].m_eOpMode == Slave)) 
				{
					if ( g_oI2SInfor[rhs_ePort].m_dSamplingFreq % 11025)
						I2S_SetEpllCDCLKOut(rhs_ePort, I2S_USERCLKOUT2);					// 11.2896MHz Out
					else
						I2S_SetEpllCDCLKOut(rhs_ePort, I2S_USERCLKOUT1);					// 12.288MHz Out
				}
				WM8753_CodecInitPCMIn(g_oI2SInfor[rhs_ePort].m_eDataFormat, (u32) g_oI2SInfor[rhs_ePort].m_dSamplingFreq, 
										g_oI2SInfor[rhs_ePort].m_eOpMode,  g_oI2SInfor[rhs_ePort].m_eWordLength, LINEIN, SMDK_I2S);
				I2S_DataInDMAStart(rhs_ePort);
				I2S_DataInDMAStop(rhs_ePort);

				UART_Printf("\nListen to Sound via Speak Out Connector.\n");
				UART_Printf("Press any key to play.\n");	
				
				
				WM8753_CodecInitPCMOut(g_oI2SInfor[rhs_ePort].m_eDataFormat, (u32) g_oI2SInfor[rhs_ePort].m_dSamplingFreq, 
										g_oI2SInfor[rhs_ePort].m_eOpMode,  g_oI2SInfor[rhs_ePort].m_eWordLength, SMDK_I2S);
				I2S_DataOutDMAStart(rhs_ePort);
				I2S_DataOutDMAStop(rhs_ePort);

				if ( (u32) g_oI2SInfor[rhs_ePort].m_eWordLength < (u32)  Word8)
					(u32)(g_oI2SInfor[rhs_ePort].m_eWordLength)++;
				else 
					break;				
				
			}while(1);	

			if ( (u32) g_oI2SInfor[rhs_ePort].m_eBFS < (u32) BFS_24fs)
				(u32) g_oI2SInfor[rhs_ePort].m_eBFS++;
			else 
				break;
			
		}while(1);	

		if ( (u32) g_oI2SInfor[rhs_ePort].m_eRFS < (u32) RFS_768fs)
				(u32) g_oI2SInfor[rhs_ePort].m_eRFS++;
		else 
			break;
		
	}while(1);

	g_oI2SInfor[rhs_ePort].m_eRFS 		= eTempRFS;
	g_oI2SInfor[rhs_ePort].m_eBFS 		= eTempBFS;
	g_oI2SInfor[rhs_ePort].m_eWordLength = eTempBLC;
	
}