📄 adc.c
字号:
#include "adc.h"
void tdelay(short int);
void sendbit(unsigned char);
void sendadd(unsigned char);
void senddat(unsigned char);
void initaudio(void);
void readdai();
void writedai();
unsigned short rvoicebuf[1000000];
unsigned short lvoicebuf[1000000];
unsigned char adc(void)
{
unsigned short sta;
unsigned int i;
unsigned short rvoice;
unsigned short lvoice;
PORTDDIR=PORTDDIR&0xc7;
PORTDDAT=PORTDDAT|0x10;
SYSCON1|=0x30;
/* for(i=0;i<100000;i++)
{
rvoicebuf[i]=i;
lvoicebuf[i]=i;
}
*/
sendadd(0x16);
tdelay(1);
senddat(0x40); //reset dai
tdelay(1);
sendadd(0x16);
tdelay(1);
senddat(0x29);
tdelay(1);
sendadd(0x16);
tdelay(1);
senddat(0xc3);
tdelay(1);
sendadd(0x14);
tdelay(1);
senddat(0x00);
tdelay(1);
sendadd(0x14);
tdelay(1);
senddat(0x40);
tdelay(1);
sendadd(0x14);
tdelay(1);
senddat(0x80);
tdelay(1);
sendadd(0x14);
tdelay(1);
senddat(0xc2);
tdelay(1);
sendadd(0x14);
tdelay(1);
senddat(0xe5); //Channel select and gain set
//0xe6 mic input
//0xe5 line input
tdelay(1);
sendadd(0x14);
tdelay(1);
senddat(0xc4);
tdelay(1);
sendadd(0x14); //set AGC control gain
tdelay(1);
senddat(0xf0);
tdelay(1);
sendadd(0x14);
tdelay(1);
senddat(0xc6);
tdelay(1);
sendadd(0x14);
tdelay(1);
senddat(0xe0);
tdelay(1);
/*
sendadd(0x14); //no AGC gain add
tdelay(1);
senddat(0xc5);
tdelay(1);
sendadd(0x14); //no AGC gain data
tdelay(1);
senddat(0xff);
tdelay(1);
*/
initaudio();
while(1)
{
readdai();
writedai();
}
/*
while(1)
{
rvoice=0x00;
lvoice=0x00;
for(;;)
{
sta=DAISTU;
sta&=0x01;
if(sta)
{
DAIRDR=rvoice;
rvoice+=0x10;
}
sta=DAISTU;
sta&=0x04;
if(sta)
{
DAILDR=lvoice;
lvoice+=0x10;
}
}
}*/
return 0;
}
void initaudio()
{
SYSCON3|=0x0e;
SYSCON3&=0xffffdff;
DAI64FSCR=0x90b;
DAICR=0x7f0404;
DAISTU=0xffffffff;
DAIDR2=0x118000;
while(!(DAISTU&0x1000))
{}
DAIDR2=0xd8000;
while(!(DAISTU&0x1000))
{}
}
void sendbit(unsigned char i)
{
unsigned char j;
j=i&0x01;
j=j<<3;
PORTDDAT=PORTDDAT&L3CLKL;
//tdelay(1);
PORTDDAT=PORTDDAT&0xf7;
PORTDDAT=PORTDDAT|j;
//tdelay(1);
PORTDDAT=PORTDDAT|L3CLKH;
//tdelay(1);
}
void sendadd(unsigned char i)
{
unsigned char j,k;
j=i;
PORTDDAT=PORTDDAT&L3MODL;
tdelay(1);
for(k=0;k<8;k++)
{
sendbit(j);
j=j>>1;
}
PORTDDAT=PORTDDAT|L3MODH;
tdelay(1);
}
void senddat(unsigned char i)
{
unsigned char j,k;
j=i;
PORTDDAT=PORTDDAT&L3MODL;
//tdelay(1);
PORTDDAT=PORTDDAT|L3MODH;
//tdelay(1);
for(k=0;k<8;k++)
{
sendbit(j);
j=j>>1;
}
PORTDDAT=PORTDDAT&L3MODL;
//tdelay(1);
PORTDDAT=PORTDDAT|L3MODH;
//tdelay(1);
}
/*
unsigned char readdat()
{
unsigned char i,j,k;
PORTDDAT=PORTDDAT&0xcf;
delay();
PORTDDAT=PORTDDAT|0x20;
delay();
for(k=0;k<8;k++)
{}
}*/
void tdelay(short int j)
{
unsigned short int i;
TC1EOI=0xffff;
TC1D=j;
while(1)
{
i=INTSR1&0x100;
if(i)
break;
}
}
void readdai()
{
unsigned int i=0,j=0;
unsigned int sta;
unsigned short rread,lread;
while(1)
{
sta=DAISTU;
sta&=0x02;
if(sta)
{
rread=DAIRDR;
rvoicebuf[i]=rread;
i++;
}
sta=DAISTU;
sta&=0x08;
if(sta)
{
lread=DAILDR;
lvoicebuf[j]=lread;
j++;
}
if((i==1000000)||(j==1000000))
break;
}
}
void writedai()
{
unsigned int i=0,j=0;
unsigned int sta;
while(1)
{
sta=DAISTU;
sta&=0x01;
if(sta)
{
DAIRDR=rvoicebuf[i];
i++;
}
sta=DAISTU;
sta&=0x04;
if(sta)
{
DAILDR=lvoicebuf[j];
j++;
}
if((i==1000000)||(j==1000000))
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -