Modified configuration

This commit is contained in:
Alexey Bazlaev 2023-04-10 18:00:45 +07:00
commit 4fb1bf9f11
6 changed files with 1872 additions and 1603 deletions

View File

@ -38,7 +38,7 @@
/* It is not sensible for this macro to have a default value as it is hardware /* It is not sensible for this macro to have a default value as it is hardware
* dependent. */ * dependent. */
#define ipconfigBYTE_ORDER pdFREERTOS_LITTLE_ENDIAN #define ipconfigBYTE_ORDER pdFREERTOS_LITTLE_ENDIAN
#define ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS 4 //#define ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS 4
#define ipconfigUSE_NETWORK_EVENT_HOOK 1 #define ipconfigUSE_NETWORK_EVENT_HOOK 1
#define ipconfigUSE_DHCP 1 #define ipconfigUSE_DHCP 1
#define ipconfigUSE_DHCP_HOOK 1 #define ipconfigUSE_DHCP_HOOK 1
@ -46,6 +46,46 @@
#define ipconfigMAC_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY ) #define ipconfigMAC_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY )
#define ipconfigDHCP_REGISTER_HOSTNAME 1 #define ipconfigDHCP_REGISTER_HOSTNAME 1
#define ipconfigUSE_DNS 1 #define ipconfigUSE_DNS 1
#ifndef DEBUG
#warning Define ipconfigWATCHDOG_TIMER()
/* This macro will be called in every loop the IP-task makes. It may be
* replaced by user-code that triggers a watchdog */
#define ipconfigWATCHDOG_TIMER()
#endif
/* The option 'ipconfigUSE_CALLBACKS' allows to assign specific application
* hooks to a socket. Each hook will be set with a specific socket option:
*
* FREERTOS_SO_TCP_CONN_HANDLER * Callback for (dis) connection events.
* * Supply pointer to 'F_TCP_UDP_Handler_t'
* FREERTOS_SO_TCP_RECV_HANDLER * Callback for receiving TCP data.
* * Supply pointer to 'F_TCP_UDP_Handler_t'
* FREERTOS_SO_TCP_SENT_HANDLER * Callback for sending TCP data.
* * Supply pointer to 'F_TCP_UDP_Handler_t'
* FREERTOS_SO_UDP_RECV_HANDLER * Callback for receiving UDP data.
* * Supply pointer to 'F_TCP_UDP_Handler_t'
* FREERTOS_SO_UDP_SENT_HANDLER * Callback for sending UDP data.
* * Supply pointer to 'F_TCP_UDP_Handler_t'
*
* Note that the call-back functions will run in the IP-task, so very little
* things can be done. Better not to call any networking API, because that
* could easily lead to a deadlock situation.
*/
#define ipconfigUSE_CALLBACKS ( 0 )
/* When non-zero, the buffers passed to xNetworkInterfaceOutput() will be passed
* directly to DMA. As soon as sending is ready, the buffers must be released by
* calling vReleaseNetworkBufferAndDescriptor(). */
#define ipconfigZERO_COPY_TX_DRIVER ( 0 )
/* When enabled, the network interface will pass the network buffers directly to
* the DMA descriptors. When a packet has been received, the function
* pxPacketBuffer_to_NetworkBuffer() will translate a buffer address to a
* network packet, so it can be passed to the IP-task. */
#define ipconfigZERO_COPY_RX_DRIVER ( 0 )
//#define ipconfigUSE_LLMNR 1 //#define ipconfigUSE_LLMNR 1
//#define ipconfigUSE_NBNS 1 //#define ipconfigUSE_NBNS 1
//#define ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES 1 //#define ipconfigETHERNET_DRIVER_FILTERS_FRAME_TYPES 1

View File

@ -3,16 +3,16 @@
#include <stdio.h> #include <stdio.h>
#define iptraceNETWORK_DOWN() FreeRTOS_debug_printf(("[IPTRACE] Network down\nFreeHeapSize = %d\n", xPortGetFreeHeapSize())); //#define iptraceNETWORK_DOWN() FreeRTOS_debug_printf(("[IPTRACE] Network down\nFreeHeapSize = %d\n", xPortGetFreeHeapSize()));
#define iptraceSENDING_DNS_REQUEST() FreeRTOS_debug_printf(("[IPTRACE] Sending DNS request\nFreeHeapSize = %d\n", xPortGetFreeHeapSize())); #define iptraceSENDING_DNS_REQUEST() FreeRTOS_debug_printf(("[IPTRACE] Sending DNS request\nFreeHeapSize = %d\n", xPortGetFreeHeapSize()));
#define iptraceSENDING_DHCP_DISCOVER() FreeRTOS_debug_printf(("[IPTRACE] Sending DHCP discover\nFreeHeapSize = %d\n", xPortGetFreeHeapSize())); //#define iptraceSENDING_DHCP_DISCOVER() FreeRTOS_debug_printf(("[IPTRACE] Sending DHCP discover\nFreeHeapSize = %d\n", xPortGetFreeHeapSize()));
#define iptraceSENDING_DHCP_REQUEST() FreeRTOS_debug_printf(("[IPTRACE] Sending DHCP request\nFreeHeapSize = %d\n", xPortGetFreeHeapSize())); //#define iptraceSENDING_DHCP_REQUEST() FreeRTOS_debug_printf(("[IPTRACE] Sending DHCP request\nFreeHeapSize = %d\n", xPortGetFreeHeapSize()));
#define iptraceETHERNET_RX_EVENT_LOST() FreeRTOS_debug_printf(("[IPTRACE] Ethernet rx event lost\nFreeHeapSize = %d\n", xPortGetFreeHeapSize())); #define iptraceETHERNET_RX_EVENT_LOST() FreeRTOS_debug_printf(("[IPTRACE] Ethernet rx event lost\nFreeHeapSize = %d\n", xPortGetFreeHeapSize()));

View File

@ -28,6 +28,7 @@
#ifndef NETWORK_INTERFACE_H #ifndef NETWORK_INTERFACE_H
#define NETWORK_INTERFACE_H #define NETWORK_INTERFACE_H
#ifndef STM32_PORT
//#include "FreeRTOS.h" //#include "FreeRTOS.h"
//#include "FreeRTOSIPConfig.h" //#include "FreeRTOSIPConfig.h"
//#include "stdio.h" //#include "stdio.h"
@ -41,301 +42,302 @@
BaseType_t xNetworkInterfaceInitialise( void ); BaseType_t xNetworkInterfaceInitialise( void );
BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor,BaseType_t xReleaseAfterSend ); BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescriptor,BaseType_t xReleaseAfterSend );
#else /*STM32_PORT*/
/* *INDENT-ON* */ /* *INDENT-ON* */
///** /**
// * @brief HAL State structures definition * @brief HAL State structures definition
// */ */
// typedef enum typedef enum
// { {
// HAL_ETH_STATE_RESET = 0x00U, /*!< Peripheral not yet Initialized or disabled */ HAL_ETH_STATE_RESET = 0x00U, /*!< Peripheral not yet Initialized or disabled */
// HAL_ETH_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */ HAL_ETH_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */
// HAL_ETH_STATE_BUSY = 0x02U, /*!< an internal process is ongoing */ HAL_ETH_STATE_BUSY = 0x02U, /*!< an internal process is ongoing */
// HAL_ETH_STATE_BUSY_TX = 0x12U, /*!< Data Transmission process is ongoing */ HAL_ETH_STATE_BUSY_TX = 0x12U, /*!< Data Transmission process is ongoing */
// HAL_ETH_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing */ HAL_ETH_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing */
// HAL_ETH_STATE_BUSY_TX_RX = 0x32U, /*!< Data Transmission and Reception process is ongoing */ HAL_ETH_STATE_BUSY_TX_RX = 0x32U, /*!< Data Transmission and Reception process is ongoing */
// HAL_ETH_STATE_BUSY_WR = 0x42U, /*!< Write process is ongoing */ HAL_ETH_STATE_BUSY_WR = 0x42U, /*!< Write process is ongoing */
// HAL_ETH_STATE_BUSY_RD = 0x82U, /*!< Read process is ongoing */ HAL_ETH_STATE_BUSY_RD = 0x82U, /*!< Read process is ongoing */
// HAL_ETH_STATE_TIMEOUT = 0x03U, /*!< Timeout state */ HAL_ETH_STATE_TIMEOUT = 0x03U, /*!< Timeout state */
// HAL_ETH_STATE_ERROR = 0x04U /*!< Reception process is ongoing */ HAL_ETH_STATE_ERROR = 0x04U /*!< Reception process is ongoing */
// } HAL_ETH_StateTypeDef; } HAL_ETH_StateTypeDef;
//
///**
// * @brief ETH Init Structure definition
// */
//typedef struct /**
//{ * @brief ETH Init Structure definition
// uint32_t AutoNegotiation; /*!< Selects or not the AutoNegotiation mode for the external PHY */
// * The AutoNegotiation allows an automatic setting of the Speed (10/100Mbps)
// * and the mode (half/full-duplex).
// * This parameter can be a value of @ref ETH_AutoNegotiation */
// uint32_t Speed; /*!< Sets the Ethernet speed: 10/100 Mbps. typedef struct
// * This parameter can be a value of @ref ETH_Speed */ {
uint32_t AutoNegotiation; /*!< Selects or not the AutoNegotiation mode for the external PHY
* The AutoNegotiation allows an automatic setting of the Speed (10/100Mbps)
* and the mode (half/full-duplex).
* This parameter can be a value of @ref ETH_AutoNegotiation */
// uint32_t DuplexMode; /*!< Selects the MAC duplex mode: Half-Duplex or Full-Duplex mode uint32_t Speed; /*!< Sets the Ethernet speed: 10/100 Mbps.
// * This parameter can be a value of @ref ETH_Duplex_Mode */ * This parameter can be a value of @ref ETH_Speed */
// uint16_t PhyAddress; /*!< Ethernet PHY address. uint32_t DuplexMode; /*!< Selects the MAC duplex mode: Half-Duplex or Full-Duplex mode
// * This parameter must be a number between Min_Data = 0 and Max_Data = 32 */ * This parameter can be a value of @ref ETH_Duplex_Mode */
// uint8_t * MACAddr; /*!< MAC Address of used Hardware: must be pointer on an array of 6 bytes */ uint16_t PhyAddress; /*!< Ethernet PHY address.
* This parameter must be a number between Min_Data = 0 and Max_Data = 32 */
// uint32_t RxMode; /*!< Selects the Ethernet Rx mode: Polling mode, Interrupt mode. uint8_t * MACAddr; /*!< MAC Address of used Hardware: must be pointer on an array of 6 bytes */
// * This parameter can be a value of @ref ETH_Rx_Mode */
// uint32_t ChecksumMode; /*!< Selects if the checksum is check by hardware or by software. uint32_t RxMode; /*!< Selects the Ethernet Rx mode: Polling mode, Interrupt mode.
// * This parameter can be a value of @ref ETH_Checksum_Mode */ * This parameter can be a value of @ref ETH_Rx_Mode */
// uint32_t MediaInterface; /*!< Selects the media-independent interface or the reduced media-independent interface. uint32_t ChecksumMode; /*!< Selects if the checksum is check by hardware or by software.
// * This parameter can be a value of @ref ETH_Media_Interface */ * This parameter can be a value of @ref ETH_Checksum_Mode */
//} ETH_InitTypeDef;
uint32_t MediaInterface; /*!< Selects the media-independent interface or the reduced media-independent interface.
* This parameter can be a value of @ref ETH_Media_Interface */
} ETH_InitTypeDef;
///**
// * @brief ETH MAC Configuration Structure definition
// */
//typedef struct /**
//{ * @brief ETH MAC Configuration Structure definition
// uint32_t Watchdog; /*!< Selects or not the Watchdog timer */
// * When enabled, the MAC allows no more then 2048 bytes to be received.
// * When disabled, the MAC can receive up to 16384 bytes.
// * This parameter can be a value of @ref ETH_Watchdog */
// uint32_t Jabber; /*!< Selects or not Jabber timer typedef struct
// * When enabled, the MAC allows no more then 2048 bytes to be sent. {
// * When disabled, the MAC can send up to 16384 bytes. uint32_t Watchdog; /*!< Selects or not the Watchdog timer
// * This parameter can be a value of @ref ETH_Jabber */ * When enabled, the MAC allows no more then 2048 bytes to be received.
* When disabled, the MAC can receive up to 16384 bytes.
* This parameter can be a value of @ref ETH_Watchdog */
// uint32_t InterFrameGap; /*!< Selects the minimum IFG between frames during transmission. uint32_t Jabber; /*!< Selects or not Jabber timer
// * This parameter can be a value of @ref ETH_Inter_Frame_Gap */ * When enabled, the MAC allows no more then 2048 bytes to be sent.
* When disabled, the MAC can send up to 16384 bytes.
* This parameter can be a value of @ref ETH_Jabber */
// uint32_t CarrierSense; /*!< Selects or not the Carrier Sense. uint32_t InterFrameGap; /*!< Selects the minimum IFG between frames during transmission.
// * This parameter can be a value of @ref ETH_Carrier_Sense */ * This parameter can be a value of @ref ETH_Inter_Frame_Gap */
// uint32_t ReceiveOwn; /*!< Selects or not the ReceiveOwn, uint32_t CarrierSense; /*!< Selects or not the Carrier Sense.
// * ReceiveOwn allows the reception of frames when the TX_EN signal is asserted * This parameter can be a value of @ref ETH_Carrier_Sense */
// * in Half-Duplex mode.
// * This parameter can be a value of @ref ETH_Receive_Own */
// uint32_t LoopbackMode; /*!< Selects or not the internal MAC MII Loopback mode. uint32_t ReceiveOwn; /*!< Selects or not the ReceiveOwn,
// * This parameter can be a value of @ref ETH_Loop_Back_Mode */ * ReceiveOwn allows the reception of frames when the TX_EN signal is asserted
* in Half-Duplex mode.
* This parameter can be a value of @ref ETH_Receive_Own */
// uint32_t ChecksumOffload; /*!< Selects or not the IPv4 checksum checking for received frame payloads' TCP/UDP/ICMP headers. uint32_t LoopbackMode; /*!< Selects or not the internal MAC MII Loopback mode.
// * This parameter can be a value of @ref ETH_Checksum_Offload */ * This parameter can be a value of @ref ETH_Loop_Back_Mode */
// uint32_t RetryTransmission; /*!< Selects or not the MAC attempt retries transmission, based on the settings of BL, uint32_t ChecksumOffload; /*!< Selects or not the IPv4 checksum checking for received frame payloads' TCP/UDP/ICMP headers.
// * when a collision occurs (Half-Duplex mode). * This parameter can be a value of @ref ETH_Checksum_Offload */
// * This parameter can be a value of @ref ETH_Retry_Transmission */
// uint32_t AutomaticPadCRCStrip; /*!< Selects or not the Automatic MAC Pad/CRC Stripping. uint32_t RetryTransmission; /*!< Selects or not the MAC attempt retries transmission, based on the settings of BL,
// * This parameter can be a value of @ref ETH_Automatic_Pad_CRC_Strip */ * when a collision occurs (Half-Duplex mode).
* This parameter can be a value of @ref ETH_Retry_Transmission */
// uint32_t BackOffLimit; /*!< Selects the BackOff limit value. uint32_t AutomaticPadCRCStrip; /*!< Selects or not the Automatic MAC Pad/CRC Stripping.
// * This parameter can be a value of @ref ETH_Back_Off_Limit */ * This parameter can be a value of @ref ETH_Automatic_Pad_CRC_Strip */
// uint32_t DeferralCheck; /*!< Selects or not the deferral check function (Half-Duplex mode). uint32_t BackOffLimit; /*!< Selects the BackOff limit value.
// * This parameter can be a value of @ref ETH_Deferral_Check */ * This parameter can be a value of @ref ETH_Back_Off_Limit */
// uint32_t ReceiveAll; /*!< Selects or not all frames reception by the MAC (No filtering). uint32_t DeferralCheck; /*!< Selects or not the deferral check function (Half-Duplex mode).
// * This parameter can be a value of @ref ETH_Receive_All */ * This parameter can be a value of @ref ETH_Deferral_Check */
// uint32_t SourceAddrFilter; /*!< Selects the Source Address Filter mode. uint32_t ReceiveAll; /*!< Selects or not all frames reception by the MAC (No filtering).
// * This parameter can be a value of @ref ETH_Source_Addr_Filter */ * This parameter can be a value of @ref ETH_Receive_All */
// uint32_t PassControlFrames; /*!< Sets the forwarding mode of the control frames (including unicast and multicast PAUSE frames) uint32_t SourceAddrFilter; /*!< Selects the Source Address Filter mode.
// * This parameter can be a value of @ref ETH_Pass_Control_Frames */ * This parameter can be a value of @ref ETH_Source_Addr_Filter */
// uint32_t BroadcastFramesReception; /*!< Selects or not the reception of Broadcast Frames. uint32_t PassControlFrames; /*!< Sets the forwarding mode of the control frames (including unicast and multicast PAUSE frames)
// * This parameter can be a value of @ref ETH_Broadcast_Frames_Reception */ * This parameter can be a value of @ref ETH_Pass_Control_Frames */
// uint32_t DestinationAddrFilter; /*!< Sets the destination filter mode for both unicast and multicast frames. uint32_t BroadcastFramesReception; /*!< Selects or not the reception of Broadcast Frames.
// * This parameter can be a value of @ref ETH_Destination_Addr_Filter */ * This parameter can be a value of @ref ETH_Broadcast_Frames_Reception */
// uint32_t PromiscuousMode; /*!< Selects or not the Promiscuous Mode uint32_t DestinationAddrFilter; /*!< Sets the destination filter mode for both unicast and multicast frames.
// * This parameter can be a value of @ref ETH_Promiscuous_Mode */ * This parameter can be a value of @ref ETH_Destination_Addr_Filter */
// uint32_t MulticastFramesFilter; /*!< Selects the Multicast Frames filter mode: None/HashTableFilter/PerfectFilter/PerfectHashTableFilter. uint32_t PromiscuousMode; /*!< Selects or not the Promiscuous Mode
// * This parameter can be a value of @ref ETH_Multicast_Frames_Filter */ * This parameter can be a value of @ref ETH_Promiscuous_Mode */
// uint32_t UnicastFramesFilter; /*!< Selects the Unicast Frames filter mode: HashTableFilter/PerfectFilter/PerfectHashTableFilter. uint32_t MulticastFramesFilter; /*!< Selects the Multicast Frames filter mode: None/HashTableFilter/PerfectFilter/PerfectHashTableFilter.
// * This parameter can be a value of @ref ETH_Unicast_Frames_Filter */ * This parameter can be a value of @ref ETH_Multicast_Frames_Filter */
// uint32_t HashTableHigh; /*!< This field holds the higher 32 bits of Hash table. uint32_t UnicastFramesFilter; /*!< Selects the Unicast Frames filter mode: HashTableFilter/PerfectFilter/PerfectHashTableFilter.
// * This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xFFFFFFFF */ * This parameter can be a value of @ref ETH_Unicast_Frames_Filter */
// uint32_t HashTableLow; /*!< This field holds the lower 32 bits of Hash table. uint32_t HashTableHigh; /*!< This field holds the higher 32 bits of Hash table.
// * This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xFFFFFFFF */ * This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xFFFFFFFF */
// uint32_t PauseTime; /*!< This field holds the value to be used in the Pause Time field in the transmit control frame. uint32_t HashTableLow; /*!< This field holds the lower 32 bits of Hash table.
// * This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xFFFF */ * This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xFFFFFFFF */
// uint32_t ZeroQuantaPause; /*!< Selects or not the automatic generation of Zero-Quanta Pause Control frames. uint32_t PauseTime; /*!< This field holds the value to be used in the Pause Time field in the transmit control frame.
// * This parameter can be a value of @ref ETH_Zero_Quanta_Pause */ * This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xFFFF */
// uint32_t PauseLowThreshold; /*!< This field configures the threshold of the PAUSE to be checked for uint32_t ZeroQuantaPause; /*!< Selects or not the automatic generation of Zero-Quanta Pause Control frames.
// * automatic retransmission of PAUSE Frame. * This parameter can be a value of @ref ETH_Zero_Quanta_Pause */
// * This parameter can be a value of @ref ETH_Pause_Low_Threshold */
// uint32_t UnicastPauseFrameDetect; /*!< Selects or not the MAC detection of the Pause frames (with MAC Address0 uint32_t PauseLowThreshold; /*!< This field configures the threshold of the PAUSE to be checked for
// * unicast address and unique multicast address). * automatic retransmission of PAUSE Frame.
// * This parameter can be a value of @ref ETH_Unicast_Pause_Frame_Detect */ * This parameter can be a value of @ref ETH_Pause_Low_Threshold */
// uint32_t ReceiveFlowControl; /*!< Enables or disables the MAC to decode the received Pause frame and uint32_t UnicastPauseFrameDetect; /*!< Selects or not the MAC detection of the Pause frames (with MAC Address0
// * disable its transmitter for a specified time (Pause Time) * unicast address and unique multicast address).
// * This parameter can be a value of @ref ETH_Receive_Flow_Control */ * This parameter can be a value of @ref ETH_Unicast_Pause_Frame_Detect */
// uint32_t TransmitFlowControl; /*!< Enables or disables the MAC to transmit Pause frames (Full-Duplex mode) uint32_t ReceiveFlowControl; /*!< Enables or disables the MAC to decode the received Pause frame and
// * or the MAC back-pressure operation (Half-Duplex mode) * disable its transmitter for a specified time (Pause Time)
// * This parameter can be a value of @ref ETH_Transmit_Flow_Control */ * This parameter can be a value of @ref ETH_Receive_Flow_Control */
// uint32_t VLANTagComparison; /*!< Selects the 12-bit VLAN identifier or the complete 16-bit VLAN tag for uint32_t TransmitFlowControl; /*!< Enables or disables the MAC to transmit Pause frames (Full-Duplex mode)
// * comparison and filtering. * or the MAC back-pressure operation (Half-Duplex mode)
// * This parameter can be a value of @ref ETH_VLAN_Tag_Comparison */ * This parameter can be a value of @ref ETH_Transmit_Flow_Control */
// uint32_t VLANTagIdentifier; /*!< Holds the VLAN tag identifier for receive frames */ uint32_t VLANTagComparison; /*!< Selects the 12-bit VLAN identifier or the complete 16-bit VLAN tag for
//} ETH_MACInitTypeDef; * comparison and filtering.
* This parameter can be a value of @ref ETH_VLAN_Tag_Comparison */
uint32_t VLANTagIdentifier; /*!< Holds the VLAN tag identifier for receive frames */
} ETH_MACInitTypeDef;
///**
// * @brief ETH DMA Configuration Structure definition
// */
//typedef struct /**
//{ * @brief ETH DMA Configuration Structure definition
// uint32_t DropTCPIPChecksumErrorFrame; /*!< Selects or not the Dropping of TCP/IP Checksum Error Frames. */
// * This parameter can be a value of @ref ETH_Drop_TCP_IP_Checksum_Error_Frame */
// uint32_t ReceiveStoreForward; /*!< Enables or disables the Receive store and forward mode. typedef struct
// * This parameter can be a value of @ref ETH_Receive_Store_Forward */ {
uint32_t DropTCPIPChecksumErrorFrame; /*!< Selects or not the Dropping of TCP/IP Checksum Error Frames.
* This parameter can be a value of @ref ETH_Drop_TCP_IP_Checksum_Error_Frame */
// uint32_t FlushReceivedFrame; /*!< Enables or disables the flushing of received frames. uint32_t ReceiveStoreForward; /*!< Enables or disables the Receive store and forward mode.
// * This parameter can be a value of @ref ETH_Flush_Received_Frame */ * This parameter can be a value of @ref ETH_Receive_Store_Forward */
// uint32_t TransmitStoreForward; /*!< Enables or disables Transmit store and forward mode. uint32_t FlushReceivedFrame; /*!< Enables or disables the flushing of received frames.
// * This parameter can be a value of @ref ETH_Transmit_Store_Forward */ * This parameter can be a value of @ref ETH_Flush_Received_Frame */
// uint32_t TransmitThresholdControl; /*!< Selects or not the Transmit Threshold Control. uint32_t TransmitStoreForward; /*!< Enables or disables Transmit store and forward mode.
// * This parameter can be a value of @ref ETH_Transmit_Threshold_Control */ * This parameter can be a value of @ref ETH_Transmit_Store_Forward */
// uint32_t ForwardErrorFrames; /*!< Selects or not the forward to the DMA of erroneous frames. uint32_t TransmitThresholdControl; /*!< Selects or not the Transmit Threshold Control.
// * This parameter can be a value of @ref ETH_Forward_Error_Frames */ * This parameter can be a value of @ref ETH_Transmit_Threshold_Control */
// uint32_t ForwardUndersizedGoodFrames; /*!< Enables or disables the Rx FIFO to forward Undersized frames (frames with no Error uint32_t ForwardErrorFrames; /*!< Selects or not the forward to the DMA of erroneous frames.
// * and length less than 64 bytes) including pad-bytes and CRC) * This parameter can be a value of @ref ETH_Forward_Error_Frames */
// * This parameter can be a value of @ref ETH_Forward_Undersized_Good_Frames */
// uint32_t ReceiveThresholdControl; /*!< Selects the threshold level of the Receive FIFO. uint32_t ForwardUndersizedGoodFrames; /*!< Enables or disables the Rx FIFO to forward Undersized frames (frames with no Error
// * This parameter can be a value of @ref ETH_Receive_Threshold_Control */ * and length less than 64 bytes) including pad-bytes and CRC)
* This parameter can be a value of @ref ETH_Forward_Undersized_Good_Frames */
// uint32_t SecondFrameOperate; /*!< Selects or not the Operate on second frame mode, which allows the DMA to process a second uint32_t ReceiveThresholdControl; /*!< Selects the threshold level of the Receive FIFO.
// * frame of Transmit data even before obtaining the status for the first frame. * This parameter can be a value of @ref ETH_Receive_Threshold_Control */
// * This parameter can be a value of @ref ETH_Second_Frame_Operate */
// uint32_t AddressAlignedBeats; /*!< Enables or disables the Address Aligned Beats. uint32_t SecondFrameOperate; /*!< Selects or not the Operate on second frame mode, which allows the DMA to process a second
// * This parameter can be a value of @ref ETH_Address_Aligned_Beats */ * frame of Transmit data even before obtaining the status for the first frame.
* This parameter can be a value of @ref ETH_Second_Frame_Operate */
// uint32_t FixedBurst; /*!< Enables or disables the AHB Master interface fixed burst transfers. uint32_t AddressAlignedBeats; /*!< Enables or disables the Address Aligned Beats.
// * This parameter can be a value of @ref ETH_Fixed_Burst */ * This parameter can be a value of @ref ETH_Address_Aligned_Beats */
// uint32_t RxDMABurstLength; /*!< Indicates the maximum number of beats to be transferred in one Rx DMA transaction. uint32_t FixedBurst; /*!< Enables or disables the AHB Master interface fixed burst transfers.
// * This parameter can be a value of @ref ETH_Rx_DMA_Burst_Length */ * This parameter can be a value of @ref ETH_Fixed_Burst */
// uint32_t TxDMABurstLength; /*!< Indicates the maximum number of beats to be transferred in one Tx DMA transaction. uint32_t RxDMABurstLength; /*!< Indicates the maximum number of beats to be transferred in one Rx DMA transaction.
// * This parameter can be a value of @ref ETH_Tx_DMA_Burst_Length */ * This parameter can be a value of @ref ETH_Rx_DMA_Burst_Length */
// uint32_t EnhancedDescriptorFormat; /*!< Enables the enhanced descriptor format. uint32_t TxDMABurstLength; /*!< Indicates the maximum number of beats to be transferred in one Tx DMA transaction.
// * This parameter can be a value of @ref ETH_DMA_Enhanced_descriptor_format */ * This parameter can be a value of @ref ETH_Tx_DMA_Burst_Length */
// uint32_t DescriptorSkipLength; /*!< Specifies the number of word to skip between two unchained descriptors (Ring mode) uint32_t EnhancedDescriptorFormat; /*!< Enables the enhanced descriptor format.
// * This parameter must be a number between Min_Data = 0 and Max_Data = 32 */ * This parameter can be a value of @ref ETH_DMA_Enhanced_descriptor_format */
// uint32_t DMAArbitration; /*!< Selects the DMA Tx/Rx arbitration. uint32_t DescriptorSkipLength; /*!< Specifies the number of word to skip between two unchained descriptors (Ring mode)
// * This parameter can be a value of @ref ETH_DMA_Arbitration */ * This parameter must be a number between Min_Data = 0 and Max_Data = 32 */
//} ETH_DMAInitTypeDef;
uint32_t DMAArbitration; /*!< Selects the DMA Tx/Rx arbitration.
* This parameter can be a value of @ref ETH_DMA_Arbitration */
} ETH_DMAInitTypeDef;
///**
// * @brief ETH DMA Descriptors data structure definition
// */
//typedef struct /**
//{ * @brief ETH DMA Descriptors data structure definition
// volatile uint32_t Status; /*!< Status */ */
// uint32_t ControlBufferSize; /*!< Control and Buffer1, Buffer2 lengths */ typedef struct
{
volatile uint32_t Status; /*!< Status */
// uint32_t Buffer1Addr; /*!< Buffer1 address pointer */ uint32_t ControlBufferSize; /*!< Control and Buffer1, Buffer2 lengths */
// uint32_t Buffer2NextDescAddr; /*!< Buffer2 or next descriptor address pointer */ uint32_t Buffer1Addr; /*!< Buffer1 address pointer */
// /*!< Enhanced Ethernet DMA PTP Descriptors */ uint32_t Buffer2NextDescAddr; /*!< Buffer2 or next descriptor address pointer */
// uint32_t ExtendedStatus; /*!< Extended status for PTP receive descriptor */
// uint32_t Reserved1; /*!< Reserved */ /*!< Enhanced Ethernet DMA PTP Descriptors */
uint32_t ExtendedStatus; /*!< Extended status for PTP receive descriptor */
// uint32_t TimeStampLow; /*!< Time Stamp Low value for transmit and receive */ uint32_t Reserved1; /*!< Reserved */
// uint32_t TimeStampHigh; /*!< Time Stamp High value for transmit and receive */ uint32_t TimeStampLow; /*!< Time Stamp Low value for transmit and receive */
//} ETH_DMADescTypeDef;
uint32_t TimeStampHigh; /*!< Time Stamp High value for transmit and receive */
} ETH_DMADescTypeDef;
///**
// * @brief Received Frame Informations structure definition
// */
//typedef struct
//{
// ETH_DMADescTypeDef * FSRxDesc; /*!< First Segment Rx Desc */
// ETH_DMADescTypeDef * LSRxDesc; /*!< Last Segment Rx Desc */ /**
* @brief Received Frame Informations structure definition
*/
typedef struct
{
ETH_DMADescTypeDef * FSRxDesc; /*!< First Segment Rx Desc */
// uint32_t SegCount; /*!< Segment count */ ETH_DMADescTypeDef * LSRxDesc; /*!< Last Segment Rx Desc */
// uint32_t length; /*!< Frame length */ uint32_t SegCount; /*!< Segment count */
// uint32_t buffer; /*!< Frame buffer */ uint32_t length; /*!< Frame length */
//} ETH_DMARxFrameInfos;
//#define ETH_TypeDef void uint32_t buffer; /*!< Frame buffer */
///** } ETH_DMARxFrameInfos;
// * @brief ETH Handle Structure definition
// */
//typedef struct #define ETH_TypeDef void
//{ /**
// ETH_TypeDef * Instance; /*!< Register base address */ * @brief ETH Handle Structure definition
*/
// ETH_InitTypeDef Init; /*!< Ethernet Init Configuration */ typedef struct
{
ETH_TypeDef * Instance; /*!< Register base address */
// uint32_t LinkStatus; /*!< Ethernet link status */ ETH_InitTypeDef Init; /*!< Ethernet Init Configuration */
// ETH_DMADescTypeDef * RxDesc; /*!< Rx descriptor to Get */ uint32_t LinkStatus; /*!< Ethernet link status */
// ETH_DMADescTypeDef * TxDesc; /*!< Tx descriptor to Set */ ETH_DMADescTypeDef * RxDesc; /*!< Rx descriptor to Get */
// ETH_DMARxFrameInfos RxFrameInfos; /*!< last Rx frame infos */ ETH_DMADescTypeDef * TxDesc; /*!< Tx descriptor to Set */
// volatile HAL_ETH_StateTypeDef State; /*!< ETH communication state */ ETH_DMARxFrameInfos RxFrameInfos; /*!< last Rx frame infos */
// HAL_LockTypeDef Lock; /*!< ETH Lock */ volatile HAL_ETH_StateTypeDef State; /*!< ETH communication state */
//} ETH_HandleTypeDef;
///* INTERNAL API FUNCTIONS. */
//BaseType_t xNetworkInterfaceInitialise( void );
//BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer,
// BaseType_t xReleaseAfterSend );
///* The following function is defined only when BufferAllocation_1.c is linked in the project. */ HAL_LockTypeDef Lock; /*!< ETH Lock */
//void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ); } ETH_HandleTypeDef;
/* INTERNAL API FUNCTIONS. */
BaseType_t xNetworkInterfaceInitialise( void );
BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer,
BaseType_t xReleaseAfterSend );
///* The following function is defined only when BufferAllocation_1.c is linked in the project. */ /* The following function is defined only when BufferAllocation_1.c is linked in the project. */
//BaseType_t xGetPhyLinkStatus( void ); void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] );
///* *INDENT-OFF* */ /* The following function is defined only when BufferAllocation_1.c is linked in the project. */
//#ifdef __cplusplus BaseType_t xGetPhyLinkStatus( void );
// } /* extern "C" */
//#endif
///* *INDENT-ON* */
/* *INDENT-OFF* */
#ifdef __cplusplus
} /* extern "C" */
#endif
/* *INDENT-ON* */
#endif /*STM32_PORT*/
#endif /* NETWORK_INTERFACE_H */ #endif /* NETWORK_INTERFACE_H */

View File

@ -64,7 +64,11 @@ extern uint32_t SystemCoreClock;
#define configUSE_16_BIT_TICKS 0 #define configUSE_16_BIT_TICKS 0
/* Software timer definitions. */ /* Software timer definitions. */
#ifdef CENTRALISED_DEFERRED_IRQ_HADLING
#define configUSE_TIMERS 0 #define configUSE_TIMERS 0
#else
#define configUSE_TIMERS 1
#endif
#define configTIMER_TASK_PRIORITY 2 #define configTIMER_TASK_PRIORITY 2
#define configTIMER_QUEUE_LENGTH 5 #define configTIMER_QUEUE_LENGTH 5
#define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE * 2) #define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE * 2)
@ -146,7 +150,11 @@ extern uint32_t SystemCoreClock;
#define INCLUDE_uxTaskGetStackHighWaterMark2 1 #define INCLUDE_uxTaskGetStackHighWaterMark2 1
#define INCLUDE_eTaskGetState 1 #define INCLUDE_eTaskGetState 1
#define INCLUDE_xTaskResumeFromISR 1 #define INCLUDE_xTaskResumeFromISR 1
#ifdef CENTRALISED_DEFERRED_IRQ_HADLING
#define INCLUDE_xTimerPendFunctionCall 0
#else
#define INCLUDE_xTimerPendFunctionCall 1 #define INCLUDE_xTimerPendFunctionCall 1
#endif
#define INCLUDE_xTaskGetSchedulerState 1 #define INCLUDE_xTaskGetSchedulerState 1
#define INCLUDE_xTaskGetCurrentTaskHandle 1 #define INCLUDE_xTaskGetCurrentTaskHandle 1

2
main.c
View File

@ -277,7 +277,7 @@ static void vInitMCU(void)
/* Enable Ethernet MAC */ /* Enable Ethernet MAC */
enet_descriptors_chain_init(ENET_DMA_TX); enet_descriptors_chain_init(ENET_DMA_TX);
enet_descriptors_chain_init(ENET_DMA_RX); //enet_desc_receive_complete_bit_enable(dma_current_rxdesc); enet_descriptors_chain_init(ENET_DMA_RX);
enet_enable(); enet_enable();
//nvic_irq_enable(ENET_IRQn, ipconfigMAC_INTERRUPT_PRIORITY, 0xFF); //nvic_irq_enable(ENET_IRQn, ipconfigMAC_INTERRUPT_PRIORITY, 0xFF);
__disable_irq(); __disable_irq();