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

📄 ax88796.lis

📁 uIP是免费的TCP/IP协议栈,我们将它移植到我们的AVR以太网开发板中
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01CE 18DF              xcall _ax88796Write
 01D0                   .dbline 250
 01D0           ;       ax88796Write(TBCR1, (unsigned char)((sendPacketLength)>>8));
 01D0 9A01              movw R18,R20
 01D2 232F              mov R18,R19
 01D4 3327              clr R19
 01D6 06E0              ldi R16,6
 01D8 13DF              xcall _ax88796Write
 01DA                   .dbline 253
 01DA           ;       
 01DA           ;       //do remote write operation
 01DA           ;       ax88796Write(CR,0x12);
 01DA 22E1              ldi R18,18
 01DC 0027              clr R16
 01DE 10DF              xcall _ax88796Write
 01E0                   .dbline -2
 01E0           L19:
 01E0 0E940000          xcall pop_gset3
 01E4                   .dbline 0 ; func end
 01E4 0895              ret
 01E6                   .dbsym r sendPacketLength 20 i
 01E6                   .dbsym r packetLength 22 i
 01E6                   .dbend
 01E6                   .dbfunc e ax88796SendPacketData _ax88796SendPacketData fV
 01E6           ;              i -> R20,R21
 01E6           ;         length -> R22,R23
 01E6           ;    localBuffer -> R10,R11
                        .even
 01E6           _ax88796SendPacketData::
 01E6 0E940000          xcall push_gset3
 01EA B901              movw R22,R18
 01EC 5801              movw R10,R16
 01EE                   .dbline -1
 01EE                   .dbline 257
 01EE           ; }
 01EE           ; 
 01EE           ; void ax88796SendPacketData(unsigned char * localBuffer, unsigned int length)
 01EE           ; {
 01EE                   .dbline 260
 01EE           ;       unsigned int i;
 01EE           ;       
 01EE           ;       for(i=0;i<length;i++)
 01EE 4427              clr R20
 01F0 5527              clr R21
 01F2 08C0              xjmp L29
 01F4           L26:
 01F4                   .dbline 261
 01F4 FA01              movw R30,R20
 01F6 EA0D              add R30,R10
 01F8 FB1D              adc R31,R11
 01FA 2081              ldd R18,z+0
 01FC 00E1              ldi R16,16
 01FE 00DF              xcall _ax88796Write
 0200           L27:
 0200                   .dbline 260
 0200 4F5F              subi R20,255  ; offset = 1
 0202 5F4F              sbci R21,255
 0204           L29:
 0204                   .dbline 260
 0204 4617              cp R20,R22
 0206 5707              cpc R21,R23
 0208 A8F3              brlo L26
 020A                   .dbline -2
 020A           L25:
 020A 0E940000          xcall pop_gset3
 020E                   .dbline 0 ; func end
 020E 0895              ret
 0210                   .dbsym r i 20 i
 0210                   .dbsym r length 22 i
 0210                   .dbsym r localBuffer 10 pc
 0210                   .dbend
 0210                   .dbfunc e ax88796EndPacketSend _ax88796EndPacketSend fV
                        .even
 0210           _ax88796EndPacketSend::
 0210                   .dbline -1
 0210                   .dbline 265
 0210           ;               ax88796Write(RDMAPORT, localBuffer[i]);
 0210           ; }
 0210           ; 
 0210           ; void ax88796EndPacketSend(void)
 0210           ; {
 0210                   .dbline 267
 0210           ;       //send the contents of the transmit buffer onto the network
 0210           ;       ax88796Write(CR,0x24);
 0210 24E2              ldi R18,36
 0212 0027              clr R16
 0214 F5DE              xcall _ax88796Write
 0216                   .dbline 270
 0216           ;       
 0216           ;       // clear the remote DMA interrupt
 0216           ;       ax88796Write(ISR, RDC);
 0216 20E4              ldi R18,64
 0218 07E0              ldi R16,7
 021A F2DE              xcall _ax88796Write
 021C                   .dbline -2
 021C           L30:
 021C                   .dbline 0 ; func end
 021C 0895              ret
 021E                   .dbend
 021E                   .dbfunc e ax88796BeginPacketRetreive _ax88796BeginPacketRetreive fi
 021E           ;          rxlen -> R20,R21
 021E           ;   writePagePtr -> R10
 021E           ;    bnryPagePtr -> R20
 021E           ;    readPagePtr -> R22
 021E           ;     pageheader -> y+0
 021E           ;              i -> R20
                        .even
 021E           _ax88796BeginPacketRetreive::
 021E 0E940000          xcall push_gset3
 0222 2497              sbiw R28,4
 0224                   .dbline -1
 0224                   .dbline 275
 0224           ; }
 0224           ; 
 0224           ; 
 0224           ; unsigned int ax88796BeginPacketRetreive(void)
 0224           ; {
 0224                   .dbline 285
 0224           ;       unsigned char writePagePtr;
 0224           ;       unsigned char readPagePtr;
 0224           ;       unsigned char bnryPagePtr;
 0224           ;       unsigned char i;
 0224           ;       
 0224           ;       unsigned char pageheader[4];
 0224           ;       unsigned int rxlen;
 0224           ;       
 0224           ;       // check for and handle an overflow
 0224           ;       ax88796ProcessInterrupt();
 0224 EDD2              xcall _ax88796ProcessInterrupt
 0226                   .dbline 288
 0226           ;       
 0226           ;       // read CURR from page 1
 0226           ;       ax88796Write(CR,(PS0|RD2|START));
 0226 22E6              ldi R18,98
 0228 0027              clr R16
 022A EADE              xcall _ax88796Write
 022C                   .dbline 289
 022C           ;       writePagePtr = ax88796Read(CURR);
 022C 07E0              ldi R16,7
 022E F6DE              xcall _ax88796Read
 0230 A02E              mov R10,R16
 0232                   .dbline 291
 0232           ;       // read the boundary register from page 0
 0232           ;       ax88796Write(CR,(RD2|START));
 0232 22E2              ldi R18,34
 0234 0027              clr R16
 0236 E4DE              xcall _ax88796Write
 0238                   .dbline 292
 0238           ;       bnryPagePtr = ax88796Read(BNRY);
 0238 03E0              ldi R16,3
 023A F0DE              xcall _ax88796Read
 023C 402F              mov R20,R16
 023E                   .dbline 295
 023E           ; 
 023E           ;       // first packet is at page bnryPtr+1
 023E           ;       readPagePtr = bnryPagePtr+1;
 023E 642F              mov R22,R20
 0240 6F5F              subi R22,255    ; addi 1
 0242                   .dbline 296
 0242           ;       if(readPagePtr >= RXSTOP_INIT) readPagePtr = RXSTART_INIT;
 0242 6036              cpi R22,96
 0244 08F0              brlo L32
 0246                   .dbline 296
 0246 66E4              ldi R22,70
 0248           L32:
 0248                   .dbline 299
 0248           ;       
 0248           ;       // return if there is no packet in the buffer
 0248           ;       if( readPagePtr == writePagePtr )
 0248 6A15              cp R22,R10
 024A 19F4              brne L34
 024C                   .dbline 300
 024C           ;       {
 024C                   .dbline 301
 024C           ;               return 0;
 024C 0027              clr R16
 024E 1127              clr R17
 0250 5DC0              xjmp L31
 0252           L34:
 0252                   .dbline 305
 0252           ;       }
 0252           ;       
 0252           ;       // clear the packet received interrupt flag
 0252           ;       ax88796Write(ISR, PRX);
 0252 21E0              ldi R18,1
 0254 07E0              ldi R16,7
 0256 D4DE              xcall _ax88796Write
 0258                   .dbline 309
 0258           ;       
 0258           ;       // if the boundary pointer is invalid,
 0258           ;       // reset the contents of the buffer and exit
 0258           ;       if( (bnryPagePtr < RXSTART_INIT) || (bnryPagePtr >= RXSTOP_INIT) )
 0258 4634              cpi R20,70
 025A 10F0              brlo L38
 025C 4036              cpi R20,96
 025E 78F0              brlo L36
 0260           L38:
 0260                   .dbline 310
 0260           ;       {
 0260                   .dbline 311
 0260           ;               ax88796Write(BNRY, RXSTART_INIT);
 0260 26E4              ldi R18,70
 0262 03E0              ldi R16,3
 0264 CDDE              xcall _ax88796Write
 0266                   .dbline 312
 0266           ;               ax88796Write(CR, (PS0|RD2|START));
 0266 22E6              ldi R18,98
 0268 0027              clr R16
 026A CADE              xcall _ax88796Write
 026C                   .dbline 313
 026C           ;               ax88796Write(CURR, RXSTART_INIT+1);
 026C 27E4              ldi R18,71
 026E 07E0              ldi R16,7
 0270 C7DE              xcall _ax88796Write
 0272                   .dbline 314
 0272           ;               ax88796Write(CR, (RD2|START));
 0272 22E2              ldi R18,34
 0274 0027              clr R16
 0276 C4DE              xcall _ax88796Write
 0278                   .dbline 315
 0278           ;               return 0;
 0278 0027              clr R16
 027A 1127              clr R17
 027C 47C0              xjmp L31
 027E           L36:
 027E                   .dbline 319
 027E           ;       }
 027E           ; 
 027E           ;       // initiate DMA to transfer the RTL8019 packet header
 027E           ;       ax88796Write(RBCR0, 4);
 027E 24E0              ldi R18,4
 0280 0AE0              ldi R16,10
 0282 BEDE              xcall _ax88796Write
 0284                   .dbline 320
 0284           ;       ax88796Write(RBCR1, 0);
 0284 2227              clr R18
 0286 0BE0              ldi R16,11
 0288 BBDE              xcall _ax88796Write
 028A                   .dbline 321
 028A           ;       ax88796Write(RSAR0, 0);
 028A 2227              clr R18
 028C 08E0              ldi R16,8
 028E B8DE              xcall _ax88796Write
 0290                   .dbline 322
 0290           ;       ax88796Write(RSAR1, readPagePtr);
 0290 262F              mov R18,R22
 0292 09E0              ldi R16,9
 0294 B5DE              xcall _ax88796Write
 0296                   .dbline 323
 0296           ;       ax88796Write(CR, (RD0|START));
 0296 2AE0              ldi R18,10
 0298 0027              clr R16
 029A B2DE              xcall _ax88796Write
 029C                   .dbline 324
 029C           ;       for(i=0;i<4;i++)
 029C 4427              clr R20
 029E 09C0              xjmp L42
 02A0           L39:
 02A0                   .dbline 325
 02A0 00E1              ldi R16,16
 02A2 BCDE              xcall _ax88796Read
 02A4 CE01              movw R24,R28
 02A6 E42F              mov R30,R20
 02A8 FF27              clr R31
 02AA E80F              add R30,R24
 02AC F91F              adc R31,R25
 02AE 0083              std z+0,R16
 02B0           L40:
 02B0                   .dbline 324
 02B0 4395              inc R20
 02B2           L42:
 02B2                   .dbline 324
 02B2 4430              cpi R20,4
 02B4 A8F3              brlo L39
 02B6                   .dbline 328
 02B6           ;               pageheader[i] = ax88796Read(RDMAPORT);
 02B6           ; 
 02B6           ;       // end the DMA operation
 02B6           ;     ax88796Write(CR, (RD2|START));
 02B6 22E2              ldi R18,34
 02B8 0027              clr R16
 02BA A2DE              xcall _ax88796Write
 02BC                   .dbline 329
 02BC           ;     for(i = 0; i <= 20; i++)
 02BC 4427              clr R20
 02BE 06C0              xjmp L46
 02C0           L43:
 02C0                   .dbline 330
 02C0           ;         if(ax88796Read(ISR) & RDC)
 02C0 07E0              ldi R16,7
 02C2 ACDE              xcall _ax88796Read
 02C4 06FF              sbrs R16,6
 02C6 01C0              rjmp L47
 02C8                   .dbline 331
 02C8           ;             break;
 02C8 04C0              xjmp L45
 02CA           L47:
 02CA           L44:
 02CA                   .dbline 329
 02CA 4395              inc R20
 02CC           L46:
 02CC                   .dbline 329
 02CC 84E1              ldi R24,20
 02CE 8417              cp R24,R20
 02D0 B8F7              brsh L43
 02D2           L45:
 02D2                   .dbline 332
 02D2           ;     ax88796Write(ISR, RDC);
 02D2 20E4              ldi R18,64
 02D4 07E0              ldi R16,7
 02D6 94DE              xcall _ax88796Write

⌨️ 快捷键说明

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