📄 main.c
字号:
/*****************************************************************************\
* *
* LwIP移植实验 *
* *
* 该程序移植了LwIP(一个轻量级的TCP/IP协议栈)。 *
* *
* 程序默认物理地址为:22-44-66-88-AA-CC(在g_LocalEthAddr中定义) *
* 默认IP地址:192.168.196.200 *
* 子网掩码:255.255.255.0 *
* 默认网关:192.168.196.1 *
* 程序运行后可以响应主机的ping命令(使用ICMP协议)。 *
* *
* 另外,该程序还实现了一个简易的HTTP服务, *
* 可以在主机上用浏览器查看地址http://192.168.196.200处的示例网页。 *
* *
\*****************************************************************************/
#include "lwip/mem.h"
#include "lwip/memp.h"
#include "lwip/pbuf.h"
#include "lwip/netif.h"
#include "lwip/ip.h"
#include "lwip/tcp.h"
#include "netif/ethernetif.h"
#include "71x_lib.h"
#include "Ethernet.h"
#include "sample_http.h"
void __main(void)
{
struct netif ethif;
struct ip_addr ipaddr, netmask, gw;
#ifdef DEBUG
debug();
#endif
RCCU_Div2Config(ENABLE); // Enable DIV2
RCCU_MCLKConfig(RCCU_DEFAULT); // Configure MCLK = RCLK
RCCU_FCLKConfig(RCCU_RCLK_8); // Configure FCLK = RCLK / 8
RCCU_PCLKConfig(RCCU_RCLK_8); // Configure PCLK = RCLK / 8
RCCU_PLL1Config(RCCU_PLL1_Mul_12 , RCCU_Div_2) ; // Configure the PLL1 ( * 12 , / 2 )
while(RCCU_FlagStatus(RCCU_PLL1_LOCK) == RESET);// Wait PLL to lock
RCCU_RCLKSourceConfig(RCCU_PLL1_Output); // Select PLL1_Output as RCLK clock
// at this step the CKOUT signal should be equal to 48 Mhz
// 初始化LwIP的内部缓冲区、网络界面
mem_init();
memp_init();
pbuf_init();
netif_init();
// TODO: 修改默认网络配置以适应具体需要
IP4_ADDR(&ipaddr, 192, 168, 196, 200); // IP地址
IP4_ADDR(&netmask, 255, 255, 255, 0); // 子网掩码
IP4_ADDR(&gw, 192, 168, 196, 1); // 网关
netif_add(ðif, &ipaddr, &netmask, &gw,
NULL, ethernetif_init, ip_input); // 建立LwIP网络界面
netif_set_default(ðif); // 设为默认网络界面
netif_set_up(ðif); // 启动网络界面
ip_init(); // 初始化IP模块
tcp_init(); // 初始化TCP模块
http_init(); // 初始化HTTP模块
RTC_PrescalerConfig(8192);
RTC_FlagClear(RTC_OWIR);
RTC_FlagClear(RTC_AIR);
RTC_FlagClear(RTC_SIR);
RTC_FlagClear(RTC_GIR);
EIC_Init();
EIC_IRQChannelConfig(RTC_IRQChannel, ENABLE);
EIC_IRQChannelPriorityConfig(RTC_IRQChannel, 1);
EIC_IRQConfig(ENABLE);
RTC_ITConfig(RTC_SIT | RTC_GIT, ENABLE);
while(1)
{
ethbuf_len = NIC_RecvPack(ethbuf);
// 接收来自NIC的数据包
if(ethbuf_len > 0) // 有数据包被接收?
ethernetif_input(ðif); // 是,将数据包交给LwIP处理
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -