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

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

?? hssi.c

?? WinCE5.0BSP for Renesas SH7770
?? C
?? 第 1 頁 / 共 5 頁
字號:
//
//      Copyright(C) Renesas Technology Corp. 1999-2005. All rights reserved.
//
//      HSSIWaveDev Driver for ITS-DS7
//
//----------------------------------------------------------------------------
//
// FILE      : HSSI.C
// CREATED   : 1999.04.26 (for HD64465 on PFM-DS6)
// MODIFIED  : 2005.03.08
// AUTHOR    : Renesas Technology Corp.
// HARDWARE  : RENESAS ITS-DS7
// FUNCTION  : MDD-PDD interface layer of waveform audio driver
// HISTORY   : 
//             2003.06.20
//              - Created release code.
//                (based on WaveDev driver for ITS-DS6 Ver.2.2.0 for WCE4.1)
//             2004.06.15
//              - Modified HSSI supported full duplex mode.
//             2004.09.01
//              - Created release code for WCE5.0.
//             2004.02.25
//              - Added wait for idle-state after SSI disabled.
//              - Added waitSSIStatus.
//              - Supported hardware volume control.
//              - Modified CODEC setting processing into a common routine.
//              - Removed software volume control.
//              - Added private_SetDefaultVolume.
//              - Moved UpdateInputSelect and private_SetMixerValue are moved from WAVEPDD.C.
//              - Removed codec_updateRecordSelect.
//             2005.03.04
//              - Moved private_AudioFillBuffer is moved from WaveOutpdd.c.
//              - Moved private_WaveInContinue is moved from WaveInpdd.c.
//             2005.03.08
//              - Modified transfer processing of a audio buffer.
//              - Removed conv_sample,set_DMA_Buffer,get_DMA_Buffer.

//  Functions:
//	get_CODEC_SAMPLING_RATE
//	get_DMA_Buffer_Address
//	get_DPTR
//	get_DSAR
//	get_DDAR
//	get_DTCR
//	module_init
//	module_deinit
//	codec_init
//	module_txdmastart
//	module_txstop
//	module_rxdmastart
//	module_rxstop
//	module_txstart
//	module_rxstart
//	private_ChangeSampleRate
//	private_ChangeRecSampleRate
//	AudioFillBuffer_M8
//	AudioFillBuffer_S8
//	AudioFillBuffer_M16
//	AudioFillBuffer_S16
//	private_AudioFillBuffer
//	AudioGetBuffer_M8
//	AudioGetBuffer_S8
//	AudioGetBuffer_M16
//	AudioGetBuffer_S16
//	private_WaveInContinue
//	set_volume
//	SetMute
//	check_SamplesPerSec
//	set_aud_index
//	I2C_WriteCODEC
//	I2C_ReadCODEC
//	I2C_SetCODEC
//	hssi2_dmastart
//	hssi2_dmastop
//	check_PlayInRec
//	check_RecInPlay
//	MuteSSI
//	UpdateInputSelect
//	private_SetMixerValue
//	codec_updateRecordSelect
//	codec_updateRecordGain
//	private_SetDefaultVolume
//	waitSSIStatus

#include <windows.h>
#include <types.h>
#include <memory.h>
#include <excpt.h>
#include <waveddsi.h>
#include <wavedbg.h>
#include <mmsystem.h>
#include <winbase.h>

#include "..\common\wavepdd.h"
#include "shx.h"
#include "sh7770.h"
#include "platform.h"
#include "drv_glob.h"
#include "oalintr.h"
#include "ioctl_its_ds7.h"
#include "hssi.h"

#define I2C_STANDARD_SPEED		// 100kHz
//#define I2C_WAIT_COUNT	50000		// 50ms
#define I2C_WAIT_COUNT	10000		// 10ms

#define SSI_VOL_SCALE	(0x2E)	// 0-46dB Attenuator(same HAC)

#define DUMPEXCEPTION() \
	DEBUGMSG(ZONE_ERROR,(TEXT("Exception %d @ %s:%d\r\n"), GetExceptionCode(), __FILE__, __LINE__ ))

// SSI Base Address
static PBYTE   pSSI0_RegBase;						// page-base for register offsets

// SSI Registers
// Playback
static SSIControlRegister	SSICR_TX;
static PVULONG	pSSI_SR_TX;			// SSI Status Register
static PVULONG	pSSI_CR_TX;			// TX SSI Control Register
static PVULONG	pSSI_TDR;			// SSI Transmit Data Register
// Recording
static SSIControlRegister	SSICR_RX;
static PVULONG	pSSI_SR_RX;			// SSI Status Register
static PVULONG	pSSI_CR_RX;			// RX SSI Control Register
static PVULONG	pSSI_RDR;			// SSI Receive Data Register

static unsigned char ulDSPMode;
static unsigned char ulDACControl;

static unsigned int	data_count;

// I2C address
static unsigned char CS4226_ReadADDR;
static unsigned char CS4226_WriteADDR;

// CODEC register
// Clock Mode Byte(01h)
static unsigned char CS4226_PLAY_CMB;
static unsigned char CS4226_REC_CMB;
// DSP Port Mode Byte(0Eh)
static unsigned char CS4226_PLAY_DSP_PMB;
static unsigned char CS4226_REC_DSP_PMB;
// Auxiliary Port Mode Byte(0Fh)
static unsigned char CS4226_PLAY_APMB;
static unsigned char CS4226_REC_APMB;
// DAC Control Byte(03h)
static unsigned char CS4226_PLAY_DACCB;
static unsigned char CS4226_REC_DACCB;
// ADC Control Byte(0Bh)
static unsigned char CS4226_ADCCB;

// SSI Serial Clock Output/Serial WS Output
static unsigned char SSI_PLAY_MODE;
static unsigned char SSI_REC_MODE;


extern PDMA_INFO	pDMA_out;	// DMA Register (for Playback)

extern PBYTE   pAudioBufferBase;		// Audio buffer
extern PBYTE   pRecAudioBufferBase;		// Audio buffer

// OpenFlag
extern int		RecOpenFlag;
extern int		PlayOpenFlag;

extern struct _global_volume
{
    ULONG   dwMasterVolume;
    ULONG   dwLineInVolume;
    ULONG   dwMicVolume;
    BOOL    fMasterMute;
    BOOL    fLineInMute;
    BOOL    fMicMute;
    ULONG   dwInputSelect;
} g_VolumeSettings;

extern PWAVEFORMATEX g_pwfx[2];
extern PCM_TYPE g_pcmtype[2];

extern PDRIVER_GLOBALS	pDriverGlobals;		// Drivers Globals
extern DWORD	AUDIO_NO;	// Audio Driver No.
extern PBYTE   pAudioBufferBase;		// Audio buffer
extern ULONG v_nNextPage;
extern ULONG v_recPage;
extern ULONG dma_pagePhysicalAddress[2];
extern ULONG dma_pageRecPhysicalAddress[2];
extern LPWAVEFORMATEX lpFormat2;

BOOL I2C_WriteCODEC(HANDLE,unsigned char,unsigned char);
BYTE I2C_ReadCODEC(HANDLE,unsigned char,BOOL);
BOOL I2C_SetCODEC(unsigned char pI2Cdata[][2]);
void hssi2_dmastart();
void hssi2_dmastop();
void MuteSSI(BOOL);
void waitSSIStatus(PVULONG pSSI_SR, ULONG stat);
VOID	codec_updateRecordGain( ULONG regval );
extern VOID private_waveOutSetVolume(ULONG volumeSetting);

/*****************************************************************************
*   FUNCTION :  	get_CODEC_SAMPLING_RATE
*   DESCRIPTION :	Get CODEC SAMPLING RATE
*   INPUTS :		ch - DMA channel number
*   OUTPUTS :     	Return Sampling Rate
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
ULONG
get_CODEC_SAMPLING_RATE(
	int	ch 
   )
{
	// mono(SSI0)
	if( ch == CH_TX_HSSI_1 ){
//		return Hz11025;		// for 11.025kHz
		return Hz44100;		// for 44.1kHz
	}
	// mono(SSI1)
	else if( ch == CH_RX_HSSI_1 ){
//		return Hz11025;		// for 11.025kHz
		return Hz44100;		// for 44.1kHz
	}
	// stereo(SSI2,3)
	else{
		return Hz44100;
	}
}


/*****************************************************************************
*   FUNCTION :  	get_DMA_Buffer_Address
*   DESCRIPTION :	Get DMA Bufffer Address
*   INPUTS :		ch - DMA Channel Number
*                   n - Audio Number
*   OUTPUTS :     	*adr - DMA Transfer Buffer Address
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
VOID
get_DMA_Buffer_Address(
	int	ch,
	DWORD	n,
	ULONG	*adr
)
{
	// Playback(SSI0,SSI2)
	if( ch == CH_TX_HSSI_1 || ch == CH_TX_HSSI_2 ){
		*(adr + 0) = AUDIO_P_BUFFER_BASE + (AUDIO_DMA_PAGE_SIZE * 2) * n;
		*(adr + 1) = AUDIO_P_BUFFER_BASE + (AUDIO_DMA_PAGE_SIZE * 2) * n + AUDIO_DMA_PAGE_SIZE; 
	}
	// Recording(SSI1,SSI3)
	else{
		*(adr + 0) = AUDIO_R_BUFFER_BASE + (AUDIO_DMA_PAGE_SIZE * 2) * n;
		*(adr + 1) = AUDIO_R_BUFFER_BASE + (AUDIO_DMA_PAGE_SIZE * 2) * n + AUDIO_DMA_PAGE_SIZE; 
	}
	DEBUGMSG(ZONE_TEST, (TEXT("get_DMA_Buffer_Address(ch:%d audiono:%d) : 0x%08x/%08x\r\n"), ch,n,*(adr + 0),*(adr + 1)));
}


/*****************************************************************************
*   FUNCTION :  	get_DPTR	
*   DESCRIPTION :	Get DMA DPTR Register Setting
*   INPUTS :		ch - DMA Channel Number
*   OUTPUTS :     	Return DMA Port Number
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
DWORD
get_DPTR(
	int	ch
   )
{
	DWORD	ret = DPTR_MASK;

	// SSI0 Playback(mono)
	if( ch == CH_TX_HSSI_1 ){
		ret = DPTR_DDPT_HSSI0;
	}
	// SSI1 Recording(mono)
	else if( ch == CH_RX_HSSI_1 ){
		ret = DPTR_SDPT_HSSI1;
	}
	// SSI2 Playback(stereo)
	else if( ch == CH_TX_HSSI_2 ){
		ret = DPTR_DDPT_HSSI2;
	}
	// SSI3 Recording(stereo)
	else if( ch == CH_RX_HSSI_2 ){
		ret = DPTR_SDPT_HSSI3;
	}
	DEBUGMSG(ZONE_TEST, (TEXT("get_DPTR(ch:%d) : 0x%08x\r\n"), ch, ret));

	return	ret;
}


/*****************************************************************************
*   FUNCTION :  	get_DSAR
*   DESCRIPTION :	Get DMA DSAR Register Setting
*   INPUTS :		ch - DMA Channel Number
*                   n - Audio Number
*                   page - Page Number
*   OUTPUTS :     	Return Sorce Address
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
DWORD
get_DSAR(
	int	ch,
	DWORD	n,
	int	page
   )
{
	DWORD	ret;

	// DMA Ch = SSI0,SSI2 (for playing)
	if( ch == CH_TX_HSSI_1 || ch == CH_TX_HSSI_2 ){
		ret = AUDIO_P_BUFFER_BASE + (AUDIO_DMA_PAGE_SIZE * 2) * n + (AUDIO_DMA_PAGE_SIZE * page);
	}

	// DMA Ch = SSI1 (for recording)
	else if( ch == CH_RX_HSSI_1 ){
		ret = SSI1_REGBASE + SSI_RDR_OFFSET;
	}
	// DMA Ch = SSI3 (for recording)
	else if( ch == CH_RX_HSSI_2 ){
		ret = SSI3_REGBASE + SSI_RDR_OFFSET;
	}
	DEBUGMSG(ZONE_TEST, (TEXT("get_DSAR(ch:%d audiono:%d page:%d) : 0x%08x\r\n"), ch, n, page, ret));

	return	ret;
}


/*****************************************************************************
*   FUNCTION :  	get_DDAR
*   DESCRIPTION :	Get DMA DDAR Register Setting
*   INPUTS :		ch - DMA Channel Number
*                   n - Audio Number
*                   page - Page Number
*   OUTPUTS :     	Return Destination Address
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
DWORD
get_DDAR(
	int	ch,
	DWORD	n,
	int	page
   )
{
	DWORD	ret;

	// DMA Ch = SSI0 (for playing)
	if( ch == CH_TX_HSSI_1 ){
		ret = SSI0_REGBASE + SSI_TDR_OFFSET;
	}
	// DMA Ch = SSI2 (for playing)
	else if( ch == CH_TX_HSSI_2 ){
		ret = SSI2_REGBASE + SSI_TDR_OFFSET;
	}

	// DMA Ch = SSI1,SSI3 (for recording)
	else if( ch == CH_RX_HSSI_1 || ch == CH_RX_HSSI_2 ){
		ret = AUDIO_R_BUFFER_BASE + (AUDIO_DMA_PAGE_SIZE * 2) * n + (AUDIO_DMA_PAGE_SIZE * page);
	}
	DEBUGMSG(ZONE_TEST, (TEXT("get_DDAR(ch:%d audiono:%d page:%d) : 0x%08x\r\n"), ch, n, page, ret));

	return	ret;
}


/*****************************************************************************
*   FUNCTION :  	get_DTCR
*   DESCRIPTION :	Get DMA DTCR Register Setting
*   INPUTS :		ch - DMA Channel Number
*                   n - Audio Number
*                   page - Page Number
*   OUTPUTS :     	Return Transfer Count
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
DWORD
get_DTCR(
	int	ch,
	DWORD	n,
	int	page
   )
{
	DEBUGMSG(ZONE_TEST, (TEXT("get_DTCR(ch:%d audiono:%d page:%d) : 0x%08x\r\n"), ch, n, page, AUDIO_DMA_PAGE_SIZE / sizeof(ULONG)));
	return	AUDIO_DMA_PAGE_SIZE / sizeof(ULONG);
}


/*****************************************************************************
*   FUNCTION :  	module_init	
*   DESCRIPTION :	HSSI Initialize
*   INPUTS :		globals - DRIVER_GLOBALS Address
*                   i - Audio NUmber
*   OUTPUTS :     	Return TRUE for success, FALSE for failure
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
BOOL
module_init(
	PDRIVER_GLOBALS	globals,	
	int i
   )
{
	BOOL	ret = TRUE;
	int		ch;
	PBYTE   pSSI_RegBase;				// page-base for register offsets

	// SSI Reg
	pSSI0_RegBase =(PBYTE)GetVirtualAddressOfUncachedMemory(
		(PBYTE)SSI0_REGBASE,
		(DWORD)SSI_REGSIZE,
		"SSI_Init, pSSI_RegBase");
	if (pSSI0_RegBase == NULL) {
        RETAILMSG (1,(TEXT("SSI Virtual Alloc failure!\r\n")));
		return	FALSE;
	}

	ch = globals->aud[i].PLAY_CH - CH_TX_HSSI_1;
	pSSI_RegBase = (PBYTE)(pSSI0_RegBase + (SSI_CH_REGBASE_OFFSET * ch));
	pSSI_CR_TX      = (PVULONG) ( pSSI_RegBase + SSI_CR_OFFSET );
	pSSI_SR_TX      = (PVULONG) ( pSSI_RegBase + SSI_SR_OFFSET );
	pSSI_TDR        = (PVULONG) ( pSSI_RegBase + SSI_TDR_OFFSET );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷一区二区| 中文天堂在线一区| 欧美激情一区二区在线| 一级女性全黄久久生活片免费| 久久99精品一区二区三区 | 日韩av电影免费观看高清完整版 | 精品成人一区二区三区| 成人欧美一区二区三区1314| 久久99精品一区二区三区 | 久久久久久一二三区| 一区二区三区视频在线看| 国产精品一区二区三区99| 欧美日韩高清一区二区| 国产精品久久久久久久久免费樱桃| 日韩av网站在线观看| 欧美日韩一区二区三区四区| 欧美激情艳妇裸体舞| 美腿丝袜亚洲色图| 欧美一区二区三区视频在线 | 国产精品国产三级国产有无不卡 | 久久er精品视频| 欧美日韩高清不卡| 香蕉久久夜色精品国产使用方法| 成人性生交大片免费看在线播放 | 综合在线观看色| 成人一区二区在线观看| 久久久亚洲国产美女国产盗摄| 久久国产综合精品| 日韩一区二区三| 麻豆freexxxx性91精品| 日韩一区二区三| 精品无人码麻豆乱码1区2区 | 欧美精品色综合| 亚洲动漫第一页| 欧美日本高清视频在线观看| 亚洲地区一二三色| 欧美一区二区三区婷婷月色| 婷婷开心激情综合| 欧美日韩国产在线播放网站| 亚洲bt欧美bt精品| 日韩视频123| 国产一区亚洲一区| 久久精品一二三| av中文字幕一区| 亚洲一区二区三区美女| 欧美欧美午夜aⅴ在线观看| 五月婷婷色综合| 欧美一级二级三级蜜桃| 黄色精品一二区| 国产欧美日韩精品一区| 91色porny| 日韩精品视频网站| 久久精品视频免费| 色哟哟一区二区在线观看 | 91麻豆精品国产91久久久久 | 欧美一级黄色大片| 韩日精品视频一区| 中文字幕日本不卡| 欧美日韩美少妇| 老司机午夜精品| 国产精品毛片大码女人| 在线观看亚洲专区| 免费观看在线色综合| 欧美韩国日本一区| 7777精品伊人久久久大香线蕉的 | 久久久国产午夜精品| 91丨porny丨最新| 视频在线观看国产精品| 久久久久久久久久电影| 色婷婷综合久色| 精品亚洲国内自在自线福利| 亚洲男人的天堂av| 日韩欧美国产不卡| 色综合亚洲欧洲| 狠狠色丁香久久婷婷综合_中| 综合色天天鬼久久鬼色| 日韩精品一区二区三区在线播放| 成人ar影院免费观看视频| 视频一区欧美日韩| 中文字幕日韩一区| 久久久99久久| 7777精品伊人久久久大香线蕉最新版| 国产91露脸合集magnet| 性感美女极品91精品| 中文字幕一区二区在线播放 | 韩日av一区二区| 一区二区三区在线免费| 国产日产欧美精品一区二区三区| 在线国产亚洲欧美| av影院午夜一区| 国产一区二区在线观看免费| 亚洲色大成网站www久久九九| 精品日韩成人av| 91精品欧美综合在线观看最新 | 狠狠色丁香久久婷婷综合丁香| 亚洲一二三专区| 中文字幕五月欧美| 中文字幕成人网| 日韩三级视频在线观看| 色综合久久综合网欧美综合网| 国产精品12区| 国产裸体歌舞团一区二区| 水野朝阳av一区二区三区| 一区二区三区在线免费播放| 中文字幕在线观看不卡视频| 国产欧美日韩综合精品一区二区| 日韩女优制服丝袜电影| 欧美一区二区三区色| 欧美日本一区二区三区四区| 在线观看www91| 欧美在线视频全部完| 欧美性色黄大片| 精品视频全国免费看| 欧美日韩中文字幕一区二区| 色系网站成人免费| 在线视频一区二区免费| 欧美亚洲国产一区二区三区| 色诱视频网站一区| 欧美在线视频日韩| 777久久久精品| 欧美一区二区三区思思人| 欧美mv日韩mv| 国产丝袜在线精品| 国产精品成人网| 亚洲精品中文在线观看| 亚洲综合激情网| 日本不卡高清视频| 国模少妇一区二区三区| 国产激情一区二区三区桃花岛亚洲| 国产电影一区在线| 99在线精品视频| 欧美午夜精品免费| 日韩欧美一区中文| 久久久久成人黄色影片| 亚洲天堂免费在线观看视频| 亚洲午夜国产一区99re久久| 日韩—二三区免费观看av| 久久成人免费网站| 成人毛片老司机大片| 色狠狠综合天天综合综合| 欧美日韩在线播| 久久久噜噜噜久噜久久综合| 国产精品卡一卡二| 无吗不卡中文字幕| 国产成人三级在线观看| 91久久久免费一区二区| 日韩你懂的在线播放| 自拍偷在线精品自拍偷无码专区| 亚洲欧洲制服丝袜| 激情文学综合丁香| 色婷婷狠狠综合| 精品99久久久久久| 一区二区三区91| 国产很黄免费观看久久| 欧美日韩在线播放三区四区| 国产视频一区二区三区在线观看| 亚洲激情欧美激情| 国产揄拍国内精品对白| 91网站在线播放| 精品国产凹凸成av人网站| 亚洲激情图片qvod| 国产a久久麻豆| 欧美一级高清大全免费观看| 亚洲色图欧美激情| 国产精品综合视频| 欧美一区二区三区视频免费| 国产精品女主播av| 精品一区二区免费在线观看| 色噜噜狠狠成人中文综合| 日本一区二区三区dvd视频在线| 亚洲国产精品视频| 91网站最新地址| 欧美激情一区二区三区不卡 | 天堂精品中文字幕在线| gogogo免费视频观看亚洲一| 欧美va天堂va视频va在线| 一区二区三区中文字幕| 成人国产精品免费观看视频| 日韩视频在线一区二区| 性做久久久久久久免费看| 91老师片黄在线观看| 国产女人18毛片水真多成人如厕 | 91在线视频网址| 欧美极品美女视频| 精品综合免费视频观看| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品成人一区二区三区夜夜夜| 开心九九激情九九欧美日韩精美视频电影 | 美女一区二区久久| 在线观看日韩电影| 亚洲欧洲日产国产综合网| 精品一二三四在线| 精品国产免费久久| 男男成人高潮片免费网站| 欧美日韩在线免费视频| 亚洲成a人片综合在线| 欧美专区日韩专区| 亚洲一区二区影院| 欧美色图片你懂的| 五月综合激情网|