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

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

?? audioinit.c

?? 基于實時嵌入式系統的voip系統(real time embeded system)。主要難點在實時處理語音信號。語音信號基于其自身特點
?? C
?? 第 1 頁 / 共 2 頁
字號:
	*/	temp1 = readl(CS4281_pBA0 + BA0_HIMR) &  0xfffbfcff;	writel(temp1, CS4281_pBA0+BA0_HIMR);	printf("\nCS4281 Hardware Initialization Complete!!\n");	return 0;}/***************************************************************************   Function - start_dac*   Parameters - none*   Returns - none*   Purpose - Start DAC and ADC.*     Enables DMA0 an DMA1, Enables Interrupt, sets volume to 0 db.*****************************************************************************/void start_dac(void){	UINT32 temp1;	int lockkey;	lockkey = intLock();	/* enable DMA0 */	temp1 = readl(CS4281_pBA0+BA0_DCR0);	writel(temp1 & ~DCRn_MSK, CS4281_pBA0+BA0_DCR0);	/* enable DMA1*/	temp1 = readl(CS4281_pBA0+BA0_DCR1);	writel(temp1 & ~DCRn_MSK, CS4281_pBA0+BA0_DCR1);	/* enable Interrupt */	writel(HICR_IEV | HICR_CHGM, CS4281_pBA0+BA0_HICR);	/* set volume to 0 db */	writel(0, CS4281_pBA0+BA0_PPRVC);	writel(0, CS4281_pBA0+BA0_PPLVC);	intUnlock(lockkey);}/***************************************************************************   Function - stop_dac*   Parameters - none*   Returns - none*   Purpose - Stops DAC and ADC.*     Disables DMA0 and DMA1, disables interrupt*****************************************************************************/void stop_dac(void){    UINT32 temp1;    int lockkey;    lockkey = intLock();    /* disable DMA0 */    temp1 = readl(CS4281_pBA0+BA0_DCR0);    writel(temp1 | DCRn_MSK, CS4281_pBA0+BA0_DCR0);    /* disable DMA1*/    temp1 = readl(CS4281_pBA0+BA0_DCR1);    writel(temp1 | DCRn_MSK, CS4281_pBA0+BA0_DCR1);    /* disable Interrupt */    writel(HICR_CHGM, CS4281_pBA0+BA0_HICR);    intUnlock(lockkey);}/***************************************************************************   Function - prog_codec*   Parameters - none*   Returns - none*   Purpose - Programs the codec according to the current_mode global*     variable.  Note that DMA should be stopped before changing*     the codec.  It also sets the sample rate to 11025.*****************************************************************************/int prog_codec(void){	UINT32 format,temp1;	int lockkey;	lockkey = intLock();   /*stop the DMAs if active*/	temp1 = readl( CS4281_pBA0+BA0_DCR0);	writel(temp1 | DCRn_MSK, CS4281_pBA0+BA0_DCR0);   /* Stop play DMA, if active.*/	temp1 = readl( CS4281_pBA0+BA0_DCR1);	writel(temp1 | DCRn_MSK, CS4281_pBA0+BA0_DCR1);   /* Stop capture DMA, if active.*/	/* DAC */	/* if 8-bit mono, then set size to 8 and set mono bit */	if( current_mode == 1 )	{		format = DMRn_DMA | DMRn_AUTO | DMRn_TR_READ | DMRn_USIGN | DMRn_SIZE8 | DMRn_MONO;	}	if( current_mode == 2 ) /*for 8-bit stero set size 8, but not mono*/	{		format = DMRn_DMA | DMRn_AUTO | DMRn_TR_READ  |DMRn_USIGN | DMRn_SIZE8;	}	if( current_mode == 3 ) /*for 16 bit stereo don't set size 8 or mono*/	{		format = DMRn_DMA | DMRn_AUTO | DMRn_TR_READ | DMRn_USIGN;	}	writel(format, CS4281_pBA0+BA0_DMR0);	/* ADC*/	/* if 8-bit mono, then set size to 8 and set mono bit */	if( current_mode == 1 )	{		format = DMRn_DMA | DMRn_AUTO | DMRn_TR_WRITE | DMRn_USIGN  | DMRn_SIZE8 | DMRn_MONO;	}	if( current_mode == 2 ) /*for 8-bit stero set size 8, but not mono*/	{		format = DMRn_DMA | DMRn_AUTO | DMRn_TR_WRITE | DMRn_USIGN | DMRn_SIZE8;	}	if( current_mode == 3 ) /*for 16 bit stereo don't set size 8 or mono*/	{		format = DMRn_DMA | DMRn_AUTO | DMRn_TR_WRITE | DMRn_USIGN;	}	if( current_mode == 4 ) /*for 20 bit stereo set size 20 and not mono*/	{		format = DMRn_DMA | DMRn_AUTO | DMRn_TR_WRITE | DMRn_USIGN | DMRn_SIZE20;	}	writel(format, CS4281_pBA0+BA0_DMR1);	/*ADC,DAC set record sampling rate to 11025*/	writel(0x04, CS4281_pBA0+BA0_DACSR);	writel(0x04, CS4281_pBA0+BA0_ADCSR);	intUnlock(lockkey);	return 0;}/***************************************************************************   Function - cs4281_interrupt*   Parameters - param*   Returns - none*   Purpose - Interrupt handler routing.  If TC of HTC interrupt for*     either DMA, then set variable indicating which one and do a*     semGive for either record or play.*****************************************************************************/void cs4281_interrupt(int param){	UINT32 temp1;	int lockkey;	/* if it's not DMA interrupts, jump out */	temp1 = readl(CS4281_pBA0+BA0_HISR);	if(!(temp1 &(HISR_DMA0 | HISR_DMA1)))	{		writel(HICR_IEV| HICR_CHGM, CS4281_pBA0+BA0_HICR);		return;	}	/* if DMA0 interrupt, playback DMA0 */	if(temp1 & HISR_DMA0)	{		CNT_DMA_Playback++;		if(0x00010000 &	readl(CS4281_pBA0+BA0_HDSR0))		{			/*DMA Terminal Count interrupt, set flag saying that */			DTC_DMA_Playback = 1;		}		else /*HTC interrupt, set flag saying that*/		{			DTC_DMA_Playback = 0;		}		semGive(SEM_DMA_Playback);	}	/* if DMA1 interrupt, record DMA1 */	if(temp1 & HISR_DMA1)	{		CNT_DMA_Record++;		if(0x00010000 &	readl(CS4281_pBA0+BA0_HDSR1))		{			/*DMA Terminal Count interrupt, set flag saying that */			DTC_DMA_Record = 1;		}		else /*HTC interrupt, set flag saying that*/		{			DTC_DMA_Record = 0;		}		semGive(SEM_DMA_Record);	}	/*clear interrupt*/	writel(HICR_IEV| HICR_CHGM, CS4281_pBA0+BA0_HICR);}/***************************************************************************   Function - startCS4281*   Parameters - none*   Returns - none*   Purpose - Install the cs4281/ac97 driver:*           -bring up the hardware*           -allocate and set DMA buffer/DMA engine*           -connect ISR to IRQ*           -start_adc/dac*****************************************************************************/int startCS4281(){	unsigned int pciBusNo, pciDevNo, pciFuncNo;	unsigned char byte;	UINT32 s_pBA0, s_pBA1;	if (pciConfigLibInit (PCI_MECHANISM_1, 0xCF8, 0xCFC, 0) != OK)	{		printf("PCI lib config error\n");		return 1;	}	/****************************	* Find SoundCard	* Set  BaseAddr0, BaseAddr1	****************************/	if(!(pciFindDevice(PCI_VENDOR_ID_CIRRUS,PCI_DEVICE_ID_CRYSTAL_CS4281,			 0, &pciBusNo, &pciDevNo, &pciFuncNo)==OK))	{		printf("\n CS4281 sound card NOT FOUND!!! \n");		return 1;	}	printf("\n FIND CS4281 sound card, configuring BA0,BA1... \n");	pciConfigOutLong( pciBusNo, pciDevNo, pciFuncNo,						   PCI_CFG_BASE_ADDRESS_0, CS4281_pBA0);	pciConfigInLong( pciBusNo, pciDevNo, pciFuncNo,						  PCI_CFG_BASE_ADDRESS_0, &s_pBA0);	pciConfigInLong( pciBusNo, pciDevNo, pciFuncNo,						  PCI_CFG_BASE_ADDRESS_1, &s_pBA1 );	printf ("\npBusNo    pDeviceNo  pFuncNo  pBA0      pBA1\n\n");	printf ("%.8x  %.8x  %.8x  %.8x  %.8x \n",	pciBusNo, pciDevNo, pciFuncNo, s_pBA0,s_pBA1);	/********************************	* Config PCI Device Capability	*     DMA Master	*     MEM mapped	********************************/	/* Set the INTA vector */	pciConfigInByte(pciBusNo, pciDevNo, pciFuncNo,						 PCI_CFG_DEV_INT_LINE, &cs4281_irq);	printf("\nFound CS4281 configured for IRQ %d\n", cs4281_irq);	pciConfigInByte(pciBusNo, pciDevNo, pciFuncNo,						 PCI_CFG_DEV_INT_PIN, &byte);	printf("\tINT_PIN=%.8x\n", byte);	/* Enable the device's capabilities as specified	* Bus Master Enable/ Mem Space Enable */	pciConfigOutWord(pciBusNo, pciDevNo, pciFuncNo, PCI_CFG_COMMAND,						  (unsigned short)0x0006);	/***************************	* BringUp Hardware	***************************/	if(cs4281_hw_init())		return 1;	/****************************	* Allocate ADC_BUFFER	* Allocate DAC_BUFFER	*	* Hook cs4281_interrupt	*	* Program CoDec	****************************/	if((DAC_BUFFER=valloc(DAC_BUFFER_SIZE))==NULL)	{		printf("\n DAC_BUFFER valloc failed!\n");		return 1;	}	if((ADC_BUFFER=valloc(ADC_BUFFER_SIZE))==NULL)	{		printf("\n ADC_BUFFER valloc failed!\n");		return 1;	}   /*setup DMA BUFFERs for ADC and DAC according to current_mode*/	program_dac_buffers();	/* connect interrupt */	printf("\n Hook cs4281_interrupt to vector %d\n",			 (INUM_TO_IVEC (cs4281_irq+INT_NUM_IRQ0)));	pciIntConnect((INUM_TO_IVEC (cs4281_irq+INT_NUM_IRQ0)),					  (VOIDFUNCPTR)cs4281_interrupt, 0);	sysIntEnablePIC(cs4281_irq);	SEM_DMA_Playback = semBCreate(SEM_Q_FIFO,SEM_EMPTY);	SEM_DMA_Record = semBCreate(SEM_Q_FIFO,SEM_EMPTY);	CNT_DMA_Playback = CNT_DMA_Record = 0;	/* program coDec */	printf("\n Program CoDec (sample rate, DMA...)\n");	prog_codec();	/*********************************************	*  start dac and adc, interrupt is comming...	*********************************************/	printf("\n\n>>>Start DAC !!!!!!!!!!\n");	start_dac();	return 0;}/***************************************************************************   Function - program_dac_buffers*   Parameters - none*   Returns - none*   Purpose - Setup the pointer into and size of buffers.*****************************************************************************/int program_dac_buffers(){    /*tell DMA engine where start of DAC Buffer is*/    /*this had an offset of (-16) which is not needed*/    writel((UINT32)DAC_BUFFER,CS4281_pBA0 + BA0_DBA0);    /*now set the number of FIFO-to-DMA transfers -- this basically    corresponds to size, and it will be different depending on the    mode because the higher modes transfer more data each time, so    it requires fewer transfers to fill the DMA buffer, furthermore    we set the number to one less because we get an interrupt when    rolling over as well*/    if( current_mode == 1 ) /*8 bit mono*/    {       writel(DAC_BUFFER_SIZE-1, CS4281_pBA0 + BA0_DBC0);    }    if( current_mode == 2 ) /*8 bit stereo*/    {       writel((DAC_BUFFER_SIZE/2)-1, CS4281_pBA0 + BA0_DBC0);    }    if( current_mode == 3 ) /*16 bit stereo*/    {       writel((DAC_BUFFER_SIZE/4)-1, CS4281_pBA0 + BA0_DBC0);    }    /*tell DMA engine where start of ADC Buffer is*/    /*this had an offset of (-16) which is not needed*/    writel((UINT32)ADC_BUFFER,CS4281_pBA0 + BA0_DBA1);    /*set # transfers for ADC*/    if( current_mode == 1 ) /*8 bit mono*/    {       writel(ADC_BUFFER_SIZE-1, CS4281_pBA0 + BA0_DBC1);    }    if( current_mode == 2 ) /*8 bit stereo*/    {       writel((ADC_BUFFER_SIZE/2)-1, CS4281_pBA0 + BA0_DBC1);    }    if( current_mode == 3 ) /*16 bit stereo*/    {       writel((ADC_BUFFER_SIZE/4)-1, CS4281_pBA0 + BA0_DBC1);    }}/***************************************************************************   Function - audio_switchMode*   Parameters - none*   Returns - none*   Purpose - This re-configures the codec and DMA buffers to a new mode,*             it assumes new mode has already been set via the global*             current_mode variable.*****************************************************************************/int audio_switchMode(){   prog_codec();   program_dac_buffers();   start_dac();   return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩中文久久| 国产成人精品一区二区三区四区| 国产专区综合网| 91麻豆精品国产91久久久久| 26uuu久久综合| 久久丁香综合五月国产三级网站| 制服丝袜一区二区三区| 精品亚洲aⅴ乱码一区二区三区| 久久久噜噜噜久噜久久综合| 蜜桃免费网站一区二区三区| 国产成人一区在线| 亚洲精品视频自拍| 91精品福利在线一区二区三区| 亚洲男同1069视频| 欧美亚洲丝袜传媒另类| 另类专区欧美蜜桃臀第一页| 亚洲欧美色一区| 国产欧美精品一区二区三区四区 | 精品福利在线导航| 麻豆精品久久久| 亚洲国产精品精华液ab| 日本福利一区二区| 大白屁股一区二区视频| 综合久久综合久久| 亚洲乱码一区二区三区在线观看| 99久久精品一区| 国产精品一区二区男女羞羞无遮挡| 亚洲久本草在线中文字幕| xf在线a精品一区二区视频网站| 日韩精品乱码免费| 精品剧情v国产在线观看在线| 国产美女精品一区二区三区| 一区二区三区日韩欧美| 国产日本一区二区| 6080国产精品一区二区| 国产高清成人在线| 91亚洲精品久久久蜜桃| 欧美日韩高清影院| 日韩欧美色综合| 欧美激情综合在线| 亚洲国产日产av| 激情国产一区二区| 日韩理论片网站| 午夜精品一区二区三区免费视频 | 免费欧美在线视频| 国产盗摄一区二区| 欧美精品一卡二卡| 久久久久国产一区二区三区四区| 中文字幕第一区第二区| 国产精品天美传媒沈樵| 国产mv日韩mv欧美| 国产精品亚洲人在线观看| 日韩电影在线一区二区| 日韩av网站在线观看| 欧洲生活片亚洲生活在线观看| 在线播放/欧美激情| 亚洲电影一级片| 欧美在线短视频| 色婷婷av一区二区三区大白胸| 91色综合久久久久婷婷| 91丨porny丨国产入口| www.视频一区| 欧美日韩你懂的| 欧美一区二区三区男人的天堂 | 亚洲成av人片一区二区三区 | 国产高清在线精品| 成人短视频下载| 色综合久久久网| 91精品国产福利在线观看| 久久久久久免费网| 青椒成人免费视频| www.成人网.com| 久久精品视频一区二区三区| 日本不卡视频一二三区| 欧美日韩国产一级| 五月天丁香久久| 欧美日韩美少妇| 亚洲五码中文字幕| 欧美喷潮久久久xxxxx| 亚洲一区电影777| 欧美最猛性xxxxx直播| 亚洲国产精品影院| 91福利在线免费观看| 伊人一区二区三区| 欧美性猛交xxxx乱大交退制版| 亚洲国产精品久久久久秋霞影院| 亚洲成人免费看| 亚洲少妇中出一区| 91精品国产一区二区三区蜜臀 | 日韩一区二区三区免费观看| 岛国精品在线播放| 亚洲国产日韩精品| 91精品国产综合久久久久久| 色婷婷综合久久久久中文一区二区| 亚洲国产高清aⅴ视频| 色婷婷亚洲综合| 久久电影网站中文字幕| 亚洲精品免费视频| 久久午夜电影网| 欧美一卡2卡三卡4卡5免费| 中文字幕不卡一区| 日本va欧美va精品发布| 日韩精品一区二区三区视频播放 | 91蜜桃免费观看视频| 麻豆国产欧美一区二区三区| 一区二区三区免费看视频| 国产精品人人做人人爽人人添| 在线综合视频播放| 欧美日韩国产三级| 欧美三级中文字幕| 在线中文字幕一区| 日本久久精品电影| 91亚洲精品乱码久久久久久蜜桃| 成人国产精品视频| 成人精品免费网站| 9i在线看片成人免费| a4yy欧美一区二区三区| 成年人国产精品| 91色在线porny| 91美女福利视频| 在线亚洲一区二区| 欧美伊人久久久久久午夜久久久久| 在线亚洲精品福利网址导航| 91色九色蝌蚪| 欧美系列亚洲系列| 欧美男生操女生| 日韩一区二区三区免费看| 精品久久久久久久人人人人传媒 | 久久精品国内一区二区三区| 亚洲国产人成综合网站| 天天综合网天天综合色| 美女网站一区二区| 成人性生交大片免费看中文| 成人性生交大片免费看视频在线| 91在线精品秘密一区二区| 欧美亚洲一区二区三区四区| 欧美色视频一区| 精品日韩欧美在线| 国产精品高清亚洲| 亚洲午夜影视影院在线观看| 老司机免费视频一区二区| 成人免费视频一区| 在线精品国精品国产尤物884a| 欧美日韩久久一区二区| 欧美精品一区二区三区在线| 国产精品欧美极品| 亚洲高清在线视频| 国产中文字幕精品| 91在线观看成人| 日韩欧美精品在线| 中文字幕一区二区三区在线不卡| 亚洲国产综合91精品麻豆| 久草精品在线观看| 丁香天五香天堂综合| 欧美性xxxxxx少妇| 国产日韩精品视频一区| 亚洲国产日韩av| 国产福利不卡视频| 91精品国产免费久久综合| 中文字幕一区二区三区精华液 | 欧美在线视频全部完| 精品日韩一区二区三区| 亚洲摸摸操操av| 国产一区二区调教| 欧美日韩中文字幕一区| 欧美激情一区二区| 久久精品国产色蜜蜜麻豆| 91黄色在线观看| 国产精品美女视频| 老司机午夜精品99久久| 欧美体内she精视频| 国产欧美一区二区精品忘忧草 | 亚洲卡通欧美制服中文| 国产一区二区毛片| 91精品国产综合久久久久久漫画| 亚洲三级免费观看| 国产精品香蕉一区二区三区| 6080国产精品一区二区| 樱桃国产成人精品视频| 成人福利电影精品一区二区在线观看 | 日韩欧美一级片| 亚洲国产精品一区二区尤物区| 成人精品鲁一区一区二区| 91麻豆精品国产91久久久更新时间 | 丝袜脚交一区二区| 国产在线精品一区在线观看麻豆| 在线观看av一区二区| 国产精品欧美一区喷水| 国产经典欧美精品| 精品91自产拍在线观看一区| 日本vs亚洲vs韩国一区三区 | 久久综合色综合88| 青娱乐精品视频| 91麻豆精品国产91久久久久| 亚洲a一区二区| 日本韩国精品在线| 亚洲美女视频一区| 91久久精品网| 亚洲一区在线看| 欧美影院一区二区三区|