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

📄 can_sja1000.lss

📁 开发环境为GCC,AVR单片机与SJA1000实现CAN通讯。
💻 LSS
📖 第 1 页 / 共 3 页
字号:

CAN_SJA1000.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000730  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .bss          00000028  00800100  00000730  000007a4  2**0
                  ALLOC
  2 .debug_aranges 00000020  00000000  00000000  000007a4  2**0
                  CONTENTS, READONLY, DEBUGGING
  3 .debug_pubnames 00000170  00000000  00000000  000007c4  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_info   00000469  00000000  00000000  00000934  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_abbrev 0000018d  00000000  00000000  00000d9d  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_line   000005ac  00000000  00000000  00000f2a  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_frame  00000100  00000000  00000000  000014d8  2**2
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_str    0000024b  00000000  00000000  000015d8  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 46 00 	jmp	0x8c	; 0x8c <__ctors_end>
   4:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
   8:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
   c:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  10:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  14:	0c 94 7e 03 	jmp	0x6fc	; 0x6fc <__vector_5>
  18:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  1c:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  20:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  24:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  28:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  2c:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  30:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  34:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  38:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  3c:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  40:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  44:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  48:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  4c:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  50:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  54:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  58:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  5c:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  60:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  64:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  68:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  6c:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  70:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  74:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  78:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  7c:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  80:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  84:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>
  88:	0c 94 63 00 	jmp	0xc6	; 0xc6 <__bad_interrupt>

0000008c <__ctors_end>:
  8c:	11 24       	eor	r1, r1
  8e:	1f be       	out	0x3f, r1	; 63
  90:	cf ef       	ldi	r28, 0xFF	; 255
  92:	d0 e1       	ldi	r29, 0x10	; 16
  94:	de bf       	out	0x3e, r29	; 62
  96:	cd bf       	out	0x3d, r28	; 61

00000098 <__do_copy_data>:
  98:	11 e0       	ldi	r17, 0x01	; 1
  9a:	a0 e0       	ldi	r26, 0x00	; 0
  9c:	b1 e0       	ldi	r27, 0x01	; 1
  9e:	e0 e3       	ldi	r30, 0x30	; 48
  a0:	f7 e0       	ldi	r31, 0x07	; 7
  a2:	02 c0       	rjmp	.+4      	; 0xa8 <.do_copy_data_start>

000000a4 <.do_copy_data_loop>:
  a4:	05 90       	lpm	r0, Z+
  a6:	0d 92       	st	X+, r0

000000a8 <.do_copy_data_start>:
  a8:	a0 30       	cpi	r26, 0x00	; 0
  aa:	b1 07       	cpc	r27, r17
  ac:	d9 f7       	brne	.-10     	; 0xa4 <.do_copy_data_loop>

000000ae <__do_clear_bss>:
  ae:	11 e0       	ldi	r17, 0x01	; 1
  b0:	a0 e0       	ldi	r26, 0x00	; 0
  b2:	b1 e0       	ldi	r27, 0x01	; 1
  b4:	01 c0       	rjmp	.+2      	; 0xb8 <.do_clear_bss_start>

000000b6 <.do_clear_bss_loop>:
  b6:	1d 92       	st	X+, r1

000000b8 <.do_clear_bss_start>:
  b8:	a8 32       	cpi	r26, 0x28	; 40
  ba:	b1 07       	cpc	r27, r17
  bc:	e1 f7       	brne	.-8      	; 0xb6 <.do_clear_bss_loop>
  be:	0e 94 1e 03 	call	0x63c	; 0x63c <main>
  c2:	0c 94 96 03 	jmp	0x72c	; 0x72c <_exit>

000000c6 <__bad_interrupt>:
  c6:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>

000000ca <delayMs>:
}BCAN_FRAME,Receive_BUF,Send_BUF;


/**** 延时函数 ****/
void delayMs(unsigned int t)
{
  ca:	df 93       	push	r29
  cc:	cf 93       	push	r28
  ce:	00 d0       	rcall	.+0      	; 0xd0 <delayMs+0x6>
  d0:	00 d0       	rcall	.+0      	; 0xd2 <delayMs+0x8>
  d2:	00 d0       	rcall	.+0      	; 0xd4 <delayMs+0xa>
  d4:	cd b7       	in	r28, 0x3d	; 61
  d6:	de b7       	in	r29, 0x3e	; 62
  d8:	9e 83       	std	Y+6, r25	; 0x06
  da:	8d 83       	std	Y+5, r24	; 0x05
	unsigned int i;
	for(i=0; i<t; i++)           
  dc:	1c 82       	std	Y+4, r1	; 0x04
  de:	1b 82       	std	Y+3, r1	; 0x03
  e0:	0f c0       	rjmp	.+30     	; 0x100 <delayMs+0x36>
  e2:	80 ed       	ldi	r24, 0xD0	; 208
  e4:	97 e0       	ldi	r25, 0x07	; 7
  e6:	9a 83       	std	Y+2, r25	; 0x02
  e8:	89 83       	std	Y+1, r24	; 0x01
    milliseconds can be achieved.
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  ea:	89 81       	ldd	r24, Y+1	; 0x01
  ec:	9a 81       	ldd	r25, Y+2	; 0x02
  ee:	01 97       	sbiw	r24, 0x01	; 1
  f0:	f1 f7       	brne	.-4      	; 0xee <delayMs+0x24>
  f2:	9a 83       	std	Y+2, r25	; 0x02
  f4:	89 83       	std	Y+1, r24	; 0x01
  f6:	8b 81       	ldd	r24, Y+3	; 0x03
  f8:	9c 81       	ldd	r25, Y+4	; 0x04
  fa:	01 96       	adiw	r24, 0x01	; 1
  fc:	9c 83       	std	Y+4, r25	; 0x04
  fe:	8b 83       	std	Y+3, r24	; 0x03
 100:	2b 81       	ldd	r18, Y+3	; 0x03
 102:	3c 81       	ldd	r19, Y+4	; 0x04
 104:	8d 81       	ldd	r24, Y+5	; 0x05
 106:	9e 81       	ldd	r25, Y+6	; 0x06
 108:	28 17       	cp	r18, r24
 10a:	39 07       	cpc	r19, r25
 10c:	50 f3       	brcs	.-44     	; 0xe2 <delayMs+0x18>
		_delay_loop_2(FREQ*250);	//约1ms
}
 10e:	26 96       	adiw	r28, 0x06	; 6
 110:	0f b6       	in	r0, 0x3f	; 63
 112:	f8 94       	cli
 114:	de bf       	out	0x3e, r29	; 62
 116:	0f be       	out	0x3f, r0	; 63
 118:	cd bf       	out	0x3d, r28	; 61
 11a:	cf 91       	pop	r28
 11c:	df 91       	pop	r29
 11e:	08 95       	ret

00000120 <CANREG_WRITE>:
/**** 写SJA1000寄存器 ****/
void CANREG_WRITE(unsigned int SJAREG_ADR,unsigned char Data)
{
 120:	df 93       	push	r29
 122:	cf 93       	push	r28
 124:	00 d0       	rcall	.+0      	; 0x126 <CANREG_WRITE+0x6>
 126:	00 d0       	rcall	.+0      	; 0x128 <CANREG_WRITE+0x8>
 128:	0f 92       	push	r0
 12a:	cd b7       	in	r28, 0x3d	; 61
 12c:	de b7       	in	r29, 0x3e	; 62
 12e:	9c 83       	std	Y+4, r25	; 0x04
 130:	8b 83       	std	Y+3, r24	; 0x03
 132:	6d 83       	std	Y+5, r22	; 0x05
    unsigned char  *aa;
    aa=SJAREG_ADR;
 134:	8b 81       	ldd	r24, Y+3	; 0x03
 136:	9c 81       	ldd	r25, Y+4	; 0x04
 138:	9a 83       	std	Y+2, r25	; 0x02
 13a:	89 83       	std	Y+1, r24	; 0x01
	*aa= Data;
 13c:	e9 81       	ldd	r30, Y+1	; 0x01
 13e:	fa 81       	ldd	r31, Y+2	; 0x02
 140:	8d 81       	ldd	r24, Y+5	; 0x05
 142:	80 83       	st	Z, r24
}
 144:	0f 90       	pop	r0
 146:	0f 90       	pop	r0
 148:	0f 90       	pop	r0
 14a:	0f 90       	pop	r0
 14c:	0f 90       	pop	r0
 14e:	cf 91       	pop	r28
 150:	df 91       	pop	r29
 152:	08 95       	ret

00000154 <CANREG_READ>:
/**** 读SJA1000寄存器 ****/
unsigned char CANREG_READ(unsigned int SJAREG_ADR)
{
 154:	df 93       	push	r29
 156:	cf 93       	push	r28
 158:	00 d0       	rcall	.+0      	; 0x15a <CANREG_READ+0x6>
 15a:	00 d0       	rcall	.+0      	; 0x15c <CANREG_READ+0x8>
 15c:	0f 92       	push	r0
 15e:	cd b7       	in	r28, 0x3d	; 61
 160:	de b7       	in	r29, 0x3e	; 62
 162:	9d 83       	std	Y+5, r25	; 0x05
 164:	8c 83       	std	Y+4, r24	; 0x04
    unsigned char *p;
	unsigned char SJAREG_data;
	p= SJAREG_ADR;
 166:	8c 81       	ldd	r24, Y+4	; 0x04
 168:	9d 81       	ldd	r25, Y+5	; 0x05
 16a:	9b 83       	std	Y+3, r25	; 0x03
 16c:	8a 83       	std	Y+2, r24	; 0x02
	SJAREG_data = *p;
 16e:	ea 81       	ldd	r30, Y+2	; 0x02
 170:	fb 81       	ldd	r31, Y+3	; 0x03
 172:	80 81       	ld	r24, Z
 174:	89 83       	std	Y+1, r24	; 0x01
	return SJAREG_data;
 176:	89 81       	ldd	r24, Y+1	; 0x01
}
 178:	0f 90       	pop	r0
 17a:	0f 90       	pop	r0
 17c:	0f 90       	pop	r0
 17e:	0f 90       	pop	r0
 180:	0f 90       	pop	r0
 182:	cf 91       	pop	r28
 184:	df 91       	pop	r29
 186:	08 95       	ret

00000188 <BCAN_ENTER_RETMODEL>:


/***** CAN控制器进入复位模式 ****/ 
unsigned char BCAN_ENTER_RETMODEL(void)
{
 188:	df 93       	push	r29
 18a:	cf 93       	push	r28
 18c:	00 d0       	rcall	.+0      	; 0x18e <BCAN_ENTER_RETMODEL+0x6>
 18e:	cd b7       	in	r28, 0x3d	; 61
 190:	de b7       	in	r29, 0x3e	; 62
	unsigned char TempData;
	TempData  = CANREG_READ(REG_CONTROL);  //读控制寄存器
 192:	80 e0       	ldi	r24, 0x00	; 0
 194:	9f e7       	ldi	r25, 0x7F	; 127
 196:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 19a:	89 83       	std	Y+1, r24	; 0x01
	TempData  = TempData | 0x01;
 19c:	89 81       	ldd	r24, Y+1	; 0x01
 19e:	81 60       	ori	r24, 0x01	; 1
 1a0:	89 83       	std	Y+1, r24	; 0x01
	CANREG_WRITE(REG_CONTROL, TempData);  //写控制寄存器
 1a2:	69 81       	ldd	r22, Y+1	; 0x01
 1a4:	80 e0       	ldi	r24, 0x00	; 0
 1a6:	9f e7       	ldi	r25, 0x7F	; 127
 1a8:	0e 94 90 00 	call	0x120	; 0x120 <CANREG_WRITE>
	if((CANREG_READ(REG_CONTROL) & 0X01) == 1)
 1ac:	80 e0       	ldi	r24, 0x00	; 0
 1ae:	9f e7       	ldi	r25, 0x7F	; 127
 1b0:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 1b4:	88 2f       	mov	r24, r24
 1b6:	90 e0       	ldi	r25, 0x00	; 0
 1b8:	81 70       	andi	r24, 0x01	; 1
 1ba:	90 70       	andi	r25, 0x00	; 0
 1bc:	88 23       	and	r24, r24
 1be:	11 f0       	breq	.+4      	; 0x1c4 <BCAN_ENTER_RETMODEL+0x3c>
	{
		return 0;                           //置复位模式成功
 1c0:	1a 82       	std	Y+2, r1	; 0x02
 1c2:	02 c0       	rjmp	.+4      	; 0x1c8 <BCAN_ENTER_RETMODEL+0x40>
	}
	else
	{
		return 1;                           //置复位模式失败
 1c4:	81 e0       	ldi	r24, 0x01	; 1
 1c6:	8a 83       	std	Y+2, r24	; 0x02
 1c8:	8a 81       	ldd	r24, Y+2	; 0x02
	}
}
 1ca:	0f 90       	pop	r0
 1cc:	0f 90       	pop	r0
 1ce:	cf 91       	pop	r28
 1d0:	df 91       	pop	r29
 1d2:	08 95       	ret

000001d4 <BCAN_QUIT_RETMODE>:



/***** CAN控制器进入正常模式 ****/ 
unsigned char BCAN_QUIT_RETMODE(void)
{
 1d4:	df 93       	push	r29
 1d6:	cf 93       	push	r28
 1d8:	00 d0       	rcall	.+0      	; 0x1da <BCAN_QUIT_RETMODE+0x6>
 1da:	cd b7       	in	r28, 0x3d	; 61
 1dc:	de b7       	in	r29, 0x3e	; 62
	unsigned char TempData;
	TempData  = CANREG_READ(REG_CONTROL);  //读控制寄存器
 1de:	80 e0       	ldi	r24, 0x00	; 0
 1e0:	9f e7       	ldi	r25, 0x7F	; 127
 1e2:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 1e6:	89 83       	std	Y+1, r24	; 0x01
	TempData  = TempData & 0xfe;
 1e8:	89 81       	ldd	r24, Y+1	; 0x01
 1ea:	8e 7f       	andi	r24, 0xFE	; 254
 1ec:	89 83       	std	Y+1, r24	; 0x01
	CANREG_WRITE(REG_CONTROL, TempData);  //写控制寄存
 1ee:	69 81       	ldd	r22, Y+1	; 0x01
 1f0:	80 e0       	ldi	r24, 0x00	; 0
 1f2:	9f e7       	ldi	r25, 0x7F	; 127
 1f4:	0e 94 90 00 	call	0x120	; 0x120 <CANREG_WRITE>
	if((CANREG_READ(REG_CONTROL) & 0X01) == 0)
 1f8:	80 e0       	ldi	r24, 0x00	; 0
 1fa:	9f e7       	ldi	r25, 0x7F	; 127
 1fc:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 200:	88 2f       	mov	r24, r24
 202:	90 e0       	ldi	r25, 0x00	; 0
 204:	81 70       	andi	r24, 0x01	; 1
 206:	90 70       	andi	r25, 0x00	; 0
 208:	00 97       	sbiw	r24, 0x00	; 0
 20a:	11 f4       	brne	.+4      	; 0x210 <BCAN_QUIT_RETMODE+0x3c>
	{
		
		return 0;                           // 进入正常模式成功
 20c:	1a 82       	std	Y+2, r1	; 0x02
 20e:	02 c0       	rjmp	.+4      	; 0x214 <BCAN_QUIT_RETMODE+0x40>
	}
	else
	{
		return 1;                           //进入正常模式失败
 210:	81 e0       	ldi	r24, 0x01	; 1
 212:	8a 83       	std	Y+2, r24	; 0x02
 214:	8a 81       	ldd	r24, Y+2	; 0x02
	}
}
 216:	0f 90       	pop	r0
 218:	0f 90       	pop	r0
 21a:	cf 91       	pop	r28
 21c:	df 91       	pop	r29
 21e:	08 95       	ret

00000220 <BCAN_SET_OBJECT>:


/**** 设置CAN控制器验收代码寄存器ACR、验收屏蔽寄存器AMR ****/
unsigned char BCAN_SET_OBJECT(unsigned char BCAN_ACR,unsigned char BCAN_AMR)
{
 220:	df 93       	push	r29
 222:	cf 93       	push	r28
 224:	00 d0       	rcall	.+0      	; 0x226 <BCAN_SET_OBJECT+0x6>
 226:	0f 92       	push	r0
 228:	cd b7       	in	r28, 0x3d	; 61
 22a:	de b7       	in	r29, 0x3e	; 62
 22c:	89 83       	std	Y+1, r24	; 0x01
 22e:	6a 83       	std	Y+2, r22	; 0x02
	CANREG_WRITE(REG_ACR, BCAN_ACR);  //写验收代码寄存器
 230:	69 81       	ldd	r22, Y+1	; 0x01
 232:	84 e0       	ldi	r24, 0x04	; 4
 234:	9f e7       	ldi	r25, 0x7F	; 127
 236:	0e 94 90 00 	call	0x120	; 0x120 <CANREG_WRITE>
	if(CANREG_READ(REG_ACR) != BCAN_ACR)
 23a:	84 e0       	ldi	r24, 0x04	; 4
 23c:	9f e7       	ldi	r25, 0x7F	; 127
 23e:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 242:	98 2f       	mov	r25, r24
 244:	89 81       	ldd	r24, Y+1	; 0x01
 246:	98 17       	cp	r25, r24
 248:	19 f0       	breq	.+6      	; 0x250 <BCAN_SET_OBJECT+0x30>
	{
		return 1;          //写失败
 24a:	81 e0       	ldi	r24, 0x01	; 1
 24c:	8b 83       	std	Y+3, r24	; 0x03
 24e:	11 c0       	rjmp	.+34     	; 0x272 <BCAN_SET_OBJECT+0x52>
	}
	
	CANREG_WRITE(REG_AMR, BCAN_AMR);  //写验收屏蔽寄存器
 250:	6a 81       	ldd	r22, Y+2	; 0x02
 252:	85 e0       	ldi	r24, 0x05	; 5
 254:	9f e7       	ldi	r25, 0x7F	; 127
 256:	0e 94 90 00 	call	0x120	; 0x120 <CANREG_WRITE>
	if(CANREG_READ(REG_AMR) != BCAN_AMR)
 25a:	85 e0       	ldi	r24, 0x05	; 5
 25c:	9f e7       	ldi	r25, 0x7F	; 127
 25e:	0e 94 aa 00 	call	0x154	; 0x154 <CANREG_READ>
 262:	98 2f       	mov	r25, r24
 264:	8a 81       	ldd	r24, Y+2	; 0x02
 266:	98 17       	cp	r25, r24
 268:	19 f0       	breq	.+6      	; 0x270 <BCAN_SET_OBJECT+0x50>
	{
		

⌨️ 快捷键说明

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