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

📄 prj1.lst

📁 网卡驱动程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
      6B EFCF      LDI	R28,0xFF
      6C E1D0      LDI	R29,0x10
      6D BFCD      OUT	0x3D,R28
      6E BFDE      OUT	0x3E,R29
      6F 51C0      SUBI	R28,0x10
      70 40D0      SBCI	R29,0
      71 EA0A      LDI	R16,0xAA
      72 8308      STD	Y+0,R16
      73 2400      CLR	R0
      74 E4E9      LDI	R30,0x49
      75 E0F1      LDI	R31,1
      76 E011      LDI	R17,1
      77 37E8      CPI	R30,0x78
      78 07F1      CPC	R31,R17
      79 F011      BEQ	0x007C
      7A 9201      ST	R0,Z+
      7B CFFB      RJMP	0x0077
      7C 8300      STD	Z+0,R16
      7D E8EC      LDI	R30,0x8C
      7E E0F0      LDI	R31,0
      7F E0A0      LDI	R26,0
      80 E0B1      LDI	R27,1
      81 E010      LDI	R17,0
      82 E000      LDI	R16,0
      83 BF0B      OUT	0x3B,R16
      84 3DE5      CPI	R30,0xD5
      85 07F1      CPC	R31,R17
      86 F021      BEQ	0x008B
      87 95C8      LPM
      88 9631      ADIW	R30,1
      89 920D      ST	R0,X+
      8A CFF9      RJMP	0x0084
      8B 940E 008E CALL	_main
_exit:
      8D CFFF      RJMP	_exit
FILE: E:\__test\_RTL8019_M128_struct_Test\Main.c
(0001) //*01. 本程序的晶体为 7.3728mHz  ATMEGA128 
(0002) //*02. 网卡板UDP的IP: 192.168.1.201          
(0003) //*03. 网卡板UDP的端口: 9000                 
(0004) //*04. 网卡板MAC: { 0, 0, 'a', 'b', 'c', 'd' }     
(0005) //*05. 网卡板: 192.168.1.201  9000          
(0006) //*06. 远程电脑IP: 192.168.1.160            
(0007) //*07. 远程电脑端口: 9000                   
(0008) //*08. 远程电脑MAC: { 0, 0x10, 0xB5, 0xAC, 0xF1, 0x31 }  
(0009) //*09. 无网关(GATE)
(0010) //*10. 无子网掩码(MASK)
(0011) 
(0012) //#include <string.h>
(0013) //#include <stdio.h>
(0014) #include <iom128v.h>
(0015) #include <macros.h>
(0016) 
(0017) #include "Delay_7.37M.h"
(0018) #include "Lcd7920.h"
(0019) #include "Usart1_M128.h"
(0020) #include "Rtl8019as_Ethernet_M128.h"
(0021) #include "Rtl8019as_M128.h"
(0022) 
(0023) //设置网络默认值
(0024) unsigned char MY_IP[4] = { 192,168,1,201 };
(0025) unsigned char MY_PORT[2] = { 0x23,0x28 }; //端口9000
(0026) unsigned char MY_MAC[6] = { 0,0,'a','b','c','d' };
(0027) 
(0028) unsigned char REMOTE_IP[4] = { 192,168,1,160};
(0029) unsigned char REMOTE_PORT[2] = { 0x23,0x28 }; //端口9000
(0030) unsigned char REMOTE_MAC[6] = { 0,0x10,0xB5,0xAC,0xF1,0x31 };
(0031) 
(0032) #define  set_packet32(d,s) packet[d] = make8(s,3);   \
(0033)                            packet[d+1] = make8(s,2); \
(0034)                            packet[d+2] = make8(s,1); \
(0035)                            packet[d+3]= make8(s,0); 
(0036) 						   
(0037) #define make8(var,offset)	(var >> (offset * 8)) & 0xFF
(0038) #define	make16(varhigh,varlow)	((varhigh & 0xFF)* 0x100) + (varlow & 0xFF)
(0039) #define make32(var1,var2,var3,var4) \
(0040) 		((unsigned long)var1<<24)+((unsigned long)var2<<16)+ \
(0041) 		((unsigned long)var3<<8)+((unsigned long)var4)		
(0042) 
(0043) unsigned char  flg_arp;   
(0044) 
(0045) 
(0046) void DoWithUart(void);     //处理串口接收
(0047) 
(0048) 
(0049) 
(0050) 
(0051) 
(0052) void main(void)
(0053) {
(0054)    CLI();
_main:
      8E 94F8      BCLR	7
(0055)    UART1_Init();   //串口初始化要放在8019初始化前面,以免向串口发空乱数据   
      8F 940E 0117 CALL	_UART1_Init
(0056)    LCD_Init();
      91 940E 01AE CALL	_LCD_Init
(0057)   
(0058)    ////init_RTL8019AS();
(0059) 
(0060)    ////clr_synflag;
(0061)    ////clr_finflag;
(0062)    
(0063)    //网络数据初始化  (--以后改用memcpy)
(0064)    nodRemote.cIp[0]= REMOTE_IP[0];
      93 9020 010C LDS	R2,REMOTE_IP
      95 9220 0152 STS	0x0152,R2
(0065)    nodRemote.cIp[1]= REMOTE_IP[1];
      97 9020 010D LDS	R2,REMOTE_IP+1
      99 9220 0153 STS	0x0153,R2
(0066)    nodRemote.cIp[2]= REMOTE_IP[2];
      9B 9020 010E LDS	R2,REMOTE_IP+2
      9D 9220 0154 STS	0x0154,R2
(0067)    nodRemote.cIp[3]= REMOTE_IP[3];   
      9F 9020 010F LDS	R2,REMOTE_IP+3
      A1 9220 0155 STS	0x0155,R2
(0068)    nodRemote.cPort[0]=REMOTE_PORT[0];
      A3 9020 0110 LDS	R2,REMOTE_PORT
      A5 9220 0156 STS	0x0156,R2
(0069)    nodRemote.cPort[1]=REMOTE_PORT[1];   
      A7 9020 0111 LDS	R2,REMOTE_PORT+1
      A9 9220 0157 STS	0x0157,R2
(0070)    nodRemote.cMac[0]= REMOTE_MAC[0];
      AB 9020 0112 LDS	R2,REMOTE_MAC
      AD 9220 014C STS	nodRemote,R2
(0071)    nodRemote.cMac[1]= REMOTE_MAC[1];
      AF 9020 0113 LDS	R2,REMOTE_MAC+1
      B1 9220 014D STS	nodRemote+1,R2
(0072)    nodRemote.cMac[2]= REMOTE_MAC[2];
      B3 9020 0114 LDS	R2,REMOTE_MAC+2
      B5 9220 014E STS	nodRemote+2,R2
(0073)    nodRemote.cMac[3]= REMOTE_MAC[3];
      B7 9020 0115 LDS	R2,REMOTE_MAC+3
      B9 9220 014F STS	nodRemote+3,R2
(0074)    nodRemote.cMac[4]= REMOTE_MAC[4];
      BB 9020 0116 LDS	R2,0x0116
      BD 9220 0150 STS	0x0150,R2
(0075)    nodRemote.cMac[5]= REMOTE_MAC[5];
      BF 9020 0117 LDS	R2,0x0117
      C1 9220 0151 STS	0x0151,R2
(0076)    
(0077)    nodLoc.cIp[0]=MY_IP[0];
      C3 9020 0100 LDS	R2,MY_IP
      C5 9220 0166 STS	0x0166,R2
(0078)    nodLoc.cIp[1]=MY_IP[1];
      C7 9020 0101 LDS	R2,MY_IP+1
      C9 9220 0167 STS	0x0167,R2
(0079)    nodLoc.cIp[2]=MY_IP[2];
      CB 9020 0102 LDS	R2,MY_IP+2
      CD 9220 0168 STS	0x0168,R2
(0080)    nodLoc.cIp[3]=MY_IP[3];
      CF 9020 0103 LDS	R2,MY_IP+3
      D1 9220 0169 STS	0x0169,R2
(0081)    nodLoc.cPort[0]=MY_PORT[0];
      D3 9020 0104 LDS	R2,MY_PORT
      D5 9220 016A STS	0x016A,R2
(0082)    nodLoc.cPort[1]=MY_PORT[1];   
      D7 9020 0105 LDS	R2,MY_PORT+1
      D9 9220 016B STS	0x016B,R2
(0083)    nodLoc.cMac[0]= MY_MAC[0];
      DB 9020 0106 LDS	R2,MY_MAC
      DD 9220 0160 STS	nodLoc,R2
(0084)    nodLoc.cMac[1]= MY_MAC[1];
      DF 9020 0107 LDS	R2,MY_MAC+1
      E1 9220 0161 STS	nodLoc+1,R2
(0085)    nodLoc.cMac[2]= MY_MAC[2];
      E3 9020 0108 LDS	R2,MY_MAC+2
      E5 9220 0162 STS	nodLoc+2,R2
(0086)    nodLoc.cMac[3]= MY_MAC[3];
      E7 9020 0109 LDS	R2,MY_MAC+3
      E9 9220 0163 STS	nodLoc+3,R2
(0087)    nodLoc.cMac[4]= MY_MAC[4];
      EB 9020 010A LDS	R2,0x010A
      ED 9220 0164 STS	0x0164,R2
(0088)    nodLoc.cMac[5]= MY_MAC[5];
      EF 9020 010B LDS	R2,0x010B
      F1 9220 0165 STS	0x0165,R2
(0089)    
(0090)    flg_arp='f';
      F3 E686      LDI	R24,0x66
      F4 9380 0149 STS	flg_arp,R24
(0091)    
(0092)    //delay_ms(1500);  //keep it, wait for arp 
(0093)    
(0094)    LCD_WriteStrAuto("Wan tst 080123B");
      F6 E20C      LDI	R16,0x2C
      F7 E011      LDI	R17,1
      F8 940E 027F CALL	_LCD_WriteStrAuto
(0095)    SEI();
      FA 9478      BSET	7
(0096)    
(0097)    UART1_Puts("12345abc");
      FB E203      LDI	R16,0x23
      FC E011      LDI	R17,1
      FD 940E 0190 CALL	_UART1_Puts
      FF C005      RJMP	0x0105
(0098)  
(0099) //******************************************************************
(0100) //*	Look for a packet in the receive buffer ring
(0101) //******************************************************************
(0102)    while(1)
(0103)    {   
(0104)       //Delay_nms_Preci(1500);  
(0105) 	   
(0106) 	     //串口接收处理
(0107)          if (flg_Received )   
     100 9020 0148 LDS	R2,flg_Received
     102 2022      TST	R2
     103 F009      BEQ	0x0105
(0108) 	     {
(0109) 	        DoWithUart();	  
     104 D002      RCALL	_DoWithUart
     105 CFFA      RJMP	0x0100
     106 9508      RET
(0110) 	     }   
(0111) 
(0112) /*      //start the NIC
(0113)       write_rtl(CR,0x22);		  
(0114) 
(0115)       //wait for a good packet
(0116)       while(!(PIND & INT0_pin))  //循环, 直到INT0为高电平, 执行后面的程序
(0117) 	  {
(0118)          //if (flg_arp=='f')  
(0119)          //{ 
(0120)          //   sendarp(); delay_ms(350);
(0121)          // }	 
(0122) 		  
(0123) 	     //串口接收处理
(0124)          if (flg_Received )   
(0125) 	     {
(0126) 	        DoWithUart();	  
(0127) 	     }   
(0128) 	  }
(0129) 
(0130)       //read the interrupt status register
(0131)       read_rtl(ISR);
(0132) 
(0133)       //if the receive buffer has been overrun
(0134)       if(byte_read & OVW)
(0135)          overrun();
(0136) 
(0137)       //if the receive buffer holds a good packet
(0138)       if(byte_read & PRX)
(0139)          get_frame();
(0140) 
(0141)       //make sure the receive buffer ring is empty
(0142)       //if BNRY = CURR, the buffer is empty
(0143)          read_rtl(BNRY);
(0144)          data_L = byte_read;
(0145)          write_rtl(CR,0x62);
(0146)          read_rtl(CURR);
(0147)          data_H = byte_read;
(0148)          write_rtl(CR,0x22);
(0149)       //buffer is not empty.. get next packet
(0150) 	  
(0151)          if(data_L != data_H)
(0152)             get_frame();
(0153) 
(0154)       //reset the interrupt bits
(0155)       write_rtl(ISR,0xFF);	 
(0156) 	  */ 
(0157)    }
(0158) 
(0159) }
(0160) 
(0161) void DoWithUart(void)
(0162) {
(0163)    UART1_Puts("uart in ok");
_DoWithUart:
     107 E108      LDI	R16,0x18
     108 E011      LDI	R17,1
     109 940E 0190 CALL	_UART1_Puts
(0164)    Delay_nus(5);   
     10B E005      LDI	R16,5
     10C E010      LDI	R17,0
     10D 940E 02D0 CALL	_Delay_nus
(0165)   
(0166)    //UdpSendoutStr("12345",5);
(0167) 		 
(0168)    Delay_nus(5);   
     10F E005      LDI	R16,5
     110 E010      LDI	R17,0
     111 940E 02D0 CALL	_Delay_nus
(0169)    flg_Received=0;   
     113 2422      CLR	R2
     114 9220 0148 STS	flg_Received,R2
     116 9508      RET
FILE: E:\__test\_RTL8019_M128_struct_Test\Usart1_M128.c
(0001) #include <string.h>
(0002) 
(0003) #include "Usart1_M128.h"
(0004) 
(0005) unsigned char RX_data[RX_SIZE]={0};   //串口接收缓冲区
(0006) unsigned char RX_data2[RX_SIZE]={0};  //串口接收缓冲区
(0007) volatile unsigned int iNum;                  //串口接收字符计数
(0008) unsigned char flg_Received=0;                //已接收一个卡号
(0009) 
(0010) void UART1_Init(void)
(0011) {
(0012)    UCSR1B = (1<<RXCIE1)| (1<<RXEN1) |(1<<TXEN1);   //允许串口发送和接收,并响应接收完成中断
_UART1_Init:
     117 E988      LDI	R24,0x98
     118 9380 009A STS	0x009A,R24
(0013)    UBRR1L = BAUD;                                  //波特率为9600(7.3728MHz晶振)
     11A E28F      LDI	R24,0x2F
     11B 9380 0099 STS	0x0099,R24
(0014)    UBRR1H = 0;
     11D 2422      CLR	R2
     11E 9220 0098 STS	0x0098,R2
(0015)    UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);               //8位数据+1位stop位, 异步模式
     120 E086      LDI	R24,6
     121 9380 009D STS	0x009D,R24
     123 9508      RET
_UART1_Receive:
  cRec                 --> R10
     124 920A      ST	R0,-Y
     125 921A      ST	R1,-Y
     126 922A      ST	R2,-Y
     127 923A      ST	R3,-Y
     128 924A      ST	R4,-Y
     129 925A      ST	R5,-Y
     12A 926A      ST	R6,-Y
     12B 927A      ST	R7,-Y
     12C 928A      ST	R8,-Y
     12D 929A      ST	R9,-Y
     12E 92AA      ST	R10,-Y
     12F 930A      ST	R16,-Y
     130 931A      ST	R17,-Y
     131 932A      ST	R18,-Y
     132 933A      ST	R19,-Y
     133 938A      ST	R24,-Y
     134 939A      ST	R25,-Y
     135 93AA      ST	R26,-Y
     136 93BA      ST	R27,-Y
     137 93EA      ST	R30,-Y
     138 93FA      ST	R31,-Y
     139 B60F      IN	R0,0x3F
     13A 920A      ST	R0,-Y
     13B 92AA      ST	R10,-Y
     13C 9722      SBIW	R28,2
(0016) }
(0017) 
(0018) #pragma interrupt_handler UART1_Receive: iv_USART1_RX
(0019) void UART1_Receive(void)
(0020) {
(0021) unsigned char cRec;
(0022) 	 
(0023)    cRec= UDR1;
     13D 90A0 009C LDS	R10,0x009C
(0024) 
(0025)    RX_data[iNum++]=cRec;	 
     13F 9020 014A LDS	R2,iNum
     141 9030 014B LDS	R3,iNum+1
     143 01C1      MOVW	R24,R2
     144 9601      ADIW	R24,1
     145 9390 014B STS	iNum+1,R25
     147 9380 014A STS	iNum,R24
     149 E38C      LDI	R24,0x3C
     14A E091      LDI	R25,1
     14B 01F1      MOVW	R30,R2
     14C 0FE8      ADD	R30,R24
     14D 1FF9      ADC	R31,R25
     14E 82A0      STD	Z+0,R10
(0026)    
(0027)    //每接收RX_SIZE=6个字符显示一次
(0028)    if (iNum==RX_SIZE) 
     14F 9180 014A LDS	R24,iNum
     151 9190 014B LDS	R25,iNum+1
     153 3086      CPI	R24,6
     154 E0E0      LDI	R30,0
     155 079E      CPC	R25,R30
     156 F499      BNE	0x016A
(0029)    {
(0030) 	  memcpy(RX_data2,RX_data,RX_SIZE);
     157 E086      LDI	R24,6
     158 E090      LDI	R25,0
     159 8399      STD	Y+1,R25
     15A 8388      STD	Y+0,R24
     15B E32C      LDI	R18,0x3C
     15C E031      LDI	R19,1
     15D E402      LDI	R16,0x42
     15E E011      LDI	R17,1
     15F 940E 0318 CALL	_memcpy
(0031) 	  flg_Received=1;	
     161 E081      LDI	R24,1
     162 9380 0148 STS	flg_Received,R24
(0032) 	  iNum=0;  
     164 2422      CLR	R2
     165 2433      CLR	R3
     166 9230 014B STS	iNum+1,R3
     168 9220 014A STS	iNum,R2
(0033)    }  
(0034)    
(0035)    RX_data[0]=cRec;
     16A 92A0 013C STS	RX_data,R10
(0036)    flg_Received=1;	   
     16C E081      LDI	R24,1
     16D 9380 0148 STS	flg_Received,R24
     16F 9622      ADIW	R28,2
     170 90A9      LD	R10,Y+
     171 9009      LD	R0,Y+
     172 BE0F      OUT	0x3F,R0
     173 91F9      LD	R31,Y+
     174 91E9      LD	R30,Y+
     175 91B9      LD	R27,Y+
     176 91A9      LD	R26,Y+
     177 9199      LD	R25,Y+
     178 9189      LD	R24,Y+
     179 9139      LD	R19,Y+
     17A 9129      LD	R18,Y+
     17B 9119      LD	R17,Y+
     17C 9109      LD	R16,Y+
     17D 90A9      LD	R10,Y+
     17E 9099      LD	R9,Y+
     17F 9089      LD	R8,Y+
     180 9079      LD	R7,Y+
     181 9069      LD	R6,Y+
     182 9059      LD	R5,Y+
     183 9049      LD	R4,Y+
     184 9039      LD	R3,Y+
     185 9029      LD	R2,Y+
     186 9019      LD	R1,Y+
     187 9009      LD	R0,Y+
     188 9518      RETI
(0037) }
(0038) 

⌨️ 快捷键说明

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