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

📄 rtl8019as.lis

📁 AVR以太网开发板中的几个例子。文件中定义了网卡芯片的IP地址,默认值是192.168.0.99。
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 012C           L7:
 012C 0E940000          xcall pop_gset1
 0130                   .dbline 0 ; func end
 0130 0895              ret
 0132                   .dbsym r rtlisrstatus 20 c
 0132                   .dbend
 0132                   .dbfunc e rtl_readcurr _rtl_readcurr fc
                        .even
 0132           _rtl_readcurr::
 0132                   .dbline -1
 0132                   .dbline 111
 0132           ; }
 0132           ; 
 0132           ; unsigned char rtl_readcurr(void)
 0132           ; {
 0132                   .dbline 112
 0132           ;  rtl8019_page(1); //选择页1的寄存器
 0132 01E0              ldi R16,1
 0134 87DF              xcall _rtl8019_page
 0136                   .dbline 113
 0136           ;  return reg_07;   //CURR
 0136 00910000          lds R16,_reg_07
 013A                   .dbline -2
 013A           L8:
 013A                   .dbline 0 ; func end
 013A 0895              ret
 013C                   .dbend
 013C                   .dbfunc e rtl_setcurr _rtl_setcurr fV
                        .even
 013C           _rtl_setcurr::
 013C                   .dbline -1
 013C                   .dbline 118
 013C           ; }
 013C           ; 
 013C           ; 
 013C           ; void rtl_setcurr(void)
 013C           ; {
 013C                   .dbline 119
 013C           ;  reg_00=0x21; //选择页0的寄存器,网卡停止运行,因为还没有初始化。
 013C 81E2              ldi R24,33
 013E 80930000          sts _reg_00,R24
 0142                   .dbline 120
 0142           ;  reg_03=0x4c;   //bnry
 0142 8CE4              ldi R24,76
 0144 80930000          sts _reg_03,R24
 0148                   .dbline 121
 0148           ;  reg_00=0x22; //选择页0寄存器,网卡执行命令。
 0148 82E2              ldi R24,34
 014A 80930000          sts _reg_00,R24
 014E                   .dbline -2
 014E           L9:
 014E                   .dbline 0 ; func end
 014E 0895              ret
 0150                   .dbend
 0150                   .dbfunc e rtl8019_write _rtl8019_write fV
 0150           ;              i -> R20,R21
 0150           ;         offset -> y+6
 0150           ;          count -> R22,R23
 0150           ;           addr -> R10,R11
                        .even
 0150           _rtl8019_write::
 0150 0E940000          xcall push_gset3
 0154 B901              movw R22,R18
 0156 5801              movw R10,R16
 0158                   .dbline -1
 0158                   .dbline 127
 0158           ;  //rtl8019_page(1); //选择页1的寄存器
 0158           ;  //reg_07=0x4e;   //CURR
 0158           ; }
 0158           ;  
 0158           ; void rtl8019_write(unsigned int addr,unsigned int count,unsigned char offset)
 0158           ; {
 0158                   .dbline 129
 0158           ;     //addr为要写入到网卡里的ram的起始地址,count为要连续写入的字节数
 0158           ;     unsigned int i=offset;
 0158 4E81              ldd R20,y+6
 015A 5527              clr R21
 015C                   .dbline 131
 015C           ; 
 015C           ;       rtl8019_page(0);
 015C 0027              clr R16
 015E 72DF              xcall _rtl8019_page
 0160                   .dbline 132
 0160           ;     reg_09=addr>>8;//address high
 0160 1501              movw R2,R10
 0162 232C              mov R2,R3
 0164 3324              clr R3
 0166 20920000          sts _reg_09,R2
 016A                   .dbline 133
 016A           ;     reg_08=addr&0xff;//address low 
 016A C501              movw R24,R10
 016C 9070              andi R25,0
 016E 80930000          sts _reg_08,R24
 0172                   .dbline 134
 0172           ;     reg_0b=count>>8; //write count high 
 0172 1B01              movw R2,R22
 0174 232C              mov R2,R3
 0176 3324              clr R3
 0178 20920000          sts _reg_0b,R2
 017C                   .dbline 135
 017C           ;     reg_0a=count&0xff;//write count low 
 017C CB01              movw R24,R22
 017E 9070              andi R25,0
 0180 80930000          sts _reg_0a,R24
 0184                   .dbline 136
 0184           ;     reg_00=0x12 ;//dma write 
 0184 82E1              ldi R24,18
 0186 80930000          sts _reg_00,R24
 018A                   .dbline 138
 018A           ;     
 018A           ;       count+=offset;
 018A 2E80              ldd R2,y+6
 018C 3324              clr R3
 018E 620D              add R22,R2
 0190 731D              adc R23,R3
 0192                   .dbline 139
 0192           ;     for(;i<count;i++)
 0192 0AC0              xjmp L14
 0194           L11:
 0194                   .dbline 140
 0194                   .dbline 141
 0194 80E0              ldi R24,<_buffer
 0196 90E0              ldi R25,>_buffer
 0198 FA01              movw R30,R20
 019A E80F              add R30,R24
 019C F91F              adc R31,R25
 019E 2080              ldd R2,z+0
 01A0 20920000          sts _reg_10,R2
 01A4                   .dbline 142
 01A4           L12:
 01A4                   .dbline 139
 01A4 4F5F              subi R20,255  ; offset = 1
 01A6 5F4F              sbci R21,255
 01A8           L14:
 01A8                   .dbline 139
 01A8 4617              cp R20,R22
 01AA 5707              cpc R21,R23
 01AC 98F3              brlo L11
 01AE                   .dbline 143
 01AE           ;     {
 01AE           ;       reg_10=buffer[i];
 01AE           ;     }
 01AE           ;     reg_0b=0; // count high 中止DMA操作 
 01AE 2224              clr R2
 01B0 20920000          sts _reg_0b,R2
 01B4                   .dbline 144
 01B4           ;     reg_0a=0;// count low
 01B4 20920000          sts _reg_0a,R2
 01B8                   .dbline 145
 01B8           ;     reg_00=0x22;//abort/complete dma page 0 
 01B8 82E2              ldi R24,34
 01BA 80930000          sts _reg_00,R24
 01BE                   .dbline -2
 01BE           L10:
 01BE 0E940000          xcall pop_gset3
 01C2                   .dbline 0 ; func end
 01C2 0895              ret
 01C4                   .dbsym r i 20 i
 01C4                   .dbsym l offset 6 c
 01C4                   .dbsym r count 22 i
 01C4                   .dbsym r addr 10 i
 01C4                   .dbend
 01C4                   .dbfunc e rtl8019_read _rtl8019_read fV
 01C4           ;              i -> R20,R21
 01C4           ;          count -> R22,R23
 01C4           ;           addr -> R10,R11
                        .even
 01C4           _rtl8019_read::
 01C4 0E940000          xcall push_gset3
 01C8 B901              movw R22,R18
 01CA 5801              movw R10,R16
 01CC                   .dbline -1
 01CC                   .dbline 149
 01CC           ; }
 01CC           ; 
 01CC           ; void rtl8019_read(unsigned int addr,unsigned int count)
 01CC           ; {
 01CC                   .dbline 151
 01CC           ;   //address为网卡里的ram的起始地址,count为要连续读取的字节数
 01CC           ;   unsigned int i=0;
 01CC 4427              clr R20
 01CE 5527              clr R21
 01D0                   .dbline 153
 01D0           ;    
 01D0           ;   rtl8019_page(0);
 01D0 0027              clr R16
 01D2 38DF              xcall _rtl8019_page
 01D4                   .dbline 154
 01D4           ;   reg_09=addr>>8;//address high
 01D4 1501              movw R2,R10
 01D6 232C              mov R2,R3
 01D8 3324              clr R3
 01DA 20920000          sts _reg_09,R2
 01DE                   .dbline 155
 01DE           ;   reg_08=addr&0xff;//address low 
 01DE C501              movw R24,R10
 01E0 9070              andi R25,0
 01E2 80930000          sts _reg_08,R24
 01E6                   .dbline 156
 01E6           ;   reg_0b=count>>8; //write count high 
 01E6 1B01              movw R2,R22
 01E8 232C              mov R2,R3
 01EA 3324              clr R3
 01EC 20920000          sts _reg_0b,R2
 01F0                   .dbline 157
 01F0           ;   reg_0a=count&0xff;//write count low 
 01F0 CB01              movw R24,R22
 01F2 9070              andi R25,0
 01F4 80930000          sts _reg_0a,R24
 01F8                   .dbline 158
 01F8           ;   reg_00=0x0a ;//dma read
 01F8 8AE0              ldi R24,10
 01FA 80930000          sts _reg_00,R24
 01FE                   .dbline 160
 01FE           ; 
 01FE           ;   for(;i<count;i++)
 01FE 0AC0              xjmp L19
 0200           L16:
 0200                   .dbline 161
 0200                   .dbline 162
 0200 80E0              ldi R24,<_buffer
 0202 90E0              ldi R25,>_buffer
 0204 FA01              movw R30,R20
 0206 E80F              add R30,R24
 0208 F91F              adc R31,R25
 020A 20900000          lds R2,_reg_10
 020E 2082              std z+0,R2
 0210                   .dbline 163
 0210           L17:
 0210                   .dbline 160
 0210 4F5F              subi R20,255  ; offset = 1
 0212 5F4F              sbci R21,255
 0214           L19:
 0214                   .dbline 160
 0214 4617              cp R20,R22
 0216 5707              cpc R21,R23
 0218 98F3              brlo L16
 021A                   .dbline 165
 021A           ;   {
 021A           ;    buffer[i]=reg_10;
 021A           ;   }
 021A           ; 
 021A           ;   reg_0b=0; // count high 中止DMA操作 
 021A 2224              clr R2
 021C 20920000          sts _reg_0b,R2
 0220                   .dbline 166
 0220           ;   reg_0a=0;// count low
 0220 20920000          sts _reg_0a,R2
 0224                   .dbline 167
 0224           ;   reg_00=0x22;//abort/complete dma page 0 
 0224 82E2              ldi R24,34
 0226 80930000          sts _reg_00,R24
 022A                   .dbline -2
 022A           L15:
 022A 0E940000          xcall pop_gset3
 022E                   .dbline 0 ; func end
 022E 0895              ret
 0230                   .dbsym r i 20 i
 0230                   .dbsym r count 22 i
 0230                   .dbsym r addr 10 i
 0230                   .dbend
 0230                   .dbfunc e rtl8019_sendpack _rtl8019_sendpack fV
 0230           ;         offset -> R22
 0230           ;            len -> R20,R21
                        .even
 0230           _rtl8019_sendpack::
 0230 0E940000          xcall push_gset2
 0234 622F              mov R22,R18
 0236 A801              movw R20,R16
 0238 2197              sbiw R28,1
 023A                   .dbline -1
 023A                   .dbline 171
 023A           ; }
 023A           ; 
 023A           ; void rtl8019_sendpack(unsigned int len,unsigned char offset)
 023A           ; {
 023A                   .dbline 172
 023A           ;   reg_00=0x21; //选择页0的寄存器,网卡停止运行
 023A 81E2              ldi R24,33
 023C 80930000          sts _reg_00,R24
 0240                   .dbline 173
 0240           ;   reg_04=0x40; //TPSR
 0240 80E4              ldi R24,64
 0242 80930000          sts _reg_04,R24
 0246                   .dbline 174
 0246           ;   rtl8019_write(0x4000,len,offset);
 0246 6883              std y+0,R22
 0248 9A01              movw R18,R20
 024A 00E0              ldi R16,16384
 024C 10E4              ldi R17,64
 024E 80DF              xcall _rtl8019_write
 0250                   .dbline 175
 0250           ;   reg_00=0x21;
 0250 81E2              ldi R24,33
 0252 80930000          sts _reg_00,R24
 0256                   .dbline 176
 0256           ;   reg_04=0x40;     //TPSR
 0256 80E4              ldi R24,64
 0258 80930000          sts _reg_04,R24
 025C                   .dbline 177
 025C           ;   reg_05=len&0xff; //TBCR0
 025C CA01              movw R24,R20
 025E 9070              andi R25,0
 0260 80930000          sts _reg_05,R24
 0264                   .dbline 178
 0264           ;   reg_06=len>>8;   //TBCR1
 0264 1A01              movw R2,R20
 0266 232C              mov R2,R3
 0268 3324              clr R3
 026A 20920000          sts _reg_06,R2
 026E                   .dbline 179
 026E           ;   reg_00=0x1E;
 026E 8EE1              ldi R24,30
 0270 80930000          sts _reg_00,R24
 0274                   .dbline -2
 0274           L20:
 0274 2196              adiw R28,1
 0276 0E940000          xcall pop_gset2
 027A                   .dbline 0 ; func end
 027A 0895              ret
 027C                   .dbsym r offset 22 c
 027C                   .dbsym r len 20 i
 027C                   .dbend
 027C                   .dbfunc e buildpack _buildpack fV
 027C           ;            len -> y+20
 027C           ;         mac_s0 -> y+18
 027C           ;         mac_s1 -> y+16
 027C           ;         mac_s2 -> y+14
 027C           ;         mac_s3 -> y+12
 027C           ;         mac_s4 -> y+10
 027C           ;         mac_s5 -> y+8
 027C           ;         mac_d0 -> y+6

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -