Philsen
29.09.2009, 16:22
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
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
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
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