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

📄 arp.s

📁 AVR以太网开发板中的几个例子。文件中定义了网卡芯片的IP地址,默认值是192.168.0.99。
💻 S
字号:
	.module arp.c
	.area text(rom, con, rel)
	.dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\icc例子\arp.c
	.dbfunc e arp_response _arp_response fV
;        ip_sou3 -> R14
;        ip_sou2 -> R12
;        ip_sou1 -> R10
;        ip_sou0 -> R20
;       mac_sou5 -> R22
;       mac_sou4 -> y+28
;       mac_sou3 -> y+27
;       mac_sou2 -> y+26
;       mac_sou1 -> y+25
;       mac_sou0 -> y+24
;       arpbegin -> R4,R5
	.even
_arp_response::
	xcall push_gset5
	movw R4,R16
	sbiw R28,29
	.dbline -1
	.dbline 9
; #include "main.h"
; #include "rtl8019as.h"
; #include "arp.h"
; #include "ip.h"
; #include "icmp.h"
; #include "udp.h"
; 
; void arp_response(unsigned char *arpbegin)
; {
	.dbline 10
;  unsigned char mac_sou0=0;
	clr R0
	std y+24,R0
	.dbline 11
;  unsigned char mac_sou1=0;
	std y+25,R0
	.dbline 12
;  unsigned char mac_sou2=0;
	std y+26,R0
	.dbline 13
;  unsigned char mac_sou3=0;
	std y+27,R0
	.dbline 14
;  unsigned char mac_sou4=0;
	std y+28,R0
	.dbline 15
;  unsigned char mac_sou5=0;
	clr R22
	.dbline 16
;  unsigned char ip_sou0=0;
	clr R20
	.dbline 17
;  unsigned char ip_sou1=0;
	clr R10
	.dbline 18
;  unsigned char ip_sou2=0;
	clr R12
	.dbline 19
;  unsigned char ip_sou3=0;
	clr R14
	.dbline 22
;  
;  
;  if((*arpbegin==0) && (*(arpbegin+1))==1 &&         //只处理以太网数据包
	movw R30,R4
	ldd R2,z+0
	tst R2
	breq X1
	xjmp L1
X1:
	ldd R24,z+1
	cpi R24,1
	breq X2
	xjmp L1
X2:
	movw R30,R4
	ldd R24,z+2
	cpi R24,8
	breq X3
	xjmp L1
X3:
	movw R30,R4
	ldd R2,z+3
	tst R2
	breq X4
	xjmp L1
X4:
	.dbline 24
;     (*(arpbegin+2)==0x08) && (*(arpbegin+3))==0x00) //只处理IPv4数据包
;  {
	.dbline 25
;     if((*(arpbegin+24)!=myip_3) || //匹配本地IP,不匹配者忽略
	movw R30,R4
	ldd R24,z+24
	cpi R24,192
	brne L8
	movw R30,R4
	ldd R24,z+25
	cpi R24,168
	brne L8
	movw R30,R4
	ldd R2,z+26
	tst R2
	brne L8
	movw R30,R4
	ldd R24,z+27
	cpi R24,99
	breq L4
L8:
	.dbline 30
;       (*(arpbegin+25)!=myip_2) ||
; 	  (*(arpbegin+26)!=myip_1) ||
; 	  (*(arpbegin+27)!=myip_0)
; 	 )
; 	 {
	.dbline 31
; 	  return;
	xjmp L1
L4:
	.dbline 33
; 	 }
;   switch(*(arpbegin+7))
	movw R30,R4
	ldd R2,z+7
	clr R3
	std y+23,R3
	std y+22,R2
	movw R24,R2
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq L12
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brne X5
	xjmp L1
X5:
	cpi R24,3
	ldi R30,0
	cpc R25,R30
	brne X6
	xjmp L1
X6:
	cpi R24,4
	ldi R30,0
	cpc R25,R30
	brne X7
	xjmp L1
X7:
	xjmp L1
X0:
	.dbline 34
;   {
L12:
	.dbline 36
;    case 0x01:   //处理ARP请求
;         mac_sou5=*(arpbegin+8);
	movw R30,R4
	ldd R22,z+8
	.dbline 37
; 		mac_sou4=*(arpbegin+9);
	movw R30,R4
	ldd R2,z+9
	std y+28,R2
	.dbline 38
; 		mac_sou3=*(arpbegin+10);
	movw R30,R4
	ldd R2,z+10
	std y+27,R2
	.dbline 39
; 		mac_sou2=*(arpbegin+11);
	movw R30,R4
	ldd R2,z+11
	std y+26,R2
	.dbline 40
; 		mac_sou1=*(arpbegin+12);
	movw R30,R4
	ldd R2,z+12
	std y+25,R2
	.dbline 41
; 		mac_sou0=*(arpbegin+13);
	movw R30,R4
	ldd R2,z+13
	std y+24,R2
	.dbline 42
; 		ip_sou3=*(arpbegin+14);
	movw R30,R4
	ldd R14,z+14
	.dbline 43
; 		ip_sou2=*(arpbegin+15);
	movw R30,R4
	ldd R12,z+15
	.dbline 44
;         ip_sou1=*(arpbegin+16);
	movw R30,R4
	ldd R10,z+16
	.dbline 45
; 		ip_sou0=*(arpbegin+17);
	movw R30,R4
	ldd R20,z+17
	.dbline 46
; 		buildpack(mac_sou5,mac_sou4,mac_sou3,mac_sou2,mac_sou1,mac_sou0,
	ldi R24,2054
	ldi R25,8
	std y+21,R25
	std y+20,R24
	ldi R24,69
	std y+18,R24
	ldi R24,67
	std y+16,R24
	ldi R24,73
	std y+14,R24
	ldi R24,70
	std y+12,R24
	std y+10,R24
	ldi R24,79
	std y+8,R24
	mov R0,R2
	std y+6,R0
	ldd R0,y+25
	std y+4,R0
	ldd R0,y+26
	std y+2,R0
	ldd R0,y+27
	std y+0,R0
	ldd R18,y+28
	mov R16,R22
	push R4
	push R5
	xcall _buildpack
	pop R5
	pop R4
	.dbline 49
; 			      mynodeid_0,mynodeid_1,mynodeid_2,mynodeid_3,mynodeid_4,mynodeid_5,
; 				  0x0806);		
; 		*(arpbegin-4)=0x00;		  
	clr R2
	movw R30,R4
	sbiw R30,4
	std z+0,R2
	.dbline 50
; 	    *(arpbegin-3)=0x01;
	ldi R24,1
	movw R30,R4
	sbiw R30,3
	std z+0,R24
	.dbline 51
; 		*(arpbegin-2)=0x08;
	ldi R24,8
	movw R30,R4
	sbiw R30,2
	std z+0,R24
	.dbline 52
; 		*(arpbegin-1)=0x00;
	movw R30,R4
	sbiw R30,1
	std z+0,R2
	.dbline 53
; 		*(arpbegin)=0x06;
	ldi R24,6
	movw R30,R4
	std z+0,R24
	.dbline 54
; 		*(arpbegin+1)=0x04;
	ldi R24,4
	std z+1,R24
	.dbline 55
; 		*(arpbegin+2)=0x00;
	movw R30,R4
	std z+2,R2
	.dbline 57
; 		
; 		*(arpbegin+3)=0x02;
	ldi R24,2
	movw R30,R4
	std z+3,R24
	.dbline 59
; 		
; 		*(arpbegin+4)=mynodeid_0;
	ldi R24,79
	movw R30,R4
	std z+4,R24
	.dbline 60
; 		*(arpbegin+5)=mynodeid_1;
	ldi R24,70
	movw R30,R4
	std z+5,R24
	.dbline 61
; 		*(arpbegin+6)=mynodeid_2;
	movw R30,R4
	std z+6,R24
	.dbline 62
; 		*(arpbegin+7)=mynodeid_3;
	ldi R24,73
	movw R30,R4
	std z+7,R24
	.dbline 63
; 		*(arpbegin+8)=mynodeid_4;
	ldi R24,67
	movw R30,R4
	std z+8,R24
	.dbline 64
; 		*(arpbegin+9)=mynodeid_5;
	ldi R24,69
	movw R30,R4
	std z+9,R24
	.dbline 66
; 		
; 		*(arpbegin+10)=myip_3;
	ldi R24,192
	movw R30,R4
	std z+10,R24
	.dbline 67
; 		*(arpbegin+11)=myip_2;
	ldi R24,168
	movw R30,R4
	std z+11,R24
	.dbline 68
; 		*(arpbegin+12)=myip_1;
	movw R30,R4
	std z+12,R2
	.dbline 69
; 		*(arpbegin+13)=myip_0;
	ldi R24,99
	movw R30,R4
	std z+13,R24
	.dbline 71
; 		
; 		*(arpbegin+14)=mac_sou5;
	movw R30,R4
	std z+14,R22
	.dbline 72
; 		*(arpbegin+15)=mac_sou4;
	movw R30,R4
	ldd R0,y+28
	std z+15,R0
	.dbline 73
; 		*(arpbegin+16)=mac_sou3;
	movw R30,R4
	ldd R0,y+27
	std z+16,R0
	.dbline 74
; 		*(arpbegin+17)=mac_sou2;
	movw R30,R4
	ldd R0,y+26
	std z+17,R0
	.dbline 75
; 		*(arpbegin+18)=mac_sou1;
	movw R30,R4
	ldd R0,y+25
	std z+18,R0
	.dbline 76
; 		*(arpbegin+19)=mac_sou0;
	movw R30,R4
	ldd R0,y+24
	std z+19,R0
	.dbline 78
; 		
; 		*(arpbegin+20)=ip_sou3;
	movw R30,R4
	std z+20,R14
	.dbline 79
; 		*(arpbegin+21)=ip_sou2;
	movw R30,R4
	std z+21,R12
	.dbline 80
; 		*(arpbegin+22)=ip_sou1;
	movw R30,R4
	std z+22,R10
	.dbline 81
; 		*(arpbegin+23)=ip_sou0;
	movw R30,R4
	std z+23,R20
	.dbline 82
; 		rtl8019_sendpack(60,0);
	clr R18
	ldi R16,60
	ldi R17,0
	xcall _rtl8019_sendpack
	.dbline 83
;         break;
	.dbline 86
; 		
;    case 0x02:   //处理ARP应答
;         break;
	.dbline 89
; 		
;    case 0x03:   //处理RARP请求
;         break;
	.dbline 92
; 		
;    case 0x04:   //处理RARP应答
;         break;
	.dbline 94
; 		
;    default:break;
	.dbline 96
;   }                     
;  }
	.dbline 97
;  return;
	.dbline -2
L1:
	adiw R28,29
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r ip_sou3 14 c
	.dbsym r ip_sou2 12 c
	.dbsym r ip_sou1 10 c
	.dbsym r ip_sou0 20 c
	.dbsym r mac_sou5 22 c
	.dbsym l mac_sou4 28 c
	.dbsym l mac_sou3 27 c
	.dbsym l mac_sou2 26 c
	.dbsym l mac_sou1 25 c
	.dbsym l mac_sou0 24 c
	.dbsym r arpbegin 4 pc
	.dbend

⌨️ 快捷键说明

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