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

📄 main_program.c

📁 ADI公司的ADSP21065L的专业数字音频处理器的源代码
💻 C
字号:
/******************************************************************************************/
/*      Main C Program Shell for the 21065L EZ-LAB                                        */
/*      ------------------------------------------                                        */
/*      This routine initializes the 65L EZ-LAB's SDRAM, I/O Flags, SPORTs and AD1819A    */
/*      The AD1819A SPORT audio routines are also included in this file for processing    */
/*      a user DSP algorithm.                                                             */
/*                                                                                        */
/*      This version uses the SPORT1 Tx Interrupt Vector to process audio data            */
/*      The SPORT tx DMA buffer is extended to 7 words, and 7 channels active.            */
/*                                                                                        */
/*      John Tomarakos                                                                    */
/*      Analog Devices DSP Applications                                                   */
/*      9/27/99                                                                           */
/*      Rev 1.0                                                                           */
/******************************************************************************************/

#include <signal.h>
#include <def21065l.h>
#include <21060.h>
#include <signal.h>
#include <sport.h>
#include <macros.h>
#include <trans.h>
#include <math.h>
#include <filters.h>

#include "functions.h"
#include "myhead.h"
/////////definition the subrutine///////////
////////////////////////////////////////////


float	g_equ=0.5,q_equ=0.5,fc_equ=1000,fc_sin=1000,fc_filter=1000;
int * DelayLine;
int turn_num=0,turn_equ=0;
//int taps=4;
////////////main/////////////////
void main ()
{
	DelayLine = (int *) 0x03000000;
	Init_DSP();
	Init_65L_SDRAM_Controller();	/* Initialize External Memory */

	/* This is required for disabling and modifying SPORT config for EZLAB RS232 debugger */
	Clear_All_SPT1_Regs();			/* Clear and Reset SPORT1 and DMAs */

	Program_SPORT1_Registers();		/* Initialize SPORT1 registers and begin codec communications */
	Program_DMA_Controller();		/* Setup Serial Port 1 tx and rx DMA Transfers */

	/* Initialize & program AD1819 */
	interrupts (SIG_SPT1I, Sport1_Transmit_Dummy);
	AD1819_Codec_Initialization();	
	interrupts (SIG_SPT1I, SIG_IGN);
	///////////my initial runtine////////////////////////
	fc_sin=1000;
	v_true=0;
//	hp_fil_bessel_2or(fc);
//	hp_fil_buttwith_4or(fc);
	lp_fil_buttwith_2or(fc_filter,1.4142136,a_eq_2,b_eq_2);
	equ_compu(fc_equ,g_equ,q_equ,a_eq_1,b_eq_1);
	mysine(fc_sin);
	/////////////////////////////////////////////////////

	/* Install SPORT1 TX Audio Processing Function */
	interrupts (SIG_SPT1I, Sport1_tx_isr_function);

	Blink_LEDs_Test();				/* Tell us if we are alive? */
//	fc=1000;
	v_true=0;
	fc_sin=1000;

	while(1)
	{
		
		//-------------------------------//
		asm("wait_flag0:");
		asm("if not flag0_in jump flag0_over;");
		asm("flag0_release:");
		asm("if flag0_in jump flag0_release;");
		if(turn_num>=2)turn_num=0;
		else turn_num=turn_num + 1;
		asm("flag0_over:");
		if(turn_num==0)//sin
		{
			asm("bit set ustat1 0x0f;");
			asm("bit clr ustat1 0x01;");
			//asm("dm(IOSTAT)=ustat1;");0x2f
			asm("dm(0x2f)=ustat1;");
			v_base=fc_sin;
			v_step=50;
			inc_scan();
			fc_sin=v_base;
			if(fc_sin<=50)fc_sin=50;
			if(fc_sin>=15000)fc_sin=15000;//15k
			if(v_true==1){mysine(fc_sin);v_true=0;}
		}
		else if(turn_num==1)//filter
		{
			asm("bit set ustat1 0x0f;");
			asm("bit clr ustat1 0x02;");
			//asm("dm(IOSTAT)=ustat1;");
			asm("dm(0x2f)=ustat1;");
			v_base=fc_filter;
			v_step=50;
			inc_scan();
			fc_filter=v_base;
			if(fc_filter<=100)fc_filter=100;
			if(fc_filter>=12000)fc_filter=12000;//12k
			if(v_true==1){lp_fil_buttwith_2or(fc_filter,1.4142136,a_eq_2,b_eq_2);v_true=0;}
		}
		else if(turn_num==2)//equ
		{
			asm("bit clr ustat1 0x03;");
			//asm("dm(IOSTAT)=ustat1;");
			asm("dm(0x2f)=ustat1;");
			
			asm("wait_flag1:");
			asm("if not flag1_in jump flag1_over;");
			asm("flag1_release:");
			asm("if flag1_in jump flag1_release;");
			if(turn_equ>=2)turn_equ=0;
			else turn_equ=turn_equ + 1;
			asm("flag1_over:");
			if(turn_equ==0)//g
			{
				asm("bit set ustat1 0x0c;");
				asm("bit clr ustat1 0x04;");
				//asm("dm(IOSTAT)=ustat1;");
				asm("dm(0x2f)=ustat1;");
				v_base=g_equ;
				v_step=0.5;
				inc_scan();
				g_equ=v_base;
				if(g_equ<=-15)g_equ=-15;
				if(g_equ>=15)g_equ=15;//g
				if(v_true==1){equ_compu(fc_equ,g_equ,q_equ,a_eq_1,b_eq_1);v_true=0;v_true=0;}
			}
			else if(turn_equ==1)//Q
			{
				asm("bit set ustat1 0x0c;");
				asm("bit clr ustat1 0x08;");
				//asm("dm(IOSTAT)=ustat1;");
				asm("dm(0x2f)=ustat1;");
				v_base=q_equ;
				v_step=0.02;
				inc_scan();
				q_equ=v_base;
				if(q_equ<=0.02)q_equ=0.02;
				if(q_equ>=1)q_equ=1;//Q
				if(v_true==1){equ_compu(fc_equ,g_equ,q_equ,a_eq_1,b_eq_1);v_true=0;v_true=0;}
			}
			else if(turn_equ==2)//fc_equ
			{
				asm("bit clr ustat1 0x0c;");
				//asm("dm(IOSTAT)=ustat1;");
				asm("dm(0x2f)=ustat1;");
				v_base=fc_equ;
				v_step=50;
				inc_scan();
				fc_equ=v_base;
				if(fc_equ<=100)fc_equ=100;
				if(fc_equ>=12000)fc_equ=12000;//12k
				if(v_true==1){equ_compu(fc_equ,g_equ,q_equ,a_eq_1,b_eq_1);v_true=0;v_true=0;}
			}
		}
		
		//-------------------------------//
		
		//v_base=fc_sin;
		//v_step=50;
		//inc_scan();
		//fc_sin=v_base;
		
		//if(fc_sin<=50)fc_sin=50;
		//if(fc_sin>=15000)fc_sin=15000;
//		if(fc<=100)fc=100;
//		if(fc>=12000)fc=12000;
//		if(v_true==1){hp_fil_buttwith_4or(fc);v_true=0;}
//		if(v_true==1){hp_fil_buttwith_2or(fc_filter,1.4142136,a_eq_1,b_eq_1);v_true=0;}
//		if(v_true==1){hp_fil_bessel_2or(fc)	;v_true=0;}
//		if(v_true==1){equ_compu(fc,10,0.1);v_true=0;}
		//if(v_true==1){mysine(fc_sin);v_true=0;}
//		asm("idle;");
	}

}

void Sport1_tx_isr_function()
{
	Record_AD1819A_audio_input();
//	fil_out=myc_iir(sample,a_eq_1,b_eq_1,w_eq_1,taps);
//	playback_audio_data();
}

// Dummy routine for initialization
void Sport1_Transmit_Dummy()
{
}

void mysine(float fc)
{
	aa=2*cosf(2*PI*fc/48000);
	y0=sinf(2*PI*fc/48000);
	y1=aa*y0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -