第一次上传E3boot
This commit is contained in:
293
interface_ethernet.c
Normal file
293
interface_ethernet.c
Normal file
@@ -0,0 +1,293 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include "debug.h"
|
||||
#include <string.h>
|
||||
#include <udelay/udelay.h>
|
||||
#include "interface_ethernet.h"
|
||||
#include "eth_cfg.h"
|
||||
#include "lwip/timeouts.h"
|
||||
#include "sdrv_eth.h"
|
||||
#include "IAP_Task.h"
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define MAX_BUFFER_SIZE (sizeof(((RequestContext *)0)->param_request->arr))
|
||||
#define MAX_PACKET_SIZE 1024 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СΪ1K
|
||||
|
||||
|
||||
struct udp_pcb *udpcb_1;
|
||||
struct udp_pcb *udpcb_2;
|
||||
struct udp_pcb *udpcb_3;
|
||||
|
||||
bool eth_pool_rx = false;
|
||||
|
||||
|
||||
UnEthernetFault ethernet_fault_Info = {
|
||||
.bit_data.auto_count = 0,
|
||||
.bit_data.manual_count = 0,
|
||||
.bit_data.auto_state = 0,
|
||||
.bit_data.manual_state = 0,
|
||||
};
|
||||
|
||||
|
||||
|
||||
StrEthernetParameter ethernet_parameter = {
|
||||
.local_ip = {192,168,17,20},
|
||||
.mask = {255,255,255,0},
|
||||
.computer_ip = {192,168,17,3},
|
||||
.local_communication_port = 8011,
|
||||
.Local_upper_port = 8000,
|
||||
.Local_download_port = 7811,
|
||||
.upper_ip = {192,168,17,3},
|
||||
.download_ip = {192,168,17,183},
|
||||
.target_upper_port = 8000,
|
||||
.target_download_port = 7811,
|
||||
.target_communication_port = 8011,
|
||||
};
|
||||
|
||||
|
||||
|
||||
static bool g_eth1_rx_pkt;
|
||||
|
||||
|
||||
|
||||
static void eth_dma_rx_int_cb(struct net_driver_s *dev)
|
||||
{
|
||||
if (dev == &g_eth1_dev)
|
||||
g_eth1_rx_pkt = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void lwip_Ethernet(void)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>ETH֡<48><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>LWIPЭ<50><D0AD>ջ
|
||||
// <20><><EFBFBD><EFBFBD>ʹ<EFBFBD>ܽ<EFBFBD><DCBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD>ΪISR<53><52><EFBFBD><EFBFBD>disable<6C><65><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20>жϽ<D0B6><CFBD>ձ<EFBFBD>־(g_eth1_rx_pkt)<29>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20>µĽ<C2B5><C4BD><EFBFBD><EFBFBD>жϱ<D0B6><CFB1><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD>ﲻ<EFBFBD><EFB2BB><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⡣
|
||||
if ((!eth_pool_rx && g_eth1_rx_pkt) || eth_pool_rx)
|
||||
{
|
||||
g_eth1_rx_pkt = false;
|
||||
dwc_eth_rx(&g_eth1_dev, eth_pool_rx);
|
||||
}
|
||||
|
||||
// LWIPЭ<50><D0AD>ջ<EFBFBD>ӿڣ<D3BF><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LWIP<49><50>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
||||
sys_check_timeouts();
|
||||
|
||||
// printf("lwipInterface spend time:%d\n",getCurrentTime() - time_boot);//<2F><><EFBFBD><EFBFBD>app<70><70><EFBFBD>˶ʱ<E0B3A4><CAB1>
|
||||
}
|
||||
|
||||
|
||||
//err_t
|
||||
//udp_bind(struct udp_pcb *pcb, const ip_addr_t *ipaddr, u16_t port)
|
||||
|
||||
void UdpSendToData(uint8_t udpcbID, uint8_t *buf, uint16_t len, uint8_t *sip, uint16_t port)
|
||||
{
|
||||
struct pbuf *DesPuff = NULL;
|
||||
ip4_addr_t Desaddr;
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
IP4_ADDR(&Desaddr,sip[0],sip[1],sip[2],sip[3]);//<2F><>ֵַת<D6B5><D7AA>
|
||||
|
||||
DesPuff = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_POOL); /* <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> */
|
||||
|
||||
pbuf_take(DesPuff, buf, len); /* <20><>g_lwip_demo_sendbuf<75>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>pbuf<75>ṹ<EFBFBD><E1B9B9> */
|
||||
|
||||
if(UDPCB_1 == udpcbID)
|
||||
{
|
||||
udp_sendto(udpcb_1, DesPuff, &Desaddr, port);
|
||||
}
|
||||
else if(UDPCB_2 == udpcbID)
|
||||
{
|
||||
udp_sendto(udpcb_2, DesPuff, &Desaddr, port);
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
pbuf_free(DesPuff); /* <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD> */
|
||||
}
|
||||
|
||||
// udpcbID UDP<44><50><EFBFBD><EFBFBD>
|
||||
//recv <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
//port <20>˿<F3B6A8B6>
|
||||
void UDP_Echo_Init(uint8_t udpcbID, udp_recv_fn recv, uint16_t port)
|
||||
{
|
||||
//------------------------------------------
|
||||
if(UDPCB_1 == udpcbID)
|
||||
{
|
||||
/* <20>½<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>*/
|
||||
udpcb_1 = udp_new();
|
||||
ASSERT(udpcb_1);
|
||||
/* <20>˿ں<CBBF> */
|
||||
udp_bind(udpcb_1, IP_ADDR_ANY, port);
|
||||
/* ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻص<DDBB><D8B5><EFBFBD><EFBFBD><EFBFBD> */
|
||||
udp_recv(udpcb_1, recv, (void *)udpcbID);
|
||||
}
|
||||
else if(UDPCB_2 == udpcbID)
|
||||
{
|
||||
/* <20>½<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>*/
|
||||
udpcb_2 = udp_new();
|
||||
ASSERT(udpcb_2);
|
||||
/* <20>˿ں<CBBF> */
|
||||
udp_bind(udpcb_2, IP_ADDR_ANY, port);
|
||||
/* ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻص<DDBB><D8B5><EFBFBD><EFBFBD><EFBFBD> */
|
||||
udp_recv(udpcb_2, recv, (void *)udpcbID);
|
||||
}
|
||||
else if(UDPCB_3 == udpcbID)
|
||||
{
|
||||
/* <20>½<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>*/
|
||||
udpcb_3 = udp_new();
|
||||
ASSERT(udpcb_3);
|
||||
/* <20>˿ں<CBBF> */
|
||||
udp_bind(udpcb_3, IP_ADDR_ANY, port);
|
||||
/* ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻص<DDBB><D8B5><EFBFBD><EFBFBD><EFBFBD> */
|
||||
udp_recv(udpcb_3, recv, (void *)udpcbID);
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void udp_Callback_2(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
|
||||
{
|
||||
uint16_t FrameHeader = 0;
|
||||
|
||||
uint8_t *Abuf = (uint8_t *)(p->payload);
|
||||
|
||||
// Eth_Rx_Flag = 1;
|
||||
|
||||
FrameHeader = ( (Abuf[0] << 8) | (Abuf[1]) );
|
||||
|
||||
if(WDT_Refresh == FrameHeader)//ι<><CEB9>
|
||||
{
|
||||
WDTReFresh_flag = true;//<2F><><EFBFBD>յ<EFBFBD>֡<EFBFBD><EFBFBD><CDB8><EFBFBD>
|
||||
ssdk_printf(SSDK_CRIT, "WDT_Refresh:0x%x\r\n", WDTReFresh_flag);
|
||||
}
|
||||
|
||||
pbuf_free(p);
|
||||
}
|
||||
|
||||
|
||||
void udp_Callback_1(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
|
||||
{
|
||||
uint8_t *Abuf = (uint8_t *)(p->payload);
|
||||
|
||||
Flash_info Bbuf = {0};
|
||||
Flash_info *buf = &Bbuf;
|
||||
uint16_t FrameHeader = 0;
|
||||
//------------------------------------------------------------------------------
|
||||
des_ipaddr[0] = addr->addr & 0xff; /* IADDR4 */
|
||||
des_ipaddr[1] = (addr->addr >> 8) & 0xff; /* IADDR3 */
|
||||
des_ipaddr[2] = (addr->addr >> 16) & 0xff; /* IADDR2 */
|
||||
des_ipaddr[3] = (addr->addr >> 24) & 0xff; /* IADDR1 */
|
||||
|
||||
Eth_Rx_Flag ++;
|
||||
Flash_RxBuf_1.Download_Mode = DOWNLOAD_ETH;//<2F><>̫<EFBFBD><CCAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
|
||||
|
||||
for(uint16_t i = 0;i < (p->len);i++)//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
|
||||
{
|
||||
buf->dataBuffer[i] = Abuf[i];
|
||||
}
|
||||
buf->length = p->len;//<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
FrameHeader = ( (buf->dataBuffer[0] << 8) | (buf->dataBuffer[1]) );
|
||||
|
||||
switch(ethCmdSTT)
|
||||
{
|
||||
case 0:
|
||||
if(FrameHeader == CRC_UPDATE )//CRCָ<43><D6B8>
|
||||
{
|
||||
memcpy(&ENET_RxBuf_1.RxData[0],buf->dataBuffer,buf->length);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
flash_eth_time = 1;
|
||||
|
||||
if( (FlashBufInitial == (Flash_RxBuf_1.Flash_RxBufSta)) || (FlashBufCRCFail == (Flash_RxBuf_1.Flash_RxBufSta)) || (FlashBufWrite == (Flash_RxBuf_1.Flash_RxBufSta)) )//<2F><>ʼ״̬<D7B4><CCAC>д<EFBFBD><D0B4><EFBFBD>ɣ<EFBFBD>crc<72><63><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
|
||||
{
|
||||
Flash_RxBuf_1.Flash_RxBufCRC = ( (buf->dataBuffer[2] << 8) | (buf->dataBuffer[3]) );//CRC
|
||||
Flash_RxBuf_1.Flash_RxBufLen = ( (buf->dataBuffer[5] << 16) | (buf->dataBuffer[6] << 8) | (buf->dataBuffer[7]) );//֡<><D6A1><EFBFBD><EFBFBD>
|
||||
Flash_RxBuf_1.Flash_RxBufLenNow = 0;
|
||||
Flash_RxBuf_1.Flash_RxBufSta = FlashBufInComplete;//<2F>л<EFBFBD>״̬
|
||||
ethCmdSTT = 10;
|
||||
}
|
||||
else if( (FlashBufInitial == (Flash_RxBuf_2.Flash_RxBufSta)) || (FlashBufCRCFail == (Flash_RxBuf_2.Flash_RxBufSta)) || (FlashBufWrite == (Flash_RxBuf_2.Flash_RxBufSta)) )//<2F><>ʼ״̬<D7B4><CCAC>д<EFBFBD><D0B4><EFBFBD>ɣ<EFBFBD>crc<72><63><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
|
||||
{
|
||||
Flash_RxBuf_2.Flash_RxBufCRC = ( (buf->dataBuffer[2] << 8) | (buf->dataBuffer[3]) );//CRC
|
||||
Flash_RxBuf_2.Flash_RxBufLen = ( (buf->dataBuffer[5] << 16) | (buf->dataBuffer[6] << 8) | (buf->dataBuffer[7]) );//֡<><D6A1><EFBFBD><EFBFBD>
|
||||
Flash_RxBuf_2.Flash_RxBufLenNow = 0;
|
||||
Flash_RxBuf_2.Flash_RxBufSta = FlashBufInComplete;//<2F>л<EFBFBD>״̬
|
||||
ethCmdSTT = 20;
|
||||
}
|
||||
else{}
|
||||
}
|
||||
else if(1024 == buf->length )//ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>1K<31><4B><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>û<EFBFBD><C3BB><EFBFBD>յ<EFBFBD>CRC<52><43>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>Ϊ<EFBFBD><CEAA>֡
|
||||
{
|
||||
ENET_RxBuf_1.RxData[0] = (uint8_t)(LOST_FRAME >> 8);//<2F><>λ <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
ENET_RxBuf_1.RxData[1] = (uint8_t)(LOST_FRAME);
|
||||
ethCmdSTT = 0;
|
||||
}
|
||||
else//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
{
|
||||
memcpy(&ENET_RxBuf_1.RxData[0],buf->dataBuffer,buf->length);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ssdk_printf(SSDK_CRIT, "ENET_RxBuf[0] :0x%x, ENET_RxBuf[1]:0x%x\r\n", ENET_RxBuf_1.RxData[0],ENET_RxBuf_1.RxData[1]);
|
||||
ethCmdSTT = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case 10:
|
||||
ENET_RxBuf_1.RxData[0] = (uint8_t)(CRC_UPDATE >> 8);//<2F><>λ <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
ENET_RxBuf_1.RxData[1] = (uint8_t)(CRC_UPDATE);
|
||||
|
||||
memcpy(&Flash_RxBuf_1.RxData[Flash_RxBuf_1.Flash_RxBufLenNow],buf->dataBuffer,buf->length);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Flash_RxBuf_1.Flash_RxBufLenNow = (Flash_RxBuf_1.Flash_RxBufLenNow) + (buf->length);
|
||||
if( (Flash_RxBuf_1.Flash_RxBufLenNow) >= (Flash_RxBuf_1.Flash_RxBufLen) )//<2F><><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>
|
||||
{
|
||||
Flash_RxBuf_1.Flash_RxBufSta = FlashBufComplete;//<2F>л<EFBFBD>״̬
|
||||
ethCmdSTT = 0;
|
||||
flash_eth_time = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
flash_eth_time = 1;
|
||||
Flash_RxBuf_1.Flash_RxBufSta = FlashBufInComplete;//<2F>л<EFBFBD>״̬
|
||||
ethCmdSTT = 10;
|
||||
}
|
||||
break;
|
||||
|
||||
case 20://<2F><><EFBFBD><EFBFBD>2
|
||||
ENET_RxBuf_1.RxData[0] = (uint8_t)(CRC_UPDATE >> 8);//<2F><>λ <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
ENET_RxBuf_1.RxData[1] = (uint8_t)(CRC_UPDATE);
|
||||
memcpy(&Flash_RxBuf_2.RxData[Flash_RxBuf_2.Flash_RxBufLenNow],buf->dataBuffer,buf->length);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Flash_RxBuf_2.Flash_RxBufLenNow = (Flash_RxBuf_2.Flash_RxBufLenNow) + (buf->length);
|
||||
|
||||
if( (Flash_RxBuf_2.Flash_RxBufLenNow) >= (Flash_RxBuf_2.Flash_RxBufLen) )//<2F><><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>
|
||||
{
|
||||
Flash_RxBuf_2.Flash_RxBufSta = FlashBufComplete;//<2F>л<EFBFBD>״̬
|
||||
ethCmdSTT = 0;
|
||||
flash_eth_time = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
flash_eth_time = 1;
|
||||
Flash_RxBuf_2.Flash_RxBufSta = FlashBufInComplete;//<2F>л<EFBFBD>״̬
|
||||
ethCmdSTT = 20;
|
||||
}
|
||||
break;
|
||||
}
|
||||
pbuf_free(p);
|
||||
}
|
||||
|
||||
|
||||
// APPģ<50><C4A3><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>
|
||||
void ethernetInterfaceInit(void)
|
||||
{
|
||||
//-----------------------------------
|
||||
if (!eth_pool_rx) {
|
||||
// ʹ<><CAB9>DMA Rx<52>жϡ<D0B6>Txδʹ<CEB4><CAB9><EFBFBD>жϣ<D0B6><CFA3><EFBFBD>ΪETH<54><48><EFBFBD>ʺܸߣ<DCB8>
|
||||
// Tx<54>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȡ<D9B6>
|
||||
dwc_eth_enable_dma_rx_int(&g_eth1_dev, eth_dma_rx_int_cb);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user