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

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

?? wtaudioin.c

?? MCF5249的音頻驅動程序,可以實現PCM的實時播放和采集
?? C
?? 第 1 頁 / 共 2 頁
字號:
#define   DMA1_CTL				(*mcfReg32p(MCFDMA_DCR1))#define   DMA0_SA				(*mcfReg32p(MCFDMA_SAR0))#define   DMA1_SA				(*mcfReg32p(MCFDMA_SAR1))#define   DMA0_DA				(*mcfReg32p(MCFDMA_DAR0))#define   DMA1_DA				(*mcfReg32p(MCFDMA_DAR1))#define   DMA0_BC				(*mcfReg16p(MCFDMA_BCR0))#define   DMA1_BC				(*mcfReg16p(MCFDMA_BCR1))/* *	General purpose IO registers (in MBAR2). */#define	MCFSIM2_GPIOREAD	0x0		/* GPIO read values */#define	MCFSIM2_GPIOWRITE	0x4		/* GPIO write values */#define	MCFSIM2_GPIOENABLE	0x8		/* GPIO enabled */#define	MCFSIM2_GPIOFUNC	0xc		/* GPIO function */#define	MCFSIM2_GPIO1READ	0xb0		/* GPIO1 read values */#define	MCFSIM2_GPIO1WRITE	0xb4		/* GPIO1 write values */#define	MCFSIM2_GPIO1ENABLE	0xb8		/* GPIO1 enabled */#define	MCFSIM2_GPIO1FUNC	0xbc		/* GPIO1 function */#define	MCF_SDATAI3        0x00000200#define	MCF_SDATAI4        0x00000400/****************************************************************************/// audio devicetypedef struct WTAudio_dev{	int major;	unsigned char * rxbuf; //	int rxBufSize;  // max audio data count  if buffer; = buffersize/4   	int rxdmaStart;      //   	unsigned int nDmaCount;}WTAudio_dev;WTAudio_dev AudioDev={AUDIOINMAJOR,0,BUFSIZE,0,0};#define BUFFERINC(x,y,z)  ((x+y)%z)  //z: num of package  y: inc  x: indicate/****************************************************************************/void WTAudio_chipinit(void){#if DEBUG    printk("WTAudio_chipinit()\n");#endif    //*mcf2Reg32p(MCFA_IIS2CONFIG) = MCFA_IIS_CLK8 | MCFA_IIS_TXSRC_IIS1 |    //              MCFA_IIS_16BIT | MCFA_IIS_MODE_IIS | MCFA_IIS_LRCK32BIT;    //*mcf2Reg32p(MCFA_IIS1CONFIG) = MCFA_IIS_CLK8 | MCFA_IIS_TXSRC_PDOR3 |	//MCFA_IIS_16BIT | MCFA_IIS_MODE_IIS | MCFA_IIS_LRCK32BIT;     /* INTPUTCLK, PDOR3, SCLKINVERT*/	*mcf2Reg32p(MCFA_IIS1CONFIG) |=  0x00000800;    	*mcf2Reg32p(MCFA_IIS1CONFIG) |= MCFA_IIS_CLKINPUT |            MCFA_IIS_16BIT | MCFA_IIS_MODE_IIS | MCFA_IIS_LRCK64BIT;// |MCFA_IIS_SCLKINV;      /*	*mcf2Reg32p(MCFSIM2_GPIO1FUNC) &= ~MCF_SDATAI3;	*mcf2Reg32p(MCFA_IIS3CONFIG) |=  0x00000800;    *mcf2Reg32p(MCFA_IIS3CONFIG) = MCFA_IIS_CLKIIS1 |            MCFA_IIS_16BIT | MCFA_IIS_MODE_IIS | MCFA_IIS_LRCK64BIT;	*/    /* DataInControl, 1 Samples, PDIR2 */    *mcf2Reg32p(MCFA_DATAINCTRL) |= MCFA_DIC_PDIR2_IIS1 | MCFA_DIC_PDIR2_1SAMP;//MCFA_DIC_PDIR2_1SAMP;}/****************************************************************************//* ****************************************   Divide the rx buffer into DMABCNT dma buffers,   each time start dma to feed one of the dma buffers,   and each dma buffer should be aligned by 4bytes,   so the rx buffer should be aligned by 16bytes.*******************************************/static inline void WTAudio_rx_dmarun(){	if(WTAudio_rxdmaing)		return;	KDEBUG("rx_dmarun!\n");     	/* Set DMA transfer count */	set_dma_mode(WTAUDIO_RXDMA, DMA_MODE_READ | DMA_MODE_LONG_BIT);  	set_dma_device_addr(WTAUDIO_RXDMA, (MCF_MBAR2 + MCFA_PDIR2));  	set_dma_addr(WTAUDIO_RXDMA, (int)&AudioDev.rxbuf[AudioDev.rxdmaStart]);  	set_dma_count(WTAUDIO_RXDMA, nDmaCount);  	WTAudio_rxdmaing = 1;    	printk("rxbuf = %x\n",AudioDev.rxBufSize);  	printk("sa= %x da = %x\n",*mcfReg32p(0x340),*mcfReg32p(0x344));  	printk("Dmactl = %x count = %x\n",*mcfReg32p(0x348),*mcfReg8p(0x34c));  	printk("statue = %x vector = %x\n",*mcfReg8p(0x350),*mcfReg8p(0x354));  	printk("dmaroute= %x\n",*mcf2Reg32p(0x188));  	printk("bufA = %x\n", AudioDev.rxbuf);    	//WTAudio_rxbusy = 1;	//data buffer is aligned by 4bytes	enable_dma(WTAUDIO_RXDMA);}void WTAudio_rx_dmaisr(int irq, void *dev_id, struct pt_regs *regs){	KDEBUG("rx_dmaisr\n");	disable_dma(WTAUDIO_RXDMA);	WTAudio_rxdmaing = 0;	//adjust the data buffer 	//AudioDev.rxdmaStart = (AudioDev.rxdmaStart+(AudioDev.rxBufSize/DMABCNT)) % (AudioDev.rxBufSize);	AudioDev.rxdmaStart = 0;	AudioDev.nDmaCount = 0;	WTAudio_rx_dmarun();		} ssize_tWTAudio_read(struct file *filp, char *buf, size_t count, loff_t * ppos){	unsigned long bufcnt,slen;    	KDEBUG("m5249_read(buf=%x,count=0x%d)\n", (int) buf, count);   	if (count <= 0)return 0;	bufcnt = count ;tryagain:		if(bufcnt <= BUFSIZE)	{ 		slen = bufcnt;		AudioDev.nDmaCount = bufcnt;	}	else	{		slen = BUFSIZE;		AudioDev.nDmaCount = BUFSIZE;	}	WTAudio_rx_dmarun();	while(1)	{		if(!WTAudio_rxdmaing) break;		}	copy_to_user(buf,(char *)AudioDev.rxbuf,slen);	bufcnt -= slen;	if(bufcnt > 0)		goto tryagain;	          	 KDEBUG("WTAudio_read returned %d.\n", count);    	 return count; }void WTAudio_txdrain(void){#ifdef DEBUG    	printk("WTAudio_txdrain()\n");#endif    	WTAudio_rxbusy =0;	current->state = TASK_INTERRUPTIBLE;	schedule_timeout(1);	return;    	while (!signal_pending(current)) {		if (WTAudio_rxbusy == 0)	    		break;   	 }}/****************************************************************************/int WTAudio_open(struct inode *inode, struct file *filp){#if DEBUG    printk("WTAudio_open()\n");#endif#ifdef MODULE	MOD_INC_USE_COUNT;#endif	if (WTAudio_isopen)		return (-EBUSY);	WTAudio_isopen = 1;        	return (0);}int WTAudio_release(struct inode *inode, struct file *filp){#if DEBUG    printk("WTAudio_release()\n");#endif#ifdef MODULE       MOD_DEC_USE_COUNT;#endif	WTAudio_txdrain();	disable_dma(WTAUDIO_RXDMA);	WTAudio_rxdmaing = 0;	AudioDev.rxdmaStart = 0;	AudioDev.nDmaCount = 0;	WTAudio_isopen = 0;	WTAudio_rxbusy = 0;    	return (0);}/****************************************************************************/int WTAudio_ioctl(struct inode * inode, struct file * filp, unsigned int cmd, unsigned long arg){	int err =0;	int ret = 0;	//int val;		if(_IOC_DIR(cmd) & _IOC_READ)		err = !access_ok(VERIFY_WRITE, (void *)arg, _IOC_SIZE(cmd));	else if (_IOC_DIR(cmd) & _IOC_WRITE)       	err =  !access_ok(VERIFY_READ, (void *)arg, _IOC_SIZE(cmd));	    	if (err) return -EFAULT;	return ret;	}/****************************************************************************/struct file_operations WTAudio_fops = {  open:WTAudio_open,	/* open */  read:WTAudio_read,	/*read */  release:WTAudio_release,	/* release */  ioctl:WTAudio_ioctl,	/* ioctl */};/****************************************************************************/int __init WTAudio_init(void){     if (register_chrdev(AUDIOINMAJOR, "WTAUDIOIN", &WTAudio_fops) < 0) {	printk(KERN_WARNING "WTAUDIOIN: failed to register major %d\n",	       AUDIOINMAJOR);	return (0);    }	AudioDev.rxbuf = (unsigned char *)kmalloc(AudioDev.rxBufSize, GFP_KERNEL);    if (AudioDev.rxbuf  == NULL) {	printk("WTAUDIOIN: failed to allocate [%d] buffer\n",(AudioDev.rxBufSize));    }    printk("mem = %x\n",AudioDev.rxbuf);#ifdef MODULE		SET_MODULE_OWNER(&WTAudio_fops);#endif	printk("WTAUDIOIN RX: DMA channel=%d, irq=%d\n",	       WTAUDIO_RXDMA, WTAUDIO_RXDMAIRQ);	if (request_irq(WTAUDIO_RXDMAIRQ, WTAudio_rx_dmaisr,			(SA_INTERRUPT | IRQ_FLG_FAST), "AUDIO_IN(DMA)", NULL))	{	    printk("WTAUDIOIN: RX DMA IRQ %d already in use?\n",		   WTAUDIO_RXDMAIRQ);	}	//dmap = (BYTE *) dma_base_addr[WTAUDIO_RXDMA]; //選擇通道	//dmap[MCFDMA_DIVR] = WTAUDIO_RXDMAIRQ;  //設置DMA中斷向量:121	*mcfReg8p(MCFDAM_INTVR1) = WTAUDIO_RXDMAIRQ;	//*mcfReg8p(MCFDMA_INTVR0) = WTAUDIO_RXDMAIRQ;	/* Set interrupt level and priority */		*mcfReg8p(MCFSIM_ICRDMA1) = MCFSIM_ICR_LEVEL7 | MCFSIM_ICR_PRI3;	//*mcfReg8p(MCFSIM_ICRDMA0) = MCFSIM_ICR_LEVEL7 | MCFSIM_ICR_PRI3;			//*mcfReg8p(MCFSIM_ICRDMA1) = MCFSIM_ICR_LEVEL7 | MCFSIM_ICR_PRI1;	//*((DWORD*) (MCF_MBAR + MCFSIM_IMR)) &=~MCFSIM_IMR_DMA0;	*mcfReg32p(MCFSIM_IMR) &=~MCFSIM_IMR_DMA1;	//*mcfReg32p(MCFSIM_IMR) &= ~MCFSIM_IMR_DMA0;		/* Set DMA to use channel 1 for audio rx */	*mcf2Reg8p(MCFA_DMACONF) &= ~(MCFA_DMA_1REQ); //PDIR2 on dma1	*mcf2Reg32p(MCFSIM2_DMAROUTE) |= (0x00000081<<8); //dam1 audio source 2		/* Set DMA to use channel 0 for audio */	//*mcf2Reg8p(MCFA_DMACONF) &= ~MCFA_DMA_0REQ; //	//*mcf2Reg32p(MCFSIM2_DMAROUTE) = 0x00000081; //dam0 audio source 1	if (request_dma(WTAUDIO_RXDMA, "AUDIO_IN")) {	    printk("WTAUDIO: RX DMA channel %d already in use?\n",		   WTAUDIO_RXDMA);	}     	WTAudio_chipinit();//	sema_init (&sem,1);//	memset((void *)DelayBuf,0,AudioDev.packsize);	return (0);	}#ifdef MODULEvoid WTAudio_cleanup(void){      kfree(AudioDev.rxbuf);      free_dma(WTAUDIO_RXDMA);      unregister_chrdev(AUDIOINMAJOR, "WTAUDIOIN");      printk("release WTAUDIO!!!\n");}module_init(WTAudio_init);module_exit(WTAudio_cleanup);MODULE_LICENSE("GPL");#endif/****************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲v精品v日韩v欧美v专区| 亚洲综合精品久久| 日韩精品一区二区三区四区视频| 色噜噜狠狠色综合欧洲selulu| 成人黄色小视频| 成人一区二区三区| 成人av中文字幕| 91色在线porny| 欧洲一区二区三区免费视频| 色网站国产精品| 在线影院国内精品| 欧美丝袜第三区| 欧美日韩二区三区| 精品日本一线二线三线不卡| 久久久亚洲午夜电影| 国产女人aaa级久久久级| 国产日韩欧美a| 亚洲欧美一区二区三区极速播放 | 亚洲gay无套男同| 亚洲成在线观看| 久久er精品视频| 成人一区二区三区在线观看| 91麻豆国产福利在线观看| 91福利视频网站| 日韩一级片网站| 国产精品嫩草99a| 亚洲精品午夜久久久| 亚洲成人精品影院| 久久成人av少妇免费| 国产成人精品亚洲777人妖| 91香蕉视频污在线| 日韩欧美国产电影| 国产精品理伦片| 天堂成人免费av电影一区| 另类小说视频一区二区| 成人免费观看男女羞羞视频| 91一区二区在线观看| 日韩一区二区三区视频在线观看| 国产片一区二区三区| 亚洲一二三四在线| 国内精品在线播放| 91福利区一区二区三区| 久久久亚洲综合| 亚洲成av人影院| 成人av在线电影| 精品国产凹凸成av人网站| 中文字幕亚洲视频| 激情国产一区二区| 欧美中文字幕亚洲一区二区va在线 | 久久99精品久久久久久动态图| 国产成人丝袜美腿| 5566中文字幕一区二区电影| 欧美激情在线观看视频免费| 日本麻豆一区二区三区视频| 99国产精品国产精品毛片| 日韩免费在线观看| 偷拍一区二区三区| 在线免费观看视频一区| 中文字幕欧美激情一区| 国产老女人精品毛片久久| 欧美高清激情brazzers| 亚洲欧美另类久久久精品| 国产黄人亚洲片| 精品电影一区二区| 日韩黄色免费网站| 欧美日韩国产影片| 洋洋成人永久网站入口| av一区二区不卡| 国产精品乱码一区二区三区软件 | 国产精品综合av一区二区国产馆| 欧美美女一区二区在线观看| 亚洲色图.com| 91麻豆精品在线观看| 亚洲色图一区二区| 91视频你懂的| 一区二区日韩av| 欧美中文字幕一二三区视频| 一级日本不卡的影视| 91精品办公室少妇高潮对白| 中文字幕一区二区三区四区不卡| 国产91丝袜在线观看| 欧美激情资源网| 国产精品一区二区三区网站| 久久久精品蜜桃| 国产乱国产乱300精品| 久久综合久久鬼色中文字| 久草精品在线观看| 久久在线免费观看| 成人美女视频在线观看18| 中文字幕五月欧美| 色综合天天综合网天天看片| 亚洲人午夜精品天堂一二香蕉| 99精品在线观看视频| 一区二区三区在线观看国产| 91传媒视频在线播放| 一区二区三区四区在线免费观看| 在线观看国产一区二区| 香蕉影视欧美成人| 欧美mv日韩mv| 成人性视频免费网站| 一区二区三区产品免费精品久久75| 日本道免费精品一区二区三区| 亚洲一区二区高清| 精品三级在线看| 99久久99精品久久久久久| 亚洲国产日韩a在线播放性色| 欧美一区午夜视频在线观看| 国产乱码精品一区二区三区五月婷| 亚洲国产精品精华液ab| 欧美三级蜜桃2在线观看| 精品在线播放午夜| 亚洲欧美另类小说视频| 91精品视频网| 成人免费不卡视频| 日韩av一级片| 欧美国产禁国产网站cc| 欧美日韩高清一区二区不卡| 丁香一区二区三区| 天堂一区二区在线免费观看| 国产清纯在线一区二区www| 欧美日韩一级片网站| 成人视屏免费看| 欧美aa在线视频| 亚洲伦理在线免费看| 久久伊人中文字幕| 欧美日韩一二三| 99视频国产精品| 国内精品在线播放| 日韩电影一二三区| 亚洲视频每日更新| 国产清纯美女被跳蛋高潮一区二区久久w | 狠狠网亚洲精品| 亚洲成av人片一区二区三区| 国产精品污网站| 日韩精品一区二区三区在线播放| 99精品桃花视频在线观看| 国产一区二区三区免费在线观看| 亚洲综合色噜噜狠狠| 国产精品欧美久久久久一区二区| 欧美刺激脚交jootjob| 欧美精品1区2区3区| 91国产免费观看| 91丨porny丨蝌蚪视频| 粉嫩一区二区三区在线看| 久久99精品久久久久久国产越南| 首页亚洲欧美制服丝腿| 一区二区三区欧美视频| 亚洲摸摸操操av| 亚洲色图视频网站| ㊣最新国产の精品bt伙计久久| 久久久高清一区二区三区| 久久网这里都是精品| 日韩免费看的电影| 日韩精品在线一区| 精品少妇一区二区三区视频免付费 | 亚洲国产另类精品专区| 亚洲免费观看高清| 亚洲欧美电影一区二区| 国产精品久久久久婷婷| 国产精品乱人伦中文| 国产精品无遮挡| 亚洲欧美日韩久久精品| 亚洲天堂成人在线观看| 亚洲乱码中文字幕综合| 一区二区在线观看视频| 亚洲网友自拍偷拍| 日本亚洲免费观看| 精品一区二区三区欧美| 国产毛片精品国产一区二区三区| 紧缚捆绑精品一区二区| 国产成人精品免费在线| 高清国产午夜精品久久久久久| 国产成人av影院| 91在线观看地址| 欧美日韩国产高清一区二区| 欧美丰满美乳xxx高潮www| 日韩三级伦理片妻子的秘密按摩| 精品国产自在久精品国产| 国产日韩精品一区| 亚洲激情网站免费观看| 午夜av电影一区| 国产一区二区三区在线看麻豆| 东方aⅴ免费观看久久av| 91黄色免费看| 精品国产sm最大网站免费看| 中文字幕不卡在线| 亚洲国产精品久久久久婷婷884| 日本免费新一区视频| 国产精品小仙女| 91国在线观看| 国产亚洲精品超碰| 亚洲激情综合网| 国产在线麻豆精品观看| 色婷婷综合在线| 久久久综合网站| 亚洲成人av在线电影| av在线免费不卡| 欧美大片一区二区| 亚洲永久免费视频| 国产精品99久久久|