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

📄 can.s

📁 can tongxunCAN128的底层驱动
💻 S
📖 第 1 页 / 共 3 页
字号:
;       RC_CANSI -> y+208
;      CAN_REMOb -> y+180
;            RCF -> R10,R11
;          tempp -> R14,R15
;             nn -> R14
;             tt -> y+207
;            msg -> y+0
;              i -> R12
;        nb_data -> R10
	.even
_can_ReceiveData::
	xcall push_lset
	xcall push_gset5
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,22  ; offset = 211
	.dbline -1
	.dbline 219
;     can_tx(tx_msg);
;   }  
; }
; 
; 
; /*******************************************************************
; CAN receive interrupt service routine (mailbox i)
; *******************************************************************/
; #pragma interrupt_handler can_ReceiveData:19
; void can_ReceiveData (void)             //receive interrupt 
; {Uchar RCFlag;
	.dbline 221
; 	unsigned char nb_data;
; 	unsigned char temp = CANPAGE;           //save CANPAGE
	lds R2,237
	movw R30,R28
	subi R30,46  ; addi 210
	sbci R31,255
	std z+0,R2
	.dbline 222
; 	unsigned char i,tt=0,CAN_REMOb[15],nn;
	clr R0
	movw R30,R28
	subi R30,49  ; addi 207
	sbci R31,255
	std z+0,R0
	.dbline 229
; 	unsigned int RC_CANSI,RCtemp1,RCtemp2,tempp,RCF;
; 	VCI_CAN_OBJ msg[15];
; 
;     //VCI_CAN_OBJ CanTkfrm;
; 
; 	
; if(CANSTMOB & (1<<TXOK))
	lds R24,238
	andi R24,64
	breq L62
	.dbline 230
;  { 
	.dbline 231
;    CANSTMOB &= ~(1<<TXOK);
	lds R24,238
	andi R24,191
	sts 238,R24
	.dbline 232
;    if(can_tx_count)
	lds R2,_can_tx_count
	tst R2
	brne X4
	xjmp L63
X4:
	.dbline 233
;      {
	.dbline 234
; 	   --can_tx_count;
	mov R24,R2
	subi R24,1
	sts _can_tx_count,R24
	.dbline 235
; 	   can_tx(tx_msg_buff[can_sendingP]);
	lds R2,_can_sendingP
	ldi R24,12
	mul R24,R2
	movw R2,R0
	ldi R24,<_tx_msg_buff
	ldi R25,>_tx_msg_buff
	add R2,R24
	adc R3,R25
	movw R24,R28
	subi R24,61  ; offset = 195
	sbci R25,255
	ldi R16,12
	ldi R17,0
	st -y,R25
	st -y,R24
	st -y,R3
	st -y,R2
	xcall asgnblk
	movw R16,R28
	subi R16,61  ; offset = 195
	sbci R17,255
	xcall _can_tx
	.dbline 236
; 	   if(++can_sendingP==can_TX_BUFFER_SIZE) can_sendingP=0;
	lds R24,_can_sendingP
	subi R24,255    ; addi 1
	mov R2,R24
	sts _can_sendingP,R2
	cpi R24,8
	breq X5
	xjmp L63
X5:
	.dbline 236
	clr R2
	sts _can_sendingP,R2
	.dbline 237
; 	 }
	.dbline 238
;  }
	xjmp L63
L62:
	.dbline 240
; else 
;  {	 
	.dbline 241
; 	RCtemp2=CANSIT2;
	lds R10,224
	clr R11
	.dbline 242
; 	RCtemp1=CANSIT1;
	lds R12,225
	clr R13
	.dbline 243
; 	CANSTMOB &= ~(1<<RXOK);
	lds R24,238
	andi R24,223
	sts 238,R24
	.dbline 244
; 	RC_CANSI=(RCtemp1<<8)|RCtemp2;
	movw R2,R12
	mov R3,R2
	clr R2
	or R2,R10
	or R3,R11
	movw R30,R28
	subi R30,48  ; addi 208
	sbci R31,255
	std z+1,R3
	std z+0,R2
	.dbline 245
;     for(i=0;i<15;i++)
	clr R12
	xjmp L71
L68:
	.dbline 246
; 	 {
	.dbline 247
; 	  tempp=(1<<i);
	mov R18,R12
	clr R19
	ldi R16,1
	ldi R17,0
	xcall lsl16
	movw R14,R16
	.dbline 248
; 	  RCF=(RC_CANSI&tempp);
	movw R30,R28
	subi R30,48  ; addi 208
	sbci R31,255
	ldd R10,z+0
	ldd R11,z+1
	and R10,R16
	and R11,R17
	.dbline 249
; 	  if(RCF!=0)
	tst R10
	brne X3
	tst R11
	breq L72
X3:
	.dbline 250
; 	    {
	.dbline 251
; 		 if(i==10)
	mov R24,R12
	cpi R24,10
	brne L74
	.dbline 252
; 		   NOP();
	nop
L74:
	.dbline 253
; 		 CAN_REMOb[tt]=i;
	movw R24,R28
	subi R24,76  ; offset = 180
	sbci R25,255
	movw R26,R28
	subi R26,49  ; addi 207
	sbci R27,255
	ld R30,x
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R12
	.dbline 254
; 		 tt++;
	movw R30,R28
	subi R30,49  ; addi 207
	sbci R31,255
	ldd R0,z+0
	inc R0
	movw R30,R28
	subi R30,49  ; addi 207
	sbci R31,255
	std z+0,R0
	.dbline 255
; 		 }
L72:
	.dbline 256
L69:
	.dbline 245
	inc R12
L71:
	.dbline 245
	mov R24,R12
	cpi R24,15
	brlo L68
	.dbline 275
; 	 }
; 	  
;    /* for(i=0;i<tt;i++)
; 	{
; 	 CANPAGE = (CAN_REMOb[i]<<4);
; 	 CANSTMOB &= ~(1<<RXOK);
; 	 for (nb_data = 0; nb_data <(CANCDMOB&DLC_MSK); nb_data++)  
; 	  {
; 	   msg[i].Data[nb_data]=CANMSG;
; 	  }
; 	   msg[i].ID = 0;
;        msg[i].ID |= ((unsigned long) CANIDT1<<24);    //get identifier
;        msg[i].ID |= ((unsigned long) CANIDT2<<16);
;        msg[i].ID |= ((unsigned long) CANIDT3<<8);
;        msg[i].ID |= (CANIDT4&0xF8);
;        msg[i].ID >>= 3;
; 	   CANCDMOB = (2<<CONMOB) | (1<<IDE);
; 	 }*/
; 	 
; 	 for(i=0;i<tt;i++)
	clr R12
	xjmp L79
L76:
	.dbline 276
; 	 {
	.dbline 277
; 	 CANPAGE = (CAN_REMOb[i]<<4);
	movw R24,R28
	subi R24,76  ; offset = 180
	sbci R25,255
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	andi R24,#0x0F
	swap R24
	sts 237,R24
	.dbline 278
; 	 CANSTMOB &= ~(1<<RXOK);
	lds R24,238
	andi R24,223
	sts 238,R24
	.dbline 279
; 	 for (nb_data = 0; nb_data <(CANCDMOB&DLC_MSK); nb_data++)  
	clr R10
	xjmp L83
L80:
	.dbline 280
	.dbline 281
	ldi R24,12
	mul R24,R12
	movw R2,R0
	movw R24,R28
	adiw R24,4
	add R2,R24
	adc R3,R25
	mov R30,R10
	clr R31
	add R30,R2
	adc R31,R3
	lds R2,250
	std z+0,R2
	.dbline 282
L81:
	.dbline 279
	inc R10
L83:
	.dbline 279
	lds R24,239
	andi R24,15
	cp R10,R24
	brlo L80
	.dbline 283
	ldi R24,12
	mul R24,R12
	movw R30,R0
	movw R24,R28
	add R30,R24
	adc R31,R25
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	.dbline 284
	ldi R24,12
	mul R24,R12
	movw R2,R0
	movw R24,R28
	add R2,R24
	adc R3,R25
	ldi R24,24
	ldi R25,0
	lds R16,243
	clr R17
	clr R18
	clr R19
	st -y,R24
	xcall lsl32
	movw R30,R2
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	or R4,R16
	or R5,R17
	or R6,R18
	or R7,R19
	std z+0,R4
	std z+1,R5
	std z+2,R6
	std z+3,R7
	.dbline 285
	ldi R24,12
	mul R24,R12
	movw R2,R0
	movw R24,R28
	add R2,R24
	adc R3,R25
	lds R4,242
	clr R5
	clr R6
	clr R7
	movw R6,R4
	clr R4
	clr R5
	movw R30,R2
	ldd R20,z+0
	ldd R21,z+1
	ldd R22,z+2
	ldd R23,z+3
	or R20,R4
	or R21,R5
	or R22,R6
	or R23,R7
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	.dbline 286
	ldi R24,12
	mul R24,R12
	movw R2,R0
	movw R24,R28
	add R2,R24
	adc R3,R25
	ldi R24,8
	ldi R25,0
	lds R16,241
	clr R17
	clr R18
	clr R19
	st -y,R24
	xcall lsl32
	movw R30,R2
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	or R4,R16
	or R5,R17
	or R6,R18
	or R7,R19
	std z+0,R4
	std z+1,R5
	std z+2,R6
	std z+3,R7
	.dbline 287
	ldi R24,12
	mul R24,R12
	movw R2,R0
	movw R24,R28
	add R2,R24
	adc R3,R25
	lds R24,240
	clr R25
	andi R24,248
	andi R25,0
	movw R4,R24
	clr R6
	sbrc R5,7
	com R6
	clr R7
	sbrc R6,7
	com R7
	movw R30,R2
	ldd R20,z+0
	ldd R21,z+1
	ldd R22,z+2
	ldd R23,z+3
	or R20,R4
	or R21,R5
	or R22,R6
	or R23,R7
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	.dbline 288
	ldi R24,12
	mul R24,R12
	movw R2,R0
	movw R24,R28
	add R2,R24
	adc R3,R25
	ldi R24,3
	ldi R25,0
	movw R30,R2
	ldd R16,z+0
	ldd R17,z+1
	ldd R18,z+2
	ldd R19,z+3
	st -y,R24
	xcall asr32
	movw R30,R2
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 289
	ldi R24,144
	sts 239,R24
	.dbline 290
L77:
	.dbline 275
	inc R12
L79:
	.dbline 275
	movw R30,R28
	subi R30,49  ; addi 207
	sbci R31,255
	ldd R0,z+0
	cp R12,R0
	brsh X6
	xjmp L76
X6:
	.dbline 292
; 	   {
; 	    msg[i].Data[nb_data]=CANMSG;
; 	   }
; 	   msg[i].ID = 0;
;        msg[i].ID |= ((unsigned long) CANIDT1<<24);    //get identifier
;        msg[i].ID |= ((unsigned long) CANIDT2<<16);
;        msg[i].ID |= ((unsigned long) CANIDT3<<8);
;        msg[i].ID |= (CANIDT4&0xF8);
;        msg[i].ID >>= 3;
; 	   CANCDMOB = (2<<CONMOB) | (1<<IDE);
; 	 }
; 	 
; 	 for(nn=0;nn<tt;nn++)
	clr R14
	xjmp L88
L85:
	.dbline 293
	.dbline 299
L86:
	.dbline 292
	inc R14
L88:
	.dbline 292
	movw R30,R28
	subi R30,49  ; addi 207
	sbci R31,255
	ldd R0,z+0
	cp R14,R0
	brlo L85
	.dbline 300
; 	 {
; /*****************************************************
; *          用户程序
; *      举例: msg[nn].ID 是ID 号
;              msg[nn].date[0]~msg[nn].date[8] 是数据
; ********************************************************/
; 	 } 
;    }
L63:
	.dbline 301
;    CANPAGE = temp;                 //restore CANPAGE
	movw R30,R28
	subi R30,46  ; addi 210
	sbci R31,255
	ldd R0,z+0
	sts 237,R0
	.dbline -2
L61:
	adiw R28,63
	adiw R28,63
	adiw R28,63
	adiw R28,22  ; offset = 211
	xcall pop_gset5
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbsym l RCFlag 1 c
	.dbsym r RCtemp2 10 i
	.dbsym r RCtemp1 12 i
	.dbsym l temp 210 c
	.dbsym l RC_CANSI 208 i
	.dbsym l CAN_REMOb 180 A[15:15]c
	.dbsym r RCF 10 i
	.dbsym r tempp 14 i
	.dbsym r nn 14 c
	.dbsym l tt 207 c
	.dbsym l msg 0 A[180:15]S[_VCI_CAN_OBJ]
	.dbsym r i 12 c
	.dbsym r nb_data 10 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\测量模块\16MCan\can.c
_can_tx_count::
	.blkb 1
	.dbsym e can_tx_count _can_tx_count c
_can_willsendP::
	.blkb 1
	.dbsym e can_willsendP _can_willsendP c
_can_sendingP::
	.blkb 1
	.dbsym e can_sendingP _can_sendingP c
_tx_msg_buff::
	.blkb 96
	.dbsym e tx_msg_buff _tx_msg_buff A[96:8]S[_VCI_CAN_OBJ]
_counterTemp::
	.blkb 1
	.dbsym e counterTemp _counterTemp c
_canbaud::
	.blkb 1
	.dbsym e canbaud _canbaud c

⌨️ 快捷键说明

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