亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pcm.c

?? 三星 s3c6400測試代碼
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
	u32 i;
	u8 uI2cData[2];
	s32 uI2cDataCount, uI2cPt;

	
	#if (PCM_CODEC_NAME == AK2430)	
		
    uI2cData[0]   = (unsigned char)uAddr;
    uI2cData[1]   = uData;
    uI2cDataCount = 2;
    uI2cPt = 0;

	IICOutp32(rIICCON, (1<<7) | (0<<6) | (1<<5) | (0xf)); //Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
	IICOutp32(rIICSTAT, 0x10);	//IIC bus data output enable(Rx/Tx)
  	IICOutp32(rIICLC, (1<<2)|(1)); 	//Filter enable, 5 clocks SDA output delay    
    
	//Data Write Phase
	IICOutp32(rIICDS, uSlaveAddr); //0xa0
    IICOutp32(rIICSTAT, 0xf0);      
    
    while(uI2cDataCount != -1)
    {
    	if(IICInp32(rIICCON)& 0x10)
    	{                  
       		
       		if((uI2cDataCount--)==0)
            {
            	IICOutp32(rIICSTAT, 0xd0);	//stop MasTx condition 
                IICOutp32(rIICCON, 0xaf);   //resumes IIC operation.
                
                Delay(1);  //wait until stop condtion is in effect.
                break;    
            }

       		IICOutp32(rIICDS, uI2cData[uI2cPt++]); 
             
            for(i=0;i<10;i++);	//for setup time until rising edge of IICSCL
            IICOutp32(rIICCON, 0xaf); 	//resumes IIC operation.
            
		}      
    }
    
   	IICOutp32(rIICSTAT, 0xd0); 	//Master Tx condition, Stop(Write), Output Enable 
    IICOutp32(rIICCON, 0xaf);	//Resumes IIC operation. 
   	
   	Delay(1);  //Wait until stop condtion is in effect.      

   	#elif (PCM_CODEC_NAME == WM8753)	
	
    uI2cData[0]   = (unsigned char)uAddr;
    uI2cData[1]   = uData;
    uI2cDataCount = 2;
    uI2cPt = 0;

	IICOutp32(rIICCON, (1<<7) | (0<<6) | (1<<5) | (0xf)); //Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
   	IICOutp32(rIICSTAT, 0x10);	//IIC bus data output enable(Rx/Tx)
  	IICOutp32(rIICLC, (1<<2)|(3)); 	//Filter enable, 15 clocks SDA output delay    
    
	//Data Write Phase
	IICOutp32(rIICDS, uSlaveAddr); 	//0xa0
    IICOutp32(rIICSTAT, 0xf0);      
    
    while(uI2cDataCount != -1)
    {
    	if(IICInp32(rIICCON)& 0x10)
    	{                  
       		
       		if((uI2cDataCount--)==0)
            {
            	IICOutp32(rIICSTAT, 0xd0);	//stop MasTx condition 
                IICOutp32(rIICCON, 0xaf);   //resumes IIC operation.
                
                Delay(1);  //wait until stop condtion is in effect.
                break;    
            }

       		IICOutp32(rIICDS, uI2cData[uI2cPt++]); 
             
            for(i=0;i<10;i++);	//for setup time until rising edge of IICSCL
            IICOutp32(rIICCON, 0xaf); 	//resumes IIC operation.
            
		}      
    }
    
   	IICOutp32(rIICSTAT, 0xd0); 	//Master Tx condition, Stop(Write), Output Enable 
    IICOutp32(rIICCON, 0xaf);	//Resumes IIC operation. 
   	
   	Delay(1);  //Wait until stop condtion is in effect.      

	#else
		Assert(0);
    #endif
}


u8 PCM_CODEC_IICRead(u32 uSlaveAddr, u8 uAddr)
{
	u8  uI2cData;
	s32 uI2cDataCount, i;

	#if (PCM_CODEC_NAME== AK2430)
	
    uI2cData  = uAddr;
    uI2cDataCount = 1;

	//Register Address Write Phase
	IICOutp32(rIICCON, (1<<7) | (0<<6) | (1<<5) | (0<<4) | (0xf));//Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
	IICOutp32(rIICSTAT, 0x10); //IIC bus data output enable(Rx/Tx)	
    IICOutp32(rIICLC, (1<<2)|(1)); //Filter enable, 15 clocks SDA output delay    		
   
	IICOutp32(rIICDS, uSlaveAddr);
    IICOutp32(rIICSTAT, 0xf0);	//MasTx,Start 
 
   
    while(uI2cDataCount!=-1)
    {
    	if(IICInp32(rIICCON) & 0x10) 
    	{	//Tx/Rx Interrupt Enable
       		if((uI2cDataCount--)==0)
            {
               	break;                
            }
       			IICOutp32(rIICDS, uI2cData);
            	for(i=0;i<10;i++); 	//for setup time until rising edge of IICSCL
            	IICOutp32(rIICCON, 0xaf);	//resumes IIC operation.	
    	}
    }   
    	
    uI2cDataCount = 1;
    IICOutp32(rIICCON, (1<<7) | (0<<6) | (1<<5) | (0<<4) | (0xf));
    
	//Register Data Read Phase 
	IICOutp32(rIICDS, uSlaveAddr);
	
	IICOutp32(rIICSTAT, 0xb0);	//Master Rx,Start
	
   	while(uI2cDataCount!=-1)
   	{
    	if(IICInp32(rIICCON) & 0x10)	//Interrupt pending 
    	{
       		if((uI2cDataCount--)==0)
            {
            	uI2cData = IICInp32(rIICDS);

            	IICOutp32(rIICSTAT, 0x90);		//Stop MasRx condition 
                IICOutp32(rIICCON, 0xaf);       //Resumes IIC operation.
                
                Delay(1);                    //Wait until stop condtion is in effect.
                //Too long time... 
                //The pending bit will not be set after issuing stop condition.
                break;    
            }

            if((uI2cDataCount)==0)
            	IICOutp32(rIICCON, 0x2f);		//Resumes IIC operation with NOACK. 
            else 
            	IICOutp32(rIICCON, 0xaf);		//Resumes IIC operation with ACK
                
    	}
    }

		
    return  uI2cData;

    #elif (PCM_CODEC_NAME == WM8753)	

    uI2cData  = uAddr;
    uI2cDataCount = 1;

	//Register Address Write Phase
	IICOutp32(rIICCON, (1<<7) | (0<<6) | (1<<5) | (0<<4) | (0xf));//Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
	IICOutp32(rIICSTAT, 0x10); //IIC bus data output enable(Rx/Tx)	
    IICOutp32(rIICLC, (1<<2)|(1)); //Filter enable, 15 clocks SDA output delay    		
   
	IICOutp32(rIICDS, uSlaveAddr);
    IICOutp32(rIICSTAT, 0xf0);	//MasTx,Start 
 
   
    while(uI2cDataCount!=-1)
    {
    	if(IICInp32(rIICCON) & 0x10) 
    	{	//Tx/Rx Interrupt Enable
       		if((uI2cDataCount--)==0)
            {
               	break;                
            }
       			IICOutp32(rIICDS, uI2cData);
            	for(i=0;i<10;i++); 	//for setup time until rising edge of IICSCL
            	IICOutp32(rIICCON, 0xaf);	//resumes IIC operation.	
    	}
    }   
    	
    uI2cDataCount = 1;
    IICOutp32(rIICCON, (1<<7) | (0<<6) | (1<<5) | (0<<4) | (0xf));
    
	//Register Data Read Phase 
	IICOutp32(rIICDS, uSlaveAddr);
	IICOutp32(rIICSTAT, 0xb0);	//Master Rx,Start
	
   	while(uI2cDataCount!=-1)
   	{
    	if(IICInp32(rIICCON) & 0x10)	//Interrupt pending 
    	{
       		if((uI2cDataCount--)==0)
            {
            	uI2cData = IICInp32(rIICDS);

            	IICOutp32(rIICSTAT, 0x90);		//Stop MasRx condition 
                IICOutp32(rIICCON, 0xaf);       //Resumes IIC operation.
                
                Delay(1);                    //Wait until stop condtion is in effect.
                //Too long time... 
                //The pending bit will not be set after issuing stop condition.
                break;    
            }

            if((uI2cDataCount)==0)
            	IICOutp32(rIICCON, 0x2f);		//Resumes IIC operation with NOACK. 
            else 
            	IICOutp32(rIICCON, 0xaf);		//Resumes IIC operation with ACK
                
    	}
    }
		
    return  uI2cData;
		
    #else
		Assert(0);
    #endif
    	
}


void PCM_SelClkSrc(PCM_PORT ePort, PCM_CLKSRC eClkSrc)
{
	u32 uClkSrc, uEpllCon0;

	uClkSrc = Inp32SYSC(0x1C);
	uEpllCon0 = Inp32SYSC(0x14);

	if(ePort == PCM_PORT0)
	{
		if(eClkSrc == PCM_MOUT_EPLL) 
		{
			Outp32SYSC(0x14, uEpllCon0 |(1u<<31));
			Delay(100);
			Outp32SYSC(0x1C, uClkSrc & ~(0x7<<7) |(1<<2));	
		}
		else if (eClkSrc == PCM_DOUT_MPLL) Outp32SYSC(0x1C, uClkSrc & ~(0x7<<7)|(1<<7));
		else if (eClkSrc == PCM_FIN_EPLL) Outp32SYSC(0x1C, uClkSrc & ~(0x7<<7)|(2<<7));
		else if (eClkSrc == PCM_PCMCDCLK) Outp32SYSC(0x1C, uClkSrc & ~(0x7<<7)|(4<<7));
	}
	else if(ePort == PCM_PORT1)
	{
		if(eClkSrc == PCM_MOUT_EPLL) 
		{
			Outp32SYSC(0x14, uEpllCon0 |(1u<<31));
			Delay(100);
			Outp32SYSC(0x1C, uClkSrc & ~(0x7<<10)|(1<<2));
		}
		else if (eClkSrc == PCM_DOUT_MPLL) Outp32SYSC(0x1C, uClkSrc & ~(0x7<<10)|(1<<10));
		else if (eClkSrc == PCM_FIN_EPLL) Outp32SYSC(0x1C, uClkSrc & ~(0x7<<10)|(2<<10));
		else if (eClkSrc == PCM_PCMCDCLK) Outp32SYSC(0x1C, uClkSrc & ~(0x7<<10)|(4<<10));
	}
}


void PCM_GetClkValAndClkDir(u32* uSclkDiv, u32* uSyncDiv, PCM_CLKSRC ePcmClkSrc)
{
	double dTmpVal, dVclkSrc;

	if(ePcmClkSrc == PCM_MOUT_EPLL)
		dVclkSrc = 97700000; 	//should be changed according to your system clock condition
	else if(ePcmClkSrc == PCM_DOUT_MPLL)
		dVclkSrc = 100000000; 	//should be changed according to your system clock condition
	else if(ePcmClkSrc == PCM_FIN_EPLL)
		dVclkSrc = 12000000; 	//should be changed according to your system clock condition
	else if(ePcmClkSrc == PCM_PCMCDCLK)
		dVclkSrc = 512000;	
	else if(ePcmClkSrc == PCM_PCLK)
		dVclkSrc = 25000000;	//should be changed according to your system clock condition
	
	dTmpVal = dVclkSrc/(double)(2*PCMSCLK) - 1;
	dTmpVal = (dTmpVal+0.5)*10;
	*uSclkDiv = (int)(dTmpVal/10.0);

	dTmpVal = PCMSCLK/(double)(PCM_FS) - 1;
	dTmpVal = (dTmpVal+0.5)*10;
	*uSyncDiv = (int)(dTmpVal/10.0);

 }


///////////////////////////////////////////////
void __irq Isr_PCM_PCMIn_DMADone(void)
{
	INTC_Disable(oPcm.m_uNumDma);

	Disp("\nPCM In DMA Done.\n");
	uPcmRecDone = 1;

	DMACH_ClearIntPending(&oPcmDma);
	DMACH_ClearErrIntPending(&oPcmDma);
	INTC_ClearVectAddr();	
}

void __irq Isr_PCM_PCMOut_DMADone(void)
{
	INTC_Disable(oPcm.m_uNumDma);
	DMAC_InitCh(oPcm.m_eDmaUnit, oPcm.m_eDmaCh, &oPcmDma);
	
	DMACH_ClearIntPending(&oPcmDma);
	DMACH_ClearErrIntPending(&oPcmDma);
	INTC_ClearVectAddr();	

	Disp("\n~~~");

	INTC_Enable(oPcm.m_uNumDma);

	DMACH_Setup(oPcm.m_eDmaCh, 0x0, (u32)PCM_REC_BUF, false, oPcm.m_uPcmRxFifoAddr, true, HWORD, PCM_REC_LEN/2, HANDSHAKE, MEM, oPcm.m_eDreqSrc , SINGLE, &oPcmDma);
	DMACH_Start(&oPcmDma);

}

void __irq Isr_PCM_PCMIn(void)
{
	u32 i, uPcmFifoStat; 

	INTC_Disable(oPcm.m_uNumInt);

	INTC_ClearVectAddr();
	PCM_ClearInt();
	
	uPcmFifoStat = PCMInp32(rPCMFIFOSTAT);
		
	for(i=0; i< ((uPcmFifoStat & 0x3f0)>>4); i++)
	{
		*(uPcmRecBuffer++) = (u16) PCMInp32(rPCMRXFIFO);		

		if(uPcmRecBuffer ==uPcmEndRecBuffer)
		break;	
	}			

	if(uPcmRecBuffer ==uPcmEndRecBuffer)
		uPcmRecDone=1;
			
	INTC_Enable(oPcm.m_uNumInt);

}

void __irq Isr_PCM_PCMOut(void)
{
	u32 i, uPcmFifoStat; 

	INTC_Disable(oPcm.m_uNumInt);

	INTC_ClearVectAddr();
	PCM_ClearInt();
	
	uPcmFifoStat = PCMInp32(rPCMFIFOSTAT);
		
	for(i=0; i< (32-((uPcmFifoStat & 0xfc000)>>14)); i++)
	{
		PCMOutp32(rPCMTXFIFO, *(uPcmRecBuffer++));		

		if(uPcmRecBuffer ==uPcmEndRecBuffer)
		break;	
	}			

	if(uPcmRecBuffer ==uPcmEndRecBuffer)
		uPcmPlayDone=1;
			
	INTC_Enable(oPcm.m_uNumInt);
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精一品亚洲二区在线视频| 色88888久久久久久影院按摩| 国产亚洲婷婷免费| 欧美日本一区二区三区| 国产精品沙发午睡系列990531| 欧美三级电影一区| 国产suv精品一区二区三区| 一区二区三国产精华液| 国产精品麻豆视频| 欧美激情中文字幕| 欧美成人bangbros| 精品av综合导航| 精品久久国产97色综合| 日韩免费福利电影在线观看| 91精品国产综合久久福利软件| 欧美久久久久久久久| 91精品国产综合久久精品性色| 制服视频三区第一页精品| 日韩一区二区三区观看| 欧美日韩在线不卡| 波多野结衣在线aⅴ中文字幕不卡| 精品综合免费视频观看| 国产成人精品免费在线| 日本黄色一区二区| 91精品国产综合久久久蜜臀图片| 欧美一级xxx| 中文字幕一区二区视频| 一级日本不卡的影视| 丝袜亚洲精品中文字幕一区| 国产精品18久久久久久久久久久久 | 在线91免费看| 欧美国产乱子伦| 日韩高清电影一区| 成人av片在线观看| 日韩精品一区二区三区蜜臀| 欧美国产精品中文字幕| 一区二区三区中文字幕精品精品 | 欧美一激情一区二区三区| 国产精品久久久久精k8| 午夜精品一区二区三区免费视频 | av在线不卡电影| 亚洲精品一区二区三区99| 亚洲黄色录像片| 国产精品综合网| 欧美刺激午夜性久久久久久久| 久久蜜臀中文字幕| 麻豆91免费观看| 成人aaaa免费全部观看| 久久亚洲私人国产精品va媚药| 亚洲电影你懂得| 在线免费亚洲电影| 亚洲精品成a人| 色婷婷久久久久swag精品| 亚洲人成网站色在线观看| 成人中文字幕合集| 精品国产乱码久久久久久免费| 日韩国产一二三区| 欧美日韩综合色| 一级特黄大欧美久久久| 91福利视频久久久久| 日韩欧美在线网站| 中文字幕精品一区二区三区精品| 久久超碰97人人做人人爱| 久久久久久99久久久精品网站| 狠狠色丁香婷综合久久| 中文字幕va一区二区三区| 91偷拍与自偷拍精品| 综合激情网...| 一本色道综合亚洲| 免费在线观看一区| 中文一区在线播放| 欧美日韩精品欧美日韩精品一综合| 午夜精品久久久久久久久| xvideos.蜜桃一区二区| 色综合久久久久久久久| 日韩精品乱码免费| 国产精品不卡在线观看| 91精品国产91热久久久做人人 | 日韩视频在线你懂得| 福利电影一区二区| 日韩中文字幕av电影| 国产精品丝袜在线| 日韩你懂的在线播放| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 中文字幕亚洲视频| 中文字幕精品一区二区三区精品 | 亚洲一区二区三区四区五区中文 | 国产黄色91视频| 久久国产视频网| 久久99国产精品久久99| 国产综合一区二区| 国产成人精品综合在线观看| 国产一区二区三区在线看麻豆| 激情伊人五月天久久综合| 韩国av一区二区三区四区| 国产一区二区三区免费在线观看| 韩国欧美一区二区| 99这里都是精品| 56国语精品自产拍在线观看| 欧美区一区二区三区| 日韩欧美一区电影| 国产精品色婷婷久久58| 午夜视频一区二区三区| 另类成人小视频在线| 91色九色蝌蚪| 日韩视频在线观看一区二区| 国产亚洲欧洲997久久综合| 亚洲男同性视频| 久久精品国产精品亚洲红杏| 国产乱码字幕精品高清av| 日本二三区不卡| 欧美电视剧在线观看完整版| 中文字幕一区二区三| 日韩一区精品字幕| 色老综合老女人久久久| 久久久国产午夜精品| 婷婷一区二区三区| 91色porny蝌蚪| 中文字幕一区二区三| 国产成a人亚洲精| 欧美一区二区免费视频| 一区二区三区日韩欧美| 国产综合色精品一区二区三区| 成人av网站在线观看| 日韩无一区二区| 国产偷国产偷亚洲高清人白洁| 亚洲码国产岛国毛片在线| 国产精品99久| 欧美国产一区视频在线观看| 久久国产精品99久久人人澡| 欧美一级高清片| 午夜视频在线观看一区| 欧美剧在线免费观看网站| 一区二区三区成人在线视频| 91网址在线看| 国产欧美日韩综合| 国产成人精品一区二| 国产精品国产精品国产专区不片 | 色婷婷综合中文久久一本| 亚洲色图欧洲色图婷婷| 91成人免费电影| 秋霞电影网一区二区| 国产色爱av资源综合区| 99久久精品99国产精品| 亚洲国产成人av网| 精品免费视频.| 91麻豆swag| 免费在线观看一区二区三区| 国产午夜精品美女毛片视频| 一本一道久久a久久精品综合蜜臀| 亚洲成人动漫在线免费观看| 欧美变态口味重另类| 91毛片在线观看| 蜜臀av一级做a爰片久久| 国产精品亲子伦对白| 在线不卡中文字幕| 91在线观看成人| 蜜桃av一区二区| 亚洲日本一区二区| 久久久综合网站| 日韩欧美一级二级三级| 欧美综合色免费| aaa欧美大片| 国产精品911| 久久成人精品无人区| 日韩精品一二三| 一区二区三区在线免费视频| 中文字幕欧美国产| 26uuu亚洲| 国产欧美精品一区二区色综合朱莉| 3d成人h动漫网站入口| 欧美精品高清视频| 欧美日韩黄色影视| 欧美群妇大交群的观看方式| 在线一区二区三区四区五区| av色综合久久天堂av综合| 成人av在线影院| 大陆成人av片| 91免费观看视频在线| fc2成人免费人成在线观看播放| 高清国产一区二区三区| 成人免费视频播放| 色婷婷久久久久swag精品| 色婷婷av一区二区三区软件 | 亚洲青青青在线视频| 中文字幕一区二区三区精华液 | av电影在线观看完整版一区二区| 成人一级片网址| 一本久道久久综合中文字幕| 欧美视频日韩视频| 日韩午夜激情免费电影| 国产精品网曝门| 亚洲成在线观看| 国产丶欧美丶日本不卡视频| 成人精品国产免费网站| 在线成人免费观看| 国产欧美综合在线观看第十页| 国产精品久久久久久久第一福利 | 99久久精品国产毛片| 欧美日韩国产a|