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); }
////////// // 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); }
////////// // 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(); }
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; }
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; }