mikrocontroller.net

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


Autor: Philipp S. (philipp123)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Philipp S. (philipp123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo gast, danke für die schnelle antwort

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


Sub receive
   Local I As Word                                          'word = 2 byte variable
   Local Top As Word                                        'word = 2 byte variable
   Local Bytes_rcv As Word                                  'word = 2 byte variable

   'Check for new incomming data
   Call Wiz5100_readvalue(&H4 , &H26)                        'hole 0x0426(receivesize register) MSB
   Bytes_rcv = Wert                                         'schreibe geholten wert in bytes_rcv
   Shift , Bytes_rcv , Left , 8                             'LSB -> MSB
   Call Wiz5100_readvalue(&H4 , &H27)                       'hole 0x0427(receivesize register) LSB
   Bytes_rcv = Bytes_rcv + Wert                             'schreibe geholten wert in bytes_rcv

   If Bytes_rcv > 0 Then                                    'wenn bytes vorhanden
      Bytes_rcv = Bytes_rcv - 1                             'offset-1 : um die offset adresse zu bekommen

      For I = 0 To Bytes_rcv                                'hier werden die einzelnen Bytes in buffer geschrieben....
         Top = I + &H6000                                   'RX base adresse 0x6000     chipbase ist 0x00
         Msb = High(top)                                    'msb lesen
         Lsb = Low(top)                                     'lsb lesen
         Call Wiz5100_readvalue(msb , Lsb)                  'hole wert von adresse
         If Bytes_rcv < 200 Then                            '200 bytes empfangen
            Buffer = Buffer + Chr(wert)                     'schreibe geholten wert zu buffer
         End If
      Next
   Elseif Bytes_rcv > 700 Then
      Call Wiz5100_writevalue(&H4 , &H1 , &H40)             'Set RECV flag


   Call Wiz5100_writevalue(&H4 , &H1 , &H40)                'Set RECV flag
   End If

End Sub


Autor: Philipp S. (philipp123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.