⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fft_codec.c

📁 基于dskC5402的Codec的FFT小例子
💻 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 + -