usb 2.0 cypress

(Firma: gast) #1001888
Lesenswert?

hallo zusammen,

kann mir bitte jemand ein tipp für folgende problem geben?

ich verwende den usb 2.0 von cypress .Ich möchte ein port ein und danach 
auschalten:
PA7=1;
PA7=0;
ich sehe das signal am osci ich sehe nicht ein ständige signalwechsel 
sondern jede 7.5ms kommt ein signalwechsel mit einer dauer von ca 2ms
ich habe die funktion fw.c von hersteller  benutzt.
kann den usb irgendwie schlaffen?

Danke für die Hilfe
(Firma: gast) #1001913
Lesenswert?

hallo,

ich habe eine funktion geschrieben die,den port  PA7 ständig ein und 
ausschaltet.

void converst(void)
{
 PA7=1;
 PA7=0;
}
wenn ich das signal am port PA7 mittels osci betrachte,ich sehe nicht 
dass diese port ständig einmal high ,einmal low ist  sonderen sehe ich 
für eine bestimmte zeit(2ms) dise port einmal high einmal low,und dann 
dise port Low für 5,5ms und dann wider einmal high einmal low.

mit andren worten ich sehe für 5ms lowsignal (nix)dann flankenwechsel ud 
so weiter,dass heisst der microcontroller funktionniert in eine 
bestimmte zeit(signal wechsel am port PA7) dann funktionniert er nicht 
dann wider funktionniert und so weiter.

die frage ist wieso sehe ich nicht die ganzezeit das signalam port 
einmal high einmal low?

danke für die schnelle antwort
Gast #1001942
Lesenswert?

Ich nehme mal an deine main Funktion sieht in etwa so aus:

main()
{
    while(1)
    {
        converst();
    }
}


Der Funktionsaufruf converst() braucht natürlich mehr Taktzyklen (=Zeit) 
als zwischen deinen 2 Portzugriffen PA7=1; und PA7=0; vergeht.
Darum ist das gemessene Signal unsymmetrisch.
Das bedeutet aber noch lange nicht, dass der Prozessor schläft oder 
nichts tut.
Guck dir mal das Assemblerlisting an, das aus deinem C-Code generiert 
wird. Dann wird's dir vielleicht klar.
(Firma: gast) #1002641
Lesenswert?

Hallo,

Danke Rofl für deine Antwort.In main steht wie du geschrieben hast.

ich habe noch leider den assembler code nicht gesehen aber ich muss 
später gucken.Die Frage ist , wenn die sache wie du gesagt hast ,wie 
wird den port nicht nur einmal toggelt ?.

Danke nochmal
(Firma: gast) #1002693
Lesenswert?

Hallo,

für den tipp von Rofl:
ich habe mit timer interrupt und mit der flag von timer gearbeitet aber 
wie ich geschriben habe ich habe nicht verstanden wieso die converst 
funktion funktionniert nicht richtig.

für den tipp von christian:
ich habe davor mit GPIF designer gearbeitet, und deswegen möchte ich 
jetzt die daten seriell übertragen zu probieren ,weil mittels GPIF ich 
kriege  sehr wenig daten (obwohl eigentlich paralelle übetragung iat 
schnelle als seriell) .Auch bei GPIF ich sehe Mittels Labview das die 
digitaliesierte daten kommen manchmall richtig und dann gibt es wie ein 
schlaff zeit oder so

danke
(Firma: gast) #1002854
Lesenswert?

Hallo Christian,
ich brauche nur 4MB/s, aber ich habe villeicht nict ein zentel davon 
gekriegt.und das ist jetzt eine andre sache.

was ich nicht verstehe ist:manchmal kommt signal(sinusförmig mit 
richtige abtast punkte und dann kommt ein ubelappende signal dazu(keine 
aliasing probleme))wenn ich interpretiere ich sehe dass der cpu in eine 
bestimmte zeit schlaffen.kann das passieren?
und noch wenn ich nur ein port umschalte wie gesagt wird dise port 
umgeschaltet vielmal dann nix dann nochmal gibt es dise umschaltung.und 
dise kommt periodisch.
die frage  nun ist:
wenn es irgend eine taktzyklen für die mc für einige funktionen ZB 
gebraucht wird ist klar,aber wieso wird nicht nur einmal umgechaltet?

danke für deine hilfe
Gast #1002906
Lesenswert?

Äh, sorry. Kannst du eine andere Sprache vielleicht besser als deutsch. 
Englisch eventuell?
Ich kann dein Problem so nicht verstehen.
Port umschalten, nochmal diese Umschaltung? Kommt periodisch?

Grundsätzlich: Du kannst nicht davon ausgehen, dass die CPU einem 
strikten timing folgt. Die USB kommunikation, I2C etc erzeugen 
Interrupts, die deine beobachteten "Pausen" in der Abarbeitung deines 
codes erklären können.

Wenn du in immer gleichen Abständen Daten verarbeiten musst, dann geht 
es nur über einen Timer-Interrupt oder über einen externen Takt am GPIF 
Interface (=schneller).
4MB/s ist über einen Timer-Interrupt nicht zu machen. 2000 Interrupts/s 
geht vielleicht gerade noch so aber nicht mehr.
Also -> Kapitel im Handbuch über das FIFO Interface studieren.
Gast #1002962
Lesenswert?

Und selbst wenn keine Interrupt freigeschalten sind, wird es mit obigem 
Code kürzere Ein- als Aus-Phasen geben. Deswegen hab ich in meinem 
Code-Beispiel den Zustand invertiert, damit es wenigstens einigermaßen 
konstant ist...

Ralf
Gast #1002980
Lesenswert?

Dann musst du jetzt noch mehr und genaue Informationen liefern. Poste 
deinen Code, wenn es mehr ist, dann als Anhang.

- Interrupts aktiviert?
- Hat das Teil einen Watchdog, der ständig einen Reset macht?
- Läuft der Stack über?
- Mit welcher Software programmierst du? Falls es KEIL ist, was sagt der 
Simulator dazu?

Ralf
(Firma: gast) #1003844
Lesenswert?

morgen,

ihr meint jetzt dass,ich die GPIF interface benutzen muss oder habe ich 
falch verstanden?
eigentlich habe ich gedacht dass,man kann auch 4MB/s bekommen auch wenn 
die
abgetastete daten vom ADU seriell bekommen und die voraussetzung dafür 
ist nur eine hohe abtastfrequenz(bis maximal 40Mhz)umd die daten zu 
übertragen.

ich habe so überlegt:
die daten kommen vom ADU seriell(16 bits), werden mit eine frequenz von 
ZB 24MHz abgetastet und dann werden bitweise in einer variable 
gespeichert und dann wird diese variable im endpunkt buffer geschrieben 
bis 512 byte und dann zum pc gechickt.
bitte wenn ich denkfehler gemacht habe ,gibt ihr mir eure tipp.

danke .
#1003853
Lesenswert?

Ich schreib mal in englisch, ich glaube, dass versteht er besser.

With the maximum CPU clock of only 48MHz you cannot sample 24MHz serial 
data. As far as i know the old 8051 core in the FX2 takes at least 4 
clock cycles per instruction. You have to use either the GPIF for direct 
connecting to the ADC or (the better way) an external hardware like CPLD 
oder FPGA, which fills the slave FIFOs with the ADC data. Only in this 
way you can reach this data rates.
(Firma: gast) #1004926
Lesenswert?

hallo,

mit dem Oszilloskop habe ich den converst signal(abtastfrequenz so 
zusagen)
und busy signal(von Adu) gemessen,sind ziemlich ok.aber das problem 
ist,dass es eine sehr risiege datenverlust gibt.
kann man davon ausgehen,dass wenn der usb controller die 512 bytes 
sendet,in diese zeit nimmt er keine daten an,aber eigentlich er sendet 
sehr schnell, und kann das nicht ein grund dafür.
weisst du welche maximale übertragungs rate ,die der gpif leisten kann.

gruß
#1004995
Lesenswert?

Hm, dann musst du den Endpunkt mal doppelt oder vierfach puffern. Das 
geht ja einzustellen. Allerdings können dann immer noch Daten verloren 
gehn. Wie schnell der GPIF ist, weiß ich nicht, das war mir alles zu 
kompliziert, ich lasse das von einer externen Logik machen. Somt hat man 
40MB/s ohne Datenverlust.
(Firma: gast) #1005019
Lesenswert?

hallo,
ich habe eigentlich 4 fach gepuffert.
jetzt ist die frage so:
diese fx2 ist ein internal master,das bedeutet dass mit GPIF kann man 
daten übertragen so ungefähr wie mittels einem fpga zum beipiel.
und wenn mittels FPGA bis 40MB/s muss diese fx2 locker 4MB/s hinkriegen.
gruß

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren