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

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

?? i2s.cpp

?? 包含了大量文件
?? CPP
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

   
Module Name:	I2S.CPP

Abstract:		I2S Interface Routines for Samsung SC2410 CPU
  
Notes:			This code assumes that the CPU acts as the master that is 
				connected to a CODEC chip configured in slave mode.

				Some platforms require the audio CODEC chip to act as the master
				while the CPU's IIS controller is put into slave mode.  For these
				environments, the IIS_MASTER_MODE flag (located in I2S_Init())
				should be replaced with the IIS_SLAVE_MODE flag.

Environment:	Samsung SC2410 CPU and Windows 3.0 (or later)
    
-*/

#include <windows.h>
#include "i2s.h"

//------------------------------ GLOBALS -------------------------------------------
extern volatile	IISreg		*v_pIISregs;								// I2S control registers
extern volatile IOPreg		*v_pIOPregs;								// GPIO registers (needed to enable SPI)
extern volatile CLKPWRreg	*g_pCLKPWRreg;							// CLCKPWR (needed to enable SPI clocks)
//----------------------------------------------------------------------------------

//#define DEBUGMSG(a,b)	RETAILMSG(0,b)

#ifdef DEBUG
#define ZONE_ERROR  1
#endif


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		I2S_Init()

Description:	Initializes the IIS bus and controller.

Notes:			This routine assumes that the control registers (see 
				the globals section above) have already been initialized.

Returns:		Boolean indicating success.
-------------------------------------------------------------------*/
BOOL I2S_Init()
{
	//----- 1. IMPORTANT: By default, the internal clock is disabled.  To configure the controller ------
	//					  we must first enable it.
  //	StartI2SClock();
	g_pCLKPWRreg->rCLKCON |= IIS_INTERNAL_CLOCK_ENABLE;		// Enable the CPU clock to the IIS controller
	//----- 2. Configure the GPIO pins for I2S mode -----
	//		   
	//		   I2SSDO	- GPE4
	//		   I2SSDI	- GPE3
	//		   I2SCDCLK	- GPE2
	//		   I2SSCLK	- GPE1
	//		   I2SLRCLK	- GPE0
	//
  //	charlie
  v_pIOPregs->rGPEUP  |= DISABLE_I2S_PULLUPS;
	v_pIOPregs->rGPECON |= (ENABLE_I2SSDO | ENABLE_I2SSDI | ENABLE_I2SCDCLK | ENABLE_I2SSCLK | ENABLE_I2SLRCLK);
	
	// Port Init for IIS
	//v_pIOPregs->rGPEUP  |= 0x1f;
	//PG[4:0]=I2SSDI:I2SSDO:CDCLK:I2SSCLK:I2SLRCK
	//v_pIOPregs->rGPECON = ((v_pIOPregs->rGPECON & 0xfffffc00) | 0x2aa);
	
	//----- 3. Configure the I2S controller with reasonable default values -----
  //	v_pIISregs->rIISCON  = (TRANSMIT_DMA_REQUEST_ENABLE | RECEIVE_DMA_REQUEST_ENABLE | IIS_PRESCALER_ENABLE);
  // charlie
	v_pIISregs->rIISCON  = (TRANSMIT_DMA_REQUEST_ENABLE | IIS_PRESCALER_ENABLE);
	

	//---------------------------------------------------------------------------------------------------------
	// On SMDK2410 board, Audio codec left/right outputs are mis-connected to a stereo headphone jack.
	// So, I define that active level of left/right channel is "HIGH for left channel" (ACTIVE_CHANNEL_RIGHT).
	//---------------------------------------------------------------------------------------------------------
	
	//v_pIISregs->rIISMOD  = (  IIS_SLAVE_MODE | IIS_TRANSMIT_RECEIVE_MODE | ACTIVE_CHANNEL_LEFT
	//v_pIISregs->rIISMOD  = (  IIS_SLAVE_MODE | IIS_TRANSMIT_RECEIVE_MODE | ACTIVE_CHANNEL_RIGHT
	v_pIISregs->rIISMOD  = (  IIS_MASTER_MODE | IIS_TRANSMIT_RECEIVE_MODE | ACTIVE_CHANNEL_LEFT
						   //| SERIAL_INTERFACE_IIS_COMPAT | DATA_16_BITS_PER_CHANNEL
						   |SERIAL_INTERFACE_MSBL_COMPAT| DATA_16_BITS_PER_CHANNEL
						   | MASTER_CLOCK_FREQ_384fs | SERIAL_BIT_CLOCK_FREQ_32fs );
	             //| MASTER_CLOCK_FREQ_256fs | SERIAL_BIT_CLOCK_FREQ_32fs );
	//---------------------------------------------------------------------------------------------------------
  //v_pIISregs->rIISMOD = (  MASTER_CLOCL_MPLLIN | IIS_MASTER_MODE | /*IIS_TRANSMIT_RECEIVE_MODE |*/ ACTIVE_CHANNEL_RIGHT /*ACTIVE_CHANNEL_LEFT*/
						   //| SERIAL_INTERFACE_MSBL_COMPAT/*SERIAL_INTERFACE_IIS_COMPAT*/ | DATA_16_BITS_PER_CHANNEL
						   //| MASTER_CLOCK_FREQ_384fs | SERIAL_BIT_CLOCK_FREQ_32fs);
						  // | MASTER_CLOCK_FREQ_256fs | SERIAL_BIT_CLOCK_FREQ_32fs );
						   
	v_pIISregs->rIISFCON = (  TRANSMIT_FIFO_ACCESS_DMA | TRANSMIT_FIFO_ENABLE  );

	SetI2SClockRate(IS2LRCLK_44100);
  //SetI2SClockRate(IS2LRCLK_48000);
   //SetI2SClockRate(IS2LRCLK_32000);
	//----- 4. For power management purposes, shut the clocks off! -----
  StopI2SClock();

	// charlie
	v_pIISregs->rIISCON |= IIS_INTERFACE_ENABLE;				// Enable the I2S clock
	

	RETAILMSG(1,(TEXT("IIS init finish!\r\n")));

	return TRUE;
}


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		I2S_Deinit()

Description:	Deinitializes the I2S bus and controller.

Notes:			This routine DOES NOT unmap the control registers;
				the caller is responsible for freeing this memory.

Returns:		Boolean indicating success.
-------------------------------------------------------------------*/
BOOL I2S_Deinit()
{
    //----- 1. Stop the I2S clocks -----
    StopI2SClock();

	return TRUE;
}



/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		I2S_WriteData()

Description:	Outputs the specified data onto the I2S bus.

Notes:			This routine expects that the I2S clock is already
				running when it is called.

Returns:		Boolean indicating success.
-------------------------------------------------------------------*/
BOOL I2S_WriteData(LPWORD lpBuff, DWORD dwLen)
{
	static DWORD waitCount	= 0;
	static DWORD i			= 0;

	//----- 1. Check the parameters -----
	if(!lpBuff || (dwLen == 0))
	{
		DEBUGMSG(ZONE_ERROR, (TEXT("WAVEDEV.DLL:I2S_WriteData() - Invalid parameters!\r\n")));  
        goto WRITE_ERROR;
	}

//	StartI2SClock();

	//----- 2. Enable the transmit FIFO -----
	v_pIISregs->rIISFCON |= TRANSMIT_FIFO_ENABLE;
	
	//----- 3. Write all of the bytes in the input buffer onto the I2S bus -----
	while(dwLen)
	{
		//----- 4. Write a FIFO's worth of data out onto the I2S bus ----- 
		if(dwLen > MAX_TRANSMIT_FIFO_ENTRIES)
		{
			i = MAX_TRANSMIT_FIFO_ENTRIES;

		}else
		{
			i = dwLen;
		}

		dwLen -= i;
		while(i--);
		{
			v_pIISregs->rIISFIF = *lpBuff++;
		}
	}

	StopI2SClock();
	return TRUE;

WRITE_ERROR:
	StopI2SClock();
	return FALSE;
}


//------------------------------------ Helper Routines ------------------------------------

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		StartI2SClock()

Description:	Enables the I2S clock that drives the audio codec chip.

Returns:		N/A
-------------------------------------------------------------------*/
VOID StartI2SClock(VOID)
{
	
	return;
}


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		StopI2SClock()

Description:	Disables the I2S clock that drives the audio codec chip.

Returns:		N/A
-------------------------------------------------------------------*/
VOID StopI2SClock(VOID)
{
//	v_pIISregs->rIISCON &= ~IIS_INTERFACE_ENABLE;			// Disable the I2S clock
// charlie
//	g_pCLKPWRreg->rCLKCON &= ~IIS_INTERNAL_CLOCK_ENABLE;	// Disable the CPU clock to the SPI controller
	return;
}


/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:		SetI2SClockRate()

Description:	Sets the I2S clock that drives the audio codec chip:

Params:			ClockRate	IS2LRCLK_800		800   Khz
							IS2LRCLK_11025		11025 Khz
							IS2LRCLK_16000		16000 Khz
							IS2LRCLK_22050		22050 Khz
							IS2LRCLK_32000		32000 Khz
							IS2LRCLK_44100		44100 Khz
							IS2LRCLK_48000		48000 Khz
							IS2LRCLK_64000		64000 Khz
							IS2LRCLK_88200		88200 Khz
							IS2LRCLK_96000		96000 Khz

Returns:		N/A
-------------------------------------------------------------------*/
VOID SetI2SClockRate(DWORD ClockRate)
{
	BYTE  prescaler;
	DWORD codeclock, i2scdclk;

    //----- 1. Set the clock rate  -----
	//		FORMAT:			bits[9:5] - Prescaler Control A
	//						bits[4:0] - Prescaler Control B
	//
	//						Range: 0-31 and the division factor is N+1 (a.k.a. 1-32)
	//
	//		The I2SLRCLK frequency is determined as follows:
	//
	//				I2SLRCLK = CODECLK / I2SCDCLK		and		(prescaler+1) = PCLK / CODECLK
	//
	//		Thus, rearranging the equations a bit we can see that:
	//
	//				prescaler = (PCLK / CODECLK) - 1 
	//		or
	//				prescaler = ((PCLK / (IS2LRCLK * IS2CDCLK)) - 1
	//	
	//	    NOTE: The following formula is actually used in order to avoid floating point arithmetic:
	//
	//				prescaler = ((PCLK + ((IS2LRCLK * IS2CDCLK) - 1)) / (IS2LRCLK * IS2CDCLK)) - 1
	//
	if(v_pIISregs->rIISMOD & MASTER_CLOCK_FREQ_384fs)
	{
		i2scdclk = 384;				// Sampling frequency
	}else
	{
		i2scdclk = 256;				// Sampling frequency
	}

	codeclock = ClockRate * i2scdclk;
	prescaler = (BYTE)((S2440PCLK + (codeclock - 1)) / codeclock) - 1;
//	RETAILMSG(1,(TEXT("Prescaler:%d\n"),prescaler));

	//----- IMPORTANT: Make sure we set both channel prescalers to the same value (see datasheet for details) -----
	v_pIISregs->rIISPSR = ((prescaler << 5) + prescaler);

    return;
}




?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品在线观看一区二区| 精品日韩欧美一区二区| 精品福利一二区| 视频一区二区国产| 欧美在线免费观看亚洲| 亚洲视频一区二区在线| aaa亚洲精品| 中文字幕在线不卡一区二区三区| 成人黄页在线观看| 国产精品久久国产精麻豆99网站| 成人av电影在线| 日韩主播视频在线| 亚洲欧洲日本在线| 久久久亚洲欧洲日产国码αv| 国产美女精品在线| 欧美国产乱子伦| 97se亚洲国产综合在线| 亚洲一区成人在线| 91精品国产欧美一区二区| 亚洲成av人片一区二区梦乃| 日韩亚洲欧美一区| 国产成人无遮挡在线视频| 国产精品福利一区| 26uuu亚洲| 91浏览器在线视频| 日韩成人一级片| 亚洲精品一区二区三区精华液| 欧美亚洲日本国产| 精品一区二区在线观看| 国产三级一区二区| 欧美三级午夜理伦三级中视频| 免费黄网站欧美| 国产精品丝袜在线| 欧美精品久久一区| 欧美日韩一区二区不卡| 91国偷自产一区二区使用方法| 日韩电影在线一区| 午夜在线电影亚洲一区| 一区二区三区四区av| 日韩亚洲欧美高清| 91精品国产乱码久久蜜臀| 欧美日本在线观看| 大陆成人av片| 日本在线不卡一区| 日本视频在线一区| 美女视频黄久久| 一区二区三区精品视频| 亚洲欧美日韩综合aⅴ视频| 日韩欧美一二三| 91黄色激情网站| 欧美视频一区二区| 欧美精品久久99久久在免费线| 欧美色网站导航| 欧美日韩一级二级| 日韩一区二区三区在线观看| 欧美一区二区成人| 久久影院午夜片一区| 精品国精品国产| 中文字幕乱码亚洲精品一区| 国产精品国产三级国产aⅴ原创 | 免费日本视频一区| 麻豆视频一区二区| 国产一区二三区| 99久免费精品视频在线观看| 91丨porny丨蝌蚪视频| 欧美亚洲国产一区二区三区va| 欧美日韩日本视频| 欧美成人video| 国产欧美一区二区精品久导航| 91精品国产乱码久久蜜臀| 精品国产露脸精彩对白| 中文幕一区二区三区久久蜜桃| 最新中文字幕一区二区三区| 性感美女极品91精品| 激情都市一区二区| 蜜桃视频在线观看一区二区| 国产一区二区在线观看视频| 99精品国产视频| 欧美日韩国产一二三| 精品人在线二区三区| 亚洲欧美一区二区在线观看| 日韩精品一区第一页| 国产高清精品网站| 色欧美88888久久久久久影院| 国产成人精品免费一区二区| 色999日韩国产欧美一区二区| 欧美日本国产视频| 国产网站一区二区| 亚洲成年人影院| 高清不卡在线观看av| 国产精品原创巨作av| 国产精品一区二区在线观看不卡| 97精品超碰一区二区三区| 欧美一区二区女人| 亚洲欧洲www| 日本视频一区二区三区| 99精品一区二区三区| 欧美一区二区三区视频在线观看| 国产精品久久久久久久久搜平片 | 亚洲成av人片| 丁香啪啪综合成人亚洲小说 | 色美美综合视频| 26uuu国产电影一区二区| 一片黄亚洲嫩模| 国产成人a级片| 91精品国产免费| 亚洲综合丝袜美腿| 成人高清视频在线| 日韩精品一区二区在线| 亚洲最大成人网4388xx| 国产精选一区二区三区| 欧美二区三区91| 亚洲卡通欧美制服中文| 亚洲国产精品一区二区久久| 三级精品在线观看| 91小视频在线免费看| 日韩欧美在线不卡| 亚洲一级片在线观看| 日韩一区二区影院| 亚洲一区二区欧美激情| 不卡的av网站| 国产女同互慰高潮91漫画| 另类小说视频一区二区| 国产一区二区三区高清播放| 91精品国产综合久久精品麻豆| 欧美va亚洲va在线观看蝴蝶网| 亚洲国产精品精华液网站| 91免费版pro下载短视频| 久久精品在这里| 国产在线播放一区二区三区| 91精品国产欧美一区二区| 图片区日韩欧美亚洲| 国产成人精品三级| 久久亚洲二区三区| 国产精品18久久久久久久久久久久| 精品理论电影在线观看| 美女一区二区三区| 日韩欧美国产一区二区三区| 日本最新不卡在线| 欧美一级免费大片| 美国十次综合导航| 欧美一区二区精品在线| 美脚の诱脚舐め脚责91| 精品免费国产二区三区| 久久精品国产亚洲a| 精品88久久久久88久久久| 国产一区二区调教| 久久精品亚洲精品国产欧美| 国产风韵犹存在线视精品| 中文字幕欧美国产| 一本大道久久a久久综合| 亚洲精品成人少妇| 欧美午夜片在线观看| 天堂成人国产精品一区| 欧美一区二区在线观看| 精品一区二区三区免费观看| 2020国产精品| 成人福利电影精品一区二区在线观看| 国产精品色呦呦| 日本乱人伦一区| 婷婷综合另类小说色区| 欧美成人精精品一区二区频| 国产一区二区免费看| 国产精品高潮呻吟久久| 国产亚洲欧美激情| 99久久婷婷国产精品综合| 亚洲欧美日韩国产综合| 欧美精品一卡二卡| 狠狠久久亚洲欧美| 日韩理论片中文av| 69成人精品免费视频| 国产一区在线观看视频| 亚洲欧洲色图综合| 欧美精品一卡二卡| 国产麻豆91精品| 一区二区三区91| 亚洲精品在线观看视频| 99久久99久久综合| 日本亚洲视频在线| 国产精品国产馆在线真实露脸| 色菇凉天天综合网| 国产一区二区网址| 亚洲主播在线观看| 久久青草国产手机看片福利盒子 | 精品国产免费视频| 成人黄色电影在线| 日日夜夜一区二区| 国产精品初高中害羞小美女文| 欧美日韩一区不卡| 成人福利视频网站| 蜜臀久久久99精品久久久久久| 中文子幕无线码一区tr| 欧美日韩一卡二卡三卡| 国产98色在线|日韩| 视频一区在线播放| 亚洲日本一区二区| 久久在线观看免费| 欧美福利视频一区| 99re这里只有精品视频首页| 青青草国产精品97视觉盛宴|