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

📄 rtl8019.s

📁 uIP是免费的TCP/IP协议栈,我们将它移植到我们的AVR以太网开发板中
💻 S
📖 第 1 页 / 共 3 页
字号:
	.even
_rtl8019BeginPacketRetreive::
	xcall push_gset4x
	sbiw R28,4
	.dbline -1
	.dbline 371
; }
; 
; 
; 
; 
; // pointers to locations in the RTL8019 receive buffer
; static unsigned char nextPage;
; static unsigned int currentRetreiveAddress;
; 
; // location of items in the RTL8019's page header
; #define  enetpacketstatus     0x00
; #define  nextblock_ptr        0x01
; #define	 enetpacketLenL		  0x02
; #define	 enetpacketLenH		  0x03
; 
; unsigned int rtl8019BeginPacketRetreive(void)
; {
	.dbline 379
; 	unsigned char i;
; 	unsigned char bnry;
; 	
; 	unsigned char pageheader[4];
; 	unsigned int rxlen;
; 	
; 	// check for and handle an overflow
; 	rtl8019ProcessInterrupt();
	xcall _rtl8019ProcessInterrupt
L54:
	.dbline 382
	.dbline 382
	ldi R24,98
	sts 49152,R24
	.dbline 382
L55:
	.dbline 382
; 	
; 	// read CURR from page 1
; 	rtl8019Write(CR,0x62);
	.dbline 383
; 	i = rtl8019Read(CURR);
	lds R10,50944
L57:
	.dbline 386
	.dbline 386
	ldi R24,34
	sts 49152,R24
	.dbline 386
L58:
	.dbline 386
; 	
; 	// return to page 0
; 	rtl8019Write(CR,0x22);
	.dbline 389
; 	
; 	// read the boundary register - pointing to the beginning of the packet
; 	bnry = rtl8019Read(BNRY) ;
	lds R12,49920
	.dbline 392
; 	
; 	// return if there is no packet in the buffer
; 	if( bnry == i )
	cp R12,R10
	brne L60
	.dbline 393
; 		return 0;
	clr R16
	clr R17
	xjmp L53
L60:
L62:
	.dbline 397
	.dbline 397
	ldi R24,1
	sts 50944,R24
	.dbline 397
L63:
	.dbline 397
; 	
; 
; 	// clear the packet received interrupt flag
; 	rtl8019Write(ISR, (1<<ISR_PRX));
	.dbline 400
; 	
; 	// the boundary pointer is invalid, reset the contents of the buffer and exit
; 	if( (bnry >= RXSTOP_INIT) || (bnry < RXSTART_INIT) )
	mov R24,R12
	cpi R24,96
	brsh L67
	cpi R24,70
	brsh L65
L67:
	.dbline 401
; 	{
L68:
	.dbline 402
	.dbline 402
	ldi R24,70
	sts 49920,R24
	.dbline 402
L69:
	.dbline 402
; 		rtl8019Write(BNRY, RXSTART_INIT);
L71:
	.dbline 403
	.dbline 403
	ldi R24,98
	sts 49152,R24
	.dbline 403
L72:
	.dbline 403
; 		rtl8019Write(CR, 0x62);
L74:
	.dbline 404
	.dbline 404
	ldi R24,70
	sts 50944,R24
	.dbline 404
L75:
	.dbline 404
; 		rtl8019Write(CURR, RXSTART_INIT);
L77:
	.dbline 405
	.dbline 405
	ldi R24,34
	sts 49152,R24
	.dbline 405
L78:
	.dbline 405
; 		rtl8019Write(CR, 0x22);
	.dbline 407
; 		
; 		return 0;
	clr R16
	clr R17
	xjmp L53
L65:
L80:
	.dbline 411
	.dbline 411
	ldi R24,4
	sts 51712,R24
	.dbline 411
L81:
	.dbline 411
; 	}
; 
; 	// initiate DMA to transfer the RTL8019 packet header
;     rtl8019Write(RBCR0, 4);
L83:
	.dbline 412
	.dbline 412
	clr R2
	sts 51968,R2
	.dbline 412
L84:
	.dbline 412
;     rtl8019Write(RBCR1, 0);
L86:
	.dbline 413
	.dbline 413
	clr R2
	sts 51200,R2
	.dbline 413
L87:
	.dbline 413
;     rtl8019Write(RSAR0, 0);
L89:
	.dbline 414
	.dbline 414
	sts 51456,R12
	.dbline 414
L90:
	.dbline 414
;     rtl8019Write(RSAR1, bnry);
L92:
	.dbline 415
	.dbline 415
	ldi R24,10
	sts 49152,R24
	.dbline 415
L93:
	.dbline 415
;     rtl8019Write(CR, 0x0A);
	.dbline 416
; 	for(i=0;i<4;i++)
	clr R10
	xjmp L98
L95:
	.dbline 417
	movw R24,R28
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	lds R2,53248
	std z+0,R2
L96:
	.dbline 416
	inc R10
L98:
	.dbline 416
	mov R24,R10
	cpi R24,4
	brlo L95
L99:
	.dbline 420
	.dbline 420
	ldi R24,34
	sts 49152,R24
	.dbline 420
L100:
	.dbline 420
; 		pageheader[i] = rtl8019Read(RDMAPORT);
; 	
; 	// end the DMA operation
;     rtl8019Write(CR, 0x22);
	.dbline 421
;     for(i = 0; i <= 20; i++)
	clr R10
	xjmp L105
L102:
	.dbline 422
;         if(rtl8019Read(ISR) & 1<<6)
	lds R2,50944
	sbrs R2,6
	rjmp L106
	.dbline 423
;             break;
	xjmp L104
L106:
L103:
	.dbline 421
	inc R10
L105:
	.dbline 421
	ldi R24,20
	cp R24,R10
	brsh L102
L104:
L108:
	.dbline 424
	.dbline 424
	ldi R24,64
	sts 50944,R24
	.dbline 424
L109:
	.dbline 424
;     rtl8019Write(ISR, 1<<6);
	.dbline 427
; 
; 	
; 	rxlen = (pageheader[enetpacketLenH]<<8) + pageheader[enetpacketLenL];
	ldd R2,y+2
	ldd R3,y+3
	mov R11,R3
	mov R10,R2
	.dbline 428
; 	nextPage = pageheader[nextblock_ptr] ;
	ldd R2,y+1
	sts _nextPage,R2
	.dbline 430
; 	
; 	currentRetreiveAddress = (bnry<<8) + 4;
	ldi R24,4
	mov R3,R12
	mov R2,R24
	sts _currentRetreiveAddress+1,R3
	sts _currentRetreiveAddress,R2
	.dbline 433
; 	
; 	// if the nextPage pointer is invalid, the packet is not ready yet - exit
; 	if( (nextPage >= RXSTOP_INIT) || (nextPage < RXSTART_INIT) )
	lds R24,_nextPage
	cpi R24,96
	brsh L116
	cpi R24,70
	brsh L114
L116:
	.dbline 434
; 		return 0;
	clr R16
	clr R17
	xjmp L53
L114:
	.dbline 436
;     
;     return rxlen-4;
	movw R16,R10
	subi R16,4
	sbci R17,0
	.dbline -2
L53:
	adiw R28,4
	xcall pop_gset4x
	.dbline 0 ; func end
	ret
	.dbsym r rxlen 10 i
	.dbsym l pageheader 0 A[4:4]c
	.dbsym r bnry 12 c
	.dbsym r i 10 c
	.dbend
	.dbfunc e rtl8019RetreivePacketData _rtl8019RetreivePacketData fV
;              i -> R10,R11
;         length -> R18,R19
;    localBuffer -> R16,R17
	.even
_rtl8019RetreivePacketData::
	xcall push_gset3x
	.dbline -1
	.dbline 441
; }
; 
; 
; void rtl8019RetreivePacketData(unsigned char * localBuffer, unsigned int length)
; {
L118:
	.dbline 445
	.dbline 445
	sts 51712,R18
	.dbline 445
L119:
	.dbline 445
; 	unsigned int i;
; 	
; 	// initiate DMA to transfer the data
;     rtl8019Write(RBCR0, (unsigned char)length);
L121:
	.dbline 446
	.dbline 446
	movw R2,R18
	mov R2,R3
	clr R3
	sts 51968,R2
	.dbline 446
L122:
	.dbline 446
;     rtl8019Write(RBCR1, (unsigned char)(length>>8));
L124:
	.dbline 447
	.dbline 447
	lds R2,_currentRetreiveAddress
	lds R3,_currentRetreiveAddress+1
	sts 51200,R2
	.dbline 447
L125:
	.dbline 447
;     rtl8019Write(RSAR0, (unsigned char)currentRetreiveAddress);
L127:
	.dbline 448
	.dbline 448
	lds R2,_currentRetreiveAddress
	lds R3,_currentRetreiveAddress+1
	mov R2,R3
	clr R3
	sts 51456,R2
	.dbline 448
L128:
	.dbline 448
;     rtl8019Write(RSAR1, (unsigned char)(currentRetreiveAddress>>8));
L130:
	.dbline 449
	.dbline 449
	ldi R24,10
	sts 49152,R24
	.dbline 449
L131:
	.dbline 449
;     rtl8019Write(CR, 0x0A);
	.dbline 450
; 	for(i=0;i<length;i++)
	clr R10
	clr R11
	xjmp L136
L133:
	.dbline 451
	movw R30,R10
	add R30,R16
	adc R31,R17
	lds R2,53248
	std z+0,R2
L134:
	.dbline 450
	movw R24,R10
	adiw R24,1
	movw R10,R24
L136:
	.dbline 450
	cp R10,R18
	cpc R11,R19
	brlo L133
L137:
	.dbline 454
	.dbline 454
	ldi R24,34
	sts 49152,R24
	.dbline 454
L138:
	.dbline 454
; 		localBuffer[i] = rtl8019Read(RDMAPORT);
; 
; 	// end the DMA operation
;     rtl8019Write(CR, 0x22);
	.dbline 455
;     for(i = 0; i <= 20; i++)
	clr R10
	clr R11
	xjmp L143
L140:
	.dbline 456
;         if(rtl8019Read(ISR) & 1<<6)
	lds R2,50944
	sbrs R2,6
	rjmp L144
	.dbline 457
;             break;
	xjmp L142
L144:
L141:
	.dbline 455
	movw R24,R10
	adiw R24,1
	movw R10,R24
L143:
	.dbline 455
	ldi R24,20
	ldi R25,0
	cp R24,R10
	cpc R25,R11
	brsh L140
L142:
L146:
	.dbline 458
	.dbline 458
	ldi R24,64
	sts 50944,R24
	.dbline 458
L147:
	.dbline 458
	.dbline 460
	lds R2,_currentRetreiveAddress
	lds R3,_currentRetreiveAddress+1
	add R2,R18
	adc R3,R19
	sts _currentRetreiveAddress+1,R3
	sts _currentRetreiveAddress,R2
	.dbline 461
	movw R24,R2
	cpi R24,0
	ldi R30,96
	cpc R25,R30
	brlo L149
	.dbline 462
	subi R24,0
	sbci R25,26
	sts _currentRetreiveAddress+1,R25
	sts _currentRetreiveAddress,R24
L149:
	.dbline -2
L117:
	xcall pop_gset3x
	.dbline 0 ; func end
	ret
	.dbsym r i 10 i
	.dbsym r length 18 i
	.dbsym r localBuffer 16 pc
	.dbend
	.dbfunc e rtl8019EndPacketRetreive _rtl8019EndPacketRetreive fV
;              i -> R16
	.even
_rtl8019EndPacketRetreive::
	.dbline -1
	.dbline 468
;     rtl8019Write(ISR, 1<<6);
;     
;     currentRetreiveAddress += length;
;     if( currentRetreiveAddress >= 0x6000 )
;     	currentRetreiveAddress = currentRetreiveAddress - (0x6000-0x4600) ;
; }
; 
; 
; 
; void rtl8019EndPacketRetreive(void)
; {
L152:
	.dbline 472
	.dbline 472
	ldi R24,34
	sts 49152,R24
	.dbline 472
L153:
	.dbline 472
; 	unsigned char i;
; 
; 	// end the DMA operation
;     rtl8019Write(CR, 0x22);
	.dbline 473
;     for(i = 0; i <= 20; i++)
	clr R16
	xjmp L158
L155:
	.dbline 474
;         if(rtl8019Read(ISR) & 1<<6)
	lds R2,50944
	sbrs R2,6
	rjmp L159
	.dbline 475
;             break;
	xjmp L157
L159:
L156:
	.dbline 473
	inc R16
L158:
	.dbline 473
	ldi R24,20
	cp R24,R16
	brsh L155
L157:
L161:
	.dbline 476
	.dbline 476
	ldi R24,64
	sts 50944,R24
	.dbline 476
L162:
	.dbline 476
;     rtl8019Write(ISR, 1<<6);
L164:
	.dbline 479
	.dbline 479
	lds R2,_nextPage
	sts 49920,R2
	.dbline 479
L165:
	.dbline 479
; 
; 	// set the boundary register to point to the start of the next packet
;     rtl8019Write(BNRY, nextPage);
	.dbline -2
L151:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e rtl8019Overrun _rtl8019Overrun fV
;         resend -> R10
;         data_L -> R12
	.even
_rtl8019Overrun::
	xcall push_gset4x
	.dbline -1
	.dbline 484
; }
; 
; 
; void rtl8019Overrun(void)
; {
	.dbline 487
; 	unsigned char data_L, resend;	
; 
; 	data_L = rtl8019Read(CR);

⌨️ 快捷键说明

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