Forum: Mikrocontroller und Digitale Elektronik Wiznet w5100 über SPI Puffer leeren


von Philipp S. (philipp123)


Lesenswert?

Hallo,

ich verusche verzweifelt meinem wiznet w5100 über soft-spi an atmega2560 
etwas per tcp zu empfangen...

w5100 = server und Pc = client


das klapp soweit eigentlich auch ganz gut... doch leert der den 
RX-Puffer anscheinend nicht. Wenn ich einen datenpacket an der w5100 und 
ihn mir dann zurückgeben lasse kommt er fehlerlos, doch holt er beim 
abfragen des RX-Puffers immer wieder die selben daten. Wenn ich dann 
noch ein Datenpacket auf die Reise schicke gibt es Datensalat.

das DSCON Flag wird nach jedem empfang gesetzt...

Wie kann ich den Puffer meines w5100 leeren?



mfg Philipp

von Gast (Gast)


Lesenswert?

Du brauchst den Rx-Puffer nicht explizit zu löschen. Diu musst nur wie 
im Datsheet beschrieben den Rx-Pointer entsprechend der gelesenen Bytes 
wertersetzten. dann läuft alles wie von selbst ...

von Philipp S. (philipp123)


Lesenswert?

hallo gast, danke für die schnelle antwort

ich denke das tue ich, doch leider noch das selbe problem....:(

1
Sub receive
2
   Local I As Word                                          'word = 2 byte variable
3
   Local Top As Word                                        'word = 2 byte variable
4
   Local Bytes_rcv As Word                                  'word = 2 byte variable
5
6
   'Check for new incomming data
7
   Call Wiz5100_readvalue(&H4 , &H26)                        'hole 0x0426(receivesize register) MSB
8
   Bytes_rcv = Wert                                         'schreibe geholten wert in bytes_rcv
9
   Shift , Bytes_rcv , Left , 8                             'LSB -> MSB
10
   Call Wiz5100_readvalue(&H4 , &H27)                       'hole 0x0427(receivesize register) LSB
11
   Bytes_rcv = Bytes_rcv + Wert                             'schreibe geholten wert in bytes_rcv
12
13
   If Bytes_rcv > 0 Then                                    'wenn bytes vorhanden
14
      Bytes_rcv = Bytes_rcv - 1                             'offset-1 : um die offset adresse zu bekommen
15
16
      For I = 0 To Bytes_rcv                                'hier werden die einzelnen Bytes in buffer geschrieben....
17
         Top = I + &H6000                                   'RX base adresse 0x6000     chipbase ist 0x00
18
         Msb = High(top)                                    'msb lesen
19
         Lsb = Low(top)                                     'lsb lesen
20
         Call Wiz5100_readvalue(msb , Lsb)                  'hole wert von adresse
21
         If Bytes_rcv < 200 Then                            '200 bytes empfangen
22
            Buffer = Buffer + Chr(wert)                     'schreibe geholten wert zu buffer
23
         End If
24
      Next
25
   Elseif Bytes_rcv > 700 Then
26
      Call Wiz5100_writevalue(&H4 , &H1 , &H40)             'Set RECV flag
27
28
29
   Call Wiz5100_writevalue(&H4 , &H1 , &H40)                'Set RECV flag
30
   End If
31
32
End Sub

von Philipp S. (philipp123)


Lesenswert?


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.