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

📄 ax88796.lis

📁 uIP是免费的TCP/IP协议栈,我们将它移植到我们的AVR以太网开发板中
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02D8                   .dbline 334
 02D8           ;       
 02D8           ;       rxlen = (pageheader[enetpacketLenH]<<8) + pageheader[enetpacketLenL];
 02D8 2A80              ldd R2,y+2
 02DA 3B80              ldd R3,y+3
 02DC 532D              mov R21,R3
 02DE 422D              mov R20,R2
 02E0                   .dbline 335
 02E0           ;       nextPage = pageheader[nextblock_ptr] ;
 02E0 2980              ldd R2,y+1
 02E2 20920200          sts _nextPage,R2
 02E6                   .dbline 337
 02E6           ;       
 02E6           ;       currentRetreiveAddress = (readPagePtr<<8) + 4;
 02E6 84E0              ldi R24,4
 02E8 362E              mov R3,R22
 02EA 282E              mov R2,R24
 02EC 30920100          sts _currentRetreiveAddress+1,R3
 02F0 20920000          sts _currentRetreiveAddress,R2
 02F4                   .dbline 340
 02F4           ;       
 02F4           ;       // if the nextPage pointer is invalid, the packet is not ready yet - exit
 02F4           ;       if( (nextPage >= RXSTOP_INIT) || (nextPage < RXSTART_INIT) )
 02F4 80910200          lds R24,_nextPage
 02F8 8036              cpi R24,96
 02FA 10F4              brsh L54
 02FC 8634              cpi R24,70
 02FE 18F4              brsh L52
 0300           L54:
 0300                   .dbline 341
 0300           ;       {
 0300                   .dbline 342
 0300           ;               return 0;
 0300 0027              clr R16
 0302 1127              clr R17
 0304 03C0              xjmp L31
 0306           L52:
 0306                   .dbline 345
 0306           ;       }
 0306           ; 
 0306           ;     return rxlen-4;
 0306 8A01              movw R16,R20
 0308 0450              subi R16,4
 030A 1040              sbci R17,0
 030C                   .dbline -2
 030C           L31:
 030C 2496              adiw R28,4
 030E 0E940000          xcall pop_gset3
 0312                   .dbline 0 ; func end
 0312 0895              ret
 0314                   .dbsym r rxlen 20 i
 0314                   .dbsym r writePagePtr 10 c
 0314                   .dbsym r bnryPagePtr 20 c
 0314                   .dbsym r readPagePtr 22 c
 0314                   .dbsym l pageheader 0 A[4:4]c
 0314                   .dbsym r i 20 c
 0314                   .dbend
 0314                   .dbfunc e ax88796RetreivePacketData _ax88796RetreivePacketData fV
 0314           ;              i -> R22,R23
 0314           ;         length -> R20,R21
 0314           ;    localBuffer -> R10,R11
                        .even
 0314           _ax88796RetreivePacketData::
 0314 0E940000          xcall push_gset3
 0318 A901              movw R20,R18
 031A 5801              movw R10,R16
 031C                   .dbline -1
 031C                   .dbline 350
 031C           ; }
 031C           ; 
 031C           ; 
 031C           ; void ax88796RetreivePacketData(unsigned char * localBuffer, unsigned int length)
 031C           ; {
 031C                   .dbline 354
 031C           ;       unsigned int i;
 031C           ;       
 031C           ;       // initiate DMA to transfer the data
 031C           ;       ax88796Write(RBCR0, (unsigned char)length);
 031C 242F              mov R18,R20
 031E 0AE0              ldi R16,10
 0320 6FDE              xcall _ax88796Write
 0322                   .dbline 355
 0322           ;       ax88796Write(RBCR1, (unsigned char)(length>>8));
 0322 9A01              movw R18,R20
 0324 232F              mov R18,R19
 0326 3327              clr R19
 0328 0BE0              ldi R16,11
 032A 6ADE              xcall _ax88796Write
 032C                   .dbline 356
 032C           ;       ax88796Write(RSAR0, (unsigned char)currentRetreiveAddress);
 032C 20910000          lds R18,_currentRetreiveAddress
 0330 08E0              ldi R16,8
 0332 66DE              xcall _ax88796Write
 0334                   .dbline 357
 0334           ;       ax88796Write(RSAR1, (unsigned char)(currentRetreiveAddress>>8));
 0334 20910000          lds R18,_currentRetreiveAddress
 0338 30910100          lds R19,_currentRetreiveAddress+1
 033C 232F              mov R18,R19
 033E 3327              clr R19
 0340 09E0              ldi R16,9
 0342 5EDE              xcall _ax88796Write
 0344                   .dbline 358
 0344           ;       ax88796Write(CR, (RD0|START));
 0344 2AE0              ldi R18,10
 0346 0027              clr R16
 0348 5BDE              xcall _ax88796Write
 034A                   .dbline 359
 034A           ;       for(i=0;i<length;i++)
 034A 6627              clr R22
 034C 7727              clr R23
 034E 08C0              xjmp L59
 0350           L56:
 0350                   .dbline 360
 0350 00E1              ldi R16,16
 0352 64DE              xcall _ax88796Read
 0354 FB01              movw R30,R22
 0356 EA0D              add R30,R10
 0358 FB1D              adc R31,R11
 035A 0083              std z+0,R16
 035C           L57:
 035C                   .dbline 359
 035C 6F5F              subi R22,255  ; offset = 1
 035E 7F4F              sbci R23,255
 0360           L59:
 0360                   .dbline 359
 0360 6417              cp R22,R20
 0362 7507              cpc R23,R21
 0364 A8F3              brlo L56
 0366                   .dbline 363
 0366           ;               localBuffer[i] = ax88796Read(RDMAPORT);
 0366           ; 
 0366           ;       // end the DMA operation
 0366           ;       ax88796Write(CR, (RD2|START));
 0366 22E2              ldi R18,34
 0368 0027              clr R16
 036A 4ADE              xcall _ax88796Write
 036C                   .dbline 364
 036C           ;       for(i = 0; i <= 20; i++)
 036C 6627              clr R22
 036E 7727              clr R23
 0370 07C0              xjmp L63
 0372           L60:
 0372                   .dbline 365
 0372           ;               if(ax88796Read(ISR) & RDC)
 0372 07E0              ldi R16,7
 0374 53DE              xcall _ax88796Read
 0376 06FF              sbrs R16,6
 0378 01C0              rjmp L64
 037A                   .dbline 366
 037A           ;                       break;
 037A 07C0              xjmp L62
 037C           L64:
 037C           L61:
 037C                   .dbline 364
 037C 6F5F              subi R22,255  ; offset = 1
 037E 7F4F              sbci R23,255
 0380           L63:
 0380                   .dbline 364
 0380 84E1              ldi R24,20
 0382 90E0              ldi R25,0
 0384 8617              cp R24,R22
 0386 9707              cpc R25,R23
 0388 A0F7              brsh L60
 038A           L62:
 038A                   .dbline 367
 038A 20E4              ldi R18,64
 038C 07E0              ldi R16,7
 038E 38DE              xcall _ax88796Write
 0390                   .dbline 369
 0390 20900000          lds R2,_currentRetreiveAddress
 0394 30900100          lds R3,_currentRetreiveAddress+1
 0398 240E              add R2,R20
 039A 351E              adc R3,R21
 039C 30920100          sts _currentRetreiveAddress+1,R3
 03A0 20920000          sts _currentRetreiveAddress,R2
 03A4                   .dbline 370
 03A4 C101              movw R24,R2
 03A6 8030              cpi R24,0
 03A8 E0E6              ldi R30,96
 03AA 9E07              cpc R25,R30
 03AC 30F0              brlo L66
 03AE                   .dbline 371
 03AE 8050              subi R24,0
 03B0 9A41              sbci R25,26
 03B2 90930100          sts _currentRetreiveAddress+1,R25
 03B6 80930000          sts _currentRetreiveAddress,R24
 03BA           L66:
 03BA                   .dbline -2
 03BA           L55:
 03BA 0E940000          xcall pop_gset3
 03BE                   .dbline 0 ; func end
 03BE 0895              ret
 03C0                   .dbsym r i 22 i
 03C0                   .dbsym r length 20 i
 03C0                   .dbsym r localBuffer 10 pc
 03C0                   .dbend
 03C0                   .dbfunc e ax88796EndPacketRetreive _ax88796EndPacketRetreive fV
 03C0           ;    bnryPagePtr -> R20
 03C0           ;              i -> R20
                        .even
 03C0           _ax88796EndPacketRetreive::
 03C0 0E940000          xcall push_gset1
 03C4                   .dbline -1
 03C4                   .dbline 377
 03C4           ;       ax88796Write(ISR, RDC);
 03C4           ;     
 03C4           ;       currentRetreiveAddress += length;
 03C4           ;       if( currentRetreiveAddress >= 0x6000 )
 03C4           ;       currentRetreiveAddress -= (0x6000-0x4600) ;
 03C4           ; }
 03C4           ; 
 03C4           ; 
 03C4           ; 
 03C4           ; void ax88796EndPacketRetreive(void)
 03C4           ; {
 03C4                   .dbline 382
 03C4           ;       unsigned char i;
 03C4           ;       unsigned char bnryPagePtr;
 03C4           ; 
 03C4           ;       // end the DMA operation
 03C4           ;     ax88796Write(CR, (RD2|START));
 03C4 22E2              ldi R18,34
 03C6 0027              clr R16
 03C8 1BDE              xcall _ax88796Write
 03CA                   .dbline 383
 03CA           ;     for(i = 0; i <= 20; i++)
 03CA 4427              clr R20
 03CC 06C0              xjmp L72
 03CE           L69:
 03CE                   .dbline 384
 03CE           ;         if(ax88796Read(ISR) & RDC)
 03CE 07E0              ldi R16,7
 03D0 25DE              xcall _ax88796Read
 03D2 06FF              sbrs R16,6
 03D4 01C0              rjmp L73
 03D6                   .dbline 385
 03D6           ;             break;
 03D6 04C0              xjmp L71
 03D8           L73:
 03D8           L70:
 03D8                   .dbline 383
 03D8 4395              inc R20
 03DA           L72:
 03DA                   .dbline 383
 03DA 84E1              ldi R24,20
 03DC 8417              cp R24,R20
 03DE B8F7              brsh L69
 03E0           L71:
 03E0                   .dbline 386
 03E0           ;     ax88796Write(ISR, RDC);
 03E0 20E4              ldi R18,64
 03E2 07E0              ldi R16,7
 03E4 0DDE              xcall _ax88796Write
 03E6                   .dbline 390
 03E6           ; 
 03E6           ;       // set the boundary register to point
 03E6           ;       // to the start of the next packet-1
 03E6           ;     bnryPagePtr = nextPage-1;
 03E6 40910200          lds R20,_nextPage
 03EA 4150              subi R20,1
 03EC                   .dbline 391
 03EC           ;       if(bnryPagePtr < RXSTART_INIT) bnryPagePtr = RXSTOP_INIT-1;
 03EC 4634              cpi R20,70
 03EE 08F4              brsh L75
 03F0                   .dbline 391
 03F0 4FE5              ldi R20,95
 03F2           L75:
 03F2                   .dbline 393
 03F2           ; 
 03F2           ;       ax88796Write(BNRY, bnryPagePtr);
 03F2 242F              mov R18,R20
 03F4 03E0              ldi R16,3
 03F6 04DE              xcall _ax88796Write
 03F8                   .dbline -2
 03F8           L68:
 03F8 0E940000          xcall pop_gset1
 03FC                   .dbline 0 ; func end
 03FC 0895              ret
 03FE                   .dbsym r bnryPagePtr 20 c
 03FE                   .dbsym r i 20 c
 03FE                   .dbend
 03FE                   .dbfunc e ax88796Overrun _ax88796Overrun fV
 03FE           ;         resend -> R20
 03FE           ;         cmdReg -> R22
                        .even
 03FE           _ax88796Overrun::
 03FE 0E940000          xcall push_gset2
 0402                   .dbline -1
 0402                   .dbline 398
 0402           ; }
 0402           ; 
 0402           ; 
 0402           ; void ax88796Overrun(void)
 0402           ; {
 0402                   .dbline 402
 0402           ;       unsigned char cmdReg, resend;   
 0402           ; 
 0402           ;       // check if we were transmitting something
 0402           ;       cmdReg = ax88796Read(CR);
 0402 0027              clr R16
 0404 0BDE              xcall _ax88796Read
 0406 602F              mov R22,R16
 0408                   .dbline 404
 0408           ;       // stop the interface
 0408           ;       ax88796Write(CR, (RD2|STOP));
 0408 21E2              ldi R18,33
 040A 0027              clr R16
 040C F9DD              xcall _ax88796Write
 040E                   .dbline 406
 040E           ;       // wait for timeout
 040E           ;       delay_ms(2);

⌨️ 快捷键说明

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