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

📄 main.c

📁 基于TMS320VC5509的的FIR滤波
💻 C
字号:
#include "myapp.h"
//#include "ICETEK-VC5509-EDU.h"
#include "scancode.h"
#include "fir.h"
#include "LCD.h"

#define PI 3.1415926
#define PI2 6.2831852
#define ADCNUMBER 256

#define CREG (*(unsigned short int *)0x400004)

// AD  ----------------------------------------------------------
ioport unsigned int *ADCCTL1=(unsigned int *)0x6800;
ioport unsigned int *ADCDATA1=(unsigned int *)0x6801;
ioport unsigned int *ADCCLKDIV1=(unsigned int *)0x6802;
ioport unsigned int *ADCCLKCTL1=(unsigned int *)0x6803;
#define ADCCTL (*ADCCTL1)
#define ADCDATA (*ADCDATA1)
#define ADCCLKDIV (*ADCCLKDIV1)
#define ADCCLKCTL (*ADCCLKCTL1)
// 液晶  ----------------------------------------------------------
#define CTRLED (*(unsigned int *)0x600802) // port8004
#define MCTRKEY (*(unsigned int *)0x602802)  // port8005
#define CTRCLKEY (*(unsigned int *)0x600803) // port8006
#define CTRSTATUS (*(unsigned int *)0x600800) //port8000

void InitADC();
void wait( unsigned int cycles );
void EnableAPLL( );
ioport unsigned int * sysR = (unsigned int *)0x7fd;

unsigned int nADC0[NX],nADC1[NX];

struct struLCDGraph struGraph,struGraph1;
unsigned int nScreenBuffer[30*128];
int nData[256],nData1[256];
void Delay(unsigned int nDelay);
int k0,k1,uWork,uWork0,nAD,keyflage;
int nGraphBuf1[ADCNUMBER],nGraphBuf2[ADCNUMBER];
int nADBuf1[ADCNUMBER],nADBuf2[ADCNUMBER];
int nGraphBuf1[ADCNUMBER],nGraphBuf2[ADCNUMBER];
int max,min,test;
main()
{
	int i,j;
	unsigned int uWork;
	unsigned int uWork1;
	unsigned int * pWork;
	
	PLL_Init(30);
	SDRAM_init();
	LCDTurnOff();
	LCDSetScreenBuffer(nScreenBuffer);
	for ( uWork=0,pWork=nScreenBuffer;uWork<30*128;uWork++,pWork++ )	(*pWork)=0;
	LCDSetDelay(1);
	LCDTurnOn();				// 打开显示
	LCDCLS();				// 清除显示内存  
    for ( i=0;i<NX;i++) x[i]=0;
    for ( i=0;i<NH+2;i++) db[i]=0;

	//InitCTR();
	InitADC();

    
    (*sysR)=1;
    keyflage=0;
    CTRCLKEY=0;
	while ( 1 )
	{
		for ( i=0;i<NX;i++ )
		{
			ADCCTL=0x8000;	// 启动AD转换,通道0
			do
			{
				uWork=ADCDATA;
			} while ( uWork&0x8000 );
			nADC0[i]=uWork&0x0fff;
			ADCCTL=0x9000;	// 启动AD转换,通道1
			do
			{
				uWork=ADCDATA;
			} while ( uWork&0x8000 );
			nADC1[i]=uWork&0x0fff;
			uWork=nADC0[i];					// 限幅,混频后仍然产生12位数据
			x[i]=uWork;
		    
		}
        fir2(x, h, r, db, NX, NH);	// 调用滤波程序计算当前输出

        min=0;
               
        for(i=0;i<ADCNUMBER;i++)
        {
           out[i]=r[i+64];
           test=out[i];
           if(test<min)
           {
               min=test;
           }
        }
        
        for(i=0;i<ADCNUMBER;i++)
        {
           out[i]=(out[i]-min)>>1;
        }
        
      if(keyflage==1)
      {  
         struGraph.pData=out;
	     struGraph.uDataMode=DATAUINTMODE;
	     struGraph.uDataLength=256;
	     struGraph.uMaxValue=2048;
	     struGraph.uWindowX0=0;
	     struGraph.uWindowY0=0;
	     struGraph.uWindowX1=240;
	     struGraph.uWindowY1=128;
	     struGraph.nOriginX=0;
	     struGraph.nOriginY=0;
	     struGraph.uLineMode=LINEMODE;
	     LCDGraph(&struGraph);
	     for ( j=0;j<20;j++ )	_Delay(614);
	     LCDSetScreenBuffer(nScreenBuffer);
	     LCDCLS();				// 清除显示内存
      }
     
      if(keyflage==0)
      {
	     struGraph.pData=x;
	     struGraph.uDataMode=DATAUINTMODE;
	     struGraph.uDataLength=256;
	     struGraph.uMaxValue=2048;
	     struGraph.uWindowX0=0;
	     struGraph.uWindowY0=0;
	     struGraph.uWindowX1=240;
	     struGraph.uWindowY1=128;
	     struGraph.nOriginX=0;
	     struGraph.nOriginY=0;
	     struGraph.uLineMode=LINEMODE;
	     LCDGraph(&struGraph);
	     for ( j=0;j<20;j++ )	_Delay(614);
	     LCDSetScreenBuffer(nScreenBuffer);
	     LCDCLS();				// 清除显示内存
      } 
       
       uWork1=MCTRKEY;
	   CTRCLKEY=0;
	   if(uWork1==128)
	   {		
		    keyflage=1-keyflage;
	   }
 
	}							// 在此加软件断点
}

void InitADC()
{
	ADCCLKCTL=0x23; // 4MHz ADCLK
	ADCCLKDIV=0x1f00;
}

void wait( unsigned int cycles )
{
    int i;
    for ( i = 0 ; i < cycles ; i++ ){ }
}

void EnableAPLL( )
{
    /* Enusre DPLL is running */
    *( ioport volatile unsigned short* )0x1f00 = 4;

    wait( 25 );

    *( ioport volatile unsigned short* )0x1f00 = 0;

    // MULITPLY
    *( ioport volatile unsigned short* )0x1f00 = 0x3000;

    // COUNT
    *( ioport volatile unsigned short* )0x1f00 |= 0x4F8;

    wait( 25 );

    //*( ioport volatile unsigned short* )0x1f00 |= 0x800

    // MODE
    *( ioport volatile unsigned short* )0x1f00 |= 2;

    wait( 30000 );

    // APLL Select
    *( ioport volatile unsigned short* )0x1e80 = 1;

    // DELAY
    wait( 60000 );
}

⌨️ 快捷键说明

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