ENC28J60 Code-Verständnis Problem

Gast #1136962
Habe mal den Code angehangen den ich nicht verstehe und als Kommentar 
meine fragen reingestellt.
1
//Code von Ulrich Radig
2
//http://www.ulrichradig.de/home/index.php/avr/eth_m32_ex
3

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

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

18
  //mark packet as processed (free mem)
19

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

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

Ich hoffe Ihr könnt mir helfen.
Gast #1138238
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

Eine eigene Frage? Dieser Thread ist über 17 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.