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

📄 can_module.lis

📁 Atmel mcu can interface design example
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .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 + -