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