📄 net_main.h
字号:
//#define UCHAR unsigned char
//#define UINT unsigned long
#define u16 unsigned int
#define u8 unsigned char
#define u32 unsigned long
//#define ENABLE na_NET_INT->np_piointerruptmask=1
//#define DISABLE na_NET_INT->np_piointerruptmask=0
#define SET_PAGE0 NET_Write_Data(0x0000,0x22)
#define SET_PAGE1 NET_Write_Data(0x0000,0x62)
#define PACK_ARP 0x0806
#define PACK_IP 0x0800
#define ARP_PACK_Len 60
#define Start_offset 4 //以太网偏移
#define Start_Ethernet 0
#define Start_ARP 14
#define Start_IP 14
#define Start_ICMP 34
#define Start_TCP 34
#define Start_HTTP 54
#define TCP_Symbol_FIN 0x01
#define TCP_Symbol_SYN 0x02
#define TCP_Symbol_RST 0x04
#define TCP_Symbol_PSH 0x08
#define TCP_Symbol_ACK 0x10
#define TCP_Symbol_URG 0x20
//------------------------------------------------------------------------------ y13.c
void Delay(u16 m_Delay); //延时子程序
void NET_Write_Data(u16 m_Addr,u8 m_Data); //8019写一个数据的时序
u8 NET_Read_Data(u16 m_Addr); //8019读一个数据的时序
void NET_Page_Set(u16 m_Page); //设定当前页面
u16 NET_ID(u8 m_Num); //获得8019的ID
void Set_MAC_Addr(void); //设置8019网卡MAC地址
void Read_Phy_ID(void); //获得网卡物理地址 该程序可能有点问题
void NET_Hard_Reset(void); //8019硬复位
void NET_Soft_Reset(void); //8019软复位
void NET_INT_ISR(int context); //中断服务子程序
void Init_system(void); //系统初始化
void Init_NET(void); //8019初始化
void DMA_Write_Data(u8 *m_Buffer,u16 m_StartAddr,u16 m_Len); //DMA写数据,指定数据,指定8019存储地址,指定长度
void NET_CLEAR_Data(void); //清除8019的原始数据
void DMA_Read_Data(u8 *m_Buffer,u16 m_StartAddr,u16 m_Len); //DMA读数据,指定8019地址,指定数据存放地址,指定长度
void NET_Send_Packet(u8 *m_Buffer,u16 m_Len); //发送数据包,起始页面和地址
void NET_Wait_PACK(void); //等待收到新的数据,并将一个完整的数据包写入Receive_Buffer中,并检出包类型
u16 m_Data_Compare(u8 *Addr1,u16 Start_Addr1,u8 *Addr2,u16 Start_Addr2,u16 Len); //多个数据判断
u16 CHECK_SUM(u8 *Addr,u16 Start_Len,u16 Len); //计算校验和
//------------------------------------------------------------------------------ net_arp.c
void SaveAdd(void);
void IP_ARP(void); //ARP数据处理
//------------------------------------------------------------------------------ net_ping.c
void Revert_Ping(void); //回复Ping数据包
//------------------------------------------------------------------------------ net_head.c
void HEAD_Ethernet (void); //以太网头,14个字节
void HEAD_IP(void); //IP头,20字节
void HEAD_TCP(void); //TCP头,20字节
//------------------------------------------------------------------------------ net_tcp.c
void IP_TCP(void); //tcp协议处理程序
void Send_TCP_PACK(void); //发送TCP连接用的标志数据包
void Change_u32_u8(u8 *Buffer,u16 Start,u32 Data); //将一个32位的数据转换成4个8位的数组
u32 Change_u8_u32(u8 *Buffer,u16 Start); //数据转换,将4个8位数组转换成一个32位无符号整数
//------------------------------------------------------------------------------ net_http.c
void APP_HTTP(void); //http应用处理程序
void Send_HTTP_Response(void); //发送HTTP的请求响应包
void Send_HTTP_Content(void); //发送HTTP的内容数据包
u16 Change_Dec_ASC(u16 Data,u8 *ASC); //将数字转换成ASC码
//------------------------------------------------------------------------------
u16 PACK_Type; //数据包类型,区别于ARP,IP,RARP
u16 PACK_Len; //数据包总长度
u16 IP_PACK_Len; //IP数据包长度
u16 HEAD_Len_Ethernet = 14; //以太网首部长度
u16 HEAD_Len_IP = 20; //IP首部长度
u16 HEAD_Len_TCP = 20; //TCP首部长度
u16 DATA_Len_HTTP; //HTTP数据长度
u16 DATA_Len_TCP; //TCP数据长度
u8 TCP_Symbol_Receive;
u8 TCP_Symbol_Send;
u8 BURY_Data;
u16 BURY_Addr=0x0003;
u8 CURR_Data;
u16 CURR_Addr=0x0007;
u16 CR_Addr=0x0000;
u8 MAC_Addr[]={0x00,0x0f,0x02,0x97,0xa8,0xfb}; //本地MAC地址
u8 MAC_O_Addr[6]; //外部MAC地址
u8 MAC_R_Addr[]={0xff,0xff,0xff,0xff,0xff,0xff}; //广播MAC地址
u8 IP_Addr[]={192,168,1,2}; //本地IP地址
u8 IP_O_Addr[4]; //外部IP地址
u8 Send_Buffer[1536+20]; //发送缓冲区
u8 Receive_Buffer[1536+20]; //接收缓冲区
u8 TCP_State=0;
/*TCP的状态,
0 初始状态,等待被动连接
1 等待被动连接的第3次握手
2 正常传输状态,或等待被动断开
3 在被动断开情况下,等待第4次握手
4 在主动断开情况下,等待第2次握手
5 在主动断开情况下,等待第3次握手
6 等待HTTP响应的ACK
7 等待HTTP内容的ACK
*/
u16 TCP_Port=0; //本地端口号
u16 TCP_Port_O=0; //外部端口号
u32 TCP_ISN=0x80000000L; //本地序号
u32 TCP_ISN_O; //外部序号
u32 TCP_ISN_A; //本地确认序号
u32 TCP_ISN_OA; //外部确认序号
u16 Receive_PACK_HTTP_Len; //收到的HTTP包中,http数据长度
u8 html_header1[]={"HTTP/1.1 200 OK\r\n" //17
"Cache-control: no-cache\r\n" //25
//"Connection: Keep-Alive\r\n" //24
"Content-Length: "};
u8 html_header2[]={"\r\n"
"Connection: close\r\n"
"Content-Type: text/html\r\n\r\n" };
u8 html_header[]={"HTTP/1.1 200 OK\r\n"
"Cache-control: no-cache\r\n"
"Connection: Keep-Alive\r\n"
"Content-Length: 1\r\n"
"Content-Type: text/html\r\n\r\n" };
u8 web_page1[] = {"<html>\n"
"<head>\n"
"<title>DSP实验箱主页</title>\n"
"</head>\n"
"<body>\n"
"<h1>本网页被浏览"};
u8 web_page2[] = {"次</h1>\n"
"<marquee height=40 width=100% bgcolor=aaeeaa>\n"
"<h2>北京百科融创科技有限公司欢迎您选用本公司产品!</h2>\n"
"</marquee>\n"
"</body>\n"
"</html>\n"};
u16 Content_Len; //HTTP实体长度
u16 Content_Len_ASC_Byte; //HTTP实体长度用ASC码表示时,占用的字节数
u8 Content_Len_ASC[10]; //HTTP实体长度,用ASC码表示,低位在前
u16 Open_Count=0; //网页打开次数
u16 Open_Count_ASC_Byte; //网页打开次数用ASC码表示时占用的字节数
u8 Open_Count_ASC[10]; //网页打开次数,用ASC码表示,低位在前
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -