mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ENC28J60 Code-Verständnis Problem


Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mal den Code angehangen den ich nicht verstehe und als Kommentar 
meine fragen reingestellt.
//Code von Ulrich Radig
//http://www.ulrichradig.de/home/index.php/avr/eth_m32_ex

unsigned int enc28j60_receive_packet(unsigned int maxlen, unsigned char *buffer)
{
        //Hier wird doch der Lese Pointer auf eine bestimmte adresse
        //geladen. Die man dann mit dem Befehl "Read Buffer Memory" abrufen
        //Kann? Und der Lese Pointer wird doch Automatisch erhöht.
  //set read pointer to next packet;
  enc28j60_write_address(ENC28J60_REG_ERDPTL, (enc28j60_next_packet_ptr));
  enc28j60_write_address(ENC28J60_REG_ERDPTH, (enc28j60_next_packet_ptr)>>8);

  //now read the transmit status vector
  //read next packet ptr
  enc28j60_next_packet_ptr  = enc28j60_spi_read_byte(ENC28J60_OP_READ_BUF_MEM, 0);
  enc28j60_next_packet_ptr |= enc28j60_spi_read_byte(ENC28J60_OP_READ_BUF_MEM, 0)<<8;

  //mark packet as processed (free mem)

        //Diesen Code verstehte ich leider überhaupt nicht. Was ist den der
        //RX RD Pointe? Zeigt dieser an wo der ENC28J60 im Empfangsbuffer
        //hinschreiben darf? 
  //ERRATA says we need to check packet pointer:
        //Hier wird doch unteranderem geprüft ob das nächste Packet über 
        //den Empfangsbuffer geht? Wenn dies so ist dann wird doch hier der
        //RX RD Pointer auf das Ende gesetz aber wieso auf das ende? Muss 
        //das nicht der anfang sein?
  if ((enc28j60_next_packet_ptr- 1 < ENC28J60_RX_BUFFER_START) || (enc28j60_next_packet_ptr- 1 > ENC28J60_RX_BUFFER_END)){
    enc28j60_write_address(ENC28J60_REG_ERXRDPTL, LO8(ENC28J60_RX_BUFFER_END));
    enc28j60_write_address(ENC28J60_REG_ERXRDPTH, HI8(ENC28J60_RX_BUFFER_END));
  }else{
    enc28j60_write_address(ENC28J60_REG_ERXRDPTL, LO8(enc28j60_next_packet_ptr- 1));
    enc28j60_write_address(ENC28J60_REG_ERXRDPTH, HI8(enc28j60_next_packet_ptr- 1));
  }
   
   //Und was wird den hier schon wieder gemacht?
  //decrement packet counter:
  enc28j60_spi_write_word(ENC28J60_OP_BFS|ENC28J60_REG_ECON2, (1<<ENC28J60_BIT_PKTDEC));

  return len;
}
Ich werde das dem DP leider nicht ganz schlau.

Ich hoffe Ihr könnt mir helfen.

Autor: max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann mir da keiner helfen

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte
Ich versuche echt es zu verstehen.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möglicherweise solltest du erstmal lernen, wie man einen FIFO bzw. 
Ringbuffer implementiert (Damit du weißt, was die ganzen Pointer sind). 
Anschließend solltest du das Datenblatt des ENC28J60 konsultieren, weil 
da eigentlich alles drinsteht.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab versucht das DP zu lesen aber leider ist mein Englisch nicht so 
gut. Und darum wollte ich nochmal noch fragen. Es habert ja nur an 
diesen kurzen Code stück

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.