110 #ifdef HAL_ETH_MODULE_ENABLED 117 #define ETH_TIMEOUT_SWRESET ((uint32_t)500) 118 #define ETH_TIMEOUT_LINKED_STATE ((uint32_t)5000) 119 #define ETH_TIMEOUT_AUTONEGO_COMPLETED ((uint32_t)5000) 131 static void ETH_MACAddressConfig(
ETH_HandleTypeDef *heth, uint32_t MacAddr, uint8_t *Addr);
175 uint32_t tempreg = 0, phyreg = 0;
176 uint32_t hclk = 60000000;
177 uint32_t tickstart = 0;
219 if((
HAL_GetTick() - tickstart ) > ETH_TIMEOUT_SWRESET)
235 tempreg = (heth->
Instance)->MACMIIAR;
243 if((hclk >= 20000000)&&(hclk < 35000000))
248 else if((hclk >= 35000000)&&(hclk < 60000000))
253 else if((hclk >= 60000000)&&(hclk < 100000000))
258 else if((hclk >= 100000000)&&(hclk < 150000000))
270 (heth->
Instance)->MACMIIAR = (uint32_t)tempreg;
280 ETH_MACDMAConfig(heth, err);
303 if((
HAL_GetTick() - tickstart ) > ETH_TIMEOUT_LINKED_STATE)
309 ETH_MACDMAConfig(heth, err);
328 ETH_MACDMAConfig(heth, err);
346 if((
HAL_GetTick() - tickstart ) > ETH_TIMEOUT_AUTONEGO_COMPLETED)
352 ETH_MACDMAConfig(heth, err);
371 ETH_MACDMAConfig(heth, err);
411 (uint16_t)((heth->
Init).Speed >> 1))) !=
HAL_OK)
417 ETH_MACDMAConfig(heth, err);
431 ETH_MACDMAConfig(heth, err);
485 heth->
TxDesc = DMATxDescTab;
488 for(i=0; i < TxBuffCount; i++)
491 dmatxdesc = DMATxDescTab + i;
506 if(i < (TxBuffCount-1))
519 (heth->
Instance)->DMATDLAR = (uint32_t) DMATxDescTab;
552 heth->
RxDesc = DMARxDescTab;
555 for(i=0; i < RxBuffCount; i++)
558 DMARxDesc = DMARxDescTab+i;
576 if(i < (RxBuffCount-1))
589 (heth->
Instance)->DMARDLAR = (uint32_t) DMARxDescTab;
669 uint32_t bufcount = 0, size = 0, i = 0;
677 if (FrameLength == 0)
701 if (FrameLength > ETH_TX_BUF_SIZE)
704 if (FrameLength % ETH_TX_BUF_SIZE)
726 for (i=0; i< bufcount; i++)
740 if (i == (bufcount-1))
744 size = FrameLength - (bufcount-1)*ETH_TX_BUF_SIZE;
782 uint32_t framelength = 0;
862 uint32_t descriptorscancounter = 0;
874 descriptorscancounter++;
1060 uint32_t tmpreg = 0;
1061 uint32_t tickstart = 0;
1132 uint32_t tmpreg = 0;
1133 uint32_t tickstart = 0;
1168 while((tmpreg & ETH_MACMIIAR_MB) == ETH_MACMIIAR_MB)
1231 ETH_MACTransmissionEnable(heth);
1234 ETH_MACReceptionEnable(heth);
1237 ETH_FlushTransmitFIFO(heth);
1240 ETH_DMATransmissionEnable(heth);
1243 ETH_DMAReceptionEnable(heth);
1270 ETH_DMATransmissionDisable(heth);
1273 ETH_DMAReceptionDisable(heth);
1276 ETH_MACReceptionDisable(heth);
1279 ETH_FlushTransmitFIFO(heth);
1282 ETH_MACTransmissionDisable(heth);
1303 uint32_t tmpreg = 0;
1314 if (macconf !=
NULL)
1351 tmpreg |= (uint32_t)(macconf->
Watchdog |
1355 (heth->
Init).Speed |
1358 (heth->
Init).DuplexMode |
1366 (heth->
Instance)->MACCR = (uint32_t)tmpreg;
1404 tmpreg |= (uint32_t)((macconf->
PauseTime << 16) |
1412 (heth->
Instance)->MACFCR = (uint32_t)tmpreg;
1426 tmpreg = (heth->
Instance)->MACVLANTR;
1428 (heth->
Instance)->MACVLANTR = tmpreg;
1437 tmpreg &= ~((uint32_t)0x00004800);
1442 (heth->
Instance)->MACCR = (uint32_t)tmpreg;
1470 uint32_t tmpreg = 0;
1513 (heth->
Instance)->DMAOMR = (uint32_t)tmpreg;
1604 uint32_t tmpreg = 0;
1683 tmpreg |= (uint32_t)(macinit.
Watchdog |
1687 (heth->
Init).Speed |
1690 (heth->
Init).DuplexMode |
1698 (heth->
Instance)->MACCR = (uint32_t)tmpreg;
1750 tmpreg |= (uint32_t)((macinit.
PauseTime << 16) |
1758 (heth->
Instance)->MACFCR = (uint32_t)tmpreg;
1774 tmpreg = (heth->
Instance)->MACVLANTR;
1776 (heth->
Instance)->MACVLANTR = tmpreg;
1821 (heth->
Instance)->DMAOMR = (uint32_t)tmpreg;
1875 static void ETH_MACAddressConfig(
ETH_HandleTypeDef *heth, uint32_t MacAddr, uint8_t *Addr)
1883 tmpreg = ((uint32_t)Addr[5] << 8) | (uint32_t)Addr[4];
1887 tmpreg = ((uint32_t)Addr[3] << 24) | ((uint32_t)Addr[2] << 16) | ((uint32_t)Addr[1] << 8) | Addr[0];
1901 __IO uint32_t tmpreg = 0;
1921 __IO uint32_t tmpreg = 0;
1941 __IO uint32_t tmpreg = 0;
1961 __IO uint32_t tmpreg = 0;
2029 __IO uint32_t tmpreg = 0;
HAL_StatusTypeDef HAL_ETH_GetReceivedFrame(ETH_HandleTypeDef *heth)
#define IS_ETH_PAUSE_TIME(TIME)
uint32_t RxDMABurstLength
#define __HAL_ETH_DMA_GET_FLAG(__HANDLE__, __FLAG__)
Checks whether the specified Ethernet DMA flag is set or not.
ETH_DMADescTypeDef * RxDesc
uint32_t UnicastPauseFrameDetect
#define ETH_DMARXDESC_OWN
Bit definition of RDES0 register: DMA Rx descriptor status register.
HAL_ETH_StateTypeDef
HAL State structures definition.
uint32_t AddressAlignedBeats
#define IS_ETH_CARRIER_SENSE(CMD)
void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *heth)
#define PHY_AUTONEGOTIATION
#define IS_ETH_SPEED(SPEED)
#define ETH_DROPTCPIPCHECKSUMERRORFRAME_ENABLE
#define assert_param(expr)
Include module's header file.
void HAL_Delay(__IO uint32_t Delay)
This function provides accurate delay (in milliseconds) based on variable incremented.
#define ETH_DMARXDESC_FRAMELENGTHSHIFT
#define IS_ETH_DEFERRAL_CHECK(CMD)
HAL_StatusTypeDef HAL_ETH_Stop(ETH_HandleTypeDef *heth)
HAL_StatusTypeDef HAL_ETH_Start(ETH_HandleTypeDef *heth)
#define ETH_MODE_HALFDUPLEX
#define ETH_UNICASTFRAMESFILTER_PERFECT
#define ETH_CHECKSUMOFFLAOD_DISABLE
#define IS_ETH_LOOPBACK_MODE(CMD)
#define IS_ETH_BACKOFF_LIMIT(LIMIT)
#define IS_ETH_JABBER(CMD)
ETH DMA Configuration Structure definition.
#define PHY_DUPLEX_STATUS
#define ETH_MACMIIAR_CR_Div42
#define IS_ETH_RECEIVE_ALL(CMD)
#define ETH_DMATXDESC_TCH
ETH_DMADescTypeDef * TxDesc
#define ETH_PROMISCUOUS_MODE_ENABLE
#define __HAL_UNLOCK(__HANDLE__)
#define __HAL_ETH_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__)
Enables the specified Ethernet DMA interrupts.
ETH DMA Descriptors data structure definition.
#define ETH_MACMIIAR_CR_MASK
uint32_t AutomaticPadCRCStrip
void HAL_ETH_MspDeInit(ETH_HandleTypeDef *heth)
#define ETH_VLANTAGCOMPARISON_16BIT
uint32_t PassControlFrames
#define ETH_MODE_FULLDUPLEX
uint32_t DestinationAddrFilter
#define ETH_TRANSMITSTOREFORWARD_ENABLE
#define IS_ETH_MEDIA_INTERFACE(MODE)
#define ETH_MACMIIAR_CR_Div102
uint32_t TransmitStoreForward
HAL_StatusTypeDef HAL_ETH_ConfigDMA(ETH_HandleTypeDef *heth, ETH_DMAInitTypeDef *dmaconf)
#define ETH_RECEIVEALL_ENABLE
#define ETH_AUTOMATICPADCRCSTRIP_DISABLE
#define ETH_WATCHDOG_ENABLE
#define __HAL_ETH_DMA_CLEAR_IT(__HANDLE__, __INTERRUPT__)
Clears the Ethernet DMA IT pending bit.
#define ETH_AUTONEGOTIATION_DISABLE
#define ETH_FIXEDBURST_ENABLE
uint32_t SourceAddrFilter
#define ETH_DMATXDESC_TBS1
#define IS_ETH_DROP_TCPIP_CHECKSUM_FRAME(CMD)
HAL_StatusTypeDef HAL_ETH_DeInit(ETH_HandleTypeDef *heth)
#define ETH_RECEIVEALL_DISABLE
uint32_t DescriptorSkipLength
HAL_StatusTypeDef HAL_ETH_DMATxDescListInit(ETH_HandleTypeDef *heth, ETH_DMADescTypeDef *DMATxDescTab, uint8_t *TxBuff, uint32_t TxBuffCount)
#define ETH_TXDMABURSTLENGTH_32BEAT
#define IS_ETH_MULTICAST_FRAMES_FILTER(FILTER)
uint32_t SecondFrameOperate
#define IS_ETH_TRANSMIT_FLOWCONTROL(CMD)
#define IS_ETH_UNICAST_FRAMES_FILTER(FILTER)
#define ETH_DMAARBITRATION_ROUNDROBIN_RXTX_1_1
#define IS_ETH_RXDMA_BURST_LENGTH(LENGTH)
#define ETH_SECONDFRAMEOPERARTE_ENABLE
#define ETH_RECEIVEDTHRESHOLDCONTROL_64BYTES
#define __HAL_LOCK(__HANDLE__)
#define IS_ETH_PAUSE_LOW_THRESHOLD(THRESHOLD)
#define ETH_RECEIVEOWN_DISABLE
#define IS_ETH_FLUSH_RECEIVE_FRAME(CMD)
#define IS_ETH_DMA_ARBITRATION_ROUNDROBIN_RXTX(RATIO)
#define IS_ETH_FORWARD_ERROR_FRAMES(CMD)
uint32_t BroadcastFramesReception
uint32_t Buffer2NextDescAddr
#define ETH_MAC_ADDR_LBASE
#define IS_ETH_SECOND_FRAME_OPERATE(CMD)
#define IS_ETH_RECEIVE_THRESHOLD_CONTROL(THRESHOLD)
ETH_DMADescTypeDef * FSRxDesc
void HAL_ETH_IRQHandler(ETH_HandleTypeDef *heth)
HAL_StatusTypeDef HAL_ETH_TransmitFrame(ETH_HandleTypeDef *heth, uint32_t FrameLength)
uint32_t ForwardUndersizedGoodFrames
#define IS_ETH_VLAN_TAG_COMPARISON(COMPARISON)
#define IS_ETH_RECEIVE_OWN(CMD)
#define ETH_MAC_ADDR_HBASE
#define IS_ETH_CHECKSUM_OFFLOAD(CMD)
HAL_StatusTypeDef HAL_ETH_ReadPHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t *RegValue)
#define ETH_RETRYTRANSMISSION_DISABLE
This file contains all the functions prototypes for the HAL module driver.
ETH_DMADescTypeDef * LSRxDesc
#define IS_ETH_FIXED_BURST(CMD)
#define ETH_DMARXDESC_RCH
#define ETH_RXDMABURSTLENGTH_32BEAT
#define ETH_CARRIERSENCE_ENABLE
#define IS_ETH_INTER_FRAME_GAP(GAP)
#define IS_ETH_TRANSMIT_THRESHOLD_CONTROL(THRESHOLD)
#define ETH_JABBER_ENABLE
#define ETH_FORWARDUNDERSIZEDGOODFRAMES_DISABLE
#define IS_ETH_TRANSMIT_STORE_FORWARD(CMD)
#define ETH_RXINTERRUPT_MODE
#define IS_ETH_ENHANCED_DESCRIPTOR_FORMAT(CMD)
ETH MAC Configuration Structure definition.
uint32_t PauseLowThreshold
#define ETH_MULTICASTFRAMESFILTER_PERFECT
#define ETH_DEFFERRALCHECK_DISABLE
uint32_t ReceiveFlowControl
#define ETH_PASSCONTROLFRAMES_BLOCKALL
#define PHY_LINKED_STATUS
#define IS_ETH_RETRY_TRANSMISSION(CMD)
#define ETH_LOOPBACKMODE_DISABLE
uint32_t EnhancedDescriptorFormat
#define ETH_ADDRESSALIGNEDBEATS_ENABLE
uint32_t ForwardErrorFrames
#define ETH_MACMIIAR_CR_Div62
#define ETH_DMATXDESC_CHECKSUMTCPUDPICMPFULL
#define __HAL_RCC_SYSCFG_CLK_ENABLE()
#define IS_ETH_AUTONEGOTIATION(CMD)
#define IS_ETH_VLAN_TAG_IDENTIFIER(IDENTIFIER)
#define IS_ETH_WATCHDOG(CMD)
uint32_t TransmitFlowControl
HAL_ETH_StateTypeDef HAL_ETH_GetState(ETH_HandleTypeDef *heth)
#define IS_ETH_RECEIVE_FLOWCONTROL(CMD)
#define IS_ETH_PHY_ADDRESS(ADDRESS)
HAL_StatusTypeDef HAL_ETH_ConfigMAC(ETH_HandleTypeDef *heth, ETH_MACInitTypeDef *macconf)
#define SYSCFG_PMC_MII_RMII_SEL
#define ETH_FLUSHRECEIVEDFRAME_ENABLE
#define IS_ETH_CONTROL_FRAMES(PASS)
void HAL_ETH_MspInit(ETH_HandleTypeDef *heth)
Initializes the ETH MSP.
ETH_DMARxFrameInfos RxFrameInfos
uint32_t FlushReceivedFrame
#define ETH_BACKOFFLIMIT_10
#define ETH_PAUSELOWTHRESHOLD_MINUS4
#define ETH_PROMISCUOUS_MODE_DISABLE
uint32_t MulticastFramesFilter
#define ETH_DMAOMR_CLEAR_MASK
#define IS_ETH_ZEROQUANTA_PAUSE(CMD)
HAL_StatusTypeDef HAL_ETH_DMARxDescListInit(ETH_HandleTypeDef *heth, ETH_DMADescTypeDef *DMARxDescTab, uint8_t *RxBuff, uint32_t RxBuffCount)
#define ETH_REG_WRITE_DELAY
#define IS_ETH_RX_MODE(MODE)
#define ETH_RECEIVEFLOWCONTROL_DISABLE
#define IS_ETH_TXDMA_BURST_LENGTH(LENGTH)
uint32_t HAL_RCC_GetHCLKFreq(void)
#define ETH_TRANSMITFLOWCONTROL_DISABLE
#define IS_ETH_DESTINATION_ADDR_FILTER(FILTER)
HAL_StatusTypeDef HAL_ETH_GetReceivedFrame_IT(ETH_HandleTypeDef *heth)
void HAL_ETH_TxCpltCallback(ETH_HandleTypeDef *heth)
#define IS_ETH_MAC_ADDRESS0123(ADDRESS)
#define ETH_BROADCASTFRAMESRECEPTION_ENABLE
#define ETH_DESTINATIONADDRFILTER_NORMAL
#define ETH_CHECKSUM_BY_HARDWARE
#define IS_ETH_CHECKSUM_MODE(MODE)
#define ETH_MACCR_CLEAR_MASK
#define ETH_DMARXDESC_DIC
Bit definition of RDES1 register.
#define ETH_INTERFRAMEGAP_96BIT
#define ETH_MACMIIAR_CR_Div26
#define IS_ETH_DMA_DESC_SKIP_LENGTH(LENGTH)
#define IS_ETH_SOURCE_ADDR_FILTER(CMD)
void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth)
Ethernet Rx Transfer completed callback.
uint32_t UnicastFramesFilter
uint32_t VLANTagIdentifier
#define ETH_SOURCEADDRFILTER_DISABLE
#define ETH_UNICASTPAUSEFRAMEDETECT_DISABLE
uint32_t DropTCPIPChecksumErrorFrame
uint32_t ReceiveStoreForward
#define ETH_RECEIVESTOREFORWARD_ENABLE
#define IS_ETH_FORWARD_UNDERSIZED_GOOD_FRAMES(CMD)
uint32_t RetryTransmission
#define ETH_ZEROQUANTAPAUSE_DISABLE
__IO HAL_ETH_StateTypeDef State
HAL_StatusTypeDef
HAL Status structures definition.
#define IS_ETH_ADDRESS_ALIGNED_BEATS(CMD)
HAL_StatusTypeDef HAL_ETH_WritePHYRegister(ETH_HandleTypeDef *heth, uint16_t PHYReg, uint32_t RegValue)
#define ETH_MACMIIAR_CR_Div16
uint32_t ReceiveThresholdControl
#define ETH_MACFCR_CLEAR_MASK
#define ETH_DMATXDESC_OWN
Bit definition of TDES0 register: DMA Tx descriptor status register.
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
#define IS_ETH_RECEIVE_STORE_FORWARD(CMD)
HAL_StatusTypeDef HAL_ETH_Init(ETH_HandleTypeDef *heth)
#define PHY_AUTONEGO_COMPLETE
#define IS_ETH_DUPLEX_MODE(MODE)
#define IS_ETH_BROADCAST_FRAMES_RECEPTION(CMD)
#define ETH_CHECKSUMOFFLAOD_ENABLE
uint32_t TxDMABurstLength
ETH Handle Structure definition.
#define IS_ETH_PROMISCUOUS_MODE(CMD)
#define IS_ETH_AUTOMATIC_PADCRC_STRIP(CMD)
#define ETH_TRANSMITTHRESHOLDCONTROL_64BYTES
uint32_t TransmitThresholdControl
#define ETH_FORWARDERRORFRAMES_DISABLE
uint32_t ControlBufferSize
#define IS_ETH_UNICAST_PAUSE_FRAME_DETECT(CMD)
uint32_t VLANTagComparison