⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uda1341ts.c

📁 s3c2410的vxworks bsp,运行良好
💻 C
📖 第 1 页 / 共 2 页
字号:

void L3busDataRecv(char *recvData , int halt)
{
	int i = 0;
	int j = 0;

	rL3CFG_DATA &=L3DATA_CLR;
	rL3CFG_DATA |= L3DATA_IN;

	if(halt)
	{
		rL3DATA_MODE &= L3MODE_LOW;
		rL3DATA_CLK |= L3CLK_HIGH;
		rL3DATA_DATA &= L3DATA_LOW;
		UDA1341Delay(3);
	}

	rL3DATA_CLK |= L3CLK_HIGH;
	rL3DATA_MODE |= L3MODE_HIGH;
	UDA1341Delay(3);
	

	for(i =0 ; i< 8 ; i++)
	{
		rL3DATA_CLK &= L3CLK_LOW;
		if(rL3DATA_DATA & L3DATA_HIGH)
		{
			*recvData += 1;
		}
		else
		{
			*recvData += 0;
		}
		UDA1341Delay(3);
		rL3DATA_CLK |= L3CLK_HIGH;
		UDA1341Delay(3);		
		
		*recvData <<=1;	
	}


	rL3DATA_CLK |= L3CLK_HIGH;
	rL3DATA_MODE |= L3MODE_HIGH;
	rL3DATA_DATA &= L3DATA_LOW;

	rL3CFG_DATA &=L3DATA_CLR;
	rL3CFG_DATA |= L3DATA_OUT;


}

void Uda1341SndData()
{
	unsigned short testData ;
	int fifoCount=0;

	testData = 0x9595;
	rIIS_MODREG &=IIS_TR_MODE_CLR;
	rIIS_MODREG |=IIS_TR_MODE;
	rIIS_CONFREG &= IIS_TR_DMA_DISABLE;
	rIIS_FCONREG &= IIS_TR_FIFO_NOR_MODE;
	rIIS_CONFREG &=	IIS_RC_DMA_DISABLE;
	rIIS_FCONREG &= IIS_RC_FIFO_NOR_MODE;

	rIIS_FCONREG |=IIS_TR_FIFO_EN; 
	rIIS_FCONREG &=IIS_RC_FIFO_DIS;

	rIIS_FIFREG = 0x1234;
	

	fifoCount = (rIIS_FCONREG&0xfc0);

	while(!(rIIS_CONFREG & 0x080))
	{

	}

	rIIS_CONFREG |=IIS_INTER_ENABLE;

	while(rIIS_CONFREG & 0x080)
	{

	}
		

	rIIS_FCONREG &=IIS_TR_FIFO_DIS;

	rIIS_CONFREG &=IIS_INTER_DISABLE;


}


void Uda1341RecvData()
{
	unsigned short testData[8000] ;
	int fifoCount=0;
	int i;

	rIIS_MODREG &=IIS_TR_MODE_CLR;
	rIIS_MODREG |=IIS_RECV_MODE;
	
	rIIS_CONFREG &= IIS_TR_DMA_DISABLE;
	rIIS_FCONREG &= IIS_TR_FIFO_NOR_MODE;
	
	rIIS_CONFREG &=	IIS_RC_DMA_DISABLE;
	rIIS_FCONREG &= IIS_RC_FIFO_NOR_MODE;

	rIIS_FCONREG |=IIS_RC_FIFO_EN; 
	rIIS_FCONREG &=IIS_TR_FIFO_DIS;

	

	while(!(rIIS_CONFREG & 0x040))
	{

	}

		
		

	rIIS_CONFREG |=IIS_INTER_ENABLE;

	while(rIIS_CONFREG & 0x040)
	{

	}

	for(i=0;i<8000;i++)
	{
		testData[i] = rIIS_FIFREG;
	}

	for(i=7980;i<8000;i++)
	{
		printf("\r\n recv datat 0x%x" , testData[i]);
	}
	
	
	rIIS_CONFREG &=IIS_INTER_DISABLE;


}


void Uda1341StartReadData()
{
	unsigned short testData[10000] ;
	int fifoCount=0;
	int i=0;

	memset(testData , 0 , sizeof(testData));

	rIIS_MODREG &=IIS_TR_MODE_CLR;
	rIIS_MODREG |=IIS_RECV_MODE;
	
	rIIS_CONFREG &= IIS_TR_DMA_DISABLE;
	rIIS_FCONREG &= IIS_TR_FIFO_NOR_MODE;
	
	rIIS_CONFREG &=	IIS_RC_DMA_DISABLE;
	rIIS_FCONREG &= IIS_RC_FIFO_NOR_MODE;

	rIIS_FCONREG |=IIS_RC_FIFO_EN; 
	rIIS_FCONREG &=IIS_TR_FIFO_DIS;

		
		

	rIIS_CONFREG |=IIS_INTER_ENABLE;

	while(i<10000)
	{
		if(rIIS_FCONREG & 0x3f)
		{
			testData[i] = rIIS_FIFREG;			
			i++;
		}
	}



}

void Uda1341StopReadData()
{
	rIIS_FCONREG &=IIS_RC_FIFO_DIS;

	rIIS_CONFREG &=IIS_INTER_DISABLE;


}

#ifdef _TEST_CODEC_DMA_

void IISDmaInit()
{
	char *pWav =NULL;
	int len =0;

	pWav = (char *)malloc(1024*1024*2);

	

	if(NULL != pWav)
	{
		len = LoadFiletoAddr("myjsy.wav" , pWav);
	}

	
	(void) intConnect (INUM_TO_IVEC(INT_VEC_DMA1),IISDmaRecvIntProc, (int)&gIISDevice);
    intEnable (INT_LVL_DMA1);

	(void) intConnect (INUM_TO_IVEC(INT_VEC_DMA2),IISDmaSndIntProc, (int)&gIISDevice );
    intEnable (INT_LVL_DMA2);


	rIIS_DISRC1 =((U32)IIS_FIFREG);
	rIIS_DISRCC1 = (0x1<<1)+0x1;
	rIIS_DIDST1 = (int)dmaRecvBuf[0];
	rIIS_DIDSTC1 = (0x0<<1) + 0x0;
	rIIS_DCON1 = ((unsigned)1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(2<<24)+(1<<23)+(1<<22)+(1<<20)+(1024/2);


	rIIS_DMASKTRIG1 = (0x0<<2) + (0x1<<1) + 0;
	
	rIIS_DISRC2 = (int)dmaRecvBuf[5];
	rIIS_DISRCC2 = (0x0<<1) + 0x0;
	rIIS_DIDST2 = ((U32)IIS_FIFREG);
	rIIS_DIDSTC2 = (0x1<<1)+0x1;
	rIIS_DCON2 = ((unsigned)1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(0<<24)+(1<<23)+(1<<22)+(1<<20)+(1024/2);/*((len-0x30)/2);*/

	rIIS_DMASKTRIG2 = (0x0<<2) + (0x1<<1) + (0x0<<0);	
	
}


#else

void IISDmaInit()
{	
	(void) intConnect (INUM_TO_IVEC(INT_VEC_DMA1),IISDmaRecvIntProc, (int)&gIISDevice);
    intEnable (INT_LVL_DMA1);

	(void) intConnect (INUM_TO_IVEC(INT_VEC_DMA2),IISDmaSndIntProc, (int)&gIISDevice );
    intEnable (INT_LVL_DMA2);
    

	/**/
	rIIS_DISRC1 =((U32)IIS_FIFREG);
	rIIS_DISRCC1 = (0x1<<1)+0x1;

	rIIS_DIDSTC1 = (0x0<<1) + 0x0;
	rIIS_DCON1 = ((unsigned)1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(2<<24)+(1<<23)+(1<<22)+(1<<20)+0;

	rIIS_DMASKTRIG1 = (0x0<<2) + (0x0<<1) + (0x0<<0);


	/**/
	rIIS_DISRCC2 = (0x0<<1) + 0x0;
	rIIS_DIDST2 = ((U32)IIS_FIFREG);
	rIIS_DIDSTC2 = (0x1<<1)+0x1;

	rIIS_DCON2 = ((unsigned)1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(0<<24)+(1<<23)+(1<<22)+(1<<20)+0;/*((len-0x30)/2);*/

	rIIS_DMASKTRIG2 = (0x0<<2) + (0x0<<1) + (0x0<<0);

}

#endif

int IISDmaRecvStart(char *pBuf, int nLen)
{

	rIIS_DIDST1 = (int)pBuf;
	rIIS_DCON1 &= 0xfff00000;
	rIIS_DCON1 |= (nLen/2)&0x000fffff;

	rIIS_DMASKTRIG1 = (0x0<<2) + (0x1<<1) + 0;

	return 1;
}

extern void CodecRecvNotofy();

#ifdef _TEST_CODEC_DMA_

void IISDmaRecvIntProc(IIS_DEVICE_ST *iisDev)
{
	gIISDevice.recvCount++;
	if(gIISDevice.recvCount>=10)
	{
		gIISDevice.recvCount = 0;
	}
	rIIS_DIDST1 = (int)dmaRecvBuf[gIISDevice.recvCount]; 
	gIISDevice.semCount++;

	rIIS_DMASKTRIG1 = (0x0<<2) + (0x1<<1) + 0;
	
}

#else
void IISDmaRecvIntProc(IIS_DEVICE_ST *iisDev)
{
	MediaDmaRecvInt();
}

#endif

int IISDmaSendStart(char *pBuf, int nLen)
{
	rIIS_DISRC2 = (int)pBuf;

	rIIS_DCON2 &= 0xfff00000;
	rIIS_DCON2 |= (nLen/2)&0x000fffff;
	
	rIIS_DMASKTRIG2 = (0x0<<2) + (0x1<<1) + (0x0<<0);

	return 1;
}


#ifdef _TEST_CODEC_DMA_
void IISDmaSndIntProc(IIS_DEVICE_ST *iisDev)
{
	gIISDevice.sndCount++;
	if(gIISDevice.sndCount>=10)
	{
		gIISDevice.sndCount= 0;
	}
	rIIS_DIDST1 = (int)dmaRecvBuf[gIISDevice.sndCount]; 
	rIIS_DMASKTRIG2 = (0x0<<2) + (0x1<<1) + (0x0<<0);
}
#else
void IISDmaSndIntProc(IIS_DEVICE_ST *iisDev)
{
	MediaDmaSendInt();
}
#endif



void Uda1341DmaSndData()
{
	
	rIIS_MODREG = IIS_TR_MODE |IIS_SDB_16 |IIS_CLK_32;

	rIIS_CONFREG = IIS_TR_DMA_ENABLE | IIS_RC_LRCLK_NGEN|IIS_PRES_ENABLE;

	rIIS_FCONREG = IIS_TR_FIFO_DMA_MODE |IIS_TR_FIFO_EN;


	rIIS_CONFREG |=IIS_INTER_ENABLE;


	
	
}

void Uda1341DmaRecvData()
{
	rIIS_CONFREG = IIS_RC_DMA_ENABLE |IIS_PRES_ENABLE;

	rIIS_MODREG = IIS_RECV_MODE |IIS_SDB_16|IIS_CLK_32;
	rIIS_FCONREG =IIS_RC_FIFO_DMA_MODE|IIS_RC_FIFO_EN ; 

	rIIS_CONFREG |=IIS_INTER_ENABLE;

}


void Uda1341DmaSndAndRecv()
{
	rIIS_MODREG = IIS_TR_RECV_MODE|IIS_SDB_16|IIS_CLK_32;
	rIIS_CONFREG = IIS_RC_DMA_ENABLE|IIS_TR_DMA_ENABLE|IIS_PRES_ENABLE;

	rIIS_FCONREG = IIS_RC_FIFO_DMA_MODE|IIS_RC_FIFO_EN|
		IIS_TR_FIFO_DMA_MODE|IIS_TR_FIFO_EN;
	
	rIIS_CONFREG |=IIS_INTER_ENABLE;
}




int Uda1341DevInit()
{
	CodecModInit();
	return 1;
}
int Uda1341DevReset()
{
	return 1;
}

int Uda1341StartRec(char *pBuf, int nLen)
{
	
	return IISDmaRecvStart(pBuf, nLen);
}
int Uda1341StartPlay(char *pBuf, int nLen)
{	
	return IISDmaSendStart(pBuf, nLen);
}

int Uda1341IsReadyRecv()
{
	if(rIIS_DSTAT1 & 0xfffff)
	{
		return 0;
	}
	else
	{
		return 1;
	}	

}




char szBuf1[1024];
char szBuf2[1024];
void test(int i)
{
if(i)
	IISDmaSendStart(szBuf1, 512);
else
	IISDmaRecvStart(szBuf2, 512);
	
}



int LoadFiletoAddr(char *pFileName, char *pAddr)
{
 int fd = 0;
 int iBytesRead = 0;
 int len = 0;
 
 if(pAddr && ((fd = open(pFileName, O_RDONLY, 0))>0))
 {
 
  while(1)
  {
   iBytesRead=read(fd,pAddr,512);
   if (iBytesRead <= 0) {
    close(fd);
    break;
   }
   len += iBytesRead;
   pAddr += iBytesRead;
  }
 
 }
 
 return len;
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -