📄 fft_codec.c
字号:
#include <type.h>
#include <board.h>
#include <codec.h>
#include <mcbsp54.h>
#include <math.h>
#include <tms320.h>
#include <dsplib.h>
#define N 128
#define pi 3.1415927
#define pi2 2*pi
#pragma DATA_SECTION(dacdata,"data_buf")
DATA dacdata[N];
DATA y[N];
u16 f[N/2+1];
int amp=1;
unsigned int L=0;
void delay(int);
void main(void)
{
double p,q,temp;
unsigned int i=0,k,m;
HANDLE hHandset;
int cnt=2;
brd_init(100);
while(cnt--)
{
brd_led_toggle(BRD_LED0); //切换LED指示灯0的显示状态
delay(1000);
brd_led_toggle(BRD_LED1); //切换LED指示灯1的显示状态
delay(1000);
brd_led_toggle(BRD_LED2); //切换LED指示灯2的显示状态
delay(1000);
}
/* Open Handset Codec */
hHandset = codec_open(HANDSET_CODEC); /* Acquire handle to codec */
/* Set codec parameters */
codec_dac_mode(hHandset, CODEC_DAC_15BIT); /* DAC in 15-bit mode */
codec_adc_mode(hHandset, CODEC_ADC_15BIT); /* ADC in 15-bit mode */
codec_ain_gain(hHandset, CODEC_AIN_6dB); /* 6dB gain on analog input to ADC */
codec_aout_gain(hHandset, CODEC_AOUT_MINUS_6dB); /* -6dB gain on analog output from DAC */
codec_sample_rate(hHandset,SR_16000); /* 16KHz sampling rate */
// codec_sample_rate(hHandset,SR_12800); /* 16KHz sampling rate */
i=0;
while(1)
{
while (!MCBSP_RRDY(HANDSET_CODEC) ) {}; //如果A/D数据未准备好,则等待
dacdata[i] = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC); //读取A/D转换数据
i=i+1;
if(i>=N)
{
i=0;
cbrev(dacdata,y,N/2);
rfft(y,N,1);
f[0]=abs(y[0]);
f[N/2]=abs(y[1]);
m=1;
for(k=2;k<N;k=k+2)
{
p=y[k];
q=y[k+1];
temp=p*p+q*q;
f[m]=sqrt(temp);
// temp=abs(p)+abs(q);
// f[m]=temp;
m++;
}
}
*(volatile u16*)DXR1_ADDR(HANDSET_CODEC) =dacdata[i]; // 将数据写入D/A转换器
}
}
void delay(int period)
{
int i,j;
for(i=0; i<period; i++)
{
for(j=0;j<period;j++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -