SPI-Register überholt IO-Register?

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

SPI-Register überholt IO-Register?

Post by Franz Peter Zantis »

Mit dem untenstehenden Code wollte ich den Pin 0.0 (Sprung von High nach Low) verwenden um einen Trigger auszulösen bevor die SPI-Übertragung startet. Leider funktioniert das nicht richtig. Ich sehe auf dem Oszilloskop bereits SPI-Daten (und Takt) bevor der Trigger kommt. Seltsamerweise wird dieser Effekt noch verstärkt, wenn ich nach dem Setzen des Triggersignals eine Pause (10ms) einfüge: System.Threading.Thread.Sleep(10)

triggercounter = 0
'getting data from the SD-Card; 512 Byte
For lcounter = 1 To 512
If datasetcounter > 1033 Then
triggercounter = triggercounter + 1
'Trigger to low (P0.0)
IOdatawrite(1) = ClearBit(IOdatawrite(1), 0)
intret = IowKitWrite(IOhandle, 0, IOdatawrite(0), 8)
End If
IOspidata(0) = &H9
IOspidata(1) = 1 'reading 1 Byte
IOspidata(2) = &H0 'flags
intret = IowKitWrite(IOhandle, 1, IOspidata(0), 64)
intret = IowKitRead(IOhandle, 1, IOspidata(0), 64)
sdreadsector(lcounter) = IOspidata(2)
If datasetcounter > 1033 Then
'only one specific sector will be shown in the Immediate Window
Debug.Print(CStr(triggercounter) & " " & CStr(datasetcounter) & " value " & Convert.ToString(sdreadsector(lcounter), 16))
End If
Next lcounter
'Trigger to high (P0.0)
IOdatawrite(1) = SetBit(IOdatawrite(1), 0)
intret = IowKitWrite(IOhandle, 0, IOdatawrite(0), 8)
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: SPI-Register überholt IO-Register?

Post by Guido Körber »

Wenn ich das richtig verstehe senden Sie an den IOW56 einen Report um die SimpleIO zu setzen und dann greifen Sie auf die SPI Funktion zu?

Wie sieht der Code aus um die SimpleIO zu setzen?

Wenn beide Aktionen synchronisiert werden sollen, dann muss nach dem Senden des IO-Status erst die Antwort vom IOW56 abgewartet werden. Andernfalls macht halt der USB was ihm grad am Besten passt und dass kann sein, dass erst der Report an die SPI Funktion geht und dann die an den SimpleIO.
Franz Peter Zantis
Posts: 97
Joined: Wed Aug 03, 2011 3:46 pm
Contact:

Re: SPI-Register überholt IO-Register?

Post by Franz Peter Zantis »

Hier die verwendeten Funktionen, die einzelne Bits setzen oder löschen können:
Public Function SetBit(ByVal InByte As Byte, ByVal n As Byte) As Byte
'set the n-th Bit (0…7) of InByte
SetBit = InByte Or CByte(2 ^ n)
End Function

Public Function ClearBit(ByVal InByte As Byte, ByVal n As Byte) As Byte
'Rücksetzen des n-ten Bits von InByte
ClearBit = InByte And Not CByte(2 ^ n)
End Function

Mit dem Löschen von P0.0 löse ich ein Triggersignal aus mit dem ich das Oszilloskop triggern wollte, dass mir dann den SPI-Busverkehr aufzeichnet. Dabei stellte sich heraus, dass bereits SPI-Busverkehr stattfindet bevor P0.0 auf GND ist.

Wie kann ich denn auf die Antwort des IO-Warrior56 warten? Die Antwort wird doch in die Integer-Variable intret gespeichert und behinhaltet die Anzahl gesendeter Byte (soweit ich weiß).
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: SPI-Register überholt IO-Register?

Post by Guido Körber »

Ah, ok, bin in VB nicht gerade geübt, das sieht für mich recht unübersichtlich aus.

Wenn der IOW56 einen Statusänderung an seinen Pins sieht, sendet er einen Report mit dem neuen Status. Das passiert auch, wenn der Ausgang selber gesetzt wird. Diesen Report sollte man abholen, sonst ist nicht sicher in welcher Reihenfolge die Output Reports an den IOW gehen.

Das nicht Einsammeln dieser Input Reports könnte auch zu den Zeitverzögerungen führen wenn der Puffer überläuft
Post Reply