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 | }
|