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

📄 bpxzbak.c

📁 TI TMS320F206
💻 C
字号:
/****************************************************************/
/*                                                              */
/*  Copyright (c) 2000, TI Technology Inc                       */
/*  Proprietary and Confidential                                */
/*								*/
/*  SCCSID @(#)TMS320F206.c  2.0				*/
/*								*/
/*  Author :             jacky-cheung				*/
/*  Filename :           bpxz.C  				*/
/*  osc      :           16MHz					*/
/*  Release :                            			*/           																
/*  Revision History :   2004-06-04  14:00			*/
/*    								*/
/****************************************************************/
#include <c:\TDS-EMU2XX\c2000\cgtools\include\stdio.h>
#include <c:\TDS-EMU2XX\c2000\cgtools\include\math.h> 
#include <c:\TDS-EMU2XX\c2000\cgtools\include\stdlib.h> 
#include "f206.h"

#define uint unsigned int 
#define uchar unsigned char
#define	   N	64  

/*-------------------------------------------------------------------*/
interrupt void  sx_protect();        //失谐保护中断
//interrupt void  G_earth();           //接地保护中断
interrupt void 	time_int1();          //定时器中断
/*-------------------------------------------------------------------*/


uint   runmode=0x0055,kaiji=0x0055,fall=0x17a0,autoflag=0x0055,autovok=0x00aa,sdfs=0x0055;
      //工作模式,开关机,30HZ起自动调频频率,自动调频结束标志,自动调压结束标志,手动方式(调压或频)
      
float   autovsav=0.0,cx=0.0;                      //自动调压电压缓存,试品电容
uint    vop,iop;                               //过压整定,过流整定
uint    syzt=0x0001,bhflag=0x0004;                //实验时间,保护标志
uint    sx   =0x55,time;                          //失谐标志,时间显示
uint    fover=0x0055,vover=0x0055;                //频率范围溢出标志,电压范围溢出标志

float	pi[N],pu[N];
float   vo,fup,wu=0.0,fstart;                   //实验电压,上传频率,电压,下传起始频率
uint    wi=0;                                   //电流                        
int	U11[N+5],U12[N+5];                             

int	nTbSysTime;

typedef  
volatile unsigned int pointer;
volatile unsigned int *reg_pointer;
	

unsigned int sa[3]={0xa0,0x17,0x00};      
//const int aa[3]={1,2,3 };
  

                    
/******************************************************************/

/*===========================Initialization DSP============================*/
void InitSystem(void)
{
	asm(" setc intm ");
	asm(" clrc CNF");
	asm(" ldp  #0h");
	reg_wsgr=0xffff;       
        reg_pointer=(pointer *)reg_ifr;
	*reg_pointer=0xffff;  
	reg_pointer=(pointer *)reg_greg;
	*reg_pointer=0x0000;
	
	TbTxInit();
	reg_tcr=0x0c27; 
    	reg_prd=1999;
	nTbSysTime=0x5555;
	
        reg_pointer=(pointer *)reg_imr;
	*reg_pointer=0x001d;  
        reg_icr=0x001c;    
        
        reg_aspcr=0x0002;  
        reg_iosr =0xffff;   
       
      	
      	asm(" clrc intm ");
        
}

interrupt void  sx_protect()
{
	asm(" setc intm ");
	Re_sa4828();
	Init_sa4828();
	sx=0xaa;                        /*FLASH protect*/
	asm(" clrc intm ");
}

/*interrupt void  G_earth()
{
	asm(" setc intm ");
	       
	earth=0xaa;                    /*EARTH error*  
	reg_icr=0x001d; 
        asm(" clrc intm ");
}*/

interrupt void time_int()
{
	asm(" setc intm ");
	/*reg_tcr=0x0c27;
	reg_prd=199;*/
/*	adc=0x00;*/
	nTbSysTime++;
	asm(" clrc intm ");
}                     

/*=================================================================*/
void sample()
{  	
	int i;
	max125=0x01;
	for(i=0; i<N+5; i++)
       	{   
       		while(((reg_iosr)&0x0004)==0x0004)
       	        {;}
                U11[i]=(max125&0x3fff);    
                U12[i]=(max125&0x3fff);
                
        }
        
   	for(i=0; i<N+5; i++)                  
	{
		U11[i]=(U11[i]<<2);
		U12[i]=(U12[i]<<2);
	}
        for(i=0; i<N; i++)
        {
        	pu[i]=(float)U11[i+2]*5.00/32768.0; 
        	pi[i]=(float)U12[i+2]*5.00/32768.0;
        	 
        }                  
}
 
/*========================================================================*/
float rms2() 
{ 
	int i,j=0;
  	float c12=0.0;
  	for(i=0;i<N;i++)
	{
	c12=c12+pu[i]*pu[i];
        }
    	c12=10*sqrt(c12/N);
    	/*c12=sqrt(c12/N)*9.334335655;/*2.832861*3.010526;*/
    	return(c12);  
}

float rms1() 
{ 
	int i;
  	float c11=0.0;
  	for(i=0;i<N;i++)
	{
	c11=c11+pi[i]*pi[i];
        }
    	c11=sqrt(c11/N)*6.944444;/*6.8055555;*/
    	return(c11);  
}



void delay(unsigned int t)

  { 
    unsigned int a;
    for(a=0;a<=t;a++)
    {;}
  } 



void vauto()                              /*自动调压*/
{  
  if(autoflag==0x00aa)
   {
	 if(wu<vo*0.99)
   {
   if(sa[2]<=254)	
   {
    	sa[2]=sa[2]+1;
   }
   else
   {
   vover=0x00aa;                         /*电压范围错误*/
   }
   }
         else if(wu>vo*1.01)
   {
   if(sa[2]>=1)
   {
     	sa[2]=sa[2]-1;
   }
   else
   {
   vover=0x00aa;             		     /*电压范围错误*/
   }
   }
        else if(vo*0.99<=wu<=vo*1.01)
        {
        autovok=0x0055;
        
        }
        else
        {;}
   }

   else
   {;}
}


void autof()                                      /*自动调频*/
{
  if(autoflag==0x55)
  {     
  	if(autovsav<=(wu+0.2))
  	{
  		autovsav=((autovsav>wu)?autovsav:wu);
  		if(fall<=60400)
  		{
  		fall=fall+20;
  		sa[0]=fall&0x00ff;
  		sa[1]=(fall>>8)&0x00ff;
  		sa[2]=0x30;                      /*初始电压*/           
  	        }
  	        else
  	        {
  	        fover=0x00aa;			 /*频率范围错误*/
  	        }
  		
  	}
  	else
  	{
  		autoflag=0xaa;
  		cx     =1000000.0/(39.48*62*fup*fup);
  	}  	
  	
  	
  }
  else
  {;}
}


void  sdtf()      /*---------------手动调频-----------------*/
{
	
		if(((reg_iosr)&0x0001)==0x0000)           /*IO0---+;BIO----_*/
		{
			if(fall<=60400)
			{
			fall=fall+20; 
			sa[0]=fall&0x00ff;
  		        sa[1]=(fall>>8)&0x00ff;
  		        sa[2]=0x30; 
		        }
		        else
		        {;}
		
		}
		asm(" BCND execution,BIO  ");
		asm(" nop ");
		asm(" b inexecution ");
                asm("execution: ");
                if(fall>=6040)
                {		
		fall=fall-20;
		sa[0]=fall&0x00ff;
  		sa[1]=(fall>>8)&0x00ff;
  		sa[2]=0x30; 
	        }
	        else
	        {;}
                asm("inexecution: ");
		asm(" nop ");		
	
}

void  sdty()                  /*----------------手动调频-----------------*/
{
	     
	        if(((reg_iosr)&0x1)==0x0)
		{
			if(sa[2]<=254)
			{
				sa[2]=sa[2]+1;
			}
			else
			{;}
		}
		asm(" BCND bbc,BIO  ");
		asm(" nop ");
		asm(" b aac ");			
                asm("bbc: ");
		if(sa[2]>=1)
		{
		sa[2]=sa[2]-1;
		}
               asm("aac: ");	
               asm(" nop ");
} 

/*自动----输出电压,保护电压,保护电流,实验时间*/

void zdong()    
{

autof();
vauto();
Cont_sa4828(sa);

}


/*手动----起始频率,输出电压,保护电压,保护电流,实验时间*/

void sdong()     
{
   if(sdfs==0x0055)            
    {	
     sdtf();
    }
    else if(sdfs==0x00aa)
    {
    sdty();
    }	
Cont_sa4828(sa);
}



void ztest()
{
	
	fup=0.00496705373*(float)fall;
	if((reg_iosr&0x0008)==0x0000)
	{
	 bhflag=0x0001;
	}
	else
	{
	 bhflag=0x0004;
	}
		
}
	

void parainit()                /*参数初始化*/
{
runmode =0x00aa;
kaiji   =0x00aa;
fall    =0x17a0;
autoflag=0x0055;
autovok =0x00aa;
sdfs    =0x0055;        //工作模式,开关机,30HZ起自动调频频率,自动调频结束标志,自动调压结束标志,手动方式(调压或频)
autovsav=0.0000;        //自动调压电压缓存
bhflag  =0x0055;        //ipm保护标志
sx      =0x0055;        //失谐标志
fover   =0x0055;        //频率范围溢出标志
vover   =0x0055;        //电压范围溢出标志
sa[0]   =0x00a0;
sa[1]   =0x0017;
sa[2]   =0x0000;
     
}



void zero_sa4828()      //关机回零
{
	while(sa[2])
	{
		sa[2]=sa[2]-1;
		Cont_sa4828(sa);
		delay(3000);
	}
}
		

	
/**************************MAIN PROGRAM***************************/
  main()
 {   
       	
       	
	InitSystem();
	delay(30000);
	Re_sa4828();
	Init_sa4828();
	ztest();                                          /*下位状态检测*/
	chuansong();
     	
     	
     	
      	while(1)
	{       chuansong();
		sample();
                wu=rms2();
                wi=rms1();
		ztest();                                  /*下位状态检测*/
     	        page();
     	        if((kaiji==0x55)&&(runmode==0x55))        /*已开机且为自动*/
     	        {
     	        if((sx==0xaa)||((reg_iosr&0x0008)==0x0000))
     	        {
     	        Re_sa4828();
	        Init_sa4828();
	        sx=0x55;
	        }    
     	        else
     	        {
     	        zdong();                                  /*自动*/
     	        }
     	        }
     	
     	        else if((kaiji==0x55)&&(runmode==0xaa))   /*已开机且为手动*/
     	        {
     	        if((sx==0xaa)||((reg_iosr&0x0008)==0x0000))
     	        {
     	        Re_sa4828();
	        Init_sa4828();
	        sx=0x55;
	        }    
     	        else
     	        {
     	        sdong();
     	        }	                         /*手动*/           	        
     	        } 
     	        
     	        else
     	        {
     	        
     	     	zero_sa4828();
	        parainit();
	        }
	}
     	         		
		  	        
     	
 }      	


/*-------------------------------数据传输----------------------------*
void	chuansong(void)
{ 
		int	i;
		reg_prd=1999;
 	    reg_tcr=0x0c27;
   		asm("	clrc	intm");
		TbTranRdKey();
    	for(i=0;i<0x2fff;i++)
    	{
    		SysTb(&nTbSysTime,1000);
    		if(bNewKey==True)	break;
    	}
    	 
    	bNewSysRdData=True;
    	nNewSysDataRdPreAdr=0;
    	nTbSysTime=500;
    	for(i=0;i<0x3fff;i++)
    	{
    		SysTb(&nTbSysTime,1000);
    		if(i>0x7ff && (bNewSysRdData==False))
    		break;
    	}                       
	    
	    bRefurbish=True;	
    	nTbSysTime=1000;
    	while (bRefurbish==True)
    	{     	
    	 	SysTb(&nTbSysTime,1500);
    	}
    	
    	/*if (keynSerial==KeyNode.nSerial)
    	{
			KeyNode.nkey=20;
			KeyNode.nCursorPreLine=3;
		}*
    	keynSerial=KeyNode.nSerial;
}     */
 	

⌨️ 快捷键说明

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