main.c

来自「m16+cp2200组成的网络接口。 m16使用内部RC振荡8M」· C语言 代码 · 共 78 行

C
78
字号
#include "board.h"
#include "cp2200.h"
#include "arp.h"
#include "icmp.h"

extern union NetNode myNode;
extern union netcard rxdnetbuf;
extern union netcard txdnetbuf;

int main(void)
{
	unsigned char tmp;
	unsigned int num_bytes;
	OSCCAL = 0x9A;
	portIni();
	
//	tmp = ReadFlash(0,1);

	tmp = PHY_Init();
	MAC_Init();
	arptab_init();
	myNode.node.ip = IP4_ADDR(218,1,168,192);
	myNode.node.mask = IP4_ADDR(0,255,255,255);
	myNode.node.gate = IP4_ADDR(1,1,168,192);
	while(1)
	{
		if(CPRcv())         // Check if the current packet is valid
		{                             // On detection of a valid packet:
      
            // Unload packet from the receive buffer and store in <RX_BUFF>   
            num_bytes = CP220x_Receive(&rxdnetbuf);
			if(num_bytes > 0)
			{
				if(rxdnetbuf.etherframe.protocal==ARP_PACKET)
				{			//表示收到一个arp请求包
					if(rxdnetbuf.arpframe.operation==0x0100)
					{
						arp_answer();//ARP request,处理arp数据包
					}
					else if(rxdnetbuf.arpframe.operation==0x0200)
					{
						arp_process();//ARP answer
					}
				}
				else if((rxdnetbuf.etherframe.protocal == IP_PACKET)		//	收到一个IP包
					&& ((rxdnetbuf.ipframe.verandihl&0xf0) == 0x40)	//	IP V4
					&& (rxdnetbuf.ipframe.destip[0] == myNode.nodebytes.ipbytes[0])
					&& (rxdnetbuf.ipframe.destip[1] == myNode.nodebytes.ipbytes[1])
					&& (rxdnetbuf.ipframe.destip[2] == myNode.nodebytes.ipbytes[2])
					&& (rxdnetbuf.ipframe.destip[3] == myNode.nodebytes.ipbytes[3]))	//	my IP
				{
					arp_ip_mac();
					if(rxdnetbuf.ipframe.protocal == 1)			//	ICMP
					{
						if(rxdnetbuf.icmpframe.type == 8)		//	echo
						{
							ping_answer();
						}
					}
					else if(rxdnetbuf.ipframe.protocal == 17)	//	udp
					{
						//	net_udp_rcv();
					}
					else if(rxdnetbuf.ipframe.protocal == 6)		//	tcp
					{
						//	tcp_rcve(&rxdnetbuf);;
					}
				}
				else
				{
					//Lib_Uart_SendString("\nIEEE 802 packet rejected!\n");		//	IEEE 802 pkt rejected
				}
				//updatearptab();
			}
		}
	}
}

⌨️ 快捷键说明

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