📄 bpxzbak.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 + -