📄 ax88796.lis
字号:
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 + -