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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? i2s_control.c

?? realtek562x系列驅動源碼。wince
?? C
字號:
#include <windows.h>
#include <xllp_i2s.h>
#include <xllp_i2c.h>
#include <bulverde.h>
#include <ceddk.h>
#include "i2s_control.h"

static volatile BULVERDE_IIS_REG   *g_pI2sRegs  = NULL;
static volatile BULVERDE_IICBUS_REG *g_pI2cRegs  = NULL;
static volatile BULVERDE_OST_REG    *g_pOSTRegs   = NULL;
static volatile BULVERDE_INTR_REG   *g_pICRegs    = NULL;
static volatile BULVERDE_GPIO_REG   *g_pGPIORegs  = NULL;
static volatile BULVERDE_CLKMGR_REG *g_pClockRegs = NULL;

static BOOL g_IsI2SConfigured = FALSE;


BOOL InitializeI2S(BOOL InPowerHandler)
{

    // Allocate I2S control resources.
    //
    if (!AllocateI2SResources())
    {
        return(FALSE);
    }

    if (!ConfigureI2SControl())
    {
        return(FALSE);
    }

    return(TRUE);
}


BOOL DeInitializeI2S(BOOL InPowerHandler)
{
	
    if (!DeAllocateI2SResources())
    {
        return(FALSE);
    }

    return(TRUE);
}

BOOL AllocateI2SResources(void)
{
    PHYSICAL_ADDRESS RegPA;

    if (g_pICRegs == NULL)
    {
        RegPA.QuadPart = BULVERDE_BASE_REG_PA_INTC;
        g_pICRegs = (volatile BULVERDE_INTR_REG *) MmMapIoSpace(RegPA, 0x400, FALSE);
    }

    if (g_pI2sRegs == NULL)
    {
        RegPA.QuadPart = BULVERDE_BASE_REG_PA_I2S;
        g_pI2sRegs = (volatile BULVERDE_IIS_REG *) MmMapIoSpace(RegPA, 0x400, FALSE);
    }

    if (g_pI2cRegs == NULL)
    {
        RegPA.QuadPart = BULVERDE_BASE_REG_PA_I2C;
        g_pI2cRegs = (volatile BULVERDE_IICBUS_REG *) MmMapIoSpace(RegPA, 0x400, FALSE);
    }

    if (g_pClockRegs == NULL)
    {
        RegPA.QuadPart = BULVERDE_BASE_REG_PA_CLKMGR;
        g_pClockRegs = (volatile BULVERDE_CLKMGR_REG *) MmMapIoSpace(RegPA, 0x400, FALSE);
    }

    if (g_pGPIORegs == NULL)
    {
        RegPA.QuadPart = BULVERDE_BASE_REG_PA_GPIO;
        g_pGPIORegs = (volatile BULVERDE_GPIO_REG *) MmMapIoSpace(RegPA, 0x400, FALSE);
    }

    if (g_pOSTRegs == NULL)
    {
        RegPA.QuadPart = BULVERDE_BASE_REG_PA_OST;
        g_pOSTRegs = (volatile BULVERDE_OST_REG *) MmMapIoSpace(RegPA, 0x400, FALSE);
    }

    if (hI2cControlMutex == NULL)
    {
        hI2cControlMutex = CreateMutex(NULL, FALSE, I2C_MUTEX_NAME);
    }

    if (!g_pICRegs || !g_pI2sRegs || !g_pI2cRegs || !g_pClockRegs || !g_pGPIORegs || !g_pOSTRegs || !hI2cControlMutex)
    {
        DEBUGMSG(TRUE, (TEXT("ERROR:  Failed to allocate I2S resources.\r\n")));
        DeAllocateI2SResources();
        return(FALSE);
    }

    return(TRUE);
}

BOOL DeAllocateI2SResources(void)
{

    if (g_pI2sRegs)
    {
        VirtualFree((void *)g_pI2sRegs, 0, MEM_RELEASE);
        g_pI2sRegs = NULL;
    }

    if (g_pI2cRegs)
    {
        VirtualFree((void *)g_pI2cRegs, 0, MEM_RELEASE);
        g_pI2cRegs = NULL;
    }

    if (g_pICRegs)
    {
        VirtualFree((void *)g_pICRegs, 0, MEM_RELEASE);
        g_pICRegs = NULL;
    }

    if (g_pClockRegs)
    {
        VirtualFree((void *)g_pClockRegs, 0, MEM_RELEASE);
        g_pClockRegs = NULL;
    }

    if (g_pGPIORegs)
    {
        VirtualFree((void *)g_pGPIORegs, 0, MEM_RELEASE);
        g_pGPIORegs = NULL;
    }

    if (g_pOSTRegs)
    {
        VirtualFree((void *)g_pOSTRegs, 0, MEM_RELEASE);
        g_pOSTRegs = NULL;
    }

    if (hI2cControlMutex)
    {
        CloseHandle(hI2cControlMutex);
    }

    return(TRUE);
}

BOOL ConfigureI2SControl(void)
{
    if (g_IsI2SConfigured)
    {
        return(TRUE);
    }
	
	if(g_pGPIORegs==NULL)
	{
		return (FALSE);
	}
		
//  clearing the GPIO's value to write the correct value in
	g_pGPIORegs->GAFR0_U &= ~( XLLP_GPIO_AF_BIT_I2SBITCLK_IN_MASK | 
					   ( XLLP_GPIO_AF_BIT_I2S_SDATA_IN_MASK)|
	   				   ( XLLP_GPIO_AF_BIT_I2S_SDATA_OUT_MASK)|
	   				   ( XLLP_GPIO_AF_BIT_I2S_SYNC_MASK) );

	g_pGPIORegs->GAFR3_U &=   ~( XLLP_GPIO_AF_BIT_I2S_SYSCLK_MASK | XLLP_GPIO_AF_BIT_SCL_MASK |XLLP_GPIO_AF_BIT_SDA_MASK );


	g_pGPIORegs->GPDR0 |= (XLLP_GPIO_BIT_I2SBITCLK|XLLP_GPIO_BIT_I2S_SDATA_OUT|XLLP_GPIO_BIT_I2S_SYNC);
	g_pGPIORegs->GPDR0 &= ~XLLP_GPIO_BIT_I2S_SDATA_IN;
	g_pGPIORegs->GPDR3 |= (XLLP_GPIO_BIT_I2S_SYSCLK );


//  sets the alternate function to make the processor the master and the codec the slave
//  and to generate the bit clock output

	g_pGPIORegs->GAFR0_U |= ( ( XLLP_GPIO_AF_BIT_I2SBITCLK_OUT ) | 
					   ( XLLP_GPIO_AF_BIT_I2S_SDATA_IN )|
	   				   ( XLLP_GPIO_AF_BIT_I2S_SDATA_OUT )|
	   				   ( XLLP_GPIO_AF_BIT_I2S_SYNC) );

	g_pGPIORegs->GAFR3_U |=   ( XLLP_GPIO_AF_BIT_I2S_SYSCLK );


//  ensuring the I2S clock is on
	g_pClockRegs->cken |= XLLP_CLKEN_I2S;

	//config i2c bus
   if(!ConfigureI2CControl())	
	{
		return(FALSE);	
	}
	
	//enable I2S LINK	
	if(g_pI2sRegs)
	{
		g_pI2sRegs->saimr|= XLLP_SAIMR_RFS | XLLP_SAIMR_TFS;
		g_pI2sRegs->sacr0|=XLLP_SACR0_BCKD;	
		g_pI2sRegs->sacr0|=XLLP_SACR0_ENB;				
	}
		
    g_IsI2SConfigured = TRUE;
	
    return(TRUE);
}

BOOL UnConfigureI2SControl(void)
{
    if (!g_IsI2SConfigured)
    {
        return(TRUE);
    }

    g_IsI2SConfigured = FALSE;

    return(TRUE);
}

BOOL GetI2cLock(void)
{   

    if (WaitForSingleObject(hI2cControlMutex, 3000) == WAIT_OBJECT_0)
    {
        return(TRUE);
    }
    else
    {
        return(FALSE);
    }
}

BOOL ReleaseI2cLock(void)
{
    ReleaseMutex(hI2cControlMutex);

    return(TRUE);
}


BOOL ReadI2SCodecRaw(UINT8 Offset, UINT16 *pData, UINT8 DevId)
{
	 XLLP_UINT8_T bytesBuf[2];

	 bytesBuf[0]=(UINT8)Offset;	
	

	 if (XllpI2CWrite((P_XLLP_I2C_T) g_pI2cRegs, 
					 (P_XLLP_OST_T) g_pOSTRegs,
					 (XLLP_UINT8_T) DevId,
					 (XLLP_UINT8_T *) bytesBuf, 
					 1, 
					 TRUE)!=XLLP_FALSE)
	 {		
		return (FALSE);
	 }

	 if	(XllpI2CRead((P_XLLP_I2C_T) g_pI2cRegs, 
					 (P_XLLP_OST_T)g_pOSTRegs,					 
					 (XLLP_UINT8_T) DevId, 
					  (XLLP_UINT8_T *)bytesBuf, 
					 2,
					  TRUE)!=XLLP_FALSE)
	 {		 
		return(FALSE);
	 }	
	 
	*pData=(bytesBuf[0]<<8) | (bytesBuf[1]);	

    return(TRUE);
}

BOOL ReadI2SCodec(UINT8 Offset, UINT16 *pData, UINT8 DevId)
{
    BOOL retVal = FALSE;

    if (GetI2cLock() == TRUE)
    {
        retVal = ReadI2SCodecRaw(Offset, pData, DevId);
        ReleaseI2cLock();
    }

    return(retVal);
}

BOOL WriteI2SCodecRaw(UINT8 Offset, UINT16 Data, UINT8 DevId)
{

	XLLP_UINT8_T bytesBuf[3];

	bytesBuf[0]=(UINT8)(Offset);			
	bytesBuf[1]=(UINT8)((Data&0xff00)>>8);				
	bytesBuf[2]=(UINT8)(Data&0xff);	

	if (XllpI2CWrite((P_XLLP_I2C_T) g_pI2cRegs, 
					 (P_XLLP_OST_T) g_pOSTRegs,
					 (XLLP_UINT8_T) DevId,
					 (XLLP_UINT8_T *) bytesBuf, 
					 3, 
					 TRUE)!=XLLP_FALSE)
	{		
		return (FALSE);
	}	
    return(TRUE);
}

BOOL WriteI2SCodec(UINT8 Offset, UINT16 Data, UINT8 DevId)
{

    BOOL retVal = FALSE;

    if (GetI2cLock() == TRUE)
    {
        retVal = WriteI2SCodecRaw(Offset, Data, DevId);
        ReleaseI2cLock();
    }

    return(retVal);
}


BOOL ConfigureI2CControl(void)
{
    if(XllpI2cInit((P_XLLP_I2C_T)g_pI2cRegs,
				   (P_XLLP_GPIO_T)g_pGPIORegs, 
				   (P_XLLP_CLKMGR_T)g_pClockRegs, 
				  XLLP_I2C_SLAVE_ID)==XLLP_TRUE)
    {	
        return(FALSE);
    }  	

	return TRUE;
}


BOOL UnConfigureI2CControl(void)
{

	return TRUE;
}

////Set the sample rate for the I2S interface.
BOOL SetI2sSampleRate(UINT16 SampleRate)
{
	if(g_pI2sRegs==NULL)
		return FALSE;

	switch(SampleRate)	{

	case  SR_8000:
		g_pI2sRegs->sadiv = 0x48; //appx 8 khz 
		break;
	case SR_11025:
		g_pI2sRegs->sadiv = 0x34; //appx 11.025 khz
		break;
	case SR_16000:
		g_pI2sRegs->sadiv = 0x24; //appx 16 khz
		break;
	case SR_22050:
		g_pI2sRegs->sadiv = 0x1a; //appx  22.05 khz
		break;
	case SR_44100:
		g_pI2sRegs->sadiv = 0xd; //appx 44.1khz
		break;
	case SR_48000:
		g_pI2sRegs->sadiv = 0xc; //appx 48khz
		break;
		
	default:
		return(FALSE);
		break;
	}

	return TRUE;
}


//Get the sample rate for the I2S interface.


BOOL GetI2sSampleRate(UINT16 *SampleRate)
{
	if(g_pI2sRegs==NULL)
		return FALSE;	

	switch(g_pI2sRegs->sadiv)	{

	case 0x48:
		*SampleRate=SR_8000; //8k
		break;
	case 0x34:
		*SampleRate=SR_11025; //11k
		break;
	case 0x24:
		*SampleRate=SR_16000; //16k
		break;
	case 0x1a:
		*SampleRate=SR_22050; //22.05KHZ
		break;
	case 0xd:
		*SampleRate=SR_44100; //44.100KHZ
		break;
	case 0xc:
		*SampleRate=SR_48000; //48KHZ
		break;
		
	default:
		return(FALSE);
		break;
	}

	return (TRUE);

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产女人aaa级久久久级| 亚洲福利电影网| 亚洲一区二区三区在线| 免费观看在线综合色| 成人91在线观看| 精品久久一二三区| 亚洲国产视频直播| 91色porny在线视频| 久久综合999| 五月婷婷综合在线| 欧美自拍偷拍午夜视频| 国产欧美一区二区精品婷婷| 三级欧美韩日大片在线看| 91片在线免费观看| 国产校园另类小说区| 蜜桃视频在线观看一区| 欧美日韩免费一区二区三区视频| 国产农村妇女毛片精品久久麻豆| 麻豆成人免费电影| 欧美一区二区视频观看视频 | 99久久免费视频.com| 日韩三级伦理片妻子的秘密按摩| 一区二区日韩av| jiyouzz国产精品久久| 欧美国产日韩亚洲一区| 国产在线不卡一区| 久久无码av三级| 国产麻豆精品视频| 久久精品视频在线看| 精品一区二区日韩| 日韩午夜电影av| 久久国产精品无码网站| 欧美成人综合网站| 国产乱色国产精品免费视频| 精品欧美乱码久久久久久1区2区| 日日噜噜夜夜狠狠视频欧美人| 欧洲亚洲国产日韩| 亚洲电影视频在线| 91精品福利在线一区二区三区 | 日韩欧美久久一区| 青青草国产精品97视觉盛宴| 欧美电影一区二区三区| 日韩av中文字幕一区二区| 69av一区二区三区| 乱中年女人伦av一区二区| 精品久久五月天| 成人高清在线视频| 亚洲欧美欧美一区二区三区| 在线观看一区日韩| 亚洲综合图片区| 欧美一区二区视频网站| 国产精品资源站在线| 国产精品久久久久久亚洲伦| 91在线观看免费视频| 亚洲成人激情综合网| 欧美日韩国产在线播放网站| 免费观看一级欧美片| 国产午夜精品理论片a级大结局| 成人综合激情网| 亚洲视频免费在线| 精品视频在线看| 国产最新精品免费| 国产精品久久久久久户外露出| 在线亚洲欧美专区二区| 秋霞午夜鲁丝一区二区老狼| ww亚洲ww在线观看国产| 色综合久久综合网| 另类综合日韩欧美亚洲| 国产精品美女久久久久久久| 欧美性生交片4| 国产成人精品三级| 亚洲大片在线观看| 国产偷国产偷精品高清尤物| 欧美性色黄大片| 国产91在线看| 日韩电影在线一区| 1024成人网| 久久久综合视频| 6080午夜不卡| 色综合咪咪久久| 国产成人精品免费一区二区| 日韩在线一区二区三区| 国产精品午夜在线| 欧美成人三级在线| 欧美日韩国产高清一区二区三区| 国产精品白丝av| 丝袜亚洲另类丝袜在线| 一区二区在线电影| 久久精品一二三| 欧美蜜桃一区二区三区| av在线不卡网| 黄色成人免费在线| 偷拍亚洲欧洲综合| 亚洲主播在线播放| 国产精品区一区二区三区| 91精品国产福利在线观看| 在线中文字幕一区| 91丨九色丨蝌蚪丨老版| 国产九色精品成人porny| 午夜视频在线观看一区二区| 17c精品麻豆一区二区免费| 2020国产精品久久精品美国| 91精品婷婷国产综合久久| 欧美性一级生活| 色婷婷av一区二区三区软件| 成a人片亚洲日本久久| 国产成人亚洲综合色影视| 国内精品写真在线观看| 免费国产亚洲视频| 麻豆精品一二三| 男人操女人的视频在线观看欧美| 五月天激情综合| 亚洲gay无套男同| 日韩电影在线一区二区| 日韩国产欧美视频| 天天色天天操综合| 日本成人在线不卡视频| 日本人妖一区二区| 麻豆91小视频| 国产精品伊人色| 国产精品99久久久久久久vr| 国产精品一区二区三区99 | 日本一区二区三区电影| 国产亚洲一区二区三区四区 | 欧美高清精品3d| 欧美一级在线免费| www亚洲一区| 国产精品久久久久一区| 亚洲同性gay激情无套| 亚洲精品国产一区二区精华液| 亚洲色欲色欲www| 亚洲精品视频在线| 日本成人在线网站| 国产大陆a不卡| 色综合久久综合中文综合网| 欧美精选一区二区| 久久久久久久久久久久电影| 中文字幕中文字幕在线一区| 1024成人网| 六月婷婷色综合| 99视频热这里只有精品免费| 欧美在线色视频| 日韩欧美在线不卡| 国产精品不卡在线观看| 老司机精品视频一区二区三区| www.在线成人| 在线播放亚洲一区| 精品处破学生在线二十三| 国产精品无码永久免费888| 亚洲精品ww久久久久久p站| 日韩激情一二三区| 国产v日产∨综合v精品视频| 色88888久久久久久影院野外| 欧美人xxxx| 中文字幕在线观看一区二区| 视频一区中文字幕国产| 国产成人免费视频网站高清观看视频 | 国产午夜精品久久久久久久| 亚洲日本护士毛茸茸| 毛片av一区二区三区| 97国产一区二区| 日韩精品专区在线影院重磅| 亚洲欧美一区二区视频| 蜜桃一区二区三区在线观看| 色综合久久天天综合网| www久久久久| 丝袜美腿一区二区三区| www.久久久久久久久| 日韩女优电影在线观看| 一片黄亚洲嫩模| 成人网在线免费视频| 日韩欧美卡一卡二| 亚洲国产日韩a在线播放性色| 国产iv一区二区三区| 欧美一级专区免费大片| 一区二区三区在线观看动漫| 国产一区中文字幕| 日韩一区二区在线观看视频| 亚洲男人的天堂网| 成人蜜臀av电影| 国产日韩欧美亚洲| 精品一区二区国语对白| 884aa四虎影成人精品一区| 亚洲美女电影在线| 不卡免费追剧大全电视剧网站| 欧美大胆人体bbbb| 日韩成人免费在线| 5566中文字幕一区二区电影| 一区二区三区久久| 91论坛在线播放| 亚洲精品写真福利| 91一区二区三区在线播放| 国产精品视频一二| 国产成人综合在线| 亚洲国产精品国自产拍av| 国产精品资源在线观看| 国产亚洲一本大道中文在线| 美女一区二区久久| 精品国产自在久精品国产| 另类小说色综合网站|