Webserver [Ulrich Radig] - bleibt hängen in eth_get_data

OP #2488790
Ich habe das Problem, dass die while(1) schleife bei mir nicht 
funktioniert.
Webserver läuft und ist problemlos zu erreichen. Anpingen geht auch.

In der While Schleife steht eth_get_data(); und alles was danach kommt 
wird nie erreicht. Er kommt nie aus eth_get_data heraus.

hier ist die eth_get_data Funktion (habe sie gekürzt, so dass nur der 
Code für den ENC28J60 drinne steht:

void eth_get_data (void)
{
  if(eth.timer)
  {
    tcp_timer_call();
    arp_timer_call();
    eth.timer = 0;
  }
  if(eth.data_present)
  {
    while(ETH_INT_ACTIVE)
    {
        unsigned int packet_length;

        packet_length = ETH_PACKET_RECEIVE(MTU_SIZE,eth_buffer);
        if(packet_length > 0)
        {
          eth_buffer[packet_length+1] = 0;
          check_packet();
        }
    eth.data_present = 0;
    ETH_INT_ENABLE;
  }
  return;
}

Warum genau verlässt er diese Funktion nicht?
OP #2494190
So neues Problem,

Webserver läuft die meiste Zeit ohen Probleme. Manchmal aber scheint er 
abzuschmieren.... warum auch immer. Ping geht dann ganz normal aber die 
Website kann ich nicht mehr aufrufen im Browser steht dann immer sowas 
wie warten auf [IP-ADDRESSE] ...

Manchmal lädt er die Webpage auch nur zur hälfte und braucht dafür 
ewigkeiten.

Was kann das sein?
Gast #2494285
Schau dir mal die Pegel an der SPI an. MISO braucht einen Pullup, sonst 
liefert der mit 3,3V betriebene ENC28J60 nicht genug Pegel. Entweder 
einen 10k-Widerstand dranlöten oder den internen Pullup im ATmega 
benutzen. Dazu muss in der Funktion spi_init der Pin MISO auf high 
gesetzt werden (obwohl das ein Eingang ist).
OP #2494447
Danke für deinen Beitrag,

Die FUnktion sieht so aus:

static inline void spi_init(void)
{
  // configure pins MOSI, SCK as output
  SPI_DDR |= (1<<SPI_MOSI) | (1<<SPI_SCK);
  // pull SCK high
  SPI_PORT |= (1<<SPI_SCK);

  // configure pin MISO as input
  SPI_DDR &= ~(1<<SPI_MISO);
  SPI_DDR |= (1<<SPI_SS);

  //SPI: enable, master, positive clock phase, msb first, SPI speed 
fosc/2
  SPCR = (1<<SPE) | (1<<MSTR);
  SPSR = (1<<SPI2X);

  usdelay(10000);
}

Was muss ich genau ändern um das umzuschalten?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.