📄 can_module.lis
字号:
.module can_module.c
.area text(rom, con, rel)
0000 .dbfile D:\candesignnow\can_module.c
0000 .dbfunc e read_sja _read_sja fc
0000 ; sja_address -> R20,R21
0000 ; addr -> R16
.even
0000 _read_sja::
0000 0E940000 xcall push_gset1
0004 .dbline -1
0004 .dbline 16
0004 ; #include "can.h"
0004 ; #include "macros.h"
0004 ; extern unsigned char TX_Buffer[13];
0004 ; extern unsigned char RX_Buffer[13];
0004 ; /*struct {
0004 ; uchar F_Fmt;
0004 ; uchar ID[4];
0004 ; uchar Data[8];
0004 ; }SJAFrameStruct, *P_SJAFrameStruct ;*/
0004 ;
0004 ; //SJAFrameStruct TX_Buffer;
0004 ; //unsigned char RX_Buffer[13];
0004 ; //unsigned char TX_Buffer[13];
0004 ;
0004 ; unsigned char read_sja(unsigned char addr) //读SJA1000状态寄存器子程序
0004 ; {
0004 .dbline 17
0004 ; unsigned char *sja_address = (unsigned char *)startadd;
0004 40E0 ldi R20,32512
0006 5FE7 ldi R21,127
0008 .dbline 18
0008 ; sja_address = (unsigned char *)startadd;
0008 .dbline 19
0008 ; sja_address = sja_address + addr;
0008 202E mov R2,R16
000A 3324 clr R3
000C 420D add R20,R2
000E 531D adc R21,R3
0010 .dbline 20
0010 ; return (*(sja_address));
0010 FA01 movw R30,R20
0012 0081 ldd R16,z+0
0014 .dbline -2
0014 L1:
0014 0E940000 xcall pop_gset1
0018 .dbline 0 ; func end
0018 0895 ret
001A .dbsym r sja_address 20 pc
001A .dbsym r addr 16 c
001A .dbend
001A .dbfunc e write_sja _write_sja fV
001A ; sja_address -> R20,R21
001A ; val -> R18
001A ; addr -> R16
.even
001A _write_sja::
001A 0E940000 xcall push_gset1
001E .dbline -1
001E .dbline 24
001E ; }
001E ;
001E ; void write_sja(unsigned char addr,unsigned char val) //写SJA1000控制寄存器子程序
001E ; {
001E .dbline 25
001E ; unsigned char *sja_address = (unsigned char *)startadd;
001E 40E0 ldi R20,32512
0020 5FE7 ldi R21,127
0022 .dbline 26
0022 ; sja_address = (unsigned char *)startadd;
0022 .dbline 27
0022 ; sja_address = sja_address + addr;
0022 202E mov R2,R16
0024 3324 clr R3
0026 420D add R20,R2
0028 531D adc R21,R3
002A .dbline 28
002A ; *(sja_address) = val;
002A FA01 movw R30,R20
002C 2083 std z+0,R18
002E .dbline -2
002E .dbline 29
002E ; }
002E L2:
002E 0E940000 xcall pop_gset1
0032 .dbline 0 ; func end
0032 0895 ret
0034 .dbsym r sja_address 20 pc
0034 .dbsym r val 18 c
0034 .dbsym r addr 16 c
0034 .dbend
0034 .dbfunc e SJATestInterface _SJATestInterface fc
0034 ; Err_Flag -> R20
0034 ; Err_Cnt -> R22
0034 ; testvalue -> R10
.even
0034 _SJATestInterface::
0034 0E940000 xcall push_gset3
0038 A02E mov R10,R16
003A .dbline -1
003A .dbline 32
003A ;
003A ; unsigned char SJATestInterface(unsigned char testvalue)
003A ; {
003A .dbline 33
003A ; unsigned char Err_Cnt = 0x20;
003A 60E2 ldi R22,32
003C .dbline 34
003C ; unsigned char Err_Flag = TRUE;
003C 41E0 ldi R20,1
003E 09C0 xjmp L5
0040 L4:
0040 .dbline 36
0040 ; while(--Err_Cnt)
0040 ; {
0040 .dbline 37
0040 ; write_sja(TEST, testvalue); //TEST defined in can.h
0040 2A2D mov R18,R10
0042 09E0 ldi R16,9
0044 EADF xcall _write_sja
0046 .dbline 38
0046 ; if(read_sja(TEST) == testvalue)
0046 09E0 ldi R16,9
0048 DBDF xcall _read_sja
004A 0A15 cp R16,R10
004C 11F4 brne L7
004E .dbline 39
004E ; {
004E .dbline 40
004E ; Err_Flag = FALSE;
004E 4427 clr R20
0050 .dbline 41
0050 ; break;
0050 05C0 xjmp L6
0052 L7:
0052 .dbline 43
0052 L5:
0052 .dbline 35
0052 862F mov R24,R22
0054 8150 subi R24,1
0056 682F mov R22,R24
0058 8823 tst R24
005A 91F7 brne L4
005C L6:
005C .dbline 44
005C ; }
005C ; }
005C ; return Err_Flag;
005C 042F mov R16,R20
005E .dbline -2
005E L3:
005E 0E940000 xcall pop_gset3
0062 .dbline 0 ; func end
0062 0895 ret
0064 .dbsym r Err_Flag 20 c
0064 .dbsym r Err_Cnt 22 c
0064 .dbsym r testvalue 10 c
0064 .dbend
0064 .dbfunc e SJAEntryResetMode _SJAEntryResetMode fc
0064 ; Err_Flag -> R20
0064 ; Err_Cnt -> R22
.even
0064 _SJAEntryResetMode::
0064 0E940000 xcall push_gset2
0068 .dbline -1
0068 .dbline 48
0068 ; }
0068 ;
0068 ; unsigned char SJAEntryResetMode(void)
0068 ; {
0068 .dbline 49
0068 ; unsigned char Err_Cnt = 0x20;
0068 60E2 ldi R22,32
006A .dbline 50
006A ; unsigned char Err_Flag = TRUE;
006A 41E0 ldi R20,1
006C 0BC0 xjmp L11
006E L10:
006E .dbline 52
006E ; while(--Err_Cnt)
006E ; {
006E .dbline 53
006E ; write_sja(MODE, 0x09);
006E 29E0 ldi R18,9
0070 0027 clr R16
0072 D3DF xcall _write_sja
0074 .dbline 54
0074 ; if((read_sja(MODE) & 0x01) == 0x01)
0074 0027 clr R16
0076 C4DF xcall _read_sja
0078 802F mov R24,R16
007A 8170 andi R24,1
007C 8130 cpi R24,1
007E 11F4 brne L13
0080 .dbline 55
0080 ; {
0080 .dbline 56
0080 ; Err_Flag = FALSE;
0080 4427 clr R20
0082 .dbline 57
0082 ; break;
0082 05C0 xjmp L12
0084 L13:
0084 .dbline 59
0084 L11:
0084 .dbline 51
0084 862F mov R24,R22
0086 8150 subi R24,1
0088 682F mov R22,R24
008A 8823 tst R24
008C 81F7 brne L10
008E L12:
008E .dbline 60
008E ; }
008E ; }
008E ; return Err_Flag;
008E 042F mov R16,R20
0090 .dbline -2
0090 L9:
0090 0E940000 xcall pop_gset2
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbsym r Err_Flag 20 c
0096 .dbsym r Err_Cnt 22 c
0096 .dbend
0096 .dbfunc e SJAQuitResetMode _SJAQuitResetMode fc
0096 ; Err_Flag -> R20
0096 ; Err_Cnt -> R22
.even
0096 _SJAQuitResetMode::
0096 0E940000 xcall push_gset2
009A .dbline -1
009A .dbline 64
009A ; }
009A ;
009A ; unsigned char SJAQuitResetMode(void)
009A ; {
009A .dbline 65
009A ; unsigned char Err_Cnt = 0x20;
009A 60E2 ldi R22,32
009C .dbline 66
009C ; unsigned char Err_Flag = TRUE;
009C 41E0 ldi R20,1
009E 09C0 xjmp L17
00A0 L16:
00A0 .dbline 68
00A0 ; while(--Err_Cnt)
00A0 ; {
00A0 .dbline 69
00A0 ; write_sja(MODE, 0x00);
00A0 2227 clr R18
00A2 0027 clr R16
00A4 BADF xcall _write_sja
00A6 .dbline 70
00A6 ; if(read_sja(MODE) == 0x00)
00A6 0027 clr R16
00A8 ABDF xcall _read_sja
00AA 0023 tst R16
00AC 11F4 brne L19
00AE .dbline 71
00AE ; {
00AE .dbline 72
00AE ; Err_Flag = FALSE;
00AE 4427 clr R20
00B0 .dbline 73
00B0 ; break;
00B0 05C0 xjmp L18
00B2 L19:
00B2 .dbline 75
00B2 L17:
00B2 .dbline 67
00B2 862F mov R24,R22
00B4 8150 subi R24,1
00B6 682F mov R22,R24
00B8 8823 tst R24
00BA 91F7 brne L16
00BC L18:
00BC .dbline 76
00BC ; }
00BC ; }
00BC ; return Err_Flag;
00BC 042F mov R16,R20
00BE .dbline -2
00BE L15:
00BE 0E940000 xcall pop_gset2
00C2 .dbline 0 ; func end
00C2 0895 ret
00C4 .dbsym r Err_Flag 20 c
00C4 .dbsym r Err_Cnt 22 c
00C4 .dbend
00C4 .dbfunc e SJATestRstMode _SJATestRstMode fc
00C4 ; SjaFlag -> R20
.even
00C4 _SJATestRstMode::
00C4 0E940000 xcall push_gset1
00C8 .dbline -1
00C8 .dbline 80
00C8 ; }
00C8 ;
00C8 ; unsigned char SJATestRstMode(void)
00C8 ; {
00C8 .dbline 82
00C8 ; unsigned char SjaFlag;
00C8 ; if((read_sja(MODE) & 0x01) == 0x01)
00C8 0027 clr R16
00CA 9ADF xcall _read_sja
00CC 802F mov R24,R16
00CE 8170 andi R24,1
00D0 8130 cpi R24,1
00D2 11F4 brne L22
00D4 .dbline 83
00D4 ; {
00D4 .dbline 84
00D4 ; SjaFlag = FALSE;
00D4 4427 clr R20
00D6 .dbline 85
00D6 ; }
00D6 01C0 xjmp L23
00D8 L22:
00D8 .dbline 87
00D8 ; else
00D8 ; SjaFlag = TRUE; //工作模式下返回TRUE
00D8 41E0 ldi R20,1
00DA L23:
00DA .dbline 88
00DA ; return SjaFlag;
00DA 042F mov R16,R20
00DC .dbline -2
00DC L21:
00DC 0E940000 xcall pop_gset1
00E0 .dbline 0 ; func end
00E0 0895 ret
00E2 .dbsym r SjaFlag 20 c
00E2 .dbend
00E2 .dbfunc e SJASetOutControl _SJASetOutControl fc
00E2 ; Err_Flag -> R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -