Description
Source
Call Graph
Start Line: 419
int main(void)
{
Dm9161 *pDm = &gDm9161;
unsigned int errCount = 0;
unsigned int frmSize;
EmacStats stats;
TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
printf("-- Basic EMAC Project %s --\n\r", SOFTPACK_VERSION);
printf("-- %s\n\r", BOARD_NAME);
printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__);
// Display MAC & IP settings
printf("-- MAC %x:%x:%x:%x:%x:%x\n\r",
MacAddress[0], MacAddress[1], MacAddress[2],
MacAddress[3], MacAddress[4], MacAddress[5]);
printf("-- IP %d.%d.%d.%d\n\r",
IpAddress[0], IpAddress[1], IpAddress[2], IpAddress[3]);
#if !defined(BOARD_EMAC_POWER_ALWAYS_ON)
// clear PHY power down mode
PIO_Configure(emacPwrDn, 1);
#endif
// Init EMAC driver structure
EMAC_Init(AT91C_ID_EMAC, MacAddress, EMAC_CAF_DISABLE, EMAC_NBC_DISABLE);
// Setup EMAC buffers and interrupts
AIC_ConfigureIT(AT91C_ID_EMAC, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, ISR_Emac);
AIC_EnableIT(AT91C_ID_EMAC);
// Init DM9161 driver
DM9161_Init(pDm, EMAC_PHY_ADDR);
// PHY initialize
if (!DM9161_InitPhy(pDm, BOARD_MCK,
emacRstPins, PIO_LISTSIZE(emacRstPins),
emacPins, PIO_LISTSIZE(emacPins))) {
printf("P: PHY Initialize ERROR!\n\r");
return -1;
}
// Auto Negotiate
if (!DM9161_AutoNegotiate(pDm)) {
printf("P: Auto Negotiate ERROR!\n\r");
return -1;
}
while( DM9161_GetLinkSpeed(pDm, 1) == 0 ) {
errCount++;
}
printf("P: Link detected \n\r");
printf("Press a key for statistics\n\r");
while(1) {
// Display Statistics
if ( USART_IsDataAvailable((AT91S_USART *)AT91C_BASE_DBGU) ) {
DBGU_GetChar();
EMAC_GetStatistics(&stats, 1);
printf("=== EMAC Statistics ===\n\r");
printf(" .tx_packets = %d\n\r", stats.tx_packets);
printf(" .tx_comp = %d\n\r", stats.tx_comp);
printf(" .tx_errors = %d\n\r", stats.tx_errors);
printf(" .collisions = %d\n\r", stats.collisions);
printf(" .tx_exausts = %d\n\r", stats.tx_exausts);
printf(" .tx_underruns = %d\n\r", stats.tx_underruns);
printf(" .rx_packets = %d\n\r", stats.rx_packets);
printf(" .rx_eof = %d\n\r", stats.rx_eof);
printf(" .rx_ovrs = %d\n\r", stats.rx_ovrs);
printf(" .rx_bnas = %d\n\r", stats.rx_bnas);
}
// Process packets
if( EMAC_RX_OK != EMAC_Poll( EthBuffer, sizeof(EthBuffer), &frmSize) ) {
continue;
}
if (frmSize > 0) {
// Handle input frame
eth_process_packet(EthBuffer, frmSize);
}
}
return 0;
}