Witam.
Powoli mi się kończy czas i pomysły ,dlatego proszę szanownych kolegów o pomoc.
Układ dogaduje się z PC co do prędkości i trybu transmisji (auto-negocjacja).Konfiguracja rejestrów PHY również przebiega poprawnie.Ramki wysłane z kompa dochodzą .W drugą stronę ,DP83848 miga diodą podczas wysyłania ,ale nic nie odbieram na kompie.Funkcje inicjalizujące , wysyłające,odbierające porównywałem z przykładami z innych for ,oraz ze strony nxp i wydaje mi się że jest ok.Cały kod trochę zajmuje więc wkleiłem tylko ten znaczący wg mnie.Używam kabla krzyżowanego .
Funkcja wysyłająca ramkę
Konfiguracja pamięci,DMA dla wysyłania
Powoli mi się kończy czas i pomysły ,dlatego proszę szanownych kolegów o pomoc.
Układ dogaduje się z PC co do prędkości i trybu transmisji (auto-negocjacja).Konfiguracja rejestrów PHY również przebiega poprawnie.Ramki wysłane z kompa dochodzą .W drugą stronę ,DP83848 miga diodą podczas wysyłania ,ale nic nie odbieram na kompie.Funkcje inicjalizujące , wysyłające,odbierające porównywałem z przykładami z innych for ,oraz ze strony nxp i wydaje mi się że jest ok.Cały kod trochę zajmuje więc wkleiłem tylko ten znaczący wg mnie.Używam kabla krzyżowanego .
Funkcja wysyłająca ramkę
/*--------------------------- EMAC_SendPacket ---------------------------------*/
BOOL_32 EMAC_SendPacket(void *pPacket, UNS_32 size)
{
UNS_32 Index;
UNS_32 IndexNext = MAC_TXPRODUCEINDEX + 1;
if(size == 0)
{
return(TRUE);
}
if(IndexNext > MAC_TXDESCRIPTORNUM)
{
IndexNext = 0;
}
if(IndexNext == MAC_TXCONSUMEINDEX)
{
return(FALSE);
}
Index = MAC_TXPRODUCEINDEX;
if (size > ETH_FRAG_SIZE)
size = ETH_FRAG_SIZE;
memcpy((unsigned int *)TX_BUF(Index),pPacket,size);
TX_DESC_CTRL(Index) &= ~0x7ff;
TX_DESC_CTRL(Index) |= (((size - 1) & 0x7ff)|0x70000000);
MAC_TXPRODUCEINDEX = IndexNext;
for(z=0;z<10000;z++);
return(TRUE);
}Konfiguracja pamięci,DMA dla wysyłania
static void tx_descr_init (void) {
UNS_32 i;
for (i = 0; i < NUM_TX_FRAG; i++) {
TX_DESC_PACKET(i) = TX_BUF(i);
TX_DESC_CTRL(i) = (1<<31) | (1<<30) | (1<<29) | (1<<28) | (1<<26) | (ETH_FRAG_SIZE-1);
TX_STAT_INFO(i) = 0;
}
/* Set EMAC Transmit Descriptor Registers. */
MAC_TXDESCRIPTOR = TX_DESC_BASE;
MAC_TXSTATUS = TX_STAT_BASE;
MAC_TXDESCRIPTORNUM = NUM_TX_FRAG-1;
/* Tx Descriptors Point to 0 */
MAC_TXPRODUCEINDEX = 0;
}