32 #define TRACE_LEVEL NIC_TRACE_LEVEL
44 #if defined(__ICCARM__)
47 #pragma data_alignment = 4
48 #pragma location = S32K344_ETH_RAM_SECTION
51 #pragma data_alignment = 4
52 #pragma location = S32K344_ETH_RAM_SECTION
55 #pragma data_alignment = 4
56 #pragma location = S32K344_ETH_RAM_SECTION
59 #pragma data_alignment = 4
60 #pragma location = S32K344_ETH_RAM_SECTION
124 TRACE_INFO(
"Initializing S32K344 Ethernet MAC...\r\n");
127 nicDriverInterface = interface;
133 IP_MC_ME->PRTN2_COFB1_CLKEN |= MC_ME_PRTN2_COFB1_CLKEN_REQ32_MASK;
134 IP_MC_ME->PRTN2_PCONF |= MC_ME_PRTN2_PCONF_PCE_MASK;
135 IP_MC_ME->PRTN2_PUPD |= MC_ME_PRTN2_PUPD_PCUD_MASK;
136 IP_MC_ME->CTL_KEY = MC_ME_CTL_KEY_KEY(0x5AF0);
137 IP_MC_ME->CTL_KEY = MC_ME_CTL_KEY_KEY(0xA50F);
140 while((IP_MC_ME->PRTN2_PUPD & MC_ME_PRTN2_PUPD_PCUD_MASK) != 0)
145 IP_EMAC->DMA_MODE |= EMAC_DMA_MODE_SWR_MASK;
147 while((IP_EMAC->DMA_MODE & EMAC_DMA_MODE_SWR_MASK) != 0)
152 IP_EMAC->MAC_MDIO_ADDRESS = EMAC_MAC_MDIO_ADDRESS_CR(4);
155 if(interface->phyDriver != NULL)
158 error = interface->phyDriver->init(interface);
160 else if(interface->switchDriver != NULL)
163 error = interface->switchDriver->init(interface);
178 IP_EMAC->MAC_CONFIGURATION = EMAC_MAC_CONFIGURATION_GPSLCE_MASK |
179 EMAC_MAC_CONFIGURATION_PS_MASK | EMAC_MAC_CONFIGURATION_DO_MASK;
182 temp = IP_EMAC->MAC_EXT_CONFIGURATION & ~EMAC_MAC_EXT_CONFIGURATION_GPSL_MASK;
189 IP_EMAC->MAC_Q0_TX_FLOW_CTRL = 0;
190 IP_EMAC->MAC_RX_FLOW_CTRL = 0;
193 IP_EMAC->MAC_RXQ_CTRL0 = EMAC_MAC_RXQ_CTRL0_RXQ0EN(2);
196 IP_EMAC->DMA_MODE = EMAC_DMA_MODE_PR(0);
198 IP_EMAC->DMA_SYSBUS_MODE |= EMAC_DMA_SYSBUS_MODE_AAL_MASK;
201 IP_EMAC->DMA_CH0_CONTROL = EMAC_DMA_CH0_CONTROL_DSL(0);
203 IP_EMAC->DMA_CH0_TX_CONTROL = EMAC_DMA_CH0_TX_CONTROL_TxPBL(32);
206 IP_EMAC->DMA_CH0_RX_CONTROL = EMAC_DMA_CH0_RX_CONTROL_RxPBL(32) |
210 IP_EMAC->MTL_TXQ0_OPERATION_MODE |= EMAC_MTL_TXQ0_OPERATION_MODE_TQS(7) |
211 EMAC_MTL_TXQ0_OPERATION_MODE_TXQEN(2) | EMAC_MTL_TXQ0_OPERATION_MODE_TSF_MASK;
214 IP_EMAC->MTL_RXQ0_OPERATION_MODE |= EMAC_MTL_RXQ0_OPERATION_MODE_RQS(7) |
215 EMAC_MTL_RXQ0_OPERATION_MODE_RSF_MASK;
222 IP_EMAC->MMC_TX_INTERRUPT_MASK = 0xFFFFFFFF;
223 IP_EMAC->MMC_RX_INTERRUPT_MASK = 0xFFFFFFFF;
224 IP_EMAC->MMC_FPE_TX_INTERRUPT_MASK = 0xFFFFFFFF;
225 IP_EMAC->MMC_FPE_RX_INTERRUPT_MASK = 0xFFFFFFFF;
228 IP_EMAC->MAC_INTERRUPT_ENABLE = 0;
231 IP_EMAC->DMA_CH0_INTERRUPT_ENABLE = EMAC_DMA_CH0_INTERRUPT_ENABLE_NIE_MASK |
232 EMAC_DMA_CH0_INTERRUPT_ENABLE_RIE_MASK | EMAC_DMA_CH0_INTERRUPT_ENABLE_TIE_MASK;
242 IP_EMAC->MAC_CONFIGURATION |= EMAC_MAC_CONFIGURATION_TE_MASK |
243 EMAC_MAC_CONFIGURATION_RE_MASK;
246 IP_EMAC->DMA_CH0_TX_CONTROL |= EMAC_DMA_CH0_TX_CONTROL_ST_MASK;
247 IP_EMAC->DMA_CH0_RX_CONTROL |= EMAC_DMA_CH0_RX_CONTROL_SR_MASK;
265 #if defined(USE_S32K344MINI_EVB)
267 IP_DCM_GPR->DCMRWF1 |= DCM_GPR_DCMRWF1_RMII_MII_SEL_MASK;
270 IP_SIUL2->MSCR[112] = SIUL2_MSCR_OBE_MASK | SIUL2_MSCR_IBE_MASK |
271 SIUL2_MSCR_PUS_MASK | SIUL2_MSCR_PUE_MASK | SIUL2_MSCR_SSS_2(0) |
272 SIUL2_MSCR_SSS_1(1) | SIUL2_MSCR_SSS_0(1);
273 IP_SIUL2->IMCR[291] = SIUL2_IMCR_SSS(2);
276 IP_SIUL2->MSCR[113] = SIUL2_MSCR_OBE_MASK | SIUL2_MSCR_SSS_2(0) |
277 SIUL2_MSCR_SSS_1(1) | SIUL2_MSCR_SSS_0(1);
280 IP_SIUL2->MSCR[64] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_IBE_MASK;
281 IP_SIUL2->IMCR[296] = SIUL2_IMCR_SSS(4);
284 IP_SIUL2->MSCR[137] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
285 SIUL2_MSCR_SSS_2(1) | SIUL2_MSCR_SSS_1(1) | SIUL2_MSCR_SSS_0(0);
288 IP_SIUL2->MSCR[37] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
289 SIUL2_MSCR_SSS_2(0) | SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
292 IP_SIUL2->MSCR[36] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
293 SIUL2_MSCR_SSS_2(0) | SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
296 IP_SIUL2->MSCR[79] = SIUL2_MSCR_IBE_MASK;
297 IP_SIUL2->IMCR[292] = SIUL2_IMCR_SSS(2);
300 IP_SIUL2->MSCR[105] = SIUL2_MSCR_IBE_MASK;
301 IP_SIUL2->IMCR[294] = SIUL2_IMCR_SSS(3);
304 IP_SIUL2->MSCR[104] = SIUL2_MSCR_IBE_MASK;
305 IP_SIUL2->IMCR[295] = SIUL2_IMCR_SSS(3);
308 IP_SIUL2->MSCR[149] = SIUL2_MSCR_OBE_MASK;
311 IP_SIUL2->GPDO149 = 0;
313 IP_SIUL2->GPDO149 = 1;
320 #elif defined(USE_S32K3X4EVB_Q172)
322 IP_DCM_GPR->DCMRWF1 |= DCM_GPR_DCMRWF1_RMII_MII_SEL_MASK;
325 IP_SIUL2->MSCR[112] = SIUL2_MSCR_OBE_MASK | SIUL2_MSCR_IBE_MASK |
326 SIUL2_MSCR_PUS_MASK | SIUL2_MSCR_PUE_MASK | SIUL2_MSCR_SSS_2(0) |
327 SIUL2_MSCR_SSS_1(1) | SIUL2_MSCR_SSS_0(1);
328 IP_SIUL2->IMCR[291] = SIUL2_IMCR_SSS(2);
331 IP_SIUL2->MSCR[113] = SIUL2_MSCR_OBE_MASK | SIUL2_MSCR_SSS_2(0) |
332 SIUL2_MSCR_SSS_1(1) | SIUL2_MSCR_SSS_0(1);
335 IP_SIUL2->MSCR[64] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_IBE_MASK;
336 IP_SIUL2->IMCR[296] = SIUL2_IMCR_SSS(4);
339 IP_SIUL2->MSCR[137] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
340 SIUL2_MSCR_SSS_2(1) | SIUL2_MSCR_SSS_1(1) | SIUL2_MSCR_SSS_0(0);
343 IP_SIUL2->MSCR[37] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
344 SIUL2_MSCR_SSS_2(0) | SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
347 IP_SIUL2->MSCR[36] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
348 SIUL2_MSCR_SSS_2(0) | SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
351 IP_SIUL2->MSCR[81] = SIUL2_MSCR_IBE_MASK;
352 IP_SIUL2->IMCR[292] = SIUL2_IMCR_SSS(1);
355 IP_SIUL2->MSCR[105] = SIUL2_MSCR_IBE_MASK;
356 IP_SIUL2->IMCR[294] = SIUL2_IMCR_SSS(3);
359 IP_SIUL2->MSCR[104] = SIUL2_MSCR_IBE_MASK;
360 IP_SIUL2->IMCR[295] = SIUL2_IMCR_SSS(3);
363 IP_SIUL2->MSCR[149] = SIUL2_MSCR_OBE_MASK;
366 IP_SIUL2->GPDO149 = 0;
368 IP_SIUL2->GPDO149 = 1;
375 #elif defined(USE_S32K3X4EVB_T172)
377 IP_DCM_GPR->DCMRWF1 |= DCM_GPR_DCMRWF1_RMII_MII_SEL_MASK;
380 IP_SIUL2->MSCR[36] = SIUL2_MSCR_OBE_MASK | SIUL2_MSCR_IBE_MASK |
381 SIUL2_MSCR_PUS_MASK | SIUL2_MSCR_PUE_MASK | SIUL2_MSCR_SSS_2(1) |
382 SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
383 IP_SIUL2->IMCR[291] = SIUL2_IMCR_SSS(1);
386 IP_SIUL2->MSCR[37] = SIUL2_MSCR_OBE_MASK | SIUL2_MSCR_SSS_2(1) |
387 SIUL2_MSCR_SSS_1(1) | SIUL2_MSCR_SSS_0(1);
390 IP_SIUL2->MSCR[107] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_IBE_MASK;
391 IP_SIUL2->IMCR[296] = SIUL2_IMCR_SSS(1);
394 IP_SIUL2->MSCR[108] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
395 SIUL2_MSCR_SSS_2(1) | SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
398 IP_SIUL2->MSCR[66] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
399 SIUL2_MSCR_SSS_2(1) | SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
402 IP_SIUL2->MSCR[103] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
403 SIUL2_MSCR_SSS_2(1) | SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
406 IP_SIUL2->MSCR[81] = SIUL2_MSCR_IBE_MASK;
407 IP_SIUL2->IMCR[292] = SIUL2_IMCR_SSS(1);
410 IP_SIUL2->MSCR[80] = SIUL2_MSCR_IBE_MASK;
411 IP_SIUL2->IMCR[293] = SIUL2_IMCR_SSS(1);
414 IP_SIUL2->MSCR[65] = SIUL2_MSCR_IBE_MASK;
415 IP_SIUL2->IMCR[294] = SIUL2_IMCR_SSS(1);
418 IP_SIUL2->MSCR[64] = SIUL2_MSCR_IBE_MASK;
419 IP_SIUL2->IMCR[295] = SIUL2_IMCR_SSS(1);
422 IP_SIUL2->MSCR[28] = SIUL2_MSCR_OBE_MASK;
425 IP_SIUL2->GPDO28 = 0;
427 IP_SIUL2->GPDO28 = 1;
434 #elif defined(USE_S32K344_WB)
436 IP_DCM_GPR->DCMRWF1 |= DCM_GPR_DCMRWF1_RMII_MII_SEL_MASK;
439 IP_SIUL2->MSCR[112] = SIUL2_MSCR_OBE_MASK | SIUL2_MSCR_IBE_MASK |
440 SIUL2_MSCR_PUS_MASK | SIUL2_MSCR_PUE_MASK | SIUL2_MSCR_SSS_2(0) |
441 SIUL2_MSCR_SSS_1(1) | SIUL2_MSCR_SSS_0(1);
442 IP_SIUL2->IMCR[291] = SIUL2_IMCR_SSS(2);
445 IP_SIUL2->MSCR[136] = SIUL2_MSCR_OBE_MASK | SIUL2_MSCR_SSS_2(1) |
446 SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
449 IP_SIUL2->MSCR[102] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_IBE_MASK;
450 IP_SIUL2->IMCR[296] = SIUL2_IMCR_SSS(2);
453 IP_SIUL2->MSCR[137] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
454 SIUL2_MSCR_SSS_2(1) | SIUL2_MSCR_SSS_1(1) | SIUL2_MSCR_SSS_0(0);
457 IP_SIUL2->MSCR[37] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
458 SIUL2_MSCR_SSS_2(0) | SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
461 IP_SIUL2->MSCR[36] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
462 SIUL2_MSCR_SSS_2(0) | SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
465 IP_SIUL2->MSCR[81] = SIUL2_MSCR_IBE_MASK;
466 IP_SIUL2->IMCR[292] = SIUL2_IMCR_SSS(1);
469 IP_SIUL2->MSCR[80] = SIUL2_MSCR_IBE_MASK;
470 IP_SIUL2->IMCR[293] = SIUL2_IMCR_SSS(1);
473 IP_SIUL2->MSCR[64] = SIUL2_MSCR_IBE_MASK;
474 IP_SIUL2->IMCR[294] = SIUL2_IMCR_SSS(2);
477 IP_SIUL2->MSCR[65] = SIUL2_MSCR_IBE_MASK;
478 IP_SIUL2->IMCR[295] = SIUL2_IMCR_SSS(2);
484 #elif defined(USE_MR_CANHUBK344)
486 IP_DCM_GPR->DCMRWF1 |= DCM_GPR_DCMRWF1_RMII_MII_SEL_MASK;
489 IP_SIUL2->MSCR[112] = SIUL2_MSCR_OBE_MASK | SIUL2_MSCR_IBE_MASK |
490 SIUL2_MSCR_PUS_MASK | SIUL2_MSCR_PUE_MASK | SIUL2_MSCR_SSS_2(0) |
491 SIUL2_MSCR_SSS_1(1) | SIUL2_MSCR_SSS_0(1);
492 IP_SIUL2->IMCR[291] = SIUL2_IMCR_SSS(2);
495 IP_SIUL2->MSCR[136] = SIUL2_MSCR_OBE_MASK | SIUL2_MSCR_SSS_2(1) |
496 SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
499 IP_SIUL2->MSCR[102] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_IBE_MASK;
500 IP_SIUL2->IMCR[296] = SIUL2_IMCR_SSS(2);
503 IP_SIUL2->MSCR[137] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
504 SIUL2_MSCR_SSS_2(1) | SIUL2_MSCR_SSS_1(1) | SIUL2_MSCR_SSS_0(0);
507 IP_SIUL2->MSCR[37] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
508 SIUL2_MSCR_SSS_2(0) | SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
511 IP_SIUL2->MSCR[36] = SIUL2_MSCR_SRC(1) | SIUL2_MSCR_OBE_MASK |
512 SIUL2_MSCR_SSS_2(0) | SIUL2_MSCR_SSS_1(0) | SIUL2_MSCR_SSS_0(1);
515 IP_SIUL2->MSCR[79] = SIUL2_MSCR_IBE_MASK;
516 IP_SIUL2->IMCR[292] = SIUL2_IMCR_SSS(2);
519 IP_SIUL2->MSCR[78] = SIUL2_MSCR_IBE_MASK;
520 IP_SIUL2->IMCR[293] = SIUL2_IMCR_SSS(2);
523 IP_SIUL2->MSCR[64] = SIUL2_MSCR_IBE_MASK;
524 IP_SIUL2->IMCR[294] = SIUL2_IMCR_SSS(2);
527 IP_SIUL2->MSCR[65] = SIUL2_MSCR_IBE_MASK;
528 IP_SIUL2->IMCR[295] = SIUL2_IMCR_SSS(2);
531 IP_SIUL2->MSCR[54] = SIUL2_MSCR_OBE_MASK;
534 IP_SIUL2->GPDO54 = 0;
536 IP_SIUL2->GPDO54 = 1;
553 while((IP_MC_CGM->MUX_7_CSS & MC_CGM_MUX_7_CSS_SWIP_MASK) != 0)
558 IP_MC_CGM->MUX_7_DC_0 = MC_CGM_MUX_7_DC_0_DE_MASK | MC_CGM_MUX_7_DC_0_DIV(1);
560 while((IP_MC_CGM->MUX_7_DIV_UPD_STAT & MC_CGM_MUX_7_DIV_UPD_STAT_DIV_STAT_MASK) != 0)
565 IP_MC_CGM->MUX_7_CSC = MC_CGM_MUX_7_CSC_SELCTL(24) | MC_CGM_MUX_7_CSC_CLK_SW_MASK;
567 while((IP_MC_CGM->MUX_7_CSS & MC_CGM_MUX_7_CSS_CLK_SW_MASK) == 0)
572 while((IP_MC_CGM->MUX_7_CSS & MC_CGM_MUX_7_CSS_SWIP_MASK) != 0)
577 while((IP_MC_CGM->MUX_8_CSS & MC_CGM_MUX_8_CSS_SWIP_MASK) != 0)
582 IP_MC_CGM->MUX_8_DC_0 = MC_CGM_MUX_8_DC_0_DE_MASK | MC_CGM_MUX_8_DC_0_DIV(1);
584 while((IP_MC_CGM->MUX_8_DIV_UPD_STAT & MC_CGM_MUX_8_DIV_UPD_STAT_DIV_STAT_MASK) != 0)
589 IP_MC_CGM->MUX_8_CSC = MC_CGM_MUX_8_CSC_SELCTL(24) | MC_CGM_MUX_8_CSC_CLK_SW_MASK;
591 while((IP_MC_CGM->MUX_8_CSS & MC_CGM_MUX_8_CSS_CLK_SW_MASK) == 0)
596 while((IP_MC_CGM->MUX_8_CSS & MC_CGM_MUX_8_CSS_SWIP_MASK) != 0)
601 while((IP_MC_CGM->MUX_9_CSS & MC_CGM_MUX_9_CSS_SWIP_MASK) != 0)
606 IP_MC_CGM->MUX_9_DC_0 = MC_CGM_MUX_9_DC_0_DE_MASK | MC_CGM_MUX_9_DC_0_DIV(0);
608 while((IP_MC_CGM->MUX_9_DIV_UPD_STAT & MC_CGM_MUX_9_DIV_UPD_STAT_DIV_STAT_MASK) != 0)
613 IP_MC_CGM->MUX_9_CSC = MC_CGM_MUX_9_CSC_SELCTL(24) | MC_CGM_MUX_9_CSC_CLK_SW_MASK;
615 while((IP_MC_CGM->MUX_9_CSS & MC_CGM_MUX_9_CSS_CLK_SW_MASK) == 0)
620 while((IP_MC_CGM->MUX_9_CSS & MC_CGM_MUX_9_CSS_SWIP_MASK) != 0)
685 if(interface->phyDriver != NULL)
688 interface->phyDriver->tick(interface);
690 else if(interface->switchDriver != NULL)
693 interface->switchDriver->tick(interface);
710 NVIC_EnableIRQ(EMAC_0_IRQn);
713 if(interface->phyDriver != NULL)
716 interface->phyDriver->enableIrq(interface);
718 else if(interface->switchDriver != NULL)
721 interface->switchDriver->enableIrq(interface);
738 NVIC_DisableIRQ(EMAC_0_IRQn);
741 if(interface->phyDriver != NULL)
744 interface->phyDriver->disableIrq(interface);
746 else if(interface->switchDriver != NULL)
749 interface->switchDriver->disableIrq(interface);
774 status = IP_EMAC->DMA_CH0_STATUS;
777 if((status & EMAC_DMA_CH0_STATUS_TI_MASK) != 0)
780 IP_EMAC->DMA_CH0_STATUS = EMAC_DMA_CH0_STATUS_TI_MASK;
791 if((status & EMAC_DMA_CH0_STATUS_RI_MASK) != 0)
794 IP_EMAC->DMA_CH0_STATUS = EMAC_DMA_CH0_STATUS_RI_MASK;
797 nicDriverInterface->nicEvent =
TRUE;
803 IP_EMAC->DMA_CH0_STATUS = EMAC_DMA_CH0_STATUS_NIS_MASK;
877 IP_EMAC->DMA_CH0_STATUS = EMAC_DMA_CH0_STATUS_TBU_MASK;
879 IP_EMAC->DMA_CH0_TXDESC_TAIL_POINTER = 0;
965 IP_EMAC->DMA_CH0_STATUS = EMAC_DMA_CH0_STATUS_RBU_MASK;
967 IP_EMAC->DMA_CH0_RXDESC_TAIL_POINTER = 0;
986 uint32_t hashTable[2];
994 if(interface->promiscuous)
997 IP_EMAC->MAC_PACKET_FILTER = EMAC_MAC_PACKET_FILTER_PR_MASK;
1002 IP_EMAC->MAC_ADDRESS0_LOW = interface->macAddr.w[0] | (interface->macAddr.w[1] << 16);
1003 IP_EMAC->MAC_ADDRESS0_HIGH = interface->macAddr.w[2];
1018 entry = &interface->macAddrFilter[i];
1031 k = (crc >> 26) & 0x3F;
1034 hashTable[k / 32] |= (1 << (k % 32));
1042 unicastMacAddr[j++] = entry->
addr;
1052 IP_EMAC->MAC_ADDRESS1_LOW = unicastMacAddr[0].w[0] | (unicastMacAddr[0].w[1] << 16);
1053 IP_EMAC->MAC_ADDRESS1_HIGH = unicastMacAddr[0].w[2] | EMAC_MAC_ADDRESS1_HIGH_AE_MASK;
1058 IP_EMAC->MAC_ADDRESS1_LOW = 0;
1059 IP_EMAC->MAC_ADDRESS1_HIGH = 0;
1066 IP_EMAC->MAC_ADDRESS2_LOW = unicastMacAddr[1].w[0] | (unicastMacAddr[1].w[1] << 16);
1067 IP_EMAC->MAC_ADDRESS2_HIGH = unicastMacAddr[1].w[2] | EMAC_MAC_ADDRESS2_HIGH_AE_MASK;
1072 IP_EMAC->MAC_ADDRESS2_LOW = 0;
1073 IP_EMAC->MAC_ADDRESS2_HIGH = 0;
1078 if(interface->acceptAllMulticast)
1081 IP_EMAC->MAC_PACKET_FILTER = EMAC_MAC_PACKET_FILTER_HPF_MASK |
1082 EMAC_MAC_PACKET_FILTER_PM_MASK;
1087 IP_EMAC->MAC_PACKET_FILTER = EMAC_MAC_PACKET_FILTER_HPF_MASK |
1088 EMAC_MAC_PACKET_FILTER_HMC_MASK;
1091 IP_EMAC->MAC_HASH_TABLE_REG0 = hashTable[0];
1092 IP_EMAC->MAC_HASH_TABLE_REG1 = hashTable[1];
1095 TRACE_DEBUG(
" MAC_HASH_TABLE_REG0 = 0x%08" PRIX32
"\r\n", IP_EMAC->MAC_HASH_TABLE_REG0);
1096 TRACE_DEBUG(
" MAC_HASH_TABLE_REG1 = 0x%08" PRIX32
"\r\n", IP_EMAC->MAC_HASH_TABLE_REG1);
1116 config = IP_EMAC->MAC_CONFIGURATION;
1121 config |= EMAC_MAC_CONFIGURATION_FES_MASK;
1125 config &= ~EMAC_MAC_CONFIGURATION_FES_MASK;
1131 config |= EMAC_MAC_CONFIGURATION_DM_MASK;
1135 config &= ~EMAC_MAC_CONFIGURATION_DM_MASK;
1139 IP_EMAC->MAC_CONFIGURATION = config;
1163 temp = IP_EMAC->MAC_MDIO_ADDRESS & EMAC_MAC_MDIO_ADDRESS_CR_MASK;
1165 temp |= EMAC_MAC_MDIO_ADDRESS_GOC_0_MASK | EMAC_MAC_MDIO_ADDRESS_GB_MASK;
1168 temp |= EMAC_MAC_MDIO_ADDRESS_PA(phyAddr);
1170 temp |= EMAC_MAC_MDIO_ADDRESS_RDA(
regAddr);
1173 IP_EMAC->MAC_MDIO_DATA =
data & EMAC_MAC_MDIO_DATA_GD_MASK;
1176 IP_EMAC->MAC_MDIO_ADDRESS = temp;
1178 while((IP_EMAC->MAC_MDIO_ADDRESS & EMAC_MAC_MDIO_ADDRESS_GB_MASK) != 0)
1207 temp = IP_EMAC->MAC_MDIO_ADDRESS & EMAC_MAC_MDIO_ADDRESS_CR_MASK;
1210 temp |= EMAC_MAC_MDIO_ADDRESS_GOC_1_MASK |
1211 EMAC_MAC_MDIO_ADDRESS_GOC_0_MASK | EMAC_MAC_MDIO_ADDRESS_GB_MASK;
1214 temp |= EMAC_MAC_MDIO_ADDRESS_PA(phyAddr);
1216 temp |= EMAC_MAC_MDIO_ADDRESS_RDA(
regAddr);
1219 IP_EMAC->MAC_MDIO_ADDRESS = temp;
1221 while((IP_EMAC->MAC_MDIO_ADDRESS & EMAC_MAC_MDIO_ADDRESS_GB_MASK) != 0)
1226 data = IP_EMAC->MAC_MDIO_DATA & EMAC_MAC_MDIO_DATA_GD_MASK;
1254 p = (uint8_t *)
data;
1259 for(i = 0; i <
length; i++)
1262 for(j = 0; j < 8; j++)
1265 if((((crc >> 31) ^ (
p[i] >> j)) & 0x01) != 0)
1267 crc = (crc << 1) ^ 0x04C11DB7;