ENC28J60 Code-Verständnis Problem

Gast #1136962
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren