?? uda1341ts.c
字號:
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 + -