📄 rtl8019as.lis
字号:
.module rtl8019as.c
.area text(rom, con, rel)
0000 .dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\icc例子\rtl8019as.c
0000 .dbfunc e rtl8019_reset _rtl8019_reset fV
0000 ; temp -> R20
.even
0000 _rtl8019_reset::
0000 0E940000 xcall push_gset1
0004 .dbline -1
0004 .dbline 23
0004 ; #include "main.h"
0004 ; #include "rtl8019as.h"
0004 ; #include "arp.h"
0004 ; #include "ip.h"
0004 ; #include "icmp.h"
0004 ; #include "udp.h"
0004 ;
0004 ; unsigned int count;//需要读或写的字节数
0004 ; unsigned char tempmac_d5;
0004 ; unsigned char tempmac_d4;
0004 ; unsigned char tempmac_d3;
0004 ; unsigned char tempmac_d2;
0004 ; unsigned char tempmac_d1;
0004 ; unsigned char tempmac_d0;
0004 ;
0004 ; extern unsigned char tempip_d3;
0004 ; extern unsigned char tempip_d2;
0004 ; extern unsigned char tempip_d1;
0004 ; extern unsigned char tempip_d0;
0004 ; extern unsigned int ip_id;
0004 ;
0004 ; void rtl8019_reset(void)
0004 ; {
0004 .dbline 24
0004 ; unsigned char temp=0;
0004 4427 clr R20
0006 .dbline 26
0006 ;
0006 ; RTLRST_SET;
0006 80916500 lds R24,101
000A 8860 ori R24,8
000C 80936500 sts 101,R24
0010 .dbline 27
0010 ; delay_100ms();
0010 0E940000 xcall _delay_100ms
0014 .dbline 28
0014 ; RTLRST_CLR;
0014 80916500 lds R24,101
0018 877F andi R24,247
001A 80936500 sts 101,R24
001E .dbline 29
001E ; delay_100ms();
001E 0E940000 xcall _delay_100ms
0022 .dbline 30
0022 ; temp=reg_1f;//读网卡的复位端口
0022 40910000 lds R20,_reg_1f
0026 .dbline 31
0026 ; delay_100ms();
0026 0E940000 xcall _delay_100ms
002A .dbline 32
002A ; reg_1f=temp; //写网卡的复位端口
002A 40930000 sts _reg_1f,R20
002E .dbline 33
002E ; delay_100ms();
002E 0E940000 xcall _delay_100ms
0032 .dbline -2
0032 L1:
0032 0E940000 xcall pop_gset1
0036 .dbline 0 ; func end
0036 0895 ret
0038 .dbsym r temp 20 c
0038 .dbend
0038 .dbfunc e rtl8019_hotreset _rtl8019_hotreset fV
0038 ; temp -> R16
.even
0038 _rtl8019_hotreset::
0038 .dbline -1
0038 .dbline 37
0038 ; }
0038 ;
0038 ; void rtl8019_hotreset(void)
0038 ; {
0038 .dbline 38
0038 ; unsigned char temp=0;
0038 0027 clr R16
003A .dbline 40
003A ;
003A ; temp=reg_1f;//读网卡的复位端口
003A 00910000 lds R16,_reg_1f
003E .dbline 41
003E ; reg_1f=temp; //写网卡的复位端口
003E 00930000 sts _reg_1f,R16
0042 .dbline -2
0042 L2:
0042 .dbline 0 ; func end
0042 0895 ret
0044 .dbsym r temp 16 c
0044 .dbend
0044 .dbfunc e rtl8019_page _rtl8019_page fV
0044 ; temp -> R20
0044 ; pagenumber -> R16
.even
0044 _rtl8019_page::
0044 0E940000 xcall push_gset1
0048 .dbline -1
0048 .dbline 45
0048 ; }
0048 ;
0048 ; void rtl8019_page(unsigned char pagenumber)
0048 ; {
0048 .dbline 47
0048 ; unsigned char temp;
0048 ; temp=reg_00;
0048 40910000 lds R20,_reg_00
004C .dbline 48
004C ; temp=temp&0x3B; //TXP位要置为0.
004C 4B73 andi R20,59
004E .dbline 49
004E ; pagenumber=pagenumber<<6;
004E 000F lsl R16
0050 000F lsl R16
0052 000F lsl R16
0054 000F lsl R16
0056 000F lsl R16
0058 000F lsl R16
005A .dbline 50
005A ; temp=temp|pagenumber;
005A 402B or R20,R16
005C .dbline 51
005C ; reg_00=temp;
005C 40930000 sts _reg_00,R20
0060 .dbline -2
0060 L3:
0060 0E940000 xcall pop_gset1
0064 .dbline 0 ; func end
0064 0895 ret
0066 .dbsym r temp 20 c
0066 .dbsym r pagenumber 16 c
0066 .dbend
0066 .dbfunc e rtl8019_init _rtl8019_init fV
.even
0066 _rtl8019_init::
0066 .dbline -1
0066 .dbline 55
0066 ; }
0066 ;
0066 ; void rtl8019_init(void)
0066 ; {
0066 .dbline 57
0066 ; //rtl8019_page(0); //选择页0的寄存器
0066 ; reg_00=0x21; //选择页0的寄存器,网卡停止运行。
0066 81E2 ldi R24,33
0068 80930000 sts _reg_00,R24
006C .dbline 58
006C ; reg_01=0x4d; //寄存器Pstart
006C 8DE4 ldi R24,77
006E 80930000 sts _reg_01,R24
0072 .dbline 59
0072 ; reg_02=0x80; //Pstop
0072 80E8 ldi R24,128
0074 80930000 sts _reg_02,R24
0078 .dbline 60
0078 ; reg_03=0x4c; //BNRY
0078 8CE4 ldi R24,76
007A 80930000 sts _reg_03,R24
007E .dbline 61
007E ; reg_04=0x40; //TPSR
007E 80E4 ldi R24,64
0080 80930000 sts _reg_04,R24
0084 .dbline 62
0084 ; reg_05=0xfe; //TBCR0
0084 8EEF ldi R24,254
0086 80930000 sts _reg_05,R24
008A .dbline 63
008A ; reg_06=0x00; //TBCR1
008A 2224 clr R2
008C 20920000 sts _reg_06,R2
0090 .dbline 64
0090 ; reg_07=0xFF; //ISR
0090 8FEF ldi R24,255
0092 80930000 sts _reg_07,R24
0096 .dbline 65
0096 ; reg_0c=0xcc; //RCR
0096 8CEC ldi R24,204
0098 80930000 sts _reg_0c,R24
009C .dbline 66
009C ; reg_0d=0xe0; //TCR
009C 80EE ldi R24,224
009E 80930000 sts _reg_0d,R24
00A2 .dbline 67
00A2 ; reg_0e=0xc8; //DCR 数据配置寄存器 8位数据dma
00A2 88EC ldi R24,200
00A4 80930000 sts _reg_0e,R24
00A8 .dbline 68
00A8 ; reg_0f=0xff; //IMR all interrupt
00A8 8FEF ldi R24,255
00AA 80930000 sts _reg_0f,R24
00AE .dbline 69
00AE ; rtl8019_page(1); //选择页1的寄存器
00AE 01E0 ldi R16,1
00B0 C9DF xcall _rtl8019_page
00B2 .dbline 70
00B2 ; reg_07=0x4d; //CURR
00B2 8DE4 ldi R24,77
00B4 80930000 sts _reg_07,R24
00B8 .dbline 71
00B8 ; reg_08=0x00; //MAR0
00B8 2224 clr R2
00BA 20920000 sts _reg_08,R2
00BE .dbline 72
00BE ; reg_09=0x41; //MAR1
00BE 81E4 ldi R24,65
00C0 80930000 sts _reg_09,R24
00C4 .dbline 73
00C4 ; reg_0a=0x00; //MAR2
00C4 20920000 sts _reg_0a,R2
00C8 .dbline 74
00C8 ; reg_0b=0x80; //MAR3
00C8 80E8 ldi R24,128
00CA 80930000 sts _reg_0b,R24
00CE .dbline 75
00CE ; reg_0c=0x00; //MAR4
00CE 20920000 sts _reg_0c,R2
00D2 .dbline 76
00D2 ; reg_0d=0x00; //MAR5
00D2 20920000 sts _reg_0d,R2
00D6 .dbline 77
00D6 ; reg_0e=0x00; //MAR6
00D6 20920000 sts _reg_0e,R2
00DA .dbline 78
00DA ; reg_0f=0x00; //MAR7
00DA 20920000 sts _reg_0f,R2
00DE .dbline 80
00DE ; //rtl8019_page(0);
00DE ; reg_00=0x22; //选择页0寄存器,网卡执行命令。
00DE 82E2 ldi R24,34
00E0 80930000 sts _reg_00,R24
00E4 .dbline -2
00E4 L4:
00E4 .dbline 0 ; func end
00E4 0895 ret
00E6 .dbend
00E6 .dbfunc e rtl8019_writemynodeid _rtl8019_writemynodeid fV
.even
00E6 _rtl8019_writemynodeid::
00E6 .dbline -1
00E6 .dbline 85
00E6 ; }
00E6 ;
00E6 ; void rtl8019_writemynodeid(void)
00E6 ;
00E6 ; {
00E6 .dbline 86
00E6 ; rtl8019_page(1);
00E6 01E0 ldi R16,1
00E8 ADDF xcall _rtl8019_page
00EA .dbline 87
00EA ; reg_01=mynodeid_0; //PAR0
00EA 8FE4 ldi R24,79
00EC 80930000 sts _reg_01,R24
00F0 .dbline 88
00F0 ; reg_02=mynodeid_1; //PAR1
00F0 86E4 ldi R24,70
00F2 80930000 sts _reg_02,R24
00F6 .dbline 89
00F6 ; reg_03=mynodeid_2; //PAR2
00F6 80930000 sts _reg_03,R24
00FA .dbline 90
00FA ; reg_04=mynodeid_3; //PAR3
00FA 89E4 ldi R24,73
00FC 80930000 sts _reg_04,R24
0100 .dbline 91
0100 ; reg_05=mynodeid_4; //PAR4
0100 83E4 ldi R24,67
0102 80930000 sts _reg_05,R24
0106 .dbline 92
0106 ; reg_06=mynodeid_5; //PAR5
0106 85E4 ldi R24,69
0108 80930000 sts _reg_06,R24
010C .dbline -2
010C L5:
010C .dbline 0 ; func end
010C 0895 ret
010E .dbend
010E .dbfunc e rtl_status _rtl_status fc
.even
010E _rtl_status::
010E .dbline -1
010E .dbline 96
010E ; }
010E ;
010E ; unsigned char rtl_status(void)
010E ; {
010E .dbline 97
010E ; rtl8019_page(0);
010E 0027 clr R16
0110 99DF xcall _rtl8019_page
0112 .dbline 98
0112 ; return reg_0c;
0112 00910000 lds R16,_reg_0c
0116 .dbline -2
0116 L6:
0116 .dbline 0 ; func end
0116 0895 ret
0118 .dbend
0118 .dbfunc e rtl_isrstatus _rtl_isrstatus fc
0118 ; rtlisrstatus -> R20
.even
0118 _rtl_isrstatus::
0118 0E940000 xcall push_gset1
011C .dbline -1
011C .dbline 102
011C ; }
011C ;
011C ; unsigned char rtl_isrstatus(void)
011C ; {
011C .dbline 104
011C ; unsigned char rtlisrstatus;
011C ; rtl8019_page(0);
011C 0027 clr R16
011E 92DF xcall _rtl8019_page
0120 .dbline 105
0120 ; rtlisrstatus=reg_07;
0120 40910000 lds R20,_reg_07
0124 .dbline 106
0124 ; reg_07=0xFF;
0124 8FEF ldi R24,255
0126 80930000 sts _reg_07,R24
012A .dbline 107
012A ; return rtlisrstatus;
012A 042F mov R16,R20
012C .dbline -2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -