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