Forum: Mikrocontroller und Digitale Elektronik ft4232h FPGA


von Sabine M. (zizo)


Lesenswert?

Hi,
ich habe ein FPGA mit Ft4232h verbunden. Dafür habe ich TXD und RXD 
verwendet,d.h asynchrone UART . Von meine Terminal Programm in Visual 
Basic 2008 sende ich ein Byte zum FPGA dann antwortet er mit 512 Byte. 
ich habe versucht mit 1024 Byte von FPGA zum Ft4232h zu senden. leider 
schließt sich mein Terminal Programm.
Warum kann ich nicht mehr al 512 Byte schicke, obwohl der FIFO 2KByte 
ist?
Ich habe mit mein Osci gemessen ich habe festgestellt dass die Daten 
jede 15 ms übertragen werden, d.h der FT4232h sendet ein Byte jede 15 ms 
um die Daten von FPGA zu holen. Kann mir jemand sagen warum so lang 
dauert? Wie kann ich die Daten-Übertragung erhöhen?
Ich habe mir überlegt dass ich auf der Byte der von Ft4232 zu FPGA zu 
verzichten, aber wie kann der FPGA feststellen dass der Ft4232h bereit 
ist für die Daten-Übernahme?

S.

Code:


   Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Timer2.Tick



        Do While ne < 1
            ne = ne + 1

            x = 0


            Do While x < 1
                x = x + 1

                BytesWritten = 0
                senddaten = 1
                Do



                    strwritebuffer = Chr(senddaten) 'ein Byte zum FPGA 
senden




                    ' Write string data to device
                    FT_Status = FT_Write_String(FT_Handle0, 
strwritebuffer, 1, BytesWritten)
                    If FT_Status <> FT_OK Then
                        Exit Sub
                    End If

                    If senddaten = 1 Then
                        senddaten = 0
                    ElseIf senddaten = 0 Then
                        senddaten = 1
                    End If
                Loop Until (BytesWritten = 1)


            Loop

         '''''''''''''''''''Auslesen die 512 Byte von FPGA
            i = 0
Wartenaufmehr:


            'Get auf number of Byte waiting to be read
            FT_Status = FT_GetQueueStatus(FT_Handle0, FT_RxQ_Bytes)
            If FT_Status <> FT_OK Then
                Exit Sub
            End If
            i = i + 1
            If i > 2000000 Then
                Exit Sub
            End If

            If FT_RxQ_Bytes < 512 Then GoTo Wartenaufmehr

            BytesRead = 0
            TempStringData = " "
            Do
                BytesRead = 0
                FT_Status = FT_Read_String(FT_Handle0, TempStringData, 
FT_RxQ_Bytes, BytesRead)
                If FT_Status <> FT_OK Then
                    Exit Sub

                End If

            Loop Until (FT_RxQ_Bytes = BytesRead) 'Or (fl_Timeout = 
True) Or (ftFatalError = True)
            If FT_RxQ_Bytes = BytesRead Then

            End If


        Loop


    End Sub

von Sabine Mühller (Gast)


Lesenswert?

Hi,

--Kann mir jemand sagen warum so lang
--dauert?
ich habe Latency Timer auf 1 eingestellt, dann habe ich Datenübertragung 
in 1m erreicht. d.h ich habe die erste Frage gelöst.

kann jemand mir sagen was passiert , wenn ich es auf 0 einstelle? ich 
hab Beschreibung im Datenblatt nicht verstanden!

Datenblatt:

Latency Timer. This is really a feature of the driver and is used to as 
a timeout to flush short packets of data back to the PC. The default is 
16ms, but it can be altered between 0ms and 256ms. At 0ms latency you 
get a packet transfer on every high speed microframe.




FT_STATUS FT_Read (FT_HANDLE ftHandle, LPVOID lpBuffer, DWORD 
dwBytesToRead, LPDWORD lpdwBytesReturned)
wenn ich  dwBytesToRead auf 1024 einstelle dann hängt mein Programm.


Wie kann ich das Buffer von Lesen auf 1024 einstelle?



Danke
S.

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.