www.pudn.com > S3c2410bsp.zip > UDA1341TS.c


#include "vxWorks.h" 
#include "iv.h" 
#include "stdlib.h" 
#include "sysLib.h" 
#include "intLib.h" 
#include "errno.h" 
#include "ioLib.h" 
#include "stdio.h" 
#include "logLib.h" 
#include "wrSbcArm9.h" 
 
 
#include "UDA1341TS.h" 
 
#ifndef BSP_44B0_LITTLE_ENDIAN 
#define BSP_44B0_LITTLE_ENDIAN 
#endif 
 
#undef _TEST_CODEC_DMA_ 
 
#define IIS_RECORD 1 
#define IIS_PLAY   0 
 
#define U32 unsigned int 
 
#define L3BUS_MODE_CFG 		(0x56000020) 
#define L3BUS_CLK_CFG		(0x56000020) 
#define L3BUS_DATA_CFG 		(0x56000030) 
 
#define L3BUS_MODE_DATA 		(0x56000024) 
#define L3BUS_CLK_DATA		(0x56000024) 
#define L3BUS_DATA_DATA 		(0x56000034) 
 
#define L3BUS_MODE_PLUP			(0x56000028) 
#define L3BUS_DATA_PLUP			(0x56000038) 
 
 
#define rL3CFG_MODE		(*(volatile unsigned *)0x56000020) 
#define rL3CFG_CLK		(*(volatile unsigned *)0x56000020) 
#define rL3CFG_DATA		(*(volatile unsigned *)0x56000030) 
 
#define rL3DATA_MODE		(*(volatile unsigned *)0x56000024) 
#define rL3DATA_CLK		(*(volatile unsigned *)0x56000024) 
#define rL3DATA_DATA		(*(volatile unsigned *)0x56000034) 
 
#define rL3_MODE_PLUP			(*(volatile unsigned *)0x56000028) 
#define rL3_DATA_PLUP			(*(volatile unsigned *)0x56000038) 
 
 
#define L3MODE_CLR  0xfffcffff 
#define L3MODE_OUT	0x00010000 
 
#define L3CLK_CLR	0xcfffffff 
#define L3CLK_OUT	0x10000000 
 
#define L3DATA_CLR	0xffffffcf 
#define L3DATA_OUT	0x00000010 
#define L3DATA_IN   0x00000000 
 
#define L3MODE_LOW  0xfeff 
#define L3MODE_HIGH 0x0100 
 
#define L3CLK_LOW   0xbfff 
#define L3CLK_HIGH  0x4000 
 
#define L3DATA_LOW  0xfffb 
#define L3DATA_HIGH 0x0004 
 
 
#define UDA1314_IISCON						(0x55000000) 
#define UDA1314_IISMOD						(0x55000004) 
#define UDA1314_IISPSR						(0x55000008) 
#define UDA1314_IISFCON					(0x5500000c) 
#ifdef BSP_44B0_LITTLE_ENDIAN 
#define UDA1314_IISFIFO					(0x55000010) 
#else 
#define UDA1314_IISFIFO					(0x55000012) 
#endif 
 
#define rIIS_GPEC			(*(volatile unsigned *)0x55000040) 
#define rIIS_GPED			(*(volatile unsigned *)0x55000044) 
#define rIIS_GPEU			(*(volatile unsigned *)0x55000048) 
 
#define rIIS_CONFREG		(*(volatile unsigned *)0x55000000) 
#define rIIS_MODREG	(*(volatile unsigned *)0x55000004) 
#define rIIS_PSRREG		(*(volatile unsigned *)0x55000008) 
#define rIIS_FCONREG	(*(volatile unsigned *)0x5500000c) 
 
#ifdef BSP_44B0_LITTLE_ENDIAN 
#define rIIS_FIFREG		(*(volatile unsigned short *)0x55000010) 
#else  
#define rIIS_FIFREG		(*(volatile unsigned short *)0x55000012) 
#endif 
 
#ifdef BSP_44B0_LITTLE_ENDIAN 
#define IIS_FIFREG		((volatile unsigned short *)0x55000010) 
#else  
#define IIS_FIFREG		((volatile unsigned short *)0x55000012) 
#endif 
 
 
#define IIS_INTER_ENABLE		(0x001) 
#define IIS_PRES_ENABLE			(0x002) 
#define IIS_TR_LRCLK_GEN			(0x1f7) 
#define IIS_RC_LRCLK_GEN		(0x1fb) 
#define IIS_TR_DMA_ENABLE		(0x020) 
#define IIS_RC_DMA_ENABLE		(0x010) 
 
#define IIS_INTER_DISABLE		(0x1fe) 
#define IIS_PRES_DISABLE		(0x1fd) 
#define IIS_TR_LRCLK_NGEN		(0x008) 
#define IIS_RC_LRCLK_NGEN		(0x004) 
#define IIS_TR_DMA_DISABLE		(0x1ef) 
#define IIS_RC_DMA_DISABLE		(0x1df) 
 
#define IIS_CLK_CLR				(0x1fc) 
#define IIS_CLK_16				(0x1fc) 
#define IIS_CLK_32				(0x001) 
#define IIS_CLK_48				(0x002) 
 
#define IIS_MCLK_256			(0x1fb) 
#define IIS_MCLK_384			(0x004) 
#define IIS_SDB_8				(0x1f7) 
#define IIS_SDB_16				(0x008) 
 
#define IIS_LOW_LEFT			(0x1df) 
#define IIS_HIGH_LEFT			(0x020) 
 
#define IIS_TR_MODE_CLR			(0x13f) 
#define IIS_NTR_MODE			(0x13f) 
#define IIS_RECV_MODE			(0x040) 
#define IIS_TR_MODE 			(0x080) 
#define IIS_TR_RECV_MODE		(0x0c0) 
 
#define IIS_MASTER_MODE			(0x0ff) 
#define IIS_SLAVE_MODE			(0x100) 
 
#define IIS_TR_FIFO_EN			(0x2000) 
#define IIS_TR_FIFO_DIS			(0xdfff) 
#define IIS_RC_FIFO_EN			(0x1000) 
#define IIS_RC_FIFO_DIS			(0xefff) 
#define IIS_TR_FIFO_NOR_MODE	(0x7fff) 
#define IIS_TR_FIFO_DMA_MODE	(0x8000) 
#define IIS_RC_FIFO_NOR_MODE	(0xbfff) 
#define IIS_RC_FIFO_DMA_MODE	(0x4000) 
 
 
#define rIIS_DISRC1		(*(volatile unsigned *)0x4b000040) 
#define rIIS_DISRCC1	(*(volatile unsigned *)0x4b000044) 
#define rIIS_DIDST1		(*(volatile unsigned *)0x4b000048) 
#define rIIS_DIDSTC1	(*(volatile unsigned *)0x4b00004c) 
#define rIIS_DCON1		(*(volatile unsigned *)0x4b000050) 
#define rIIS_DSTAT1		(*(volatile unsigned *)0x4b000054) 
#define rIIS_DCSRC1		(*(volatile unsigned *)0x4b000058) 
#define rIIS_DCDST1		(*(volatile unsigned *)0x4b00005c) 
#define rIIS_DMASKTRIG1	(*(volatile unsigned *)0x4b000060) 
 
#define rIIS_DISRC2		(*(volatile unsigned *)0x4b000080) 
#define rIIS_DISRCC2	(*(volatile unsigned *)0x4b000084) 
#define rIIS_DIDST2		(*(volatile unsigned *)0x4b000088) 
#define rIIS_DIDSTC2	(*(volatile unsigned *)0x4b00008c) 
#define rIIS_DCON2		(*(volatile unsigned *)0x4b000090) 
#define rIIS_DSTAT2		(*(volatile unsigned *)0x4b000094) 
#define rIIS_DCSRC2		(*(volatile unsigned *)0x4b000098) 
#define rIIS_DCDST2		(*(volatile unsigned *)0x4b00009c) 
#define rIIS_DMASKTRIG2	(*(volatile unsigned *)0x4b0000a0) 
 
 
 
 
typedef struct tagIISDeviceST 
{ 
	int recvCount; 
	int sndCount; 
	int iisTaskId; 
	int semCount; 
}IIS_DEVICE_ST; 
 
IIS_DEVICE_ST gIISDevice; 
 
void UDA1341Delay(char count) 
{ 
	int i=1000; 
	int n; 
 
	for(n=0;n0) 
		{ 
	 
			printf("\r\nr%ds%d" ,gIISDevice.recvCount,gIISDevice.sndCount); 
			#if 0 
			if(gIISDevice.bufCount == 0) 
			{ 
				for(i=0 ; i<2 ;i++) 
				{ 
					printf("\r\n"); 
					for(j=0;j<10;j++) 
					{ 
						printf("%02x ",dmaRecvBuf[9][i*10+j]); 
					} 
				} 
				printf("\r\n"); 
			} 
			else 
			{ 
				for(i=0 ; i<2 ;i++) 
				{ 
					printf("\r\n"); 
					for(j=0;j<10;j++) 
					{ 
						printf("%02x ",dmaRecvBuf[gIISDevice.bufCount-1][i*10+j]); 
					} 
				} 
				printf("\r\n"); 
 
			} 
			#endif 
			gIISDevice.semCount--; 
		} 
 
	} 
	 
	 
} 
 
void CodecModInit() 
{ 
	gIISDevice.recvCount= 0; 
	gIISDevice.sndCount =5; 
	gIISDevice.semCount = 0; 
 
/* 
	if (usrTffsConfig (0, 0, "/tffs0/vxworks") == ERROR) 
	{ 
        printf ("usrTffsConfig failed.\n"); 
		return; 
	} 
	else 
		ioDefPathSet("/tffs0/"); 
	*/ 
	 
	L3busInit(); 
	IISbusInit(); 
	Uda1341Init(IIS_RECORD); 
	IISDmaInit(); 
 
#ifdef _TEST_CODEC_DMA_ 
 
	gIISDevice.iisTaskId =taskSpawn("iisTask" , 120 , 0 , 0x4000, 
			(FUNCPTR) IISTaskProc, 0, 0, 0, 0, 0, 0,  
						   0, 0, 0, 0); 
 
	if(gIISDevice.iisTaskId <= 0) 
	{ 
			logMsg("\r\n Start iis task failure\n" , 0 , 0,0,0,0,0); 
			return; 
	} 
#endif 
	 
	logMsg("\r\n CodecModInit\n" , 0 , 0,0,0,0,0); 
 
} 
 
 
void L3busInit() 
{ 
	rL3CFG_MODE &= L3MODE_CLR; 
	rL3CFG_MODE |= L3MODE_OUT;	 
 
	rL3CFG_CLK &= L3CLK_CLR; 
	rL3CFG_CLK |= L3CLK_OUT; 
	 
	rL3CFG_DATA &=L3DATA_CLR; 
	rL3CFG_DATA |= L3DATA_OUT; 
 
	rL3DATA_MODE |= L3MODE_HIGH; 
	rL3DATA_CLK |= L3CLK_HIGH; 
 
	rL3_MODE_PLUP |= 0x0100; 
	rL3_MODE_PLUP |= 0x4000; 
	rL3_DATA_PLUP |= 0x0004; 
 
} 
 
void IISbusInit() 
{ 
	rIIS_GPEC &= 0xfffffc00; 
	rIIS_GPEC |= 0x000002aa; 
 
	rIIS_GPEU |= 0x1f; 
	rIIS_CONFREG |=IIS_PRES_ENABLE; 
	rIIS_CONFREG &=IIS_INTER_DISABLE; 
	 
	rIIS_CONFREG &=IIS_TR_LRCLK_GEN&IIS_RC_LRCLK_GEN; 
 
	rIIS_CONFREG &= IIS_TR_DMA_DISABLE &IIS_RC_DMA_DISABLE; 
 
	rIIS_MODREG &=IIS_CLK_CLR&IIS_TR_MODE_CLR&IIS_MCLK_256&IIS_LOW_LEFT\ 
				&IIS_MASTER_MODE; 
	rIIS_MODREG |=IIS_CLK_32|IIS_SDB_16|IIS_TR_MODE; 
	 
 
	rIIS_PSRREG = (0x17<<5) +0x17;	  
 
	rIIS_FCONREG &=IIS_TR_FIFO_NOR_MODE&IIS_RC_FIFO_NOR_MODE; 
	rIIS_FCONREG &=IIS_TR_FIFO_DIS|IIS_RC_FIFO_DIS;	 
 
} 
 
 
void Uda1341Init(char mode) 
{ 
	rL3DATA_MODE |= L3MODE_HIGH; 
	rL3DATA_CLK |= L3CLK_HIGH; 
	rL3DATA_DATA &= L3DATA_LOW; 
	 
	L3busAddrTran(0x14+2); 
	L3busDataTran(0x60 , 0); 
 
	L3busAddrTran(0x14+2); 
	L3busDataTran(0x20 , 0); 
 
	L3busAddrTran(0x14+2); 
	L3busDataTran(0x83 , 0); 
 
 
} 
 
 
 
 
 
 
void L3busAddrTran(char addrVal) 
{ 
	int i = 0; 
	 
	rL3DATA_MODE &= L3MODE_LOW; 
	rL3DATA_CLK |= L3CLK_HIGH; 
	rL3DATA_DATA &= L3DATA_LOW; 
 
	UDA1341Delay(6); 
 
	for(i =0 ; i< 8 ; i++) 
	{ 
		if(addrVal&0x01) 
		{ 
			rL3DATA_CLK &= L3CLK_LOW; 
			rL3DATA_DATA |= L3DATA_HIGH; 
			UDA1341Delay(3); 
			rL3DATA_CLK |= L3CLK_HIGH; 
			rL3DATA_DATA |= L3DATA_HIGH; 
			UDA1341Delay(3); 
		} 
		else 
		{ 
			rL3DATA_CLK &= L3CLK_LOW; 
			rL3DATA_DATA &= L3DATA_LOW; 
			UDA1341Delay(3); 
			rL3DATA_CLK |= L3CLK_HIGH; 
			rL3DATA_DATA &= L3DATA_LOW; 
			UDA1341Delay(3); 
		} 
 
		 addrVal >>=1; 
 
	} 
 
	rL3DATA_CLK |= L3CLK_HIGH; 
	rL3DATA_MODE |= L3MODE_HIGH; 
	rL3DATA_DATA &= L3DATA_LOW; 
	 
	 
 
} 
 
 
 
void L3busDataTran(char dataVal , int halt) 
{ 
	int i = 0; 
	int j = 0; 
 
	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++) 
	{ 
		if(dataVal&0x01) 
		{ 
			rL3DATA_CLK &= L3CLK_LOW; 
			rL3DATA_DATA |= L3DATA_HIGH; 
			UDA1341Delay(3); 
			rL3DATA_CLK |= L3CLK_HIGH; 
			rL3DATA_DATA |= L3DATA_HIGH; 
			UDA1341Delay(3); 
		} 
		else 
		{ 
			rL3DATA_CLK &= L3CLK_LOW; 
			rL3DATA_DATA &= L3DATA_LOW; 
			UDA1341Delay(3); 
			rL3DATA_CLK |= L3CLK_HIGH; 
			rL3DATA_DATA &= L3DATA_LOW; 
			UDA1341Delay(3); 
		} 
		 
		dataVal>>=1;	 
 
	} 
 
 
	rL3DATA_CLK |= L3CLK_HIGH; 
	rL3DATA_MODE |= L3MODE_HIGH; 
	rL3DATA_DATA &= L3DATA_LOW; 
	 
 
} 
 
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; 
}