亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
99re这里都是精品| 亚洲男人的天堂在线aⅴ视频| 日韩欧美精品在线视频| 欧美变态tickle挠乳网站| 国产欧美一区二区在线| 亚洲人成精品久久久久久| 午夜久久久影院| 国产精品一线二线三线精华| 成人av午夜电影| 欧美视频在线一区二区三区 | 欧美高清在线一区二区| 亚洲精品亚洲人成人网| 日本午夜精品一区二区三区电影| 国内精品国产成人| 99精品国产视频| 日韩欧美在线网站| 国产精品久久久久久亚洲毛片| 亚洲福利电影网| 国产乱码精品一区二区三 | 亚洲韩国一区二区三区| 激情五月激情综合网| 色呦呦网站一区| 久久综合丝袜日本网| 亚洲视频免费在线| 青青草精品视频| 91在线免费视频观看| 欧美成人一区二区三区片免费 | 欧美日韩国产精品成人| 国产色产综合色产在线视频| 亚洲福利一二三区| 97精品电影院| 日韩小视频在线观看专区| 亚洲美女电影在线| 国产一区二区三区电影在线观看| 91麻豆国产自产在线观看| 精品粉嫩aⅴ一区二区三区四区| 亚洲美女视频在线| 国产高清久久久| 日韩一区二区免费高清| 亚洲品质自拍视频| 国产成人精品亚洲日本在线桃色| 欧美日韩国产精品自在自线| 亚洲免费电影在线| 丁香天五香天堂综合| 日韩欧美激情四射| 视频在线观看91| 色成年激情久久综合| 欧美—级在线免费片| 老鸭窝一区二区久久精品| 欧美日韩色一区| 一区二区三区鲁丝不卡| 成人av在线一区二区| 久久亚洲精华国产精华液 | 欧美xxxx老人做受| 成人高清视频在线| 精品福利av导航| 麻豆精品视频在线观看| 欧美日韩黄色一区二区| 亚洲精品ww久久久久久p站| 不卡av在线网| 中文字幕国产一区二区| 国产一区二区三区香蕉| 精品久久五月天| 人人精品人人爱| 制服丝袜一区二区三区| 五月婷婷激情综合| 欧美午夜电影一区| 亚洲美女精品一区| 91国产免费看| 亚洲精品免费电影| 色域天天综合网| 亚洲蜜桃精久久久久久久| 色婷婷久久一区二区三区麻豆| 国产精品久久久久久久久免费相片| 国产精品2024| 国产欧美日韩三区| 成人av免费在线观看| 日韩理论片在线| 色成人在线视频| 亚洲国产精品尤物yw在线观看| 欧美亚洲动漫精品| 亚洲成a人片在线观看中文| 欧美三级电影网站| 天堂av在线一区| 宅男在线国产精品| 久久国产人妖系列| 久久久影视传媒| 不卡高清视频专区| 亚洲欧美一区二区三区久本道91 | 尤物在线观看一区| 欧美三级中文字| 婷婷六月综合亚洲| 欧美成人乱码一区二区三区| 狠狠色伊人亚洲综合成人| 久久久久97国产精华液好用吗| 国产成人午夜99999| 中文字幕一区二| 欧美最新大片在线看| 水野朝阳av一区二区三区| 日韩女优av电影| 国产mv日韩mv欧美| 亚洲自拍偷拍综合| 91精品综合久久久久久| 精品影院一区二区久久久| 国产欧美日韩中文久久| 成人精品免费看| 亚洲自拍都市欧美小说| 欧美一区二区三区白人| 国产精品77777竹菊影视小说| 综合网在线视频| 欧美精品自拍偷拍| 国产一区日韩二区欧美三区| 亚洲欧洲精品成人久久奇米网| 在线观看免费亚洲| 久久99热这里只有精品| 中文字幕在线一区| 欧美日免费三级在线| 久久99精品久久久久久久久久久久| 国产欧美精品一区| 欧美天堂一区二区三区| 精品一区二区三区视频| 中文字幕一区不卡| 日韩一级大片在线观看| 国产99久久精品| 欧美日韩国产一二三| 欧美日韩一区二区三区在线看| 96av麻豆蜜桃一区二区| 欧美亚洲综合久久| 欧美成人性福生活免费看| 精品精品欲导航| 色综合天天性综合| 丁香亚洲综合激情啪啪综合| 国产精品一区二区在线看| 国产一区二区不卡在线 | 色综合中文字幕国产| 99久久亚洲一区二区三区青草| 午夜欧美一区二区三区在线播放| 亚洲综合色成人| 亚洲色图欧美激情| 亚洲免费观看高清在线观看| 亚洲h动漫在线| 久久国产尿小便嘘嘘尿| 国产不卡视频在线播放| 欧美日韩国产123区| 91黄色免费看| 在线观看国产日韩| 欧美日韩一区二区三区不卡| av不卡在线播放| 波多野结衣精品在线| 91麻豆免费视频| 91精品国产综合久久久久久久 | 丰满放荡岳乱妇91ww| av中文字幕一区| 91精品啪在线观看国产60岁| 国产精品污污网站在线观看| 亚洲狠狠爱一区二区三区| 久久99最新地址| 91精品国产欧美一区二区18| 久久综合九色综合欧美98| 久久99精品久久久久久国产越南| 99久久精品国产网站| 久久精品在这里| 欧美在线高清视频| 看电视剧不卡顿的网站| 成人app网站| 一区二区三区美女| 成人av在线资源| 亚洲午夜国产一区99re久久| 韩国av一区二区三区四区| 色综合网站在线| 免费不卡在线观看| 欧美精品电影在线播放| 国产精品日日摸夜夜摸av| 久久精品二区亚洲w码| 国产欧美日韩精品在线| 久久66热偷产精品| 日本 国产 欧美色综合| 午夜精品国产更新| 伊人色综合久久天天人手人婷| 国产精品色一区二区三区| 久久九九国产精品| 国产欧美综合在线观看第十页| 久久麻豆一区二区| 久久综合久色欧美综合狠狠| 日韩欧美国产午夜精品| 欧美一区二区三区视频在线| 欧美一区午夜精品| 欧美一级爆毛片| 欧美一区二区精品久久911| 欧美一区二区三区视频免费播放 | 欧美成人欧美edvon| 日韩一区二区三区视频在线观看| 91精品在线麻豆| 日韩视频中午一区| 日韩精品一区二区在线| 精品国产伦一区二区三区免费| 日韩欧美综合在线| 精品福利在线导航| 国产欧美日韩麻豆91| 亚洲视频1区2区|