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

📄 cap.h

📁 基于dsp2407a的探测系统程序(兼容usb和串口通讯)
💻 H
字号:
ioport	unsigned int port16;
ioport  unsigned char port7;

ioport	unsigned int port11;
ioport	unsigned int port12;
ioport	unsigned int port13;
ioport	unsigned int port14;
ioport  unsigned int port15;
/*
ioport  unsigned char port8;
ioport  unsigned char port9;
ioport  unsigned char porta;
ioport  unsigned char portb;
ioport  unsigned char portc;
ioport  unsigned char portd;
ioport  unsigned char porte;
ioport  unsigned char portf;  
*/

#define		state_cs		port16
#define		start_cs		port7
#define		protect_cs		port11  
#define		register_cs		port12
#define     led_cs			port12
#define		fifo12_cs		port13
#define		fifo16_cs		port14
#define		fifo08_cs		port15
/*
#define		A54counter0		port8
#define		A54counter1		port9
#define		A54counter2		porta
#define		A54control		portb
#define		B54counter0		portc
#define		B54counter1		portd
#define		B54counter2		porte
#define		B54control		portf 
*/

#define		A54counter0		0x0008
#define		A54counter1		0x0009
#define		A54counter2		0x000a
#define		A54control		0x000b
#define		B54counter0		0x000c
#define		B54counter1		0x000d
#define		B54counter2		0x000e
#define		B54control		0x000f 


#define		WriteLed		led_cs		=led.value
#define		WriteStart		start_cs	=start.value
#define		WriteProtect	protect_cs	=protect.value

/*Protect操作*/ 
#define		IrPowerOn		protect.protects.irpoweron=0;	WriteProtect /*发射板电源控制*/
#define		IrPowerOff		protect.protects.irpoweron=1;	WriteProtect
#define		AllowProtect	protect.protects.shootprotect=1;WriteProtect /*保护使能*/
#define		Forbidprotect	protect.protects.shootprotect=0;WriteProtect 
#define		SetProtect		protect.protects.protectorclr=1;WriteProtect /*保护置位*/
#define		ClrProtect		protect.protects.protectorclr=1;WriteProtect
#define		ForeverProtect	protect.protects.longoronce=1;	WriteProtect   /*保护模式*/
#define		RealtimeProtect	protect.protects.longoronce=1;	WriteProtect
#define		StartShoot		protect.protects.shootstart=0;	WriteProtect   /*启动发射控制*/
#define		StopShoot		protect.protects.shootstart=1;	WriteProtect 
/*Led 操作*/
#define		ShowTimeLed		led.leds.time_led=0;WriteLed
#define		WinkTimeLed     led.leds.time_led=1;WriteLed
#define		ShowCurcLed		led.leds.curc_led=0;WriteLed
#define		WinkCurcLed     led.leds.curc_led=1;WriteLed
#define		ShowTemcLed		led.leds.temc_led=0;WriteLed
#define		WinkTemcLed     led.leds.temc_led=1;WriteLed
#define		ShowMar1Led		led.leds.mar1_led=0;WriteLed
#define		WinkMar1Led     led.leds.mar1_led=1;WriteLed
#define		ShowMar2Led		led.leds.mar2_led=0;led.leds.match1=1;WriteLed
#define		WinkMar2Led     led.leds.mar2_led=1;led.leds.match1=0;WriteLed
#define		ShowMar3Led		led.leds.mar3_led=0;led.leds.match2=1;WriteLed
#define		WinkMar3Led     led.leds.mar3_led=1;led.leds.match2=0;WriteLed
#define		ResetMarLed		WinkMar1Led;WinkMar2Led;WinkMar3Led  
   
/*Start控制*/
#define		SetTimeoff		start.starts.timeoffclr=0;		WriteStart /*开始关断时间记录*/
#define		ClrTimeoff		start.starts.timeoffclr=1;		WriteStart
#define		SetCurAset		start.starts.curfifoasreset=0;	WriteStart /*电流辅助复位*/
#define		ClrCurAset		start.starts.curfifoasreset=1;	WriteStart
#define		SetCurReset		start.starts.cfifors=1;			WriteStart /*电流fifo复位*/
#define		ClrCurReset		start.starts.cfifors=0;			WriteStart
#define		SetCurCap		start.starts.ltcstart=1;		WriteStart /*启动电流采集*/
#define		ClrCurCap		start.starts.ltcstart=0;		WriteStart
#define		SetTemAset		start.starts.temasreset=1;		WriteStart /*tem辅助复位*/
#define		ClrTemAset		start.starts.temasreset=0;		WriteStart
#define		SetTemReset		start.starts.capfiforeset=1;	WriteStart /*Tem fifo复位*/
#define		ClrTemReset		start.starts.capfiforeset=0;	WriteStart 
#define		SetTemCap		start.starts.temcapstart=1;		WriteStart /*启动Tem采集*/
#define		ClrTemCap		start.starts.temcapstart=0;		WriteStart
#define		SetCurMode		start.starts.flatorfall=1;		WriteStart /*发射电流采集模式*/
#define		SetEdgeMode		start.starts.flatorfall=0;		WriteStart /*关断沿采集模式*/ 



#define		Mode0			2
#define		Mode1			7
#define		Mode2			6
#define		ModeStop		0
#define		CapCurMode      0x0fff
#define		CapEdgeMode		0xf000

#define		LedReset		0x00ff
#define		StartReset		0x0000
#define		ProtectReset	0x0000

#define		Fre25fre		0x0c35
#define		Fre25t3cmp		0x030d
#define		Fre25t4cmp		0x0927
#define		Fre50fre		0x061a
#define		Fre50t3cmp		0x0186
#define		Fre50t4cmp		0x0492
#define		Fre100fre		0x030d
#define		Fre100t3cmp		0x00c3
#define		Fre100t4cmp		0x0249
#define		Fre200fre		0x0186
#define		Fre200t3cmp		0x0061
#define		Fre200t4cmp		0x0123

#define		UsbTem			0x01
#define		UsbCur			0x02
#define		UsbNoData		0x00


typedef union _led_register
{
	struct _register
	{
		uchar time_led:1;
		uchar curc_led:1;
		uchar temc_led:1;
		uchar mar1_led:1;
		uchar mar2_led:1;
		uchar mar3_led:1;
		uchar match1:1;
		uchar match2:1;
	} leds;
	unsigned int value;
	            
} LEDREGISTER;

typedef struct _TemData
{
	unsigned int TemDatah;
	unsigned int TemDatal;
}TEMDATA;


typedef union _start_register
{
	struct _s_register
	{
		uchar timeoffclr:1;
		uchar curfifoasreset:1;
		uchar cfifors:1;
		uchar ltcstart:1;
		uchar temasreset:1;
		uchar capfiforeset:1;
		uchar temcapstart:1;
		uchar flatorfall:1;
	} starts;
	unsigned int value;
	            
} STARTREGISTER;

typedef union _protect_register
{
	struct _p_register
	{
		uchar irpoweron:1;
		uchar shootprotect:1;     
		uchar protectorclr:1;
		uchar longorone:1;
		uchar shootstart:1;
		uchar shootmode:3;
//		uchar shootmode2:1;
//		uchar shootmode1:1;
	} protects;
	unsigned int value;
	            
} PROTECTREGISTER; 

typedef union _state_register
{
	struct _st_register
	{
		uchar powerlack:1;
		uchar curcapend:1;
		uchar protected:1;
		uchar offtimeend:1;
		uchar over:1;
		uchar temcapend:1;
		uchar curfifoef:1;
		uchar temfifoef:1;
	} states;
	unsigned int value;
	            
} STATEREGISTER;


                                  
LEDREGISTER 		led;
STARTREGISTER 		start;
PROTECTREGISTER	 	protect;
STATEREGISTER		state;
const int 	g[16]		=	{1,2,4,8,10,20,40,80,100,100,100,100,100,100,100,100}; 
TEMDATA TemData[3000];
int			curbuf[1000];
int		dispcurbuf[30]; 
char capsymbol=0;
char timesymbol=0; 
char capdispsymbol=0;
char ShootMode=0;         

void delay()
{
   int i;
   for(i=0;i<100;i++)
   ;
   return;

} 

void readstate()
{   
	uint temp;
	temp=state_cs; 
	state.value=temp;
}

void setcurcapdot(uint capdot)
{
  int temph,templ;
  capdot=capdot+10;
  outport(B54control,0x30);
	if(capdot>=0x100)
	{
		templ=capdot&0x00ff;
		temph=capdot>>8;
		}
	else
	{
		templ=capdot;
		temph=0x00;
		}  
  outport(B54counter0,templ);
  outport(B54counter0,temph);
 } 

void settimecap()
{
	if(ShootMode==0x02)
	{
	SetCurMode;
	}
	else
	{
	if(timesymbol==0)
	 {SetCurMode;
	 timesymbol=1;
	 }
	 else
	 {
	 SetEdgeMode;
	 timesymbol=0;
	 }
	}  
	ClrTimeoff;
	outport(B54control,0x70);/*计数器1,工作方式0,计数*/
	outport(B54counter1,0xff);
	outport(B54counter1,0xff); 
	SetTimeoff;
	ShowTimeLed;
} 

uint readcaptime()
{
	uint temph,templ;
	inport(B54counter1,&templ);
	inport(B54counter1,&temph);
	temph=(temph<<8)|templ;
	templ=0xffff-temph;
	WinkTimeLed;
	return(templ);
}
 
void setA54(uint fre,uint totaldot,uint predot) 
/*采样率,点数,前段点数*/
{
  int temph,templ;  
 /*计数器2,方式2 方波信号输出*/
  outport(A54control,0x94);
/*  temp=0x14;*/
  outport(A54counter2,fre); 
 /*计数器1,方式0 采集点数计数*/  
  outport(A54control,0x70); 
  totaldot=totaldot+2;
	if(totaldot>=0x100)
	{
		templ=totaldot&0x00ff;
		temph=totaldot>>8;
		}
	else
	{
		templ=totaldot;
		temph=0x00;
		}	
  outport(A54counter1,templ);
  outport(A54counter1,temph);  
 /*计数器0,方式0 前段放大采集计数*/  
  outport(A54control,0x30);
	if(predot>=0x100)
	{
		templ=predot&0x00ff;
		temph=predot>>8;
		}
	else
	{
		templ=predot;
		temph=0x00;
		}
  outport(A54counter0,templ);
  outport(A54counter0,temph);
 } 

void setshoot(uint mode,uint frequence,uint t3cmp,uint t4cmp) 
{
    *T3CNT=0X0000;         /*赋予初始值 */
    *T4CNT=0X0000;
    *T3PER=frequence;      /*周期数为*/
    *T4PER=frequence;
    *T3CMP=t3cmp;
    *T4CMP=t4cmp;
	*COMCONB=0X8200;      /*启动使能比较操作*/
	protect.protects.shootmode=mode; /*设置发射模式*/
	WriteProtect;
	}
void setmatch(int match)
{ 
  ResetMarLed;
switch(match)
  {
  case 0:     ShowMar1Led;
				  break;
  case 1:	  ShowMar2Led;
       			  break;
  case 2:	  ShowMar3Led;
  	   			  break;
  default:		  
  			   ShowMar1Led;	  
		  
  }   

}	
 
void setcurcap(uint capdot,uchar capmode)
{   

	if(ShootMode==0x02)
	{
	SetCurMode;
	}
	else
	{
	if(capsymbol==0)
	 {SetCurMode;
	 capsymbol=1;
	 }
	 else
	 {
	 SetEdgeMode;
	 capsymbol=0;
	 }
	}
	ClrCurCap;
	SetCurReset;
	SetCurAset;
	ClrCurReset;
	delay();
	delay();
	SetCurReset;
	ClrCurAset;
    setcurcapdot(capdot);
    SetCurCap; 
    ShowCurcLed;
} 
void setcurdisp(uint capdot,uchar capmode)
{   

	if(ShootMode==0x02)
	{
	SetCurMode;
	}
	else
	{
	if(capdispsymbol==0)
	 {SetCurMode;
	 capdispsymbol=1;
	 }
	 else
	 {
	 SetEdgeMode;
	 capdispsymbol=0;
	 }
	}
	ClrCurCap;
	SetCurReset;
	SetCurAset;
	ClrCurReset;
	delay();
	delay();
	SetCurReset;
	ClrCurAset;
    setcurcapdot(capdot);
    SetCurCap; 
    ShowCurcLed;
}

void settemcap(uint fre,uint totaldot,uint predot)
{   

//	SetEdgeMode;
	if(ShootMode==0x02)
	{
	SetCurMode;
	}
	else
	{
	if(capsymbol==0)
	 {SetCurMode;
	 capsymbol=1;
	 }
	 else
	 {
	 SetEdgeMode;
	 capsymbol=0;
	 }
	}
	ClrTemCap;
	SetTemReset;
	SetTemAset;
	ClrTemReset;
	delay();
	delay();
	SetTemReset;
	ClrTemAset;
    setA54(fre,totaldot,predot) ;
    SetTemCap;
    ShowTemcLed;
}

void readcurcapdata(uint capdot,int *bufadd)
{    
	 uint i,temp; 
	 temp=fifo12_cs;
	 for(i=0;i<capdot;i++)
	 {temp=fifo12_cs;
	 temp=temp&0x0fff;
//	 if(temp>=0x0800)
//	 temp=temp|0xf000;
	 *(bufadd+i)=(int)temp;
	 } 
	 ClrCurCap;
} 

void ReadTemCapData(uint capdot,TEMDATA *TemDataBuf)
{
	uint temph,templ,i;
    templ=fifo16_cs;
    templ=fifo08_cs;  
    templ=fifo08_cs;
    
    templ=fifo16_cs;  
	for(i=0;i<capdot;i++)
	{ 
    templ=fifo08_cs;
    TemDataBuf[i].TemDatal=templ&0x000f; 
    temph=fifo16_cs;
    TemDataBuf[i].TemDatah=temph;
    }   
    ClrTemCap;

} 

void TemDataSeparate(TEMDATA TemData,char *sendbuf)
{
	int temp;
	temp=TemData.TemDatah;
	sendbuf[0]=(temp>>10)&0x003f;
	sendbuf[1]=(temp>>4)&0x003f; 
	sendbuf[2]=temp&0x000f;
	temp=TemData.TemDatal;
	sendbuf[3]=temp&0x000f;
} 
void CurDataSeparate(int CurCapData,char *sendbuf)
{
	int temp;
	temp=CurCapData;
	sendbuf[0]=(temp>>6)&0x003f;
	sendbuf[1]=temp&0x003f; 
} 

/*串口调试用*/
void senddatatopc(uint datadot,long *bufadd)
{
	uint i;
	for(i=0;i<datadot;i++)
	{
//	 senddata(buf,*(bufadd+i));
	}
}

void SendTemData(int DataNum,TEMDATA *TemData)
{
	char temph,templ,senddata[4];
	int i,j;
	temph=DataNum>>6;
	temph=temph&0x003f;
	templ=DataNum&0x003f;
	scisend(0x4a);  //J  //表示是Tem数据
//	scisend(0xaa);
	scisend(0x4b);  //K
	scisend(temph);
	scisend(templ);
	for(i=0;i<DataNum;i++)
	{
	 TemDataSeparate(TemData[i],senddata);
	 for(j=0;j<4;j++)
	 scisend(senddata[j]);
	}
	scisend(0x4c);   //L 
		
}
 
 void SendCurData(int DataNum,int *DataBuf)
{
	char temph,templ,senddata[2];
	int i,j;
	temph=DataNum>>6;
	temph=temph&0x003f;
	templ=DataNum&0x003f;
	scisend(0x4d);  //M       //表示是Cur数据
//	scisend(0xaa);
	scisend(0x4b);  //K
	scisend(temph);
	scisend(templ);
	for(i=0;i<DataNum;i++)
	{
	 CurDataSeparate(DataBuf[i],senddata);
	 for(j=0;j<2;j++)
	 scisend(senddata[j]);
	}
	scisend(0x4c);   //L 
		
} 
 void SendCurDispData(int DataNum,int *DataBuf)
{
	char temph,templ,senddata[2];
	int i,j;
	temph=DataNum>>6;
	temph=temph&0x003f;
	templ=DataNum&0x003f;
	scisend('N');  //N       //表示是Cur数据
//	scisend(0xaa);
	scisend(0x4b);  //K
	scisend(temph);
	scisend(templ);
	for(i=0;i<DataNum;i++)
	{
	 CurDataSeparate(DataBuf[i],senddata);
	 for(j=0;j<2;j++)
	 scisend(senddata[j]);
	}
	scisend(0x4c);   //L 
		
} 
 void SendTimeDispData(int DataNum,int DataBuf)
{
	char temph,templ,senddata[3];
	int temp=DataBuf;
	senddata[0]=(temp>>10)&0x003f;
	senddata[1]=(temp>>4)&0x003f; 
	senddata[2]=temp&0x000f;
	temph=DataNum>>6;
	temph=temph&0x003f;
	templ=DataNum&0x003f;
	scisend('O');  //N       //表示是Cur数据
//	scisend(0xaa);
	scisend(0x4b);  //K
	scisend(temph);
	scisend(templ);
	scisend(senddata[0]);
	scisend(senddata[1]);
	scisend(senddata[2]);
	scisend(0x00);
	
	scisend(0x4c);   //L 
		
}

⌨️ 快捷键说明

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