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

📄 ir.c

📁 一款居于世纪民生CS6208的带TCP-IP网络功能的8位MCU内核的芯片的应用代码。
💻 C
📖 第 1 页 / 共 4 页
字号:
          //else if (__wcurr1 == __wcurr2)  __wcurr = __wcurr1;
          NIC_CR1 = CR_Stop|CR_Page0;//return to page 0
		  

		  NIC_CR = CR_Start;

          while (__wcurr != NextPacket)
		        {
                   point = NextPacket*256;
				   for (i=0;i<240;i++)
				       {
                          NIC_RECV_BUFFER[i] = *point;
						  point ++;
					   }
				   /*for (i=0;i<4;i++)
				       {
                          NIC_RECV_BUFFER[i] = *point;
						  point ++;
					   }
                   PacketLength = NIC_RECV_BUFFER[2] + NIC_RECV_BUFFER[3]*256;
                   for (i=4;i<(PacketLength+4);i++)
				       {
                          NIC_RECV_BUFFER[i] = *point;
						  point ++;
						  if (point == RPSTOP*256)  point = RPSTART*256;
					   }*/
                    /*
                    NextPacket = NIC_RECV_BUFFER[1];
					if (NextPacket == RPSTART) NIC_BNRY = RPSTOP-1;
					else NIC_BNRY = NextPacket-1;
                    */
				   if (  (NIC_RECV_BUFFER[4] == 0xFF)
                       &&(NIC_RECV_BUFFER[5] == 0xFF)
                       &&(NIC_RECV_BUFFER[6] == 0xFF)
                       &&(NIC_RECV_BUFFER[7] == 0xFF)
                       &&(NIC_RECV_BUFFER[8] == 0xFF)
                       &&(NIC_RECV_BUFFER[9] == 0xFF) 
					   &&(NIC_RECV_BUFFER[16] == 0x08)
                       &&(NIC_RECV_BUFFER[17] == 0x06)  )
                       {
                          //ARP
                          if ( (NIC_RECV_BUFFER[42] == IPADDRESS[0])&&
                               (NIC_RECV_BUFFER[43] == IPADDRESS[1])&&
                               (NIC_RECV_BUFFER[44] == IPADDRESS[2])&&
                               (NIC_RECV_BUFFER[45] == IPADDRESS[3])&&
                               (NIC_RECV_BUFFER[24] == 0x00     )&&
                               (NIC_RECV_BUFFER[25] == 0x01     ) )
                             {
                                if ( (NIC_RECV_BUFFER[32] == IPADDRESS[0])&&
                                     (NIC_RECV_BUFFER[33] == IPADDRESS[1])&&
                                     (NIC_RECV_BUFFER[34] == IPADDRESS[2])&&
                                     (NIC_RECV_BUFFER[35] == IPADDRESS[3]) )
                                   {
								     // XmitPoint = __wxmitcurr*XMIT_NUMBER;
									 // __wxmitcurr ++;
									 // if (__wxmitcurr > XMIT_STOP)  __wxmitcurr = XMIT_START;
									 // for (i=0;i<6;i++)
                                     //     NIC_XMIT_RING[XmitPoint+i] = NIC_RECV_BUFFER[10+i];
                                       
                                        //ARPCOL();
									    NIC_TPSTART = TPSTART;
									    //destination address
									    NIC_XMIT_BUFFER[0] = NIC_RECV_BUFFER[10];
                                        NIC_XMIT_BUFFER[1] = NIC_RECV_BUFFER[11];
                                        NIC_XMIT_BUFFER[2] = NIC_RECV_BUFFER[12];
                                        NIC_XMIT_BUFFER[3] = NIC_RECV_BUFFER[13];
                                        NIC_XMIT_BUFFER[4] = NIC_RECV_BUFFER[14];
                                        NIC_XMIT_BUFFER[5] = NIC_RECV_BUFFER[15];
										
								   }
								else
								   {
								      //XmitPoint = __wxmitcurr*XMIT_NUMBER;
									  //__wxmitcurr ++;
									  //if (__wxmitcurr > XMIT_STOP)  __wxmitcurr = XMIT_START;
									  //for (i=0;i<6;i++)
                                      //    NIC_XMIT_RING[XmitPoint+i] = 0xFF;
                                       
                                        //ARPACK();
									    NIC_TPSTART = TPSTART;
                                        //destination address
									    NIC_XMIT_BUFFER[0] = 0xFF;
                                        NIC_XMIT_BUFFER[1] = 0xFF;
                                        NIC_XMIT_BUFFER[2] = 0xFF;
                                        NIC_XMIT_BUFFER[3] = 0xFF;
                                        NIC_XMIT_BUFFER[4] = 0xFF;
                                        NIC_XMIT_BUFFER[5] = 0xFF;
										
								   }
								     //for (i=6;i<12;i++)
                                     //     NIC_XMIT_RING[XmitPoint+i] = MACADDRESS[i-6];
								       
                                        //source address
                                        NIC_XMIT_BUFFER[6] = MACADDRESS[0];
                                        NIC_XMIT_BUFFER[7] = MACADDRESS[1];
                                        NIC_XMIT_BUFFER[8] = MACADDRESS[2];
                                        NIC_XMIT_BUFFER[9] = MACADDRESS[3];
                                        NIC_XMIT_BUFFER[10] = MACADDRESS[4];
                                        NIC_XMIT_BUFFER[11] = MACADDRESS[5];
										
								     //for (i=12;i<20;i++)
                                     //     NIC_XMIT_RING[XmitPoint+i] = NIC_RECV_BUFFER[i+4];
										
                                       //port
									    NIC_XMIT_BUFFER[12] = NIC_RECV_BUFFER[16];
									    NIC_XMIT_BUFFER[13] = NIC_RECV_BUFFER[17];
									    NIC_XMIT_BUFFER[14] = NIC_RECV_BUFFER[18];
									    NIC_XMIT_BUFFER[15] = NIC_RECV_BUFFER[19];
									    NIC_XMIT_BUFFER[16] = NIC_RECV_BUFFER[20];
									    NIC_XMIT_BUFFER[17] = NIC_RECV_BUFFER[21];
									    NIC_XMIT_BUFFER[18] = NIC_RECV_BUFFER[22];
									    NIC_XMIT_BUFFER[19] = NIC_RECV_BUFFER[23];
										
										//NIC_XMIT_RING[XmitPoint+20] = 0x00;
										//NIC_XMIT_RING[XmitPoint+21] = 0x02;
                                        
									    NIC_XMIT_BUFFER[20] = 0x00;
									    NIC_XMIT_BUFFER[21] = 0x02;
										
								     //for (i=22;i<28;i++)
                                     //     NIC_XMIT_RING[XmitPoint+i] = MACADDRESS[i-22];
										
									    //source MAC address
									    NIC_XMIT_BUFFER[22] = MACADDRESS[0];
									    NIC_XMIT_BUFFER[23] = MACADDRESS[1];
									    NIC_XMIT_BUFFER[24] = MACADDRESS[2];
									    NIC_XMIT_BUFFER[25] = MACADDRESS[3];
									    NIC_XMIT_BUFFER[26] = MACADDRESS[4];
									    NIC_XMIT_BUFFER[27] = MACADDRESS[5];
										
								     //for (i=28;i<32;i++)
                                     //     NIC_XMIT_RING[XmitPoint+i] = NIC_RECV_BUFFER[i+14];
										
									    //source IP address
									    NIC_XMIT_BUFFER[28] = NIC_RECV_BUFFER[42];
									    NIC_XMIT_BUFFER[29] = NIC_RECV_BUFFER[43];
									    NIC_XMIT_BUFFER[30] = NIC_RECV_BUFFER[44];
									    NIC_XMIT_BUFFER[31] = NIC_RECV_BUFFER[45];
										
								     //for (i=32;i<42;i++)
                                     //     NIC_XMIT_RING[XmitPoint+i] = NIC_RECV_BUFFER[i-6];
										
									    //destination MAC and IP address
									    NIC_XMIT_BUFFER[32] = NIC_RECV_BUFFER[26];
									    NIC_XMIT_BUFFER[33] = NIC_RECV_BUFFER[27];
									    NIC_XMIT_BUFFER[34] = NIC_RECV_BUFFER[28];
									    NIC_XMIT_BUFFER[35] = NIC_RECV_BUFFER[29];
									    NIC_XMIT_BUFFER[36] = NIC_RECV_BUFFER[30];
									    NIC_XMIT_BUFFER[37] = NIC_RECV_BUFFER[31];
									    NIC_XMIT_BUFFER[38] = NIC_RECV_BUFFER[32];
									    NIC_XMIT_BUFFER[39] = NIC_RECV_BUFFER[33];
									    NIC_XMIT_BUFFER[40] = NIC_RECV_BUFFER[34];
									    NIC_XMIT_BUFFER[41] = NIC_RECV_BUFFER[35];
										
										
                                        //start xmit
										NIC_TBCNT0 = 0x00;
								        NIC_TBCNT1 = 0x01;
								        NIC_CR = CR_Start|CR_Xmit;
										//CHECK_XMIT();
										
                             }
                        }
                     else   if (  (NIC_RECV_BUFFER[4] == MACADDRESS[0]) //MAC ADDRESS IP DATAGRAM
                                &&(NIC_RECV_BUFFER[5] == MACADDRESS[1])
                                &&(NIC_RECV_BUFFER[6] == MACADDRESS[2])
                                &&(NIC_RECV_BUFFER[7] == MACADDRESS[3])
                                &&(NIC_RECV_BUFFER[8] == MACADDRESS[4])
                                &&(NIC_RECV_BUFFER[9] == MACADDRESS[5])
							    &&(NIC_RECV_BUFFER[16] == 0x08)
                                &&(NIC_RECV_BUFFER[17] == 0x00)  )
                       {                       
                           if ( (NIC_RECV_BUFFER[34] == IPADDRESS[0])&&
                                (NIC_RECV_BUFFER[35] == IPADDRESS[1])&&
                              	(NIC_RECV_BUFFER[36] == IPADDRESS[2])&&
                               	(NIC_RECV_BUFFER[37] == IPADDRESS[3])&&
                               	(NIC_RECV_BUFFER[PC_SENCITY]   == 'S')&&
                               	(NIC_RECV_BUFFER[PC_SENCITY+1] == 'E')&&
                               	(NIC_RECV_BUFFER[PC_SENCITY+2] == 'N')&&
                               	(NIC_RECV_BUFFER[PC_SENCITY+3] == 'C')&&
                               	(NIC_RECV_BUFFER[PC_SENCITY+4] == 'I')&&
                               	(NIC_RECV_BUFFER[PC_SENCITY+5] == 'T')&&
                               	(NIC_RECV_BUFFER[PC_SENCITY+6] == 'Y') )
	                     	 {
							    
						        switch (NIC_RECV_BUFFER[PC_COMMAND])
		                         	   {
                                              case R_INIT: 
                                                            if ( (NIC_RECV_BUFFER[10]!=PC_MACADDRESS[0])||
                                                                 (NIC_RECV_BUFFER[11]!=PC_MACADDRESS[1])||
                                                                 (NIC_RECV_BUFFER[12]!=PC_MACADDRESS[2])||
                                                                 (NIC_RECV_BUFFER[13]!=PC_MACADDRESS[3])||
                                                                 (NIC_RECV_BUFFER[14]!=PC_MACADDRESS[4])||
                                                                 (NIC_RECV_BUFFER[15]!=PC_MACADDRESS[5])||
                                                                 (NIC_RECV_BUFFER[30]!=PC_IPADDRESS[0])||
                                                                 (NIC_RECV_BUFFER[31]!=PC_IPADDRESS[1])||
                                                                 (NIC_RECV_BUFFER[32]!=PC_IPADDRESS[2])||
                                                                 (NIC_RECV_BUFFER[33]!=PC_IPADDRESS[3])  )
                                                               {                                                         
													                PC_MACADDRESS[0] = NIC_RECV_BUFFER[10];
    		                                                        PC_MACADDRESS[1] = NIC_RECV_BUFFER[11];
            		                                                PC_MACADDRESS[2] = NIC_RECV_BUFFER[12];
                    		                                        PC_MACADDRESS[3] = NIC_RECV_BUFFER[13];
                            		                                PC_MACADDRESS[4] = NIC_RECV_BUFFER[14];
                                    		                        PC_MACADDRESS[5] = NIC_RECV_BUFFER[15];
                                            		                PC_IPADDRESS[0] = NIC_RECV_BUFFER[30];
                                                    		        PC_IPADDRESS[1] = NIC_RECV_BUFFER[31];
		                                                            PC_IPADDRESS[2] = NIC_RECV_BUFFER[32];
        		                                                    PC_IPADDRESS[3] = NIC_RECV_BUFFER[33];
																	CHECKSUM_UDP();
																	//__bwrite_pcipmac = TRUE;
                                                                }
															//__wcommand = R_INIT;														
	 										                UDP(R_INIT);															
														    break;
											  case R_HELLO:
											                //__wcommand = R_HELLO; 
	 										                UDP(R_HELLO);
														    break;
                                              case R_READMETER:
											                //__wcommand = R_READMETER;
															UDP(R_READMETER);
															break;
                                              case R_ALARM_ACK:
                                                            //__bsend = FALSE;
											                //ALARM_BUFFER[0] = 0x00;
															//ALARM_BUFFER[1] = 0x00;
															//ALARM_BUFFER[2] = 0x00;
															//ALARM_BUFFER[3] = 0x00;
															//__werror = NET_ERROR + 1;
											                break;
                                              case R_CANCEL_ACK:
                                                            //__bsend = FALSE;
											                //__werror = NET_ERROR + 1;
											                break;
                                              case R_CONTROL:
                                                            //CONTROL[0] = NIC_RECV_BUFFER[PC_COMMAND+32];
                                                            //CONTROL[1] = NIC_RECV_BUFFER[PC_COMMAND+33];
                                                            //CONTROL[2] = NIC_RECV_BUFFER[PC_COMMAND+34];
                                                            //CONTROL[3] = NIC_RECV_BUFFER[PC_COMMAND+35];
                                                            //#ifdef IO_CONTROL
                                                            //if (CONTROL[0]&0x01) __sbtxen = 0;
                                                            //else __sbtxen = 1;
                                                            //if (CONTROL[0]&0x02) __sbrx = 0;
                                                            //else __sbrx = 1;
                                                            //if (CONTROL[0]&0x04) __sbtx = 0;
                                                            //else __sbtx = 1;
                                                            //#endif
                                                            UDP(R_CONTROL);
                                                            break;
                                              case R_MODIFY1:
                                                            //__wcommand = R_MODIFY1;
															//METER0.AMOUNT = NIC_RECV_BUFFER[PC_COMMAND+1]*65536 + NIC_RECV_BUFFER[PC_COMMAND+2]*256 + NIC_RECV_BUFFER[PC_COMMAND+3];
                                                            //METER0.WRITE = 0xff;
															UDP(R_MODIFY1);
                                                            break;
                                              case R_MODIFY2:
                                                            //__wcommand = R_MODIFY2;
															//METER1.AMOUNT = NIC_RECV_BUFFER[PC_COMMAND+4]*65536 + NIC_RECV_BUFFER[PC_COMMAND+5]*256 + NIC_RECV_BUFFER[PC_COMMAND+6];
                                                            //METER1.WRITE = 0xff;
															UDP(R_MODIFY2);
                                                            break;
                                              case R_MODIFY3:
                                                            //__wcommand = R_MODIFY3;
															//METER2.AMOUNT = NIC_RECV_BUFFER[PC_COMMAND+7]*65536 + NIC_RECV_BUFFER[PC_COMMAND+8]*256 + NIC_RECV_BUFFER[PC_COMMAND+9];
                                                            //METER2.WRITE = 0xff;
															UDP(R_MODIFY3);
                                                            break;
                                              case R_MODIFY4:
                                                            //__wcommand = R_MODIFY4;
															//METER3.AMOUNT = NIC_RECV_BUFFER[PC_COMMAND+10]*65536 + NIC_RECV_BUFFER[PC_COMMAND+11]*256 + NIC_RECV_BUFFER[PC_COMMAND+12];
                                                            //METER3.WRITE = 0xff;
															UDP(R_MODIFY4);
                                                            break;
                                              case R_MODIFY5:
                                                            //__wcommand = R_MODIFY5;
															//METER4.AMOUNT = NIC_RECV_BUFFER[PC_COMMAND+13]*65536 + NIC_RECV_BUFFER[PC_COMMAND+14]*256 + NIC_RECV_BUFFER[PC_COMMAND+15];
                                                            //METER4.WRITE = 0xff;
															UDP(R_MODIFY5);
                                                            break;
                                              case R_MODIFY6:
                                                            //__wcommand = R_MODIFY6;
															//METER5.AMOUNT = NIC_RECV_BUFFER[PC_COMMAND+16]*65536 + NIC_RECV_BUFFER[PC_COMMAND+17]*256 + NIC_RECV_BUFFER[PC_COMMAND+18];
                                                            //METER5.WRITE = 0xff;
															UDP(R_MODIFY6);
                                                            break;
                                              case R_MODIFY7:
                                                            //__wcommand = R_MODIFY7;
															UDP(R_MODIFY7);
                                                            break;
                                              case R_MODIFY8:
                                                            //__wcommand = R_MODIFY8;
															UDP(R_MODIFY8);
                                                            break;
                                              case R_W_METER_NUM:
                                                            //__wcommand = R_W_METER_NUM;
															//__wmeterquantity = NIC_RECV_BUFFER[PC_COMMAND+1];
															//METER0.TYPE = NIC_RECV_BUFFER[PC_COMMAND+2];
															//METER1.TYPE = NIC_RECV_BUFFER[PC_COMMAND+3];
															//METER2.TYPE = NIC_RECV_BUFFER[PC_COMMAND+4];
															//METER3.TYPE = NIC_RECV_BUFFER[PC_COMMAND+5];
															//METER4.TYPE = NIC_RECV_BUFFER[PC_COMMAND+6];
															//METER5.TYPE = NIC_RECV_BUFFER[PC_COMMAND+7];
															//__bwrite_meter_num = TRUE;
															UDP(R_W_METER_NUM);
                                                            break;
											  case R_R_METER_NUM:
											                //__wcommand = R_R_METER_NUM;
                                                            UDP(R_R_METER_NUM);
											                break;
                                              case R_W_METER:

⌨️ 快捷键说明

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