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

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

?? hssi.c

?? WinCE5.0BSP for Renesas SH7770
?? C
?? 第 1 頁 / 共 5 頁
字號:
		SSICR_TX.bits.DEL  = 1;	// Serial Data no Delay
		SSICR_TX.bits.BREN = 0;	// Burst Mode Disable
		SSICR_TX.bits.CKDV = 3; // Serial Oversample Clock Divide Ratio
		SSICR_TX.bits.MUEN = 0;	// Mute disable
		SSICR_TX.bits.CPEN = 0;	// Compress mode disable
		SSICR_TX.bits.TRMD = 1;	// Transmit mode
		SSICR_TX.bits.EN   = 0;	// SSI Disable
		RegValue = SSICR_TX.AsDWORD;
		WRITE_REGISTER_ULONG(pSSI_CR_TX, RegValue);
	}

	data_count = 0;

	FUNC_WPDD("-hssi_txstart");
	return;
}


/*****************************************************************************
*   FUNCTION :  	module_rxstart
*   DESCRIPTION :	HSSI Rx Start
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
VOID
module_rxstart(
   VOID
   )
{
	ULONG	RegValue;
unsigned char DSPmaster[5][2] = {
//{Register Pointer, Value}
{CODEC_CMB, 	0x00},		//*0:(01h)Clock Mode Byte(CO1乣CO0,CI1乣CI0)
							//		if 11.025kHz then ch0:0x52,ch1:0x50,ch2/3:0x40
{CODEC_DSP_PMB,	0xe8},		//*1:(0Eh)DSP Port Mode Byte(DCK1乣DCK0,DSCK)
							//		slave:0xc8,master:0xe8
{CODEC_APMB,	0xe8},		//*2:(0Fh)Auxiliary Port Mode Byte(ACK1乣ACK0,AMS1乣AMS0,ASCK)
							//		slave:0x00,master:0xe8
{CODEC_DAC_CB,	0x3f},		//*3:(03h)DAC Control Byte(ZCD,MUTC)
{CODEC_NONE,	0x00}};		// 4:delimiter

	FUNC_WPDD("+hssi_rxstart");

	DSPmaster[0][1] = CS4226_REC_CMB;
	DSPmaster[1][1] = CS4226_REC_DSP_PMB;
	DSPmaster[2][1] = CS4226_REC_APMB;
	if(PlayOpenFlag == 0){
		DSPmaster[3][1] = CS4226_DACCB_MUTE;
	}
	else{
		DSPmaster[3][1] = CS4226_DACCB_NORMAL;
	}

	//Stop SSI
	WRITE_REGISTER_ULONG((PULONG)pSSI_CR_RX, (ULONG)(SSICR_RX.AsDWORD & SSI_DISABLE_MASK) );	// Disable SSI

	if(CS4226_ReadADDR == SSI1_CS4226_ReadADDR){
		// stop playback only ch1
		WRITE_REGISTER_ULONG((PULONG)pSSI_CR_TX, (ULONG)(0x00000000) );	// Disable SSI for TX
	}

	if ( ulDSPMode != DSPmaster[1][1] || ulDACControl != DSPmaster[3][1] ){
		if(I2C_SetCODEC(DSPmaster)){
			ulDSPMode = DSPmaster[1][1];
			ulDACControl = DSPmaster[3][1];
		}
	}

	// Set SSI Control Register
	if(CS4226_ReadADDR == SSI2_CS4226_ReadADDR){
		if(PlayOpenFlag == 0){
			// ch3 need ch2's clock
			SSICR_TX.bits.Reserved = 0;
			SSICR_TX.bits.DMEN = 0;	// DMA Disable
			SSICR_TX.bits.UIEN = 0;	// Underflow IRQ disable
			SSICR_TX.bits.OIEN = 0;	// Overflow IRQ disable
			SSICR_TX.bits.IIEN = 0;	// Idle Mode IRQ disable
			SSICR_TX.bits.DIEN = 0;	// Data IRQ disable
			SSICR_TX.bits.CHNL = 0;	// Channels
			SSICR_TX.bits.DWL  = 3;	// Data Word Length 20 bit
			SSICR_TX.bits.SWL  = 3;	// System Word Length 32 bit
			SSICR_TX.bits.SCKD = SSI_PLAY_MODE;	// Serial Clock Output(Master)
			SSICR_TX.bits.SWSD = SSI_PLAY_MODE;	// Serial WS Output(Master)
			SSICR_TX.bits.SCKP = 1;	// Serial Clock Polarity falling edge
			SSICR_TX.bits.SWSP = 1;	// Serial WS Polarity High for Left
			SSICR_TX.bits.SPDP = 0;	// Serial Padding Polarity Low
			SSICR_TX.bits.SDTA = 1;	// Serial Data Alignment Right
			SSICR_TX.bits.PDTA = 1;	// Parallel Data Alignment Right
			SSICR_TX.bits.DEL  = 1;	// Serial Data no Delay
			SSICR_TX.bits.BREN = 0;	// Burst Mode Disable
			SSICR_TX.bits.CKDV = 3; // Serial Oversample Clock Divide Ratio
			SSICR_TX.bits.MUEN = 0;	// Mute disable
			SSICR_TX.bits.CPEN = 0;	// Compress mode disable
			SSICR_TX.bits.TRMD = 1;	// Transmit mode
			SSICR_TX.bits.EN   = 0;	// SSI Disable
			RegValue = SSICR_TX.AsDWORD;
			WRITE_REGISTER_ULONG(pSSI_CR_TX, RegValue);
		}
	}

	SSICR_RX.bits.Reserved = 0;
	SSICR_RX.bits.DMEN = 0;	// DMA Disable
	SSICR_RX.bits.UIEN = 0;	// Underflow IRQ disable
	SSICR_RX.bits.OIEN = 0;	// Overflow IRQ disable
	SSICR_RX.bits.IIEN = 0;	// Idle Mode IRQ disable
	SSICR_RX.bits.DIEN = 0;	// Data IRQ disable
	SSICR_RX.bits.CHNL = 0;	// Channels
	SSICR_RX.bits.DWL  = 3; // Data Word Length 20 bit
	SSICR_RX.bits.SWL  = 3;	// System Word Length 32 bit
	SSICR_RX.bits.SCKD = SSI_REC_MODE;	// Serial Clock Output
	SSICR_RX.bits.SWSD = SSI_REC_MODE;	// Serial WS Output
	SSICR_RX.bits.SCKP = 1;	// Serial Clock Polarity falling edge
	SSICR_RX.bits.SWSP = 1;	// Serial WS Polarity High for Left
	SSICR_RX.bits.SPDP = 0;	// Serial Padding Polarity Low
	SSICR_RX.bits.SDTA = 1;	// Serial Data Alignment Right
	SSICR_RX.bits.PDTA = 1;	// Parallel Data Alignment Right
	SSICR_RX.bits.DEL  = 1;	// Serial Data no Delay
	SSICR_RX.bits.BREN = 0;	// Burst Mode Disable
	SSICR_RX.bits.CKDV = 3;	// Serial Oversample Clock Divide Ratio
	SSICR_RX.bits.MUEN = 0;	// Mute disable
	SSICR_RX.bits.CPEN = 0;	// Compress mode disable
	SSICR_RX.bits.TRMD = 0;	// Receive mode
	SSICR_RX.bits.EN   = 0;	// SSI Disable
	RegValue = SSICR_RX.AsDWORD;
	WRITE_REGISTER_ULONG(pSSI_CR_RX, RegValue);

	FUNC_WPDD("-hssi_rxstart");
	return;
}

/*****************************************************************************
*   FUNCTION :  	private_ChangeSampleRate
*   DESCRIPTION :   Change sampling rate for DAC
*   INPUTS :		SampleRate - Sampling Rate
*   OUTPUTS :     	Return TRUE for success, FALSE for failure
*   DESIGN NOTES :
*   CAUTIONS :		
*****************************************************************************/
BOOL private_ChangeSampleRate(
		ULONG SampleRate
		)
{
	// do nothing
	return TRUE;
}


/*****************************************************************************
*   FUNCTION :  	private_ChangeRecSampleRate
*   DESCRIPTION :   Change sampling rate for ADC
*   INPUTS :		SampleRate - Sampling Rate
*   OUTPUTS :     	Return TRUE for success, FALSE for failure
*   DESIGN NOTES :
*   CAUTIONS :		
*****************************************************************************/
BOOL private_ChangeRecSampleRate(
		ULONG SampleRate
		)
{
	// do nothing
	return TRUE;
}

/*****************************************************************************
*   FUNCTION :  	AudioFillBuffer_M8
*   DESCRIPTION :	convert sample and fill audio DMA buffer(8bit Mono)
*   INPUTS :		pSrcPtr - wave audio data Address
*                   pDstPtr - Audio Buffer Address
*                   ulSrcSampleCount - Sampling count
*                   nIncreasing - The coefficient for increasing data
*   OUTPUTS :     	None
*   DESIGN NOTES :  Soft-ware Sampling Rate Convert
*                   (11.025kHz and 22.05kHz to 44.1kHz)
*                   convert 8bit to 20bit and mono to stereo
*   CAUTIONS :		
*****************************************************************************/
VOID
AudioFillBuffer_M8 (
	PBYTE pSrcPtr,
	PULONG pDstPtr,
	ULONG ulSrcSampleCount,
	ULONG nIncreasing
    )
{
    ULONG       sample;
	ULONG n;

    while (ulSrcSampleCount > 0) {
        sample = *pSrcPtr++;
		sample -= 128;
		sample <<= 12;
		for(n=0; n<nIncreasing; n++){
			*pDstPtr++ = sample;
	        *pDstPtr++ = sample;
		}
		ulSrcSampleCount--;
    }
}

/*****************************************************************************
*   FUNCTION :  	AudioFillBuffer_S8
*   DESCRIPTION :	convert sample and fill audio DMA buffer(8bit Stereo)
*   INPUTS :		pSrcPtr - wave audio data Address
*                   pDstPtr - Audio Buffer Address
*                   ulSrcSampleCount - Sampling count
*                   nIncreasing - The coefficient for increasing data
*   OUTPUTS :     	None
*   DESIGN NOTES :  Soft-ware Sampling Rate Convert
*                   (11.025kHz and 22.05kHz to 44.1kHz)
*                   convert 8bit to 20bit
*   CAUTIONS :		
*****************************************************************************/
VOID
AudioFillBuffer_S8 (
	PBYTE pSrcPtr,
	PULONG pDstPtr,
	ULONG ulSrcSampleCount,
	ULONG nIncreasing
    )
{
    ULONG       l_sample, r_sample;
	ULONG n;

    while (ulSrcSampleCount > 0) {
        l_sample = *pSrcPtr++;
		l_sample -= 128;
		l_sample <<=  12;
        r_sample = *pSrcPtr++;
		r_sample -= 128;
		r_sample <<=  12;
		for(n=0; n<nIncreasing; n++){
			*pDstPtr++ = l_sample;
			*pDstPtr++ = r_sample;
		}
		ulSrcSampleCount--;
    }
}

/*****************************************************************************
*   FUNCTION :  	AudioFillBuffer_M16
*   DESCRIPTION :	convert sample and fill audio DMA buffer(16bit Mono)
*   INPUTS :		pSrcPtr - wave audio data Address
*                   pDstPtr - Audio Buffer Address
*                   ulSrcSampleCount - Sampling count
*                   nIncreasing - The coefficient for increasing data
*   OUTPUTS :     	None
*   DESIGN NOTES :  Soft-ware Sampling Rate Convert
*                   (11.025kHz and 22.05kHz to 44.1kHz)
*                   convert 16bit to 20bit and mono to stereo
*   CAUTIONS :		
*****************************************************************************/
VOID
AudioFillBuffer_M16 (
	PUSHORT pSrcPtr,
	PULONG pDstPtr,
	ULONG ulSrcSampleCount,
	ULONG nIncreasing
    )
{
	ULONG n;
	ULONG sample;

    while (ulSrcSampleCount > 0) {
		sample = *pSrcPtr++;
		sample <<= 4;
		for(n=0; n<nIncreasing; n++){
			*pDstPtr++ = sample;
			*pDstPtr++ = sample;
		}
		ulSrcSampleCount--;
    }
}

/*****************************************************************************
*   FUNCTION :  	AudioFillBuffer_S16
*   DESCRIPTION :	convert sample and fill audio DMA buffer(16bit Stereo)
*   INPUTS :		pSrcPtr - wave audio data Address
*                   pDstPtr - Audio Buffer Address
*                   ulSrcSampleCount - Sampling count
*                   nIncreasing - The coefficient for increasing data
*   OUTPUTS :     	None
*   DESIGN NOTES :  Soft-ware Sampling Rate Convert
*                   (11.025kHz and 22.05kHz to 44.1kHz)
*                   convert 16bit to 20bit
*   CAUTIONS :		
*****************************************************************************/
VOID
AudioFillBuffer_S16 (
	PUSHORT pSrcPtr,
	PULONG pDstPtr,
	ULONG ulSrcSampleCount,
	ULONG nIncreasing
    )
{
	ULONG n;
    ULONG       l_sample, r_sample;

    while (ulSrcSampleCount > 0) {
		l_sample = *pSrcPtr++;
		l_sample = l_sample<<4;
		r_sample = *pSrcPtr++;
		r_sample = r_sample<<4;
		for(n=0; n<nIncreasing; n++){
			*pDstPtr++ = l_sample;
			*pDstPtr++ = r_sample;
		}
		ulSrcSampleCount--;
    }
}

/*****************************************************************************
*   FUNCTION :  	private_AudioFillBuffer
*   DESCRIPTION :   fills next buffer from given wave
*					toggles ready/empty pointers to double buffer
*   INPUTS :		wave
*   OUTPUTS :     	None
*   DESIGN NOTES :
*   CAUTIONS :
*****************************************************************************/
VOID
private_AudioFillBuffer (
    PWAVEHDR pwh
    )
{
	const PPCMWAVEFORMAT pFormat = (PPCMWAVEFORMAT) g_pwfx[WAPI_OUT];
	ULONG		samplingRate;
	ULONG		*lpAudioBuffer;
	LONG nDstLen, nSrcLen;
	ULONG nSampleCount,nSampleUnit;
	LONG	nIncreasing = 1;
	ULONG	CODEC_SAMPLING_RATE;
    volatile DWORD dwDummy; // used to synchronize data fill and DMA

	FUNC_VERBOSE("+PDD_AudioFillBuffer");

	//Set terminal condition for double-buffer and exit if no data remains

	if (pwh == NULL) 
	{
		pDriverGlobals->aud[AUDIO_NO].play_address = (ULONG)NULL;
		return;
	}

	//
	// For this line, the number of bytes from this audio stream
	// depends on the dma_buffer_size and the sample rate of the stream
	//
	// What's the maximum number of samples from this stream are needed
	// to fill the DMA buffer?
	//
	switch (g_pcmtype[WAPI_OUT])
	{
	case PCM_TYPE_S16:
        nSampleUnit = 4; // 2 words per sample unit
		break;

	case PCM_TYPE_M16:
        nSampleUnit = 2; // 1 word per sample unit
		break;

	case PCM_TYPE_S8:
        nSampleUnit = 2;  // 2 bytes per sample unit
		break;

	case PCM_TYPE_M8:
        nSampleUnit = 1;  // 1 byte per sample unit
		break;

	}  // end switch

	samplingRate = pFormat->wf.nSamplesPerSec;
	CODEC_SAMPLING_RATE = get_CODEC_SAMPLING_RATE(pDriverGlobals->aud[AUDIO_NO].PLAY_CH);
	nIncreasing = CODEC_SAMPLING_RATE / samplingRate;	// The coefficient for increasing data
	lpAudioBuffer = (ULONG *)(pAudioBufferBase  + v_nNextPage * AUDIO_DMA_PAGE_SIZE);

    nDstLen = AUDIO_DMA_PAGE_SIZE / (sizeof(ULONG) * 2 * nIncreasing);

	//
	// For each sample in the buffer...
	//
    while (nDstLen > 0) {
        nSrcLen = pwh->dwBufferLength - pwh->dwBytesRecorded;
		if (nSrcLen <= 0)
		{
			pwh = pwh->lpNext;
            if (pwh == NULL)
				break; // The rest of the buffer will be cleared later.
		}
		else
		{
            nSampleCount = nSrcLen  / nSampleUnit;
            if (nDstLen < (LONG)nSampleCount) nSampleCount = nDstLen;

			switch (g_pcmtype[WAPI_OUT])
			{
			case PCM_TYPE_S16:
				AudioFillBuffer_S16((PUSHORT)(pwh->lpData + pwh->dwBytesRecorded), (PULONG)lpAudioBuffer,
									nSampleCount, nIncreasing);
				break;

			case PCM_TYPE_M16:
				AudioFillBuffer_M16((PUSHORT)(pwh->lpData + pwh->dwBytesRecorded), (PULONG)lpAudioBuffer,
									nSampleCount, nIncreasing);
				break;

			case PCM_TYPE_S8:
				AudioFillBuffer_S8((PBYTE)(pwh->lpData + pwh->dwBytesRecorded), (PULONG)lpAudioBuffer,
									nSampleCount, nIncreasing);
				break;

			case PCM_TYPE_M8:
				AudioFillBuffer_M8((PBYTE)(pwh->lpData + pwh->dwBytesRecorded), (PULONG)lpAudioBuffer,
									nSampleCount, nIncreasing);
				break;

			}  // end switch
			pwh->dwBytesRecorded += (nSampleCount * nSampleUnit)  ;

            nDstLen -= nSampleCount;
            lpAudioBuffer += (2 * nSampleCount * nIncreasing);
		}
	}

    // pad with silence if necessary
    memset(lpAudioBuffer, 0, nDstLen * sizeof(ULONG) * 2 * nIncreasing);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区视频在线| 国产精品午夜在线| 久久久久久99久久久精品网站| 国产精品久久国产精麻豆99网站| 午夜影院久久久| 91亚洲精品久久久蜜桃| 欧美变态凌虐bdsm| 午夜久久久久久久久久一区二区| 成人黄色a**站在线观看| 日韩一区二区精品葵司在线 | 亚洲精品午夜久久久| 久久精品国产免费| 欧美乱妇20p| 亚洲尤物视频在线| 日本黄色一区二区| ...av二区三区久久精品| 国产精选一区二区三区| 日韩欧美一级二级三级久久久| 一区二区三区不卡视频在线观看| 顶级嫩模精品视频在线看| 日韩精品中午字幕| 男男成人高潮片免费网站| 欧美调教femdomvk| 一区二区三区电影在线播| 99久久婷婷国产综合精品电影 | 欧美一区二区在线视频| 一区二区三区免费在线观看| av在线不卡观看免费观看| 日本一区二区久久| 国产精品996| 国产日韩欧美在线一区| 国产一区欧美一区| 精品日韩在线观看| 国产一区二区看久久| 国产亚洲婷婷免费| 高清不卡一二三区| 一区免费观看视频| www.欧美日韩国产在线| 中文字幕在线观看一区| 粉嫩aⅴ一区二区三区四区| 亚洲国产精品二十页| 国产v综合v亚洲欧| 日韩毛片一二三区| 欧美日韩亚洲另类| 秋霞午夜鲁丝一区二区老狼| 欧美成人精品3d动漫h| 国产在线不卡一卡二卡三卡四卡| 久久理论电影网| 99久久精品国产导航| 玉米视频成人免费看| 欧美巨大另类极品videosbest | 欧美亚洲日本国产| 日韩精品一二区| 精品99一区二区| www.99精品| 亚洲国产精品精华液网站| 日韩欧美视频一区| 成人av网站免费观看| 亚洲精品成人精品456| 91.com视频| 成av人片一区二区| 亚洲一区二区在线视频| 91精品黄色片免费大全| 国产大片一区二区| 亚洲一区精品在线| 久久你懂得1024| 欧美系列日韩一区| 国产精品一区二区91| 一区二区久久久久| 欧美va在线播放| 欧美在线一二三四区| 国产制服丝袜一区| 一级中文字幕一区二区| 久久综合久久99| 欧美性猛片xxxx免费看久爱| 国产综合色在线| 亚洲一级二级在线| 久久久久一区二区三区四区| 欧美三级韩国三级日本三斤 | 91福利国产精品| 久久99精品国产91久久来源| 亚洲精品高清视频在线观看| 精品裸体舞一区二区三区| 色老头久久综合| 成人性视频网站| 精品一区二区久久| 亚洲一二三四久久| 国产精品麻豆一区二区| 日韩精品一区二区三区视频在线观看| av亚洲精华国产精华精华| 免费在线观看一区二区三区| 一区二区三区四区在线播放| 日本一区二区三区免费乱视频| 91精品国产黑色紧身裤美女| 91欧美一区二区| 国产电影一区在线| 狠狠色丁香久久婷婷综| 日韩精品1区2区3区| 一区二区三区色| 亚洲视频综合在线| 亚洲欧洲韩国日本视频| 久久久99精品久久| 久久久五月婷婷| 久久综合色婷婷| 日韩欧美国产一二三区| 91精品国产黑色紧身裤美女| 欧美日韩一二三| 欧美日韩国产中文| 欧美性猛交xxxx乱大交退制版| 一本到一区二区三区| 91免费视频网址| 99久久99久久精品国产片果冻| 成人亚洲一区二区一| 成人永久看片免费视频天堂| 国产丶欧美丶日本不卡视频| 国产精品77777| 国产99久久久精品| 成人高清视频在线| 97成人超碰视| 久久综合999| 26uuu国产日韩综合| 久久综合久久综合久久综合| 国产亚洲午夜高清国产拍精品| 亚洲精品在线观看网站| 久久伊人蜜桃av一区二区| 精品福利一区二区三区 | 韩国av一区二区三区四区| 久久99国产精品免费网站| 麻豆精品视频在线观看免费| 韩国av一区二区| 国产福利电影一区二区三区| av福利精品导航| 欧美特级限制片免费在线观看| 欧美日韩国产精品成人| 欧美成人精品福利| 国产日韩影视精品| 亚洲精品高清在线| 日本在线观看不卡视频| 国产在线视频一区二区| 成人av电影观看| 在线观看91视频| 91精品国产乱| 欧美国产综合一区二区| 午夜久久久久久久久| 久久99九九99精品| av福利精品导航| 91精选在线观看| 国产精品免费aⅴ片在线观看| 亚洲国产日韩一级| 国产一区二区伦理| 欧美性三三影院| 国产偷v国产偷v亚洲高清| 亚洲一区二区免费视频| 激情综合一区二区三区| 色综合久久久久综合| 日韩午夜精品视频| 亚洲天堂2016| 国产精品中文字幕日韩精品 | 成人免费看的视频| 91精品国产色综合久久不卡蜜臀| 国产拍欧美日韩视频二区| 一区二区三区免费| 国产精品综合久久| 欧美日韩成人一区| 国产精品美女久久久久久久久久久 | 天天免费综合色| av一二三不卡影片| 欧美r级在线观看| 亚洲国产精品久久不卡毛片| 国产精品性做久久久久久| 欧美日韩国产美| 国产精品国产三级国产三级人妇| 麻豆国产欧美一区二区三区| 91精品办公室少妇高潮对白| 久久男人中文字幕资源站| 秋霞av亚洲一区二区三| 一本一道久久a久久精品综合蜜臀| 亚洲精品一区二区三区99| 婷婷综合在线观看| 欧美特级限制片免费在线观看| 国产免费成人在线视频| 国产一区二区在线观看免费 | 欧美精品一区男女天堂| 日韩有码一区二区三区| 欧美在线不卡视频| 中文字幕一区二区三区在线播放| 国产一区二区不卡| 欧美一级淫片007| 天天综合天天综合色| 欧美午夜精品理论片a级按摩| 中文字幕一区在线观看视频| 国产成人亚洲综合色影视| 2022国产精品视频| 精品一区二区三区免费观看 | 欧美日韩亚洲综合| 亚洲曰韩产成在线| 欧美日韩精品一区二区三区| 亚洲线精品一区二区三区八戒| 欧美综合色免费| 午夜精品视频一区|