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

📄 buffer.c

📁 dsp tmslf2407a 汇编,c的原代码,包括i2c,scitimer,fir等的很多程序.
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
描述:
	该文件为缓冲模式下C程序处理文件,完成读序列号,读块及块状态,读系统时间功能;
上位机可通过串口进行系统配置;读取模式为序列号,块及块状态,系统时间的各种组合,如下:
系统时间	块及块状态	序列号
0				0		1
0				1		0
0				1		1
1				0		1
1				1		0
1				1		1
	buffer[512]的数据格式:buffer[0] 为读到卡的次数,buffer[0].....buffer[511]为
	读到卡的数据,重复迭放
增加级连读取功能。
		............................
		.				           .
		.				           .		
		reader1		reader2		reader3
		.            .    .        .
		.		     .    .		   .
		..............    ..........	
作者:luoliyu	
时间:200506	
*/
#include "typedef.h"       
#include "f2407regs_c.h"  
#include "global.h"
#include "common.h"


void periodReadBuffer(void);
static void bufferComPro(void); 
static void readDataBuffInfor(void); 
static void readBufferData(void);   
static void clearBufferData(void);
static void initializeBuffer(void);
static void bufferModeSelect(void);

static void serialNumDb(void);
static void  serialNum(void);
static void serialNumTimer(void);
static void serialDbTimer(void);
static void db(void);		
static void dbTimer();

void getBufferTime();

extern uchar Day,Hour,Minute,Second;
extern uchar buffer[BuffLen];
extern uchar viccdata[256];
extern uchar labeldata[350];
extern uint cfgdata[128];
extern uchar status_rx;
extern uchar pcdata[Len];
extern uchar ISOMode; 
extern uchar ISOModeSys; 
extern uchar ISOFlagsSys;
extern uchar globalLevel;
extern uchar bReadTag;


static uchar c_tr_data = 0;
static uchar c_db_adr = 0;
static uchar c_db_n = 0;   
static uchar c_tr_id = 0;    
static uchar c_valid_time = 0;   
static uchar c_read = 0;
static uchar c_sync = 0;    
static uchar c_sync_timeout = 0;
static uchar RFoffFlag = 0;
static uchar masterFirst = 0;
uchar syncTimeoutCounter = 0;
uchar syncTimeoutFlag = 0;

uchar syncTimeoutCounter_out = 0;
uchar syncTimeoutFlag_out = 0;
static uchar timeOutCome = 0;

static uchar bufferInitFlag = 0;
static uchar bufferClrFlag  = 0;
static uchar bufferReadFlag = 0;

extern uchar globalErrFlag;	
extern uchar deviceAddr; 

void readCfg11( )
{
	uint i;
	c_tr_data = (cfgdata[88]>>8) & 0x23;	
	c_db_adr =  cfgdata[88]&0x1f;
	c_db_n = (cfgdata[89] >> 8)&0x0f;
	c_tr_id = cfgdata[89]&0x9f;
	c_valid_time = cfgdata[90];
	c_read = (cfgdata[91]>>8) & 0x8f;
	c_sync = cfgdata[91]&0xff;
	c_sync_timeout = cfgdata[92]&0xff;
	
	if((c_tr_data==0x00) || (c_tr_data==0x20)){c_tr_data = 0x01;}	//default
	if(c_db_adr >= 32)	c_db_adr = 0;
	if(c_db_n >= 16)	c_db_n = 1;
	if(c_valid_time>=80)c_valid_time = 0x0a;	//default 1s
	
	pcdata[1] = 0xaa;
	initializeBuffer();	//init to clr buffer	
}  
static void bufferComPro( )
{
	feedWatchDog();
	switch (pcdata[2])
	{
	  	case 0x52: {Detec_Baud_pro();	break;}	//Baud Rate Detection
	  	case 0x63: {CPU_reset();  		break;} //cpu reset
	  	case 0x65: {Get_DevInf_pro();  	break;}	//Get Reader Information
	  	case 0x69: {Reset_RF_pro();   	break;}	//RF Reset
	  	case 0x6A: {RF_OnOff_pro();    	break;}	//RF ON/OFF
	  	case 0x6d: {getNoiseLevel();	break;}  //get noise level
	  	case 0x6e: {readerDiagnostic();	break;}  //reader diagnostic
	  	case 0x71: {setOutput();		break;}  //set output
	  	case 0x74: {getInput();			break;}  //get input
	  	case 0x80: {Read_Cfg_pro();     break;}	//Read Configuration
	  	case 0x81: {Write_Cfg_pro();    break;}	//Write Configuration	  	
	  	case 0x83: {Sdefault_Cfg_pro(); break;}	//Set Default Configuration
	  	case 0x85: {Wr_Rtc_pro();       break;}
	  	case 0x86: {Rd_Rtc_pro();       break;} 
	  	case 0x88: {readIsoModeFalg();  break;}
	  	case 0x21: {readBufferData();	break;}	// buffer read mode,read buffer
	  	case 0x31: {readDataBuffInfor();break;} 	  	
	  	case 0x32: {clearBufferData( );	break;}	// buffer read mode,clear buffer
	  	case 0x33: {initializeBuffer(); break;};   	
	   	default:   {default_pro();      break;}	//Unknown Command
	} 	
}
void periodReadBuffer()
{
	uint i;
	uchar addrType;
	uchar slaveLast=0, slaveCurrent=0, slaveUpEdge=0;
	uchar masterLast=0,masterCurrent=0,masterUpEdge=0;
	
	globalErrFlag = 0x00;	//  clear iso error flag	
	 
	if(status_rx==2)
	{  		   
		addrType = verifyType();		
	  	if(addrType)bufferComPro( ); 
		status_rx = 0; 		
	}			
	
	if( (c_sync&0x03) == 0x01 )	//cascaded synchronization
	{		
		if( (c_sync&0x04) == 0x04 )	// master mode
		{
			syncTimeoutFlag_out = 1;
			if(masterFirst == 0xaa)	// second time access
			{	
				masterCurrent = OpticInput3()&0x01;				
				if( (masterCurrent != masterLast)&&(masterCurrent == 0x01)||(timeOutCome == 0xaa) )
				{
					syncTimeoutFlag_out = 0;
					masterUpEdge = 0xaa;	//up edge come
					timeOutCome = 0x00;
					//if( RFoffFlag == 0xaa )
					{
						RFoffFlag = 0x00;
						adjustX9c503(1,globalLevel);	// open RF
					}
				}
				if( (masterUpEdge == 0xaa) || (timeOutCome == 0xaa) )
				{
					timeOutCome = 0x00;
					if(buffer[0] <= 5)				
						bufferModeSelect();
					if(buffer[0] >= 1)	// tag read
					{
						OptOutput1(1);	//opt ouput high
						masterUpEdge = 0x00;	//clear master up edge flag
						if( (c_sync&0x80) == 0x80 ) //RFOFF
						{
							setX9c503ToLowest();	// close RF
							RFoffFlag = 0xaa;						
						}
						syncTimeoutFlag = 0x01;									
					}
				}			
				masterLast = masterCurrent;
			}
			else 	// first time access
			{
				if(buffer[0] <= 5)	
					bufferModeSelect();					
				if(buffer[0] >= 1)	// tag read
				{
					OptOutput1(1);	//opt ouput high
					masterFirst = 0xaa;
					if( (c_sync&0x80) == 0x80 ) //RFOFF
					{
						setX9c503ToLowest();	// close RF	
						RFoffFlag = 0xaa;
					}
					syncTimeoutFlag = 0x01;							
				}
			}
		}
		else	// slave mode
		{
			syncTimeoutFlag_out = 1;
			slaveCurrent = OpticInput3()&0x01;
			if( (slaveCurrent != slaveLast)&&(slaveCurrent == 0x01)||(timeOutCome == 0xaa) )
			{
				syncTimeoutFlag_out = 0;
				slaveUpEdge = 0xaa;	//up edge come
				timeOutCome = 0x00;
				//if( RFoffFlag == 0xaa )
				{
					RFoffFlag = 0x00;					
					adjustX9c503(1,globalLevel);	// open RF
				}
			}
			if( (slaveUpEdge == 0xaa) || (timeOutCome == 0xaa) )
			{
				timeOutCome = 0x00;
				if(buffer[0] <= 5)				
					bufferModeSelect();
				if(buffer[0] >= 1)	// tag read
				{
					OptOutput1(1);	//opt ouput high
					slaveUpEdge = 0x00;	//clear slave up edge flag
					if( (c_sync&0x80) == 0x80 ) //RFOFF
					{
						setX9c503ToLowest();	// close RF
						RFoffFlag = 0xaa;						
					}
					syncTimeoutFlag = 0x01;									
				}
			}			
			slaveLast = slaveCurrent;
		}
		
		if( (syncTimeoutCounter>=1) && (syncTimeoutFlag == 1) )
		{
			syncTimeoutFlag = 0x00;
			syncTimeoutCounter = 0x00;
			OptOutput1(0);	//opt ouput low
		}	
		
		if( (syncTimeoutCounter_out >= c_sync_timeout) && (syncTimeoutFlag_out == 1) )
		{
			syncTimeoutCounter_out = 0;
			syncTimeoutFlag_out = 0;
			timeOutCome = 0xaa;
			pcdata[1] = 0xaa;
			initializeBuffer();	//init to clr buffer
		}	
	}	
	else
	{
		bufferModeSelect();
	}
}
uchar bufferReadCouner = 0;
static void bufferModeSelect()
{
	if( bufferReadCouner >= c_valid_time)
	{		
		switch(c_tr_data)
		{
			case 0x01:{serialNum( ); 	break;}	//  serial number
			case 0x02:{db();			break;}
			case 0x03:{serialNumDb();	break;}	// serial number,datablock	
			case 0x21:{serialNumTimer();break;}	// timer,serial number
			case 0x22:{dbTimer();		break;}
			case 0x23:{serialDbTimer();	break;}	// datablock,serial number,timer		
			default:  {serialNum();		break;}		
		}
		bufferReadCouner = 0;
	}	
}
static void readDataBuffInfor( )
{
	if(pcdata[1] == deviceAddr)
	{		
		pcdata[0] = 12;
		pcdata[1] = deviceAddr;
		pcdata[2] = 0x31;
		pcdata[3] = OK;
		pcdata[4] = 0x04;
		pcdata[5] = 0x3c;		 	
		pcdata[6] = 0x00;
		pcdata[7] = 0x01;
		pcdata[8] = 0x00;
		pcdata[9] = 0x01;		
		wr_crc_resp();
	}
}
static void initializeBuffer()
{
	uint i;
	bufferInitFlag = 1;
	bufferClrFlag = 0;
	bufferReadFlag = 0;
	for(i=0;i<BuffLen;i++)buffer[i]=0;	//init to clr buffer
	if(pcdata[1] == deviceAddr)
	{
		pcdata[0] = 6;
		pcdata[1] = deviceAddr;
		pcdata[2] = 0x33;
		pcdata[3] = OK;
		wr_crc_resp();
	}
}
static void readBufferData()
{
	uint i;
	uchar len;
	if(pcdata[1] == deviceAddr)
	{
		if( (bufferInitFlag == 1) && (bufferClrFlag == 0) )
		{
			bufferReadFlag = 1;
			if(buffer[0] == 0x00)
			{
				pcdata[0] = 6;
				pcdata[1] = deviceAddr;
				pcdata[2] = 0x21;
				pcdata[3] = 0x01;	//no tag
				wr_crc_resp();
			}
			else
			{
				switch(c_tr_data)
				{
					case 0x01:
					{											
						pcdata[0] = 6+buffer[0]*9+2;
						pcdata[1] = deviceAddr;
						pcdata[2] = 0x21;
						pcdata[3] = OK;
						pcdata[4] = c_tr_data;
						pcdata[5] = buffer[0];
						for(i=0;i<buffer[0]*9;i++)
						{
							pcdata[6+i] = buffer[1+i];
						}
						wr_crc_resp();
					}
					break;
					case 0x02:
					{
						len = buffer[0]*(2+(c_db_n+1)*5)+6+2;						
						pcdata[0] = 6+buffer[0]*(2+(c_db_n+1)*5)+2;
						pcdata[1] = deviceAddr;
						pcdata[2] = 0x21;
						if(len<=0xff)pcdata[3] = OK;
						else		pcdata[3] = 0x94;
						pcdata[4] = c_tr_data;
						pcdata[5] = buffer[0];
						for(i=0;i<buffer[0]*(2+(c_db_n+1)*5);i++)
						{
							pcdata[6+i] = buffer[1+i];
						}
						wr_crc_resp();	
					}
					break;
					case 0x03:
					{
						len = buffer[0]*(1+8+2+(c_db_n+1)*5)+6+2;
						pcdata[0] = 6+buffer[0]*(9+2+(c_db_n+1)*5)+2;
						pcdata[1] = deviceAddr;
						pcdata[2] = 0x21;
						if(len<=0xff)pcdata[3] = OK;
						else		pcdata[3] = 0x94;
						pcdata[4] = c_tr_data;
						pcdata[5] = buffer[0];
						for(i=0;i<buffer[0]*(9+2+(c_db_n+1)*5);i++)
						{
							pcdata[6+i] = buffer[1+i];
						}
						wr_crc_resp();						
					}
					break;
					case 0x21:
					{
						pcdata[0] = 6+buffer[0]*(9+4)+2;
						pcdata[1] = deviceAddr;
						pcdata[2] = 0x21;
						pcdata[3] = OK;
						pcdata[4] = c_tr_data;
						pcdata[5] = buffer[0];
						for(i=0;i<buffer[0]*(9+4);i++)
						{
							pcdata[6+i] = buffer[1+i];
						}
						wr_crc_resp();
					}

⌨️ 快捷键说明

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