diff --git a/FreeRTOS/source/include/FreeRTOSIPConfig.h b/FreeRTOS/source/include/FreeRTOSIPConfig.h
index 01a9a49..ec43a00 100644
--- a/FreeRTOS/source/include/FreeRTOSIPConfig.h
+++ b/FreeRTOS/source/include/FreeRTOSIPConfig.h
@@ -43,7 +43,16 @@
#define ipconfigUSE_DHCP 1
#define ipconfigUSE_DHCP_HOOK 1
#define ipconfigUSE_DNS_CACHE 1
+#define ipconfigMAC_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY )
+//#define ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES 1
+//#define ipconfigDRIVER_INCLUDED_TX_IP_CHECKSUM 1
+//#define ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM 1
+//#define ipconfigZERO_COPY_RX_DRIVER 1
+//#define ipconfigZERO_COPY_TX_DRIVER 1
+#define ipconfigUSE_LINKED_RX_MESSAGES 1
+//#define ipconfigUDP_MAX_RX_PACKETS 10
#define ipconfigSUPPORT_SIGNALS 1
+
#ifdef DEBUG
#define ipconfigHAS_DEBUG_PRINTF 1
diff --git a/FreeRTOS/source/portable/NetworkInterface/board_family/NetworkInterface.c b/FreeRTOS/source/portable/NetworkInterface/board_family/NetworkInterface.c
index 61c9eef..a4cfdea 100644
--- a/FreeRTOS/source/portable/NetworkInterface/board_family/NetworkInterface.c
+++ b/FreeRTOS/source/portable/NetworkInterface/board_family/NetworkInterface.c
@@ -82,6 +82,9 @@
//#ifdef RTE_Drivers_PHY_DP83848C /* Driver PHY DP83848C */
//#endif
+#ifdef DEBUG
+#define BKPT __asm volatile("BKPT #0\n") ;
+#endif
static void receiveHandlerTask( void *pvParameters );
static TaskHandle_t receiveHandler = NULL;
@@ -95,6 +98,24 @@ static ARM_ETH_MAC_CAPABILITIES capabilities;
extern ARM_DRIVER_ETH_PHY ARM_Driver_ETH_PHY_(0);
#define Driver_ETH_PHY0 ARM_Driver_ETH_PHY_(0)
+/**
+ \fn void ENET_IRQHandler(void)
+ \brief Ethernet IRQ Handler
+*/
+void ENET_IRQHandler(void)
+{
+ portBASE_TYPE pxHigherPriorityTaskWoken = pdFALSE;
+ if (SET == enet_interrupt_flag_get(ENET_DMA_INT_FLAG_RS))
+ {
+ enet_interrupt_flag_clear(ENET_DMA_INT_FLAG_RS_CLR);
+ vTaskNotifyGiveFromISR(receiveHandler, &pxHigherPriorityTaskWoken );
+ }
+ if( pxHigherPriorityTaskWoken == pdTRUE)
+ {
+ taskYIELD();
+ }
+}
+
/**
\fn ARM_DRIVER_VERSION ARM_ETH_MAC_GetVersion (void)
\brief Get driver version.
@@ -102,7 +123,7 @@ extern ARM_DRIVER_ETH_PHY ARM_Driver_ETH_PHY_(0);
*/
ARM_DRIVER_VERSION ARM_ETH_MAC_GetVersion (void)
{
- ARM_DRIVER_VERSION eth_mac_driver_version = {1,1};
+ ARM_DRIVER_VERSION eth_mac_driver_version = {1,2};
return eth_mac_driver_version;
}
@@ -145,15 +166,17 @@ int32_t ARM_ETH_MAC_Initialize (ARM_ETH_MAC_SignalEvent_t cb_event)
{
ErrStatus xResult = ARM_DRIVER_ERROR;
+ (void)cb_event;
if (SUCCESS == enet_init(ENET_AUTO_NEGOTIATION, ENET_AUTOCHECKSUM_DROP_FAILFRAMES, ENET_RECEIVEALL))
xResult = ARM_DRIVER_OK;
- //enet_ptp_start(int32_t updatemethod, uint32_t init_sec, uint32_t init_subsec, uint32_t carry_cfg, uint32_t accuracy_cfg)
+
+ enet_interrupt_enable( ENET_DMA_INT_RIE );
+/* enet_interrupt_enable( ENET_DMA_INT_TIE );
+ enet_interrupt_enable( ENET_DMA_INT_TBUIE );
+ enet_interrupt_enable( ENET_DMA_INT_ERIE );*/
+ enet_interrupt_enable( ENET_DMA_INT_NIE );
+
return xResult;
-
- //enet_init(ENET_AUTO_NEGOTIATION, ENET_AUTOCHECKSUM_DROP_FAILFRAMES, ENET_RECEIVEALL);
- //enet_ptp_start(int32_t updatemethod, uint32_t init_sec, uint32_t init_subsec, uint32_t carry_cfg, uint32_t accuracy_cfg)
- //return pdTRUE;
-
}
/**
@@ -220,10 +243,9 @@ int32_t ARM_ETH_MAC_SetMacAddress (const ARM_ETH_MAC_ADDR *ptr_addr)
*/
int32_t ARM_ETH_MAC_SetAddressFilter (const ARM_ETH_MAC_ADDR *ptr_addr, uint32_t num_addr)
{
-#ifdef DEBUG
- printf("ARM_ETH_MAC_SetAddressFilter\n");
- __asm volatile("BKPT #0\n") ;
-#endif
+
+ FreeRTOS_debug_printf(("ARM_ETH_MAC_SetAddressFilter\n"));
+
enet_address_filter_config(ENET_MAC_ADDRESS0, ENET_ADDRESS_MASK_BYTE0, ENET_ADDRESS_FILTER_SA);
enet_address_filter_config(ENET_MAC_ADDRESS0, ENET_ADDRESS_MASK_BYTE1, ENET_ADDRESS_FILTER_SA);
enet_address_filter_config(ENET_MAC_ADDRESS0, ENET_ADDRESS_MASK_BYTE2, ENET_ADDRESS_FILTER_SA);
@@ -243,10 +265,7 @@ int32_t ARM_ETH_MAC_SetAddressFilter (const ARM_ETH_MAC_ADDR *ptr_addr, uint32_t
*/
int32_t ARM_ETH_MAC_SendFrame (const uint8_t *frame, uint32_t len, uint32_t flags)
{
-#ifdef DEBUG
- printf("ARM_ETH_MAC_SendFrame\n");
-// __asm volatile("BKPT #0\n") ;
-#endif
+ FreeRTOS_debug_printf(("ARM_ETH_MAC_SendFrame\n"));
if (frame != NULL & len > 0)
{
if (SUCCESS == enet_frame_transmit((uint8_t*)frame, len))
@@ -268,10 +287,8 @@ int32_t ARM_ETH_MAC_SendFrame (const uint8_t *frame, uint32_t len, uint32_t flag
*/
int32_t ARM_ETH_MAC_ReadFrame (uint8_t *frame, uint32_t len)
{
-#ifdef DEBUG
- printf("ARM_ETH_MAC_ReadFrame\n");
-// __asm volatile("BKPT #0\n") ;
-#endif
+ FreeRTOS_debug_printf(("ARM_ETH_MAC_ReadFrame\n"));
+
if (frame != NULL & len > 0)
{
if (SUCCESS == enet_frame_receive(frame, len))
@@ -300,10 +317,8 @@ uint32_t ARM_ETH_MAC_GetRxFrameSize (void)
*/
int32_t ARM_ETH_MAC_GetRxFrameTime (ARM_ETH_MAC_TIME *time)
{
-#ifdef DEBUG
- printf("ARM_ETH_MAC_GetRxFrameTime\n");
-// __asm volatile("BKPT #0\n") ;
-#endif
+ FreeRTOS_debug_printf(("ARM_ETH_MAC_GetRxFrameTime\n"));
+
//if ENET_RXTX_TIMESTAMP bit set in ENET_PTP_TSCTL register (enet_ptp_start(int32_t updatemethod, uint32_t init_sec, uint32_t init_subsec, uint32_t carry_cfg, uint32_t accuracy_cfg);)
enet_ptp_systime_struct systime_struct;
enet_ptp_system_time_get(&systime_struct);
@@ -320,10 +335,8 @@ int32_t ARM_ETH_MAC_GetRxFrameTime (ARM_ETH_MAC_TIME *time)
*/
int32_t ARM_ETH_MAC_GetTxFrameTime (ARM_ETH_MAC_TIME *time)
{
-#ifdef DEBUG
- printf("ARM_ETH_MAC_GetTxFrameTime\n");
-// __asm volatile("BKPT #0\n") ;
-#endif
+ FreeRTOS_debug_printf(("ARM_ETH_MAC_GetTxFrameTime\n"));
+
//if ENET_RXTX_TIMESTAMP bit set in ENET_PTP_TSCTL register (enet_ptp_timestamp_function_config(ENET_PTP_SYSTIME_INIT);)
enet_ptp_systime_struct systime_struct;
enet_ptp_system_time_get(&systime_struct);
@@ -341,10 +354,8 @@ int32_t ARM_ETH_MAC_GetTxFrameTime (ARM_ETH_MAC_TIME *time)
*/
int32_t ARM_ETH_MAC_Control (uint32_t control, uint32_t arg)
{
-#ifdef DEBUG
- printf("ARM_ETH_MAC_Control\n");
-// __asm volatile("BKPT #0\n") ;
-#endif
+ FreeRTOS_debug_printf(("ARM_ETH_MAC_Control\n"));
+
if((control >= 0) & (arg >= 0))
{
if(SUCCESS == enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, control, (uint16_t*)&arg))
@@ -364,10 +375,8 @@ int32_t ARM_ETH_MAC_Control (uint32_t control, uint32_t arg)
*/
int32_t ARM_ETH_MAC_ControlTimer (uint32_t control, ARM_ETH_MAC_TIME *time)
{
-#ifdef DEBUG
- printf("ARM_ETH_MAC_ControlTimer\n");
-// __asm volatile("BKPT #0\n") ;
-#endif
+ FreeRTOS_debug_printf(("ARM_ETH_MAC_ControlTimer\n"));
+
if((control >= 0) & (time != NULL))
{
if(SUCCESS == enet_phy_write_read(ENET_PHY_WRITE, PHY_ADDRESS, control, (uint16_t*)time))
@@ -394,15 +403,11 @@ int32_t ARM_ETH_MAC_PHY_Read (uint8_t phy_addr, uint8_t reg_addr, uint16_t *data
return ARM_DRIVER_OK;
else
{
-#ifdef DEBUG
- printf("ARM_ETH_MAC_PHY_Read_ERROR\n");
-#endif
+ FreeRTOS_debug_printf(("ARM_ETH_MAC_PHY_Read_ERROR\n"));
return ARM_DRIVER_ERROR;
}
}else
-#ifdef DEBUG
- printf("ARM_ETH_MAC_PHY_Read_ERROR_PARAMETER\n");
-#endif
+ FreeRTOS_debug_printf(("ARM_ETH_MAC_PHY_Read_ERROR_PARAMETER\n"));
return ARM_DRIVER_ERROR_PARAMETER;
}
@@ -422,15 +427,11 @@ int32_t ARM_ETH_MAC_PHY_Write (uint8_t phy_addr, uint8_t reg_addr, uint16_t data
return ARM_DRIVER_OK;
else
{
-#ifdef DEBUG
- printf("ARM_ETH_MAC_PHY_Write_ERROR\n");
-#endif
+ FreeRTOS_debug_printf(("ARM_ETH_MAC_PHY_Write_ERROR\n"));
return ARM_DRIVER_ERROR;
}
}else
-#ifdef DEBUG
- printf("ARM_ETH_MAC_PHY_Write_ERROR_PARAMETER\n");
-#endif
+ FreeRTOS_debug_printf(("ARM_ETH_MAC_PHY_Write_ERROR_PARAMETER\n"));
return ARM_DRIVER_ERROR_PARAMETER;
}
@@ -441,6 +442,27 @@ int32_t ARM_ETH_MAC_PHY_Write (uint8_t phy_addr, uint8_t reg_addr, uint16_t data
\return none
*/
+/*callback function for ARM_ETH_MAC_SignalEvent_t*/
+void ethernet_mac_notify (uint32_t event) {
+ switch (event) {
+ case ARM_ETH_MAC_EVENT_RX_FRAME:
+ /*received frame,call receive fuction*/
+ //led1_toggle();
+ xTaskNotifyGive( receiveHandler );
+ break;
+
+ case ARM_ETH_MAC_EVENT_TX_FRAME:
+ /* deliver finished */
+ break;
+
+ case ARM_ETH_MAC_EVENT_WAKEUP:
+ break;
+
+ case ARM_ETH_MAC_EVENT_TIMER_ALARM:
+ /* do nothing */
+ break;
+ }
+}
ARM_DRIVER_ETH_MAC Driver_ETH_MAC0 = {ARM_ETH_MAC_GetVersion,
ARM_ETH_MAC_GetCapabilities,
@@ -464,27 +486,7 @@ ARM_DRIVER_ETH_MAC Driver_ETH_MAC0 = {ARM_ETH_MAC_GetVersion,
-/*callback function for ARM_ETH_MAC_SignalEvent_t*/
-void ethernet_mac_notify (uint32_t event) {
- switch (event) {
- case ARM_ETH_MAC_EVENT_RX_FRAME:
- /*received frame,call receive fuction*/
- //led1_toggle();
- xTaskNotifyGive( receiveHandler );
- break;
-
- case ARM_ETH_MAC_EVENT_TX_FRAME:
- /* deliver finished */
- break;
-
- case ARM_ETH_MAC_EVENT_WAKEUP:
- break;
-
- case ARM_ETH_MAC_EVENT_TIMER_ALARM:
- /* do nothing */
- break;
- }
-}
+
/* init the mac */
int32_t macIntialise(void)
@@ -587,9 +589,8 @@ BaseType_t xNetworkInterfaceInitialise( void )
/* send tcp/ip buffer to mac buffer */
static void sendData(uint8_t *pucEthernetBuffer,size_t xDataLength){
if(mac->SendFrame(pucEthernetBuffer,xDataLength,ARM_ETH_MAC_TX_FRAME_EVENT|ARM_ETH_MAC_TX_FRAME_TIMESTAMP) == ARM_DRIVER_OK){
- //success
- }
- else{
+
+ }else{
//error
}
}
diff --git a/RTE/RTOS/FreeRTOSConfig.h b/RTE/RTOS/FreeRTOSConfig.h
index 3138fda..73f19b8 100644
--- a/RTE/RTOS/FreeRTOSConfig.h
+++ b/RTE/RTOS/FreeRTOSConfig.h
@@ -50,7 +50,7 @@ extern uint32_t SystemCoreClock;
/* Constants that describe the hardware and memory usage. */
#define configCPU_CLOCK_HZ (SystemCoreClock)
#define configTICK_RATE_HZ ((TickType_t)1000)
-#define configTOTAL_HEAP_SIZE ((size_t)4*8192)
+#define configTOTAL_HEAP_SIZE ((size_t)6*8192)
#define configMINIMAL_STACK_SIZE ((uint16_t)256)
#define configSUPPORT_DYNAMIC_ALLOCATION 1
#define configSUPPORT_STATIC_ALLOCATION 0
diff --git a/Test_project_for_GD32107C-EVAL.uvoptx b/Test_project_for_GD32107C-EVAL.uvoptx
index 527f0d8..143c208 100644
--- a/Test_project_for_GD32107C-EVAL.uvoptx
+++ b/Test_project_for_GD32107C-EVAL.uvoptx
@@ -125,7 +125,7 @@
0
DLGTARM
- (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)
+ (1010=1360,271,1810,828,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)
0
@@ -157,7 +157,7 @@
0
0
- 1008
+ 612
1
0
0
@@ -166,14 +166,14 @@
0
0
0
- .\FreeRTOS\source\FreeRTOS_Sockets.c
+ .\FreeRTOS\source\portable\NetworkInterface\board_family\NetworkInterface.c
1
0
- 967
+ 591
1
0
0
@@ -182,23 +182,7 @@
0
0
0
- .\FreeRTOS\source\FreeRTOS_Sockets.c
-
-
-
-
- 2
- 0
- 865
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- .\FreeRTOS\source\FreeRTOS_Sockets.c
+ .\FreeRTOS\source\portable\NetworkInterface\board_family\NetworkInterface.c
@@ -232,14 +216,24 @@
5
1
- dma_current_txdesc
+ dma_current_rxdesc
+
+
+ 6
+ 1
+ xDHCPSocket
+
+
+ 7
+ 1
+ pxCurrentTCB
1
0
- pxNetworkBuffer
+ 0x200072FA
0
@@ -260,7 +254,7 @@
- C:\Users\User\AppData\Local\Arm\Packs\ARM\CMSIS-FreeRTOS\10.5.1\CMSIS\RTOS2\FreeRTOS\FreeRTOS.scvd
+ E:\Arm\Packs\ARM\CMSIS-FreeRTOS\10.5.1\CMSIS\RTOS2\FreeRTOS\FreeRTOS.scvd
ARM.CMSIS-FreeRTOS.10.5.1
1
@@ -306,12 +300,18 @@
+
+
+ System Viewer\ENET_DMA
+ 35905
+
+
Source Group 1
- 0
+ 1
0
0
0
@@ -367,7 +367,7 @@
1
5
1
- 1
+ 0
0
0
.\PHY\PHY_DP83848C.c
@@ -651,7 +651,7 @@
2
28
1
- 1
+ 0
0
0
.\FreeRTOS\source\portable\NetworkInterface\board_family\NetworkInterface.c
@@ -699,7 +699,7 @@
::Device
- 0
+ 1
0
0
1
diff --git a/main.c b/main.c
index bf37715..653c592 100644
--- a/main.c
+++ b/main.c
@@ -239,8 +239,13 @@ static void vInitMCU(void)
/* Enable Ethernet MAC */
enet_descriptors_chain_init(ENET_DMA_TX);
enet_descriptors_chain_init(ENET_DMA_RX);
+ //enet_desc_receive_complete_bit_enable(dma_current_rxdesc);
enet_enable();
-
+ __disable_irq();
+ NVIC_ClearPendingIRQ(ENET_IRQn);
+ NVIC_SetPriority(ENET_IRQn, ipconfigMAC_INTERRUPT_PRIORITY);
+ NVIC_EnableIRQ(ENET_IRQn);
+ __enable_irq();
}
/**! \brief vTaskHelloWorld procedure