📄 can_sja1000.lss
字号:
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 + -