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

📄 protocol.asm

📁 dsp tmslf2407a 汇编,c的原代码,包括i2c,scitimer,fir等的很多程序.
💻 ASM
📖 第 1 页 / 共 5 页
字号:

	.func	555
;>>>> 	void lock_mul_blk_pro(void)
;>>>> 	   	uchar flags,addr,n_b;
;>>>> 	   	uchar i,j,l;
******************************************************
* FUNCTION DEF : _lock_mul_blk_pro
******************************************************
_lock_mul_blk_pro:
	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,8
	LAR	AR0,*0+,AR2

	.sym	_flags,1,12,1,16
	.sym	_addr,2,12,1,16
	.sym	_n_b,3,12,1,16
	.sym	_i,4,12,1,16
	.sym	_j,5,12,1,16
	.sym	_l,6,12,1,16
	.sym	_flag,7,12,1,16
	.line	5
;>>>> 	   	uchar flag = 0; 
	LACK	0
	LARK	AR2,7
	MAR	*0+
	SACL	* 
	.line	7
;>>>> 	   	addr = pcdata[1];  
	SBRK	5
	BLKD	#_pcdata+1,*-
	.line	9
;>>>> 	   	flags = pcdata[4]&0x07;
	LACK	7
	LDPK	_pcdata+4
	AND	_pcdata+4
	SACL	* 
	.line	10
;>>>> 	   	if( (flags==0)||(flags==2) )	//不带uid
	LAC	* 
	BZ	LL19
	LAC	* 
	SUBK	2
	BNZ	L110
LL19:
	.line	12
;>>>> 	      	if(flags==0) { flags = ISOFlagsSys&0xcf;}
	LAC	* 
	BNZ	L111
	LACK	207
	LDPK	_ISOFlagsSys
	AND	_ISOFlagsSys
	SACL	* 
	B	L112
L111:
	.line	13
;>>>> 	      	else         { flags = ISOFlagsSys|0x10;}	//select_flag
	LACK	16
	LDPK	_ISOFlagsSys
	OR	_ISOFlagsSys
	SACL	* 
L112:
	.line	14
;>>>> 	      	flags |= 0x40;			//option_flag  
	ORK	64
	SACL	* 
	.line	16
;>>>> 	      	n_b = pcdata[6] ; 	//db_n
	ADRK	2
	BLKD	#_pcdata+6,* 
	.line	17
;>>>> 	      	if(pcdata[5] >63) { flag = 1;}  //db_adr ,首地址不能超过63
	LDPK	_pcdata+5
	ZALS	_pcdata+5
	SUBK	63
	BLEZ	L113
	LACK	1
	ADRK	4
	SACL	* 
L113:
	.line	18
;>>>> 	      	if(n_b > 32) { flag = 1;}   	//一次锁定的块数不能超过32
	LARK	AR2,3
	MAR	*0+
	ZALS	* 
	SUBK	32
	BLEZ	L114
	LACK	1
	ADRK	4
	SACL	* 
L114:
	.line	19
;>>>> 	      	if(flag == 0)
	LARK	AR2,7
	MAR	*0+
	LAC	* 
	BNZ	L115
	.line	21
;>>>> 	        	ISOMode = ISOModeSys | 0x10;	// write
	LACK	16
	LDPK	_ISOModeSys
	OR	_ISOModeSys
	LDPK	_ISOMode
	SACL	_ISOMode
	.line	22
;>>>> 	        	for(l=0;l<(n_b+1);l++)
	LACK	0
	MAR	*-
	SACL	* 
	SBRK	3
	ZALS	* 
	ADDK	1
	ANDK	0FFFFh
	ADRK	3
	SUBS	* 
	BLEZ	L117
	SBRK	5
L116:
	.line	24
;>>>> 	        		viccdata[0] = 6;
	LACK	6
	LDPK	_viccdata
	SACL	_viccdata
	.line	25
;>>>> 	        		viccdata[1] = flags;
	BLDD	* ,#_viccdata+1,AR1
	.line	26
;>>>> 	        		viccdata[2] = 0x22;
	LACK	34
	LDPK	_viccdata+2
	SACL	_viccdata+2
	.line	27
;>>>> 	        		viccdata[3] = pcdata[5];
	LDPK	_pcdata+5
	BLDD	_pcdata+5,#_viccdata+3
	.line	28
;>>>> 	        		wr_crc_send();                 			       			
	CALL	_wr_crc_send
	.line	29
;>>>> 	        		j = sendISOCmd();   
	CALL	_sendISOCmd
	MAR	* ,AR2
	LARK	AR2,5
	MAR	*0+
	SACL	* 
	.line	30
;>>>> 	        		CS_RAM_1;         			
	LACK	63487
	LDPK	_MCRC
	AND	_MCRC
	SACL	_MCRC
	LACK	2056
	LDPK	_PFDATDIR
	OR	_PFDATDIR
	SACL	_PFDATDIR
	.line	31
;>>>> 	        		if((j==0)||(viccdata[1]!=0))  {break;} //跳出循环并返回错误地址
	LAC	* 
	BZ	L117
	LDPK	_viccdata+1
	LAC	_viccdata+1
	BNZ	L117
	.line	32
;>>>> 	        		else { pcdata[5] ++ ; }
	LDPK	_pcdata+5
	LAC	_pcdata+5
	ADDK	1
	SACL	_pcdata+5
	.line	33
;>>>> 	        		mutiBlockWrDelay();
	CALL	_mutiBlockWrDelay,AR1
	.line	22
	MAR	* ,AR2
	LARK	AR2,6
	MAR	*0+
	LAC	* 
	ADDK	1
	SACL	* 
	SBRK	3
	ZALS	* 
	ADDK	1
	ANDK	0FFFFh
	ADRK	3
	SUBS	* 
	SBRK	5
	BGZ	L116
L117:
	.line	36
;>>>> 	        	if( deviceAddr == pcdata[1] )   //本机地址返回
	LDPK	_deviceAddr
	LAC	_deviceAddr
	LDPK	_pcdata+1
	SUB	_pcdata+1
	BNZ	L125
	.line	38
;>>>> 	            	if(j==0)                        //无返
	LARK	AR2,5
	MAR	*0+
	LAC	* 
	BNZ	L120
	.line	40
;>>>> 	            		pcdata[0] = 7;
	LACK	7
	LDPK	_pcdata
	SACL	_pcdata
	.line	41
;>>>> 	            		pcdata[1] = deviceAddr;
	LDPK	_deviceAddr
	BLDD	_deviceAddr,#_pcdata+1
	.line	42
;>>>> 	            		pcdata[2] = 0xb0;  
	LACK	176
	LDPK	_pcdata+2
	SACL	_pcdata+2
	.line	43
;>>>> 	            		pcdata[3] = 0x03;               //no response
	LACK	3
	LDPK	_pcdata+3
	SACL	_pcdata+3
	.line	44
;>>>> 	            		pcdata[4] = pcdata[5];
	LDPK	_pcdata+5
	BLDD	_pcdata+5,#_pcdata+4
	.line	45
;>>>> 	            		wr_crc_resp();
	CALL	_wr_crc_resp,AR1
	B	L125
L120:
	.line	47
;>>>> 	            	else if(viccdata[1]!=0)
	LDPK	_viccdata+1
	LAC	_viccdata+1
	BZ	L122
	.line	49
;>>>> 	            		pcdata[0] = 8;
	LACK	8
	LDPK	_pcdata
	SACL	_pcdata
	.line	50
;>>>> 	               		pcdata[1] = deviceAddr;
	LDPK	_deviceAddr
	BLDD	_deviceAddr,#_pcdata+1
	.line	51
;>>>> 	               		pcdata[2] = ISO_MANDATORY_CMD;
	LACK	176
	LDPK	_pcdata+2
	SACL	_pcdata+2
	.line	52
;>>>> 	               		pcdata[3] = ISO_ERR;             //iso err 0x95
	LACK	149
	LDPK	_pcdata+3
	SACL	_pcdata+3
	.line	53
;>>>> 	               		pcdata[4] = viccdata[2];         //iso err code
	LDPK	_viccdata+2
	BLDD	_viccdata+2,#_pcdata+4
	.line	54
;>>>> 	               		pcdata[5] = pcdata[5];       //err block addr
	LDPK	_pcdata+5
	BLDD	_pcdata+5,#_pcdata+5
	.line	55
;>>>> 	               		wr_crc_resp();
;>>>> 	            	else
	CALL	_wr_crc_resp,AR1
	B	L125
L122:
	.line	59
;>>>> 	               		pcdata[0] = 6;
	LACK	6
	LDPK	_pcdata
	SACL	_pcdata
	.line	60
;>>>> 	               		pcdata[1] = deviceAddr;
	LDPK	_deviceAddr
	BLDD	_deviceAddr,#_pcdata+1
	.line	61
;>>>> 	               		pcdata[2] = ISO_MANDATORY_CMD;
	LACK	176
	LDPK	_pcdata+2
	SACL	_pcdata+2
	.line	62
;>>>> 	               		pcdata[3] = OK;                   // OK 
	LACK	0
	LDPK	_pcdata+3
	SACL	_pcdata+3
	.line	63
;>>>> 	               		wr_crc_resp();
;>>>> 	      	else
	CALL	_wr_crc_resp,AR1
	B	L125
L115:
	.line	69
;>>>> 	        	if( deviceAddr == pcdata[1])   ////本机地址返回 块数和地址错误        	
	LDPK	_deviceAddr
	LAC	_deviceAddr
	LDPK	_pcdata+1
	SUB	_pcdata+1
	BNZ	L125
	.line	70
;>>>> 	        		resp_para_err();     
	CALL	_resp_para_err,AR1
	B	L125
L110:
	.line	73
;>>>> 	   	else if(flags==1)	//带uid模式
	LAC	* 
	SUBK	1
	BNZ	L126
	.line	75
;>>>> 			n_b = pcdata[14];               //块长度 
	ADRK	2
	BLKD	#_pcdata+14,* 
	.line	76
;>>>> 	      	flags = ISOFlagsSys|0x20; 	// address_flag
	LACK	32
	LDPK	_ISOFlagsSys
	OR	_ISOFlagsSys
	SBRK	2
	SACL	* 
	.line	77
;>>>> 	      	flags |= 0x40;			// option_flag      		
	ORK	64
	SACL	* 
	.line	79
;>>>> 	      	if(pcdata[13] >63) { flag = 1;}   //首地址不能超过63
	LDPK	_pcdata+13
	ZALS	_pcdata+13
	SUBK	63
	BLEZ	L127
	LACK	1
	ADRK	6
	SACL	* 
L127:
	.line	80
;>>>> 	      	if(n_b >32) { flag = 1; }   //一次锁定的块数不能超过32
	LARK	AR2,3
	MAR	*0+
	ZALS	* 
	SUBK	32
	BLEZ	L128
	LACK	1
	ADRK	4
	SACL	* 
L128:
	.line	81
;>>>> 	      	if(flag == 0)
	LARK	AR2,7
	MAR	*0+
	LAC	* 
	BNZ	L129
	.line	83
;>>>> 	        	for(l=0;l<(n_b+1);l++)
	LACK	0
	MAR	*-
	SACL	* 
	SBRK	3
	ZALS	* 
	ADDK	1
	ANDK	0FFFFh
	ADRK	3
	SUBS	* 
	BLEZ	L131
	SBRK	5
L130:
	.line	85
;>>>> 	        		viccdata[0] = 14;
	LACK	14
	LDPK	_viccdata
	SACL	_viccdata
	.line	86
;>>>> 	            	viccdata[1] = flags;
	BLDD	* ,#_viccdata+1
	.line	87
;>>>> 	            	viccdata[2] = 0x22;
	LACK	34
	LDPK	_viccdata+2
	SACL	_viccdata+2
	.line	88
;>>>> 	            	ISOMode = ISOModeSys | 0x10;	// write            			
	LACK	16
	LDPK	_ISOModeSys
	OR	_ISOModeSys
	LDPK	_ISOMode
	SACL	_ISOMode
	.line	89
;>>>> 	            	for(i=3,j=12;i<11;i++,j--) { viccdata[i] = pcdata[j];}
	LACK	3
	ADRK	3
	SACL	*+
	LACK	12
	SACL	*-
	ZALS	* 
	SUBK	11
	BGEZ	L133
	MAR	*+
L132:
	LAC	*-,AR0
	ADLK	_pcdata+0,0
	SACL	* 
	LAR	AR3,* ,AR2
	LAC	* ,AR0
	ADLK	_viccdata+0,0
	SACL	* 
	LAR	AR4,* ,AR3
	LAC	* ,AR4
	SACL	* ,AR2
	LAC	* 
	ADDK	1
	SACL	*+
	LAC	* 
	SUBK	1
	SACL	*-
	ZALS	*+
	SUBK	11
	BLZ	L132
L133:
	.line	90
;>>>> 	            	viccdata[11] = pcdata[13];	//block number
	LDPK	_pcdata+13
	BLDD	_pcdata+13,#_viccdata+11
	.line	91
;>>>> 	            	wr_crc_send();             			       			
	CALL	_wr_crc_send,AR1
	.line	92
;>>>> 	            	j = sendISOCmd();     
	CALL	_sendISOCmd
	MAR	* ,AR2
	LARK	AR2,5
	MAR	*0+
	SACL	* 
	.line	93
;>>>> 	            	CS_RAM_1;       			
	LACK	63487
	LDPK	_MCRC
	AND	_MCRC
	SACL	_MCRC
	LACK	2056
	LDPK	_PFDATDIR
	OR	_PFDATDIR
	SACL	_PFDATDIR
	.line	94
;>>>> 	            	if((j==0)||(viccdata[1]!=0))  {break;} //跳出循环并返回错误地址/
	LAC	* 
	BZ	L131
	LDPK	_viccdata+1
	LAC	_viccdata+1
	BNZ	L131
	.line	95
;>>>> 	            	else { pcdata[13] ++ ; }            			
	LDPK	_pcdata+13
	LAC	_pcdata+13
	ADDK	1
	SACL	_pcdata+13
	.line	83
	MAR	*+
	LAC	* 
	ADDK	1
	SACL	* 
	SBRK	3
	ZALS	* 
	ADDK	1
	ANDK	0FFFFh
	ADRK	3
	SUBS	* 
	SBRK	5
	BGZ	L130
L131:
	.line	98
;>>>> 				if( deviceAddr == pcdata[1] )   //本机执行返回
	LDPK	_deviceAddr
	LAC	_deviceAddr
	LDPK	_pcdata+1
	SUB	_pcdata+1
	BNZ	L125
	.line	100
;>>>> 		        	if(j==0)                        //无返
	LARK	AR2,5
	MAR	*0+
	LAC	* 
	BNZ	L136
	.line	102
;>>>> 		            	pcdata[0] = 7;
	LACK	7
	LDPK	_pcdata
	SACL	_pcdata
	.line	103
;>>>> 		            	pcdata[1] = deviceAddr;
	LDPK	_deviceAddr
	BLDD	_deviceAddr,#_pcdata+1
	.line	104
;>>>> 		            	pcdata[2] = ISO_MANDATORY_CMD;  
	LACK	176
	LDPK	_pcdata+2
	SACL	_pcdata+2
	.line	105
;>>>> 		            	pcdata[3] = 0x03;               //no response
	LACK	3
	LDPK	_pcdata+3
	SACL	_pcdata+3
	.line	106
;>>>> 		            	pcdata[4] = pcdata[13];
	LDPK	_pcdata+13
	BLDD	_pcdata+13,#_pcdata+4
	.line	107
;>>>> 		            	wr_crc_resp();
	CALL	_wr_crc_resp,AR1
	B	L125
L136:
	.line	109
;>>>> 		            else if(viccdata[1]!=0)
	LDPK	_viccdata+1
	LAC	_viccdata+1
	BZ	L138
	.line	111
;>>>> 		            	pcdata[0] = 8;
	LACK	8
	LDPK	_pcdata
	SACL	_pcdata
	.line	112
;>>>> 		            	pcdata[1] = deviceAddr;
	LDPK	_deviceAddr
	BLDD	_deviceAddr,#_pcdata+1
	.line	113
;>>>> 		            	pcdata[2] = ISO_MANDATORY_CMD;
	LACK	176
	LDPK	_pcdata+2
	SACL	_pcdata+2
	.line	114
;>>>> 		            	pcdata[3] = ISO_ERR;             //iso err 
	LACK	149
	LDPK	_pcdata+3
	SACL	_pcdata+3
	.line	115
;>>>> 		            	pcdata[4] = viccdata[2];         //iso err code
	LDPK	_viccdata+2
	BLDD	_viccdata+2,#_pcdata+4
	.line	116
;>>>> 		            	pcdata[5] = pcdata[13];      //err block addr
	LDPK	_pcdata+13
	BLDD	_pcdata+13,#_pcdata+5
	.line	117
;>>>> 		            	wr_crc_resp();
;>>>> 		            else
	CALL	_wr_crc_resp,AR1
	B	L125
L138:
	.line	121
;>>>> 		            	pcdata[0] = 6;
	LACK	6
	LDPK	_pcdata
	SACL	_pcdata
	.line	122
;>>>> 		               	pcdata[1] = deviceAddr;
	LDPK	_deviceAddr
	BLDD	_deviceAddr,#_pcdata+1
	.line	123
;>>>> 		               	pcdata[2] = ISO_MANDATORY_CMD;
	LACK	176
	LDPK	_pcdata+2
	SACL	_pcdata+2
	.line	124
;>>>> 		               	pcdata[3] = OK;                   // OK 
	LACK	0
	LDPK	_pcdata+3
	SACL	_pcdata+3
	.line	125
;>>>> 		               	wr_crc_resp();
;>>>> 		    else
	CALL	_wr_crc_resp,AR1
	B	L125
L129:
	.line	131
;>>>> 		    	if( deviceAddr == pcdata[1] )   //块数和地址错误
	LDPK	_deviceAddr
	LAC	_deviceAddr
	LDPK	_pcdata+1
	SUB	_pcdata+1
	BNZ	L125
	.line	132
;>>>> 		        	resp_para_err();
;>>>> 	   	else	//mode错误
	CALL	_resp_para_err,AR1
	B	L125
L126:
	.line	137
;>>>> 	   		if( deviceAddr == pcdata[1] )
	LDPK	_deviceAddr
	LAC	_deviceAddr
	LDPK	_pcdata+1
	SUB	_pcdata+1
	BNZ	L125
	.line	138
;>>>> 	       		resp_para_err();
	CALL	_resp_para_err,AR1
L125:
EPI0_13:
	.line	140
	MAR	* ,AR1
	SBRK	9
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	694,000000000H,8

	.sym	_rd_mul_blk_pro,_rd_mul_blk_pro,32,2,0
	.globl	_rd_mul_blk_pro

	.func	696
;>>>> 	void rd_mul_blk_pro(void)  
;>>>> 	   	uchar flags,len,n_b,addr;
;>>>> 	   	uchar i,j,k;
******************************************************
* FUNCTION DEF : _rd_mul_blk_pro
******************************************************
_rd_mul_blk_pro:
	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,9
	LAR	AR0,*0+,AR2

	.sym	_flags,1,12,1,16
	.sym	_len,2,12,1,16
	.sym	_n_b,3,12,1,16
	.sym	_addr,4,12,1,16
	.sym	_i,5,12,1,16
	.sym	_j,6,12,1,16
	.sym	_k,7,12,1,16
	.sym	_flag,8,12,1,16
	.line	5
;>>>> 	   	uchar flag = 0; 
	LACK	0
	LARK	AR2,8
	MAR	*0+
	SACL	* 
	.line	7
;>>>> 	   	addr = pcdata[1];
	SBRK	4
	BLKD	#_pcdata+1,* 
	.line	8
;>>>> 	   	flags = pcdata[4]&0x07;
	LACK	7
	LDPK	_pcdata+4
	AND	_pcdata+4
	SBRK	3
	SACL	* 
	.line	9
;>>>> 	   	if( (flags==0)||(flags==2) )	//不带uid
	LAC	* 
	BZ	LL24
	LAC	* 
	SUBK	2
	BNZ	L142
LL24:
	.line	11
;>>>> 	      	if(pcdata[5] >63) { flag = 1;} 		// 块地址不超过64
	LDPK	_pcdata+5
	ZALS	_pcdata+5
	SUBK	63
	BLEZ	L143
	LACK	1
	ADRK	7
	SACL	* 
L143:
	.line	12
;>>>> 	      	if(pcdata[6] >32) { flag = 1;}       	// 最多一次读取32个块
	LDPK	_pcdata+6
	ZALS	_pcdata+6
	SUBK	32
	BLEZ	L144
	LACK	1
	LARK	AR2,8
	MAR	*0+
	SACL	* 
L144:
	.line	13
;>>>> 	      	if(flag == 0)
	LARK	AR2,8
	MAR	*0+
	LAC	* 
	BNZ	L149
	.line	15
;>>>> 	        	n_b = pcdata[6];    //块长度        	
	SBRK	5
	BLKD	#_pcdata+6,* 
	.line	16
;>>>> 	        	if(flags==0) { flags = ISOFlagsSys&0xcf;}
	SBRK	2
	LAC	* 
	BNZ	L146
	LACK	207
	LDPK	_ISOFlagsSys
	AND	_ISOFlagsSys
	SACL	* 
	B	L147
L146:
	.line	17
;>>>> 	      		else         { flags = ISOFlagsSys|0x10;}	//select_flag
	LACK	16
	LDPK	_ISOFlagsSys
	OR	_ISOFlagsSys
	SACL	* 
L147:
	.line	18
;>>>> 	      		if((ISOModeSys & 0x04) == 0x04) { flags |= 0x40; }	//option_flag  	
	LACK	4
	LDPK	_ISOModeSys
	AND	_ISOModeSys
	SUBK	4
	BNZ	L148
	LACK	64
	OR	* 
	SACL	* 
L148:
	.line	19
;>>>> 	        	viccdata[0] = 7;
	LACK	7
	LDPK	_viccdata
	SACL	_viccdata
	.line	20
;>>>> 	        	viccdata[1] = flags;
	BLDD

⌨️ 快捷键说明

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