mardi 4 septembre 2007, par patrick Deflandre
Si vous mettez un débogueur, vous verrez votre application plantée dans une boucle infinie de la fonction ulEMACInputLength() ; Pour y remédier il faut légèrement modifier la configuration de base de cette démo.
Par défaut, celle ci est configurée pour ne pas répondre au message broadcast. Il faut valider cette option en :
supprimant le bit AT91C_EMAC_NBC dans le registre AT91C_BASE_EMAC->EMAC_NCFGR.
(fonction prvSetupDescriptors du fichier SAM7_EMAC.c)
supprimant le bit AT91C_EMAC_CAF de ce même registre.
Ce bit permettait d’accepter toutes les trames, même celle qui n’était pas à destination de l’adresse mac de la carte.
Code avant transformation :
/* Enable the copy of data into the buffers, ignore broadcasts,
and don't copy FCS. */
AT91C_BASE_EMAC->EMAC_NCFGR |= ( AT91C_EMAC_CAF | AT91C_EMAC_NBC | AT91C_EMAC_DRFCS);
Code après transformation :
/* Enable the copy of data into the buffers, accept broadcasts, refuse frame for other mac adress
and don't copy FCS. */
AT91C_BASE_EMAC->EMAC_NCFGR |= ( AT91C_EMAC_DRFCS );
Voila, après transformation, ça marche nickel.