📄 agc_audio.c
字号:
#include "agc_inter.h"
#include "init_ad_bsp.h"
int din,dout;
int read_bsp(void);
void write_bsp(int);
void led_light(void);
int agc_audio(int);
void main()
{
init_board;
while(1)
{
din=read_bsp();
dout=agc_audio(din);
write_bsp(dout);
led_light();
}
}
int read_bsp(void)
{
int datain;
*(volatile u16 *)SPSA_ADDR(1)=SPCR1_SUBADDR;
while(!((*(volatile u16 *)SPSD_ADDR(1)) & 0x0002)) {};
datain=*(volatile u16 *)DRR1_ADDR(1);
return datain;
}
void write_bsp(int dataout)
{
*(volatile u16 *)SPSA_ADDR(1)=SPCR2_SUBADDR;
while( !((*(volatile u16 *)SPSD_ADDR(1)) & 0x0002) ) {};
*(volatile u16 *)DXR1_ADDR(1)=dataout;
}
void led_light(void)
{
static int i=0;
if(i>1024)
{
*(volatile u16 *)reg_ST1^=0x2000;
i=0;
}
i++;
}
//AGC子函数
int agc_audio(int agc_in)
{
int agc_out; //输出变量,agc_in为输入变量
static int dtime=0;
static float agc_coff=0.0;
static int maxagc_in=0;
static int maxarrin=0;
if(agc_in > maxarrin)
maxarrin=agc_in;
if(-1*agc_in > maxarrin)
maxarrin=-1*agc_in;
if(dtime >= 4096)
{
if(maxarrin < maxagc_in)
maxagc_in=maxarrin;
maxarrin=0;
dtime=0;
}
dtime++;
if(agc_in > maxagc_in)
{
maxagc_in=agc_in;
if(maxagc_in > 1)
agc_coff=20000.0/maxagc_in;
}
if((-1*agc_in)>maxagc_in)
{
maxagc_in=-1*agc_in;
if(maxagc_in>1)
agc_coff=20000.0/maxagc_in;
}
agc_out=agc_in*agc_coff;
if(agc_out > 20000)
agc_out=20000;
if(agc_out< -20000)
agc_out=-20000;
return agc_out;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -