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

📄 exp13.h

📁 本程序功能为在FPGA上nios处理器的网卡接口程序。
💻 H
字号:
#define UINT unsigned char
#define UCHAR  unsigned int

//#define ENABLE         na_NET_INT->np_piointerruptmask=1
//#define DISABLE        na_NET_INT->np_piointerruptmask=0
#include "alt_types.h"

#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(UINT m_Delay);  //延时子程序
void NET_Write_Data(UINT m_Addr,UCHAR m_Data);  //8019写一个数据的时序
UCHAR NET_Read_Data(UINT m_Addr);     //8019读一个数据的时序
void NET_Page_Set(UINT m_Page);      //设定当前页面
UINT NET_ID(UCHAR 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(void * context,UINT id);  //中断服务子程序
void Init_system(void);   //系统初始化
void Init_NET(void);  //8019初始化
void DMA_Write_Data(UCHAR *m_Buffer,UINT m_StartAddr,UINT m_Len);   //DMA写数据,指定数据,指定8019存储地址,指定长度
void NET_CLEAR_Data(void);   //清除8019的原始数据
void DMA_Read_Data(UCHAR *m_Buffer,UINT m_StartAddr,UINT m_Len);  //DMA读数据,指定8019地址,指定数据存放地址,指定长度
void NET_Send_Packet(UCHAR *m_Buffer,UINT m_Len); //发送数据包,起始页面和地址
void NET_Wait_PACK(void);  //等待收到新的数据,并将一个完整的数据包写入Receive_Buffer中,并检出包类型
UINT m_Data_Compare(UCHAR *Addr1,UINT Start_Addr1,UCHAR *Addr2,UINT Start_Addr2,UINT Len);  //多个数据判断
UINT CHECK_SUM(UCHAR *Addr,UINT Start_Len,UINT Len);   //计算校验和
//------------------------------------------------------------------------------  net_arp.c
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_UINT_UCHAR(UCHAR *Buffer,UINT Start,UINT Data);   //将一个32位的数据转换成4个8位的数组
UINT Change_UCHAR_UINT(UCHAR *Buffer,UINT Start);   //数据转换,将4个8位数组转换成一个32位无符号整数
//------------------------------------------------------------------------------  net_http.c
void APP_HTTP(void);     //http应用处理程序
void Send_HTTP_Response(void);  //发送HTTP的请求响应包
void Send_HTTP_Content(void);  //发送HTTP的内容数据包
UINT Change_Dec_ASC(UINT Data,UCHAR *ASC);  //将数字转换成ASC码
//------------------------------------------------------------------------------

UINT PACK_Type;  //数据包类型,区别于ARP,IP,RARP

UINT PACK_Len;      //数据包总长度
UINT IP_PACK_Len;   //IP数据包长度

UINT HEAD_Len_Ethernet; //以太网首部长度
        
UINT HEAD_Len_IP       = 20;  //IP首部长度
UINT HEAD_Len_TCP      = 20;  //TCP首部长度

UINT DATA_Len_HTTP;           //HTTP数据长度
UINT DATA_Len_TCP;            //TCP数据长度

UCHAR TCP_Symbol_Receive;
UCHAR TCP_Symbol_Send;


UCHAR BURY_Data;
UINT  BURY_Addr=0x0003;

UCHAR CURR_Data;
UINT  CURR_Addr=0x0007;

UCHAR MAC_Addr[]={0x00,0x0f,0x02,0x97,0xa8,0xfb};  //本地MAC地址
UCHAR MAC_O_Addr[6];                               //外部MAC地址
UCHAR MAC_R_Addr[]={0xff,0xff,0xff,0xff,0xff,0xff};  //广播MAC地址

UCHAR IP_Addr[]={192,168,0,2};                     //本地IP地址
UCHAR IP_O_Addr[4];                                //外部IP地址

UCHAR Send_Buffer[1536];  //发送缓冲区
UCHAR Receive_Buffer[1536]; //接收缓冲区

UCHAR TCP_State=0;
/*TCP的状态,
0 初始状态,等待被动连接
1 等待被动连接的第3次握手
2 正常传输状态,或等待被动断开
3 在被动断开情况下,等待第4次握手
4 在主动断开情况下,等待第2次握手
5 在主动断开情况下,等待第3次握手

6 等待HTTP响应的ACK
7 等待HTTP内容的ACK
*/


UINT  TCP_Port=0;          //本地端口号
UINT  TCP_Port_O=0;        //外部端口号

UINT  TCP_ISN=0x80000000;  //本地序号
UINT  TCP_ISN_O;           //外部序号
UINT  TCP_ISN_A;           //本地确认序号
UINT  TCP_ISN_OA;          //外部确认序号

UINT  Receive_PACK_HTTP_Len;  //收到的HTTP包中,http数据长度


alt_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: "};

alt_u8 html_header2[]={"\r\n"
                     "Connection: close\r\n"
                     "Content-Type: text/html\r\n\r\n" };


alt_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" };


alt_u8 web_page1[] = {"<html>\n"
                     "<head>\n"
                     "<title>SOPC实验箱主页</title>\n"
                     "</head>\n"
                     "<body>\n"
                     "<h1>本网页被浏览"};

alt_u8 web_page2[] = {"次</h1>\n"
                     "<marquee height=40 width=100% bgcolor=aaeeaa>\n"
                     "<h2>北京百科融创科技有限公司欢迎您选用本公司产品!</h2>\n"
                     "</marquee>\n"
                     "</body>\n"
                     "</html>\n"};

UINT  Content_Len;            //HTTP实体长度
UINT  Content_Len_ASC_Byte;   //HTTP实体长度用ASC码表示时,占用的字节数
UCHAR Content_Len_ASC[10];     //HTTP实体长度,用ASC码表示,低位在前

UINT  Open_Count=0;        //网页打开次数
UINT  Open_Count_ASC_Byte;  //网页打开次数用ASC码表示时占用的字节数
UCHAR Open_Count_ASC[10];  //网页打开次数,用ASC码表示,低位在前




⌨️ 快捷键说明

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