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


von Max (Gast)


Lesenswert?

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.

von max (Gast)


Lesenswert?

kann mir da keiner helfen

von Max (Gast)


Lesenswert?

Bitte
Ich versuche echt es zu verstehen.

von Simon K. (simon) Benutzerseite


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.

von Max (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.