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

📄 can_sja1000.lss

📁 开发环境为GCC,AVR单片机与SJA1000实现CAN通讯。
💻 LSS
📖 第 1 页 / 共 3 页
字号:
		return 1;          //写失败
 26a:	81 e0       	ldi	r24, 0x01	; 1
 26c:	8b 83       	std	Y+3, r24	; 0x03
 26e:	01 c0       	rjmp	.+2      	; 0x272 <BCAN_SET_OBJECT+0x52>
	}
	
	return 0; 
 270:	1b 82       	std	Y+3, r1	; 0x03
 272:	8b 81       	ldd	r24, Y+3	; 0x03
}
 274:	0f 90       	pop	r0
 276:	0f 90       	pop	r0
 278:	0f 90       	pop	r0
 27a:	cf 91       	pop	r28
 27c:	df 91       	pop	r29
 27e:	08 95       	ret

00000280 <BCAN_SET_BANDRATE>:

/**** 设置CAN控制器通讯波特率 ****/
unsigned char BCAN_SET_BANDRATE(unsigned char BCAN_BTR0,unsigned char BCAN_BTR1)
{
 280:	df 93       	push	r29
 282:	cf 93       	push	r28
 284:	00 d0       	rcall	.+0      	; 0x286 <BCAN_SET_BANDRATE+0x6>
 286:	0f 92       	push	r0
 288:	cd b7       	in	r28, 0x3d	; 61
 28a:	de b7       	in	r29, 0x3e	; 62
 28c:	89 83       	std	Y+1, r24	; 0x01
 28e:	6a 83       	std	Y+2, r22	; 0x02
	CANREG_WRITE(REG_BTR0, BCAN_BTR0);  
 290:	69 81       	ldd	r22, Y+1	; 0x01
 292:	86 e0       	ldi	r24, 0x06	; 6
 294:	9f e7       	ldi	r25, 0x7F	; 127
 296:	0e 94 90 00 	call	0x120	; 0x120 <CANREG_WRITE>
	if(CANREG_READ(REG_BTR0) != BCAN_BTR0)
 29a:	86 e0       	ldi	r24, 0x06	; 6
 29c:	9f e7       	ldi	r25, 0x7F	; 127
 29e:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 2a2:	98 2f       	mov	r25, r24
 2a4:	89 81       	ldd	r24, Y+1	; 0x01
 2a6:	98 17       	cp	r25, r24
 2a8:	19 f0       	breq	.+6      	; 0x2b0 <BCAN_SET_BANDRATE+0x30>
	{
		return 1;
 2aa:	81 e0       	ldi	r24, 0x01	; 1
 2ac:	8b 83       	std	Y+3, r24	; 0x03
 2ae:	11 c0       	rjmp	.+34     	; 0x2d2 <BCAN_SET_BANDRATE+0x52>
	}
	
	CANREG_WRITE(REG_BTR1, BCAN_BTR1); 
 2b0:	6a 81       	ldd	r22, Y+2	; 0x02
 2b2:	87 e0       	ldi	r24, 0x07	; 7
 2b4:	9f e7       	ldi	r25, 0x7F	; 127
 2b6:	0e 94 90 00 	call	0x120	; 0x120 <CANREG_WRITE>
	if(CANREG_READ(REG_BTR1) != BCAN_BTR1)
 2ba:	87 e0       	ldi	r24, 0x07	; 7
 2bc:	9f e7       	ldi	r25, 0x7F	; 127
 2be:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 2c2:	98 2f       	mov	r25, r24
 2c4:	8a 81       	ldd	r24, Y+2	; 0x02
 2c6:	98 17       	cp	r25, r24
 2c8:	19 f0       	breq	.+6      	; 0x2d0 <BCAN_SET_BANDRATE+0x50>
	{
		return 1;
 2ca:	81 e0       	ldi	r24, 0x01	; 1
 2cc:	8b 83       	std	Y+3, r24	; 0x03
 2ce:	01 c0       	rjmp	.+2      	; 0x2d2 <BCAN_SET_BANDRATE+0x52>
	}
	
	return 0;
 2d0:	1b 82       	std	Y+3, r1	; 0x03
 2d2:	8b 81       	ldd	r24, Y+3	; 0x03
}
 2d4:	0f 90       	pop	r0
 2d6:	0f 90       	pop	r0
 2d8:	0f 90       	pop	r0
 2da:	cf 91       	pop	r28
 2dc:	df 91       	pop	r29
 2de:	08 95       	ret

000002e0 <BCAN_SET_OUTCLK>:

/**** 设置CAN输出控制器OCR、时钟分频器CDR ****/
unsigned char BCAN_SET_OUTCLK(unsigned char Out_Control,unsigned char Clock_Out)
{
 2e0:	df 93       	push	r29
 2e2:	cf 93       	push	r28
 2e4:	00 d0       	rcall	.+0      	; 0x2e6 <BCAN_SET_OUTCLK+0x6>
 2e6:	0f 92       	push	r0
 2e8:	cd b7       	in	r28, 0x3d	; 61
 2ea:	de b7       	in	r29, 0x3e	; 62
 2ec:	89 83       	std	Y+1, r24	; 0x01
 2ee:	6a 83       	std	Y+2, r22	; 0x02
	CANREG_WRITE(REG_OCR, Out_Control);
 2f0:	69 81       	ldd	r22, Y+1	; 0x01
 2f2:	88 e0       	ldi	r24, 0x08	; 8
 2f4:	9f e7       	ldi	r25, 0x7F	; 127
 2f6:	0e 94 90 00 	call	0x120	; 0x120 <CANREG_WRITE>
	if(CANREG_READ(REG_OCR) != Out_Control)
 2fa:	88 e0       	ldi	r24, 0x08	; 8
 2fc:	9f e7       	ldi	r25, 0x7F	; 127
 2fe:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 302:	98 2f       	mov	r25, r24
 304:	89 81       	ldd	r24, Y+1	; 0x01
 306:	98 17       	cp	r25, r24
 308:	19 f0       	breq	.+6      	; 0x310 <BCAN_SET_OUTCLK+0x30>
	{
		return 1;
 30a:	81 e0       	ldi	r24, 0x01	; 1
 30c:	8b 83       	std	Y+3, r24	; 0x03
 30e:	11 c0       	rjmp	.+34     	; 0x332 <BCAN_SET_OUTCLK+0x52>
	}
	
	CANREG_WRITE(REG_CDR, Clock_Out);
 310:	6a 81       	ldd	r22, Y+2	; 0x02
 312:	8f e1       	ldi	r24, 0x1F	; 31
 314:	9f e7       	ldi	r25, 0x7F	; 127
 316:	0e 94 90 00 	call	0x120	; 0x120 <CANREG_WRITE>
	if(CANREG_READ(REG_CDR) != Clock_Out)
 31a:	8f e1       	ldi	r24, 0x1F	; 31
 31c:	9f e7       	ldi	r25, 0x7F	; 127
 31e:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 322:	98 2f       	mov	r25, r24
 324:	8a 81       	ldd	r24, Y+2	; 0x02
 326:	98 17       	cp	r25, r24
 328:	19 f0       	breq	.+6      	; 0x330 <BCAN_SET_OUTCLK+0x50>
	{
		return 1;
 32a:	81 e0       	ldi	r24, 0x01	; 1
 32c:	8b 83       	std	Y+3, r24	; 0x03
 32e:	01 c0       	rjmp	.+2      	; 0x332 <BCAN_SET_OUTCLK+0x52>
	}
	
	return 0;
 330:	1b 82       	std	Y+3, r1	; 0x03
 332:	8b 81       	ldd	r24, Y+3	; 0x03
}
 334:	0f 90       	pop	r0
 336:	0f 90       	pop	r0
 338:	0f 90       	pop	r0
 33a:	cf 91       	pop	r28
 33c:	df 91       	pop	r29
 33e:	08 95       	ret

00000340 <BCAN_DATA_SEND>:
/**** 数据发送至发送缓冲区 ****/
unsigned char BCAN_DATA_SEND(void)
{
 340:	df 93       	push	r29
 342:	cf 93       	push	r28
 344:	00 d0       	rcall	.+0      	; 0x346 <BCAN_DATA_SEND+0x6>
 346:	cd b7       	in	r28, 0x3d	; 61
 348:	de b7       	in	r29, 0x3e	; 62
	unsigned char i ;
	if((CANREG_READ(REG_STATUS) & 0x08) == 0)  //判断上次发送是否完成
 34a:	82 e0       	ldi	r24, 0x02	; 2
 34c:	9f e7       	ldi	r25, 0x7F	; 127
 34e:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 352:	88 2f       	mov	r24, r24
 354:	90 e0       	ldi	r25, 0x00	; 0
 356:	88 70       	andi	r24, 0x08	; 8
 358:	90 70       	andi	r25, 0x00	; 0
 35a:	00 97       	sbiw	r24, 0x00	; 0
 35c:	19 f4       	brne	.+6      	; 0x364 <BCAN_DATA_SEND+0x24>
    {
		return 1;
 35e:	81 e0       	ldi	r24, 0x01	; 1
 360:	8a 83       	std	Y+2, r24	; 0x02
 362:	53 c0       	rjmp	.+166    	; 0x40a <BCAN_DATA_SEND+0xca>
	}
	if((CANREG_READ(REG_STATUS) & 0x04) == 0)  //判断发送缓冲区是否锁定
 364:	82 e0       	ldi	r24, 0x02	; 2
 366:	9f e7       	ldi	r25, 0x7F	; 127
 368:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 36c:	88 2f       	mov	r24, r24
 36e:	90 e0       	ldi	r25, 0x00	; 0
 370:	84 70       	andi	r24, 0x04	; 4
 372:	90 70       	andi	r25, 0x00	; 0
 374:	00 97       	sbiw	r24, 0x00	; 0
 376:	19 f4       	brne	.+6      	; 0x37e <BCAN_DATA_SEND+0x3e>
	{
		return 1;
 378:	81 e0       	ldi	r24, 0x01	; 1
 37a:	8a 83       	std	Y+2, r24	; 0x02
 37c:	46 c0       	rjmp	.+140    	; 0x40a <BCAN_DATA_SEND+0xca>
	}	
    CANREG_WRITE(REG_TxBuffer1,Send_BUF.FrameID_H); //写ID码10~3位 
 37e:	80 91 02 01 	lds	r24, 0x0102
 382:	68 2f       	mov	r22, r24
 384:	8a e0       	ldi	r24, 0x0A	; 10
 386:	9f e7       	ldi	r25, 0x7F	; 127
 388:	0e 94 90 00 	call	0x120	; 0x120 <CANREG_WRITE>
	                                               //写ID码2~0,帧类型,发送数据长度
	CANREG_WRITE(REG_TxBuffer2,(Send_BUF.FrameID_L3<<5)|(Send_BUF.FrameKIND<<4)|(Send_BUF.FrameLENGTH));
 38c:	80 91 03 01 	lds	r24, 0x0103
 390:	88 2f       	mov	r24, r24
 392:	90 e0       	ldi	r25, 0x00	; 0
 394:	88 0f       	add	r24, r24
 396:	99 1f       	adc	r25, r25
 398:	82 95       	swap	r24
 39a:	92 95       	swap	r25
 39c:	90 7f       	andi	r25, 0xF0	; 240
 39e:	98 27       	eor	r25, r24
 3a0:	80 7f       	andi	r24, 0xF0	; 240
 3a2:	98 27       	eor	r25, r24
 3a4:	28 2f       	mov	r18, r24
 3a6:	80 91 04 01 	lds	r24, 0x0104
 3aa:	88 2f       	mov	r24, r24
 3ac:	90 e0       	ldi	r25, 0x00	; 0
 3ae:	82 95       	swap	r24
 3b0:	92 95       	swap	r25
 3b2:	90 7f       	andi	r25, 0xF0	; 240
 3b4:	98 27       	eor	r25, r24
 3b6:	80 7f       	andi	r24, 0xF0	; 240
 3b8:	98 27       	eor	r25, r24
 3ba:	92 2f       	mov	r25, r18
 3bc:	98 2b       	or	r25, r24
 3be:	80 91 05 01 	lds	r24, 0x0105
 3c2:	89 2b       	or	r24, r25
 3c4:	68 2f       	mov	r22, r24
 3c6:	8b e0       	ldi	r24, 0x0B	; 11
 3c8:	9f e7       	ldi	r25, 0x7F	; 127
 3ca:	0e 94 90 00 	call	0x120	; 0x120 <CANREG_WRITE>
	if(Send_BUF.FrameKIND ==0 )       //数据帧,写数据缓冲区
 3ce:	80 91 04 01 	lds	r24, 0x0104
 3d2:	88 23       	and	r24, r24
 3d4:	c9 f4       	brne	.+50     	; 0x408 <BCAN_DATA_SEND+0xc8>
	{
		for(i=0; i<Send_BUF.FrameLENGTH; i++)
 3d6:	19 82       	std	Y+1, r1	; 0x01
 3d8:	12 c0       	rjmp	.+36     	; 0x3fe <BCAN_DATA_SEND+0xbe>
		{
			CANREG_WRITE(REG_TxBuffer3+i,Send_BUF.Frame_Data[i]);
 3da:	89 81       	ldd	r24, Y+1	; 0x01
 3dc:	88 2f       	mov	r24, r24
 3de:	90 e0       	ldi	r25, 0x00	; 0
 3e0:	fc 01       	movw	r30, r24
 3e2:	ea 5f       	subi	r30, 0xFA	; 250
 3e4:	fe 4f       	sbci	r31, 0xFE	; 254
 3e6:	20 81       	ld	r18, Z
 3e8:	89 81       	ldd	r24, Y+1	; 0x01
 3ea:	88 2f       	mov	r24, r24
 3ec:	90 e0       	ldi	r25, 0x00	; 0
 3ee:	84 5f       	subi	r24, 0xF4	; 244
 3f0:	90 48       	sbci	r25, 0x80	; 128
 3f2:	62 2f       	mov	r22, r18
 3f4:	0e 94 90 00 	call	0x120	; 0x120 <CANREG_WRITE>
    CANREG_WRITE(REG_TxBuffer1,Send_BUF.FrameID_H); //写ID码10~3位 
	                                               //写ID码2~0,帧类型,发送数据长度
	CANREG_WRITE(REG_TxBuffer2,(Send_BUF.FrameID_L3<<5)|(Send_BUF.FrameKIND<<4)|(Send_BUF.FrameLENGTH));
	if(Send_BUF.FrameKIND ==0 )       //数据帧,写数据缓冲区
	{
		for(i=0; i<Send_BUF.FrameLENGTH; i++)
 3f8:	89 81       	ldd	r24, Y+1	; 0x01
 3fa:	8f 5f       	subi	r24, 0xFF	; 255
 3fc:	89 83       	std	Y+1, r24	; 0x01
 3fe:	90 91 05 01 	lds	r25, 0x0105
 402:	89 81       	ldd	r24, Y+1	; 0x01
 404:	89 17       	cp	r24, r25
 406:	48 f3       	brcs	.-46     	; 0x3da <BCAN_DATA_SEND+0x9a>
		{
			CANREG_WRITE(REG_TxBuffer3+i,Send_BUF.Frame_Data[i]);
		}
	}
	return 0;                 
 408:	1a 82       	std	Y+2, r1	; 0x02
 40a:	8a 81       	ldd	r24, Y+2	; 0x02
}
 40c:	0f 90       	pop	r0
 40e:	0f 90       	pop	r0
 410:	cf 91       	pop	r28
 412:	df 91       	pop	r29
 414:	08 95       	ret

00000416 <BCAN_DATA_RECEIVE>:

/****  从接受缓冲区接受数据  ****/
unsigned char BCAN_DATA_RECEIVE(void)
{
 416:	0f 93       	push	r16
 418:	1f 93       	push	r17
 41a:	df 93       	push	r29
 41c:	cf 93       	push	r28
 41e:	00 d0       	rcall	.+0      	; 0x420 <BCAN_DATA_RECEIVE+0xa>
 420:	cd b7       	in	r28, 0x3d	; 61
 422:	de b7       	in	r29, 0x3e	; 62
	unsigned char i;
	if((CANREG_READ(REG_STATUS) & 0x01) == 0)    //判断接受缓冲区是否有报文
 424:	82 e0       	ldi	r24, 0x02	; 2
 426:	9f e7       	ldi	r25, 0x7F	; 127
 428:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 42c:	88 2f       	mov	r24, r24
 42e:	90 e0       	ldi	r25, 0x00	; 0
 430:	81 70       	andi	r24, 0x01	; 1
 432:	90 70       	andi	r25, 0x00	; 0
 434:	00 97       	sbiw	r24, 0x00	; 0
 436:	19 f4       	brne	.+6      	; 0x43e <BCAN_DATA_RECEIVE+0x28>
	{
		return 1;
 438:	81 e0       	ldi	r24, 0x01	; 1
 43a:	8a 83       	std	Y+2, r24	; 0x02
 43c:	45 c0       	rjmp	.+138    	; 0x4c8 <BCAN_DATA_RECEIVE+0xb2>
	}
    Receive_BUF.FrameID_H   = CANREG_READ(REG_RxBuffer1);
 43e:	84 e1       	ldi	r24, 0x14	; 20
 440:	9f e7       	ldi	r25, 0x7F	; 127
 442:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 446:	80 93 1c 01 	sts	0x011C, r24
	Receive_BUF.FrameLENGTH = (CANREG_READ(REG_RxBuffer2))&0x0f;
 44a:	85 e1       	ldi	r24, 0x15	; 21
 44c:	9f e7       	ldi	r25, 0x7F	; 127
 44e:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 452:	8f 70       	andi	r24, 0x0F	; 15
 454:	80 93 1f 01 	sts	0x011F, r24
	Receive_BUF.FrameKIND   = (CANREG_READ(REG_RxBuffer2)&0x10)>>4;
 458:	85 e1       	ldi	r24, 0x15	; 21
 45a:	9f e7       	ldi	r25, 0x7F	; 127
 45c:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 460:	88 2f       	mov	r24, r24
 462:	90 e0       	ldi	r25, 0x00	; 0
 464:	80 71       	andi	r24, 0x10	; 16
 466:	90 70       	andi	r25, 0x00	; 0
 468:	95 95       	asr	r25
 46a:	87 95       	ror	r24
 46c:	95 95       	asr	r25
 46e:	87 95       	ror	r24
 470:	95 95       	asr	r25
 472:	87 95       	ror	r24
 474:	95 95       	asr	r25
 476:	87 95       	ror	r24
 478:	80 93 1e 01 	sts	0x011E, r24
	Receive_BUF.FrameID_L3 = (CANREG_READ(REG_RxBuffer2)&0xE0)>>5;
 47c:	85 e1       	ldi	r24, 0x15	; 21
 47e:	9f e7       	ldi	r25, 0x7F	; 127
 480:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 484:	82 95       	swap	r24
 486:	86 95       	lsr	r24
 488:	87 70       	andi	r24, 0x07	; 7
 48a:	80 93 1d 01 	sts	0x011D, r24
	if(Receive_BUF.FrameKIND == 0)
 48e:	80 91 1e 01 	lds	r24, 0x011E
 492:	88 23       	and	r24, r24
 494:	c1 f4       	brne	.+48     	; 0x4c6 <BCAN_DATA_RECEIVE+0xb0>
	{
		for(i=0;i<Receive_BUF.FrameLENGTH;i++)
 496:	19 82       	std	Y+1, r1	; 0x01
 498:	11 c0       	rjmp	.+34     	; 0x4bc <BCAN_DATA_RECEIVE+0xa6>
		{
			Receive_BUF.Frame_Data[i] = CANREG_READ(REG_RxBuffer3+i);
 49a:	89 81       	ldd	r24, Y+1	; 0x01
 49c:	08 2f       	mov	r16, r24
 49e:	10 e0       	ldi	r17, 0x00	; 0
 4a0:	89 81       	ldd	r24, Y+1	; 0x01
 4a2:	88 2f       	mov	r24, r24
 4a4:	90 e0       	ldi	r25, 0x00	; 0
 4a6:	8a 5e       	subi	r24, 0xEA	; 234
 4a8:	90 48       	sbci	r25, 0x80	; 128
 4aa:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 4ae:	f8 01       	movw	r30, r16
 4b0:	e0 5e       	subi	r30, 0xE0	; 224
 4b2:	fe 4f       	sbci	r31, 0xFE	; 254
 4b4:	80 83       	st	Z, r24
	Receive_BUF.FrameLENGTH = (CANREG_READ(REG_RxBuffer2))&0x0f;
	Receive_BUF.FrameKIND   = (CANREG_READ(REG_RxBuffer2)&0x10)>>4;
	Receive_BUF.FrameID_L3 = (CANREG_READ(REG_RxBuffer2)&0xE0)>>5;
	if(Receive_BUF.FrameKIND == 0)
	{
		for(i=0;i<Receive_BUF.FrameLENGTH;i++)
 4b6:	89 81       	ldd	r24, Y+1	; 0x01
 4b8:	8f 5f       	subi	r24, 0xFF	; 255
 4ba:	89 83       	std	Y+1, r24	; 0x01
 4bc:	90 91 1f 01 	lds	r25, 0x011F
 4c0:	89 81       	ldd	r24, Y+1	; 0x01
 4c2:	89 17       	cp	r24, r25
 4c4:	50 f3       	brcs	.-44     	; 0x49a <BCAN_DATA_RECEIVE+0x84>
		{
			Receive_BUF.Frame_Data[i] = CANREG_READ(REG_RxBuffer3+i);
		}
	}
	return 0;
 4c6:	1a 82       	std	Y+2, r1	; 0x02
 4c8:	8a 81       	ldd	r24, Y+2	; 0x02
}
 4ca:	0f 90       	pop	r0
 4cc:	0f 90       	pop	r0
 4ce:	cf 91       	pop	r28
 4d0:	df 91       	pop	r29
 4d2:	1f 91       	pop	r17
 4d4:	0f 91       	pop	r16
 4d6:	08 95       	ret

000004d8 <CanRcv_Prg>:

/**** 接受的CAN数据处理 ****/
void CanRcv_Prg(void)
{
 4d8:	df 93       	push	r29
 4da:	cf 93       	push	r28
 4dc:	0f 92       	push	r0

⌨️ 快捷键说明

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