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

📄 protocol.c.bak

📁 dsp tmslf2407a 汇编,c的原代码,包括i2c,scitimer,fir等的很多程序.
💻 BAK
📖 第 1 页 / 共 5 页
字号:
			readOneCfg((uint)loc);
			pcdata[0] = 20;			
			pcdata[2] = 0x80;
			pcdata[3] = OK;
			p_cfg = &cfgdata[0] + loc*8;	
			for(i=0;i<14;i++)
			{				
				if(i%2==0)pcdata[4+i] = (*p_cfg) >>8;
	            else {pcdata[4+i] = (*p_cfg)&0x00ff; p_cfg ++;}
			}
			if(pcdata[1] != 0xff)
			{
				pcdata[1] = deviceAddr;
				wr_crc_resp();//广播地址不返回
			}
		}
	}
	else	//cfg_adr命令不正确
	{
		if(pcdata[1] != 0xff)//广播地址不返回
		{
			pcdata[0] = 6;
			pcdata[1] = deviceAddr;
			pcdata[2] = 0x80;
			pcdata[3] = 0x15;	//read reserved configuration
			wr_crc_resp();
		}
	}
}
/******************************************************/
void Write_Cfg_pro(void)			//Write Configuration
{
   	uint *p_cfg;
   	uchar i;  
   	uchar flag;
   	
   	
   	pcdata[3] &= 0x3f;
   	if(  (pcdata[3]==0x01)||(pcdata[3]==0x02)||(pcdata[3]==0x03)
      	   ||(pcdata[3]==0x05)||(pcdata[3]==0x08)||(pcdata[3]==0x0a)
      	   ||(pcdata[3]==0x0b)||(pcdata[3]==0x0c)||(pcdata[3]==0x0d)
          )	//cfg_adr命令正确
	{
		if( (pcdata[1] == 0xff) || (pcdata[1] == deviceAddr) )//广播地址或者本机地址执行
		{
			flag = writeOneCfg((uint)pcdata[3]);
			pcdata[0] = 6;			
			pcdata[2] = 0x81;
			if(flag == 1)pcdata[3] = OK;
			else 	     {pcdata[3] = 0x10;	bFlashError = 1;}	//flash error
			if(pcdata[1] != 0xff)
			{
				pcdata[1] = deviceAddr;
				wr_crc_resp();	//广播地址不返回
			}
		}
	}
	else	//cfg_adr命令不正确
	{
		if(pcdata[1] != 0xff)	//广播地址不返回
		{
			pcdata[0] = 6;
			pcdata[1] = deviceAddr;
			pcdata[2] = 0x81;
			pcdata[3] = 0x16;	//reserved configuration
			wr_crc_resp();
		}		
	} 
}
/******************************************************/
void para1def(void)
{
   	cfgdata[8]  = 0xa800; 	cfgdata[9]  = 0xfc00;
   	cfgdata[10] = 0x0000; 	cfgdata[11] = 0x0000;
   	cfgdata[12] = 0x0000; 	cfgdata[13] = 0x0000;
   	cfgdata[14] = 0x0000; 	cfgdata[15] = 0xC552;
}
void para2def(void)
{
   	cfgdata[16] = 0x0000; 	cfgdata[17] = 0x0801;
   	cfgdata[18] = 0x0800; 	cfgdata[19] = 0x0064;
   	cfgdata[20] = 0x0000; 	cfgdata[21] = 0x0000;
   	cfgdata[22] = 0x0000; 	cfgdata[23] = 0xffff;   
} 
void para3def(void)
{  
   	cfgdata[24] = 0x000a; 	cfgdata[25] = 0x9000;
   	cfgdata[26] = 0x0100; 	cfgdata[27] = 0x0000;
   	cfgdata[28] = 0x0000; 	cfgdata[29] = 0x0000;
   	cfgdata[30] = 0x0000; 	cfgdata[31] = 0xffff;   
}  
void para5def(void)
{  
   	cfgdata[40] = 0x0000; 	cfgdata[41] = 0x0000;
   	cfgdata[42] = 0x0000; 	cfgdata[43] = 0x1416;
   	cfgdata[44] = 0x1000; 	cfgdata[45] = 0x0000;
   	cfgdata[46] = 0x0000; 	cfgdata[47] = 0xffff;   
} 
void para8def(void)
{  
   	cfgdata[64] = 0x0000; 	cfgdata[65] = 0x0000;
   	cfgdata[66] = 0x0000; 	cfgdata[67] = 0x0003;
   	cfgdata[68] = 0x0000; 	cfgdata[69] = 0x0000;
   	cfgdata[70] = 0x0000; 	cfgdata[71] = 0xffff;   
}     
void para10def(void)
{  
   	cfgdata[80] = 0x0400; 	cfgdata[81] = 0x0000;
   	cfgdata[82] = 0x0000; 	cfgdata[83] = 0x0000;
   	cfgdata[84] = 0x0000; 	cfgdata[85] = 0x0000;
   	cfgdata[86] = 0x0000; 	cfgdata[87] = 0xffff;    
} 
void para11def(void)
{  
   	cfgdata[88] = 0x2300; 	cfgdata[89] = 0x0280;
   	cfgdata[90] = 0x000a; 	cfgdata[91] = 0x8000;
   	cfgdata[92] = 0x03e8; 	cfgdata[93] = 0x0000;
   	cfgdata[94] = 0x0000; 	cfgdata[95] = 0xffff;    
} 
void para12def(void)
{  
   	cfgdata[96] = 0x0200; 	cfgdata[97] = 0x0063;
   	cfgdata[98] = 0x0002; 	cfgdata[99] = 0x0064;
   	cfgdata[100] = 0x0002;	cfgdata[101] = 0x2000;
   	cfgdata[102] = 0x0100;	cfgdata[103] = 0xffff;
   
} 
void para13def(void)
{  
   	cfgdata[104] = 0x0000; 	cfgdata[105] = 0x0000;
   	cfgdata[106] = 0x0000; 	cfgdata[107] = 0x0000;
   	cfgdata[108] = 0x0000; 	cfgdata[109] = 0x0000;
   	cfgdata[110] = 0x0000; 	cfgdata[111] = 0xffff;
}
/******************************************************/  

/***************************************************/
void Wr_Rtc_pro(void)
{
	setCalendar();   
   	wr_crc_resp();
}
/***************************************************/
void Rd_Rtc_pro(void)
{  
   	getCalendar();    
   	wr_crc_resp();   
}
/***************************************************/

/*************************************/
void Sdefault_Cfg_pro(void)	
{ 
	uchar temp;
	uint flag=0x55;//reserved configuration
	
	temp = pcdata[3];
	
	if( (temp&0x40) == 0x40 )	// all configuration
	{
		para1def(); para2def();  para3def();  para5def();
		para8def(); para10def(); para11def(); para12def(); para13def();
		flag = writeAllCfg( );
		if(pcdata[1] != 0xff)	//广播地址不返回
		{
			pcdata[0] = 6;
			pcdata[1] = deviceAddr;
			pcdata[2] = 0x83;
			if(flag == 1)pcdata[3] = OK;
			else 	     {pcdata[3] = 0x10;bFlashError = 1;}//flash error
			wr_crc_resp();
		}
	}
	else	// configuration block specifiedby cfg
	{
		temp = pcdata[3]&0x3f;
		if( (pcdata[1] == 0xff) || (pcdata[1] == deviceAddr) )//广播地址或者本机地址执行
		{
			switch (temp)
			{
				case  1:{flag=writeOneDefaultCfg(1);  break;}
				case  2:{flag=writeOneDefaultCfg(2);  break;}
				case  3:{flag=writeOneDefaultCfg(3);  break;}
				case  5:{flag=writeOneDefaultCfg(5);  break;}
				case  8:{flag=writeOneDefaultCfg(8);  break;}
				case 10:{flag=writeOneDefaultCfg(10); break;}
				case 11:{flag=writeOneDefaultCfg(11); break;}
				case 12:{flag=writeOneDefaultCfg(12); break;}
				case 13:{flag=writeOneDefaultCfg(13); break;}
				default:{break;}
			}
			
			if(flag == 0)bFlashError = 1;	//write failed,flash error
			
			if(pcdata[1] != 0xff)	//广播地址不返回
			{	
				pcdata[0] = 6;
				pcdata[1] = deviceAddr;
				pcdata[2] = 0x83;
				if(flag == 1)pcdata[3] = OK;	//write successful	
				else if(flag == 0)pcdata[3] = 0x10;//write failed,flash error
				else if(flag == 0x55)pcdata[3] = 0x16;//reserved configuration				
				wr_crc_resp();
			}
		}
	}	
}
/******************************************************/
void default_pro(void)
{
   	if( ! ((pcdata[1]==0xff) && (deviceAddr!=0)) )   //只有在广播方式下且地址不等于0时不响应
   	{                             
      	pcdata[0] = 0x06;
      	pcdata[1] = deviceAddr;
        pcdata[3] = NO_CMD;
      	wr_crc_resp();
   	}
}
/*************************************/
void host_command_0xb1_return(uint type )
{
	uint m;
   	pcdata[0] = 0x07;
   	pcdata[1] = deviceAddr;
   	pcdata[2] = 0xb1;
   	pcdata[3] = 0x07;	//mfr
   	pcdata[4] = type;	
   	m = ~crc16Calculate(pcdata,5);
   	pcdata[5] = m&0x00ff;
   	pcdata[6] = m>>8;
	send_resp();	
}
/************************************/   
void wr_two_blk_pro(void)
{
	uchar flags,addr,n_b,db_addr;
	uchar i,j,ii,jj;
	uchar f_resp;
	uchar flag =0; 
	uchar db_adr_error_flag = 0;
   
   	addr = pcdata[1];
   	flags = pcdata[5]&0x07;	//mode
   	if( (flags==0)||(flags==2) )	//不带uid
   	{	     	
   		if(pcdata[6]>32){ flag = 1;}//不能超过32
      	if((pcdata[6]%2)!= 0){flag = 1;db_adr_error_flag=1;}//且必须为偶数
      	
      	if(flags==0) { flags = ISOFlagsSys&0xcf;}
      	else         { flags = ISOFlagsSys|0x10;}	//select_flag
      	flags |= 0x40;				//option_flag 
      	
      	ISOMode = ISOModeSys | 0x10;	//write
      	viccdata[0] = 15;
        viccdata[1] = flags;
        viccdata[2] = 0xa2;	//write 2 block
        viccdata[3] = 0x07;	//ti tag
        viccdata[4] = pcdata[6];	//db_adr
        for(i=0;i<8;i++)
        {viccdata[5+i] = pcdata[8+i];}	//copy block data
        wr_crc_send();
        f_resp = sendISOCmd(); 
        CS_RAM_1;
   	}
   	else if(flags==1)	//带uid
   	{
      	if(pcdata[14]>32){ flag = 1;}//不能超过32
      	if((pcdata[14]%2)!= 0){flag = 1;db_adr_error_flag=1;}//且必须为偶数      	
      	
      	flags = ISOFlagsSys;
      	flags |= 0x20;		//address_flag
    	flags |= 0x40; 		//option_flag 
      	
      	ISOMode = ISOModeSys | 0x10;	//write
      	viccdata[0] = 23;
        viccdata[1] = flags;
        viccdata[2] = 0xa2;	//write 2 block
        viccdata[3] = 0x07;	//ti tag
        for(ii=4,jj=13;ii<12;ii++,jj--) { viccdata[ii] = pcdata[jj]; }//copy uid         	
      		
        viccdata[12] = pcdata[14]; 
        for(j=0;j<8;j++)
        	viccdata[13+j] = pcdata[16+j];	//copy block data
	
         wr_crc_send();
         f_resp = sendISOCmd();  
         CS_RAM_1;
   	}
   	else { flag = 1;}
   
   	if( deviceAddr == pcdata[1] )   //本机执行
   	{
      	if(flag == 1)                      //块号参数超出标签允许值
      	{
      		if(db_adr_error_flag == 1)
      			host_command_0xb1_return(0xa2);	//even addr error
      		else	host_command_0xb1_return(0x11);//parameter error
      	}
      	else
      	{   
      		if(f_resp == 0){host_command_0xb1_return(0x01);}      // no tag			 		
        	else if(viccdata[1]!=0)
        	{
        		pcdata[0] = 8;
        		pcdata[1] = deviceAddr;
        		pcdata[2] = 0xb1;
        		pcdata[3] = 0x07;		//mfr
        		pcdata[4] = 0x95;             	//iso err 
        		pcdata[5] = viccdata[2]; 	//iso err code            			
        		wr_crc_resp();
        	}
         	else
         	{
            	pcdata[0] = 7;
            	pcdata[1] = deviceAddr;
            	pcdata[2] = 0xb1;
            	pcdata[3] = 0x07;		//mfr
            	pcdata[4] = OK;      		//OK 
            	wr_crc_resp();
         	}
      	}
   	}
}    

void lock_two_blk_pro(void)
{
	uchar flags,addr,n_b,db_addr;
	uchar i,j,ii,jj;
	uchar f_resp;
	uchar flag =0; 
	uchar db_adr_error_flag = 0;
   
   	addr = pcdata[1];
   	flags = pcdata[5]&0x07;	//mode
   	if( (flags==0)||(flags==2) )	//不带uid
   	{	     	
   		if(pcdata[6]>32){ flag = 1;}//不能超过32
      	if((pcdata[6]%2)!= 0){flag = 1;db_adr_error_flag=1;}//且必须为偶数 
      	
      	if(flags==0) { flags = ISOFlagsSys&0xcf;}
      	else         { flags = ISOFlagsSys|0x10;}	//select_flag
      	flags |= 0x40; 		//option_flag  
      	
      	
      	ISOMode = ISOModeSys | 0x10;	//write
      	viccdata[0] = 7;
        viccdata[1] = flags;
        viccdata[2] = 0xa3;	//lock 2 block
        viccdata[3] = 0x07;	//ti tag
        viccdata[4] = pcdata[6];	//db_adr         	
        wr_crc_send();
        f_resp = sendISOCmd(); 
        CS_RAM_1;
   	}
   	else if(flags==1)	//带uid
   	{
      	if(pcdata[14]>32){ flag = 1;}//不能超过32
      	if((pcdata[14]%2)!= 0){flag = 1;db_adr_error_flag=1;}//且必须为偶数
      	flags = ISOFlagsSys;
      	flags |= 0x20;		//address_flag
    	flags |= 0x40;		//option_flag  
      	ISOMode = ISOModeSys | 0x10;	//write
      	viccdata[0] = 15;
        viccdata[1] = flags;
        viccdata[2] = 0xa3;	//lock 2 block
        viccdata[3] = 0x07;	//ti tag
        for(ii=4,jj=13;ii<12;ii++,jj--) { viccdata[ii] = pcdata[jj]; }//copy uid         	
      			
        viccdata[12] = pcdata[14];          			
        wr_crc_send(); 
        f_resp = sendISOCmd();   
        CS_RAM_1;
   	}
   	else { flag = 1;}
   
   	if( deviceAddr == pcdata[1] )   //本机执行
   	{
      	if(flag == 1)                      //块号参数超出标签允许值
      	{
      		if(db_adr_error_flag == 1)      		
      				host_command_0xb1_return(0xa2);	//even addr error 
      		else	host_command_0xb1_return(0x11);//parameter error
      	}
      	else
      	{
      		if(f_resp == 0){host_command_0xb1_return(0x01);}  // no tag		
        	else if(viccdata[1]!=0)
        	{
        		pcdata[0] = 8;
        		pcdata[1] = deviceAddr;
        		pcdata[2] = 0xb1;
        		pcdata[3] = 0x07;		//mfr
        		pcdata[4] = 0x95;             	//iso err 
        		pcdata[5] = viccdata[2]; 	//iso err code            			
        		wr_crc_resp();
        	}
         	else
         	{
            	pcdata[0] = 7;
            	pcdata[1] = deviceAddr;
            	pcdata[2] = 0xb1;
            	pcdata[3] = 0x07;		//mfr
            	pcdata[4] = OK;      		//OK 
            	wr_crc_resp();
         	}
      	}
   	}
}   

void readIsoModeFalg()
{
	if(pcdata[1] == deviceAddr)
	{		
		pcdata[0] = 8;
		pcdata[1] = deviceAddr;
		pcdata[2] = 0x88;
		pcdata[3] = OK;
		pcdata[4] = ISOModeSys;
		pcdata[5] = ISOFlagsSys;		 	
		wr_crc_resp();
	}
}
void testExternRam()
{
	uint i;
	if(pcdata[1] == deviceAddr)
	{
		CS_RAM_0;
		for(i=0;i<20;i++)
		{   
			feedWatchDog();
			*((uint *)(0xc000+i)) = i;
		}
		CS_RAM_1; 
		pcdata[0] = 26;
		pcdata[1] = deviceAddr;
		pcdata[2] = 0xaa;
		pcdata[3] = OK;
		CS_RAM_0;
		for(i=0;i<20;i++)
		{
			feedWatchDog();
			pcdata[4+i] = *((uint *)(0xc000+i));
		}
		CS_RAM_1; 
		wr_crc_resp();
	}
}
void ISO15693cmd_cust_pro(void)
{
  	swit

⌨️ 快捷键说明

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