Hallo Zusammen, Nachdem mir bei euch so schnell und gut geholfen wurde, möchte ich eine neue frage stellen: Ich möchte den FX2 an Hand der, in der CyUSB.dll vorhandenen Methode, Device.Reset() Reseten und darauf in der Firmware reagieren. Welches Register wird durch das reseten geändert? Das will ich abfragen und daran die FIFOs reseten (quasi füllstand rücksetzen) ist dass in der TD_Poll() möglich? Ich bedanke mich im voraus
Die Methode aus der DLL löscht meines Wissens nicht den Füllstand der Slave FIFOs. Das geht nur durch
1 | SYNCDELAY; |
2 | FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions |
3 | SYNCDELAY; // see TRM section 15.14 |
4 | FIFORESET = 0x02; // reset, FIFO 2 |
5 | SYNCDELAY; // |
6 | FIFORESET = 0x04; // reset, FIFO 4 |
7 | SYNCDELAY; // |
8 | FIFORESET = 0x06; // reset, FIFO 6 |
9 | SYNCDELAY; // |
10 | FIFORESET = 0x08; // reset, FIFO 8 |
11 | SYNCDELAY; // |
12 | FIFORESET = 0x00; // deactivate NAK-ALL |
13 | SYNCDELAY; |
direkt auf dem FX2. Aufrufen kannst du die Funktion beispielsweise durch einen Vendor-Request oder Standard-Request, die Funktionsrümpfe sind in der fw.c bereits drin.
Richtig, diese Zeilen will ich ausführen, wenn die Methode Device.Reset() ausgeführt und damit ein Bit in irgendeinem Register verändert wird. > SYNCDELAY; > FIFORESET = 0x80; // activate NAK-ALL to avoid race > conditions > SYNCDELAY; // see TRM section 15.14 > FIFORESET = 0x02; // reset, FIFO 2 > SYNCDELAY; // > FIFORESET = 0x04; // reset, FIFO 4 > SYNCDELAY; // > FIFORESET = 0x06; // reset, FIFO 6 > SYNCDELAY; // > FIFORESET = 0x08; // reset, FIFO 8 > SYNCDELAY; // > FIFORESET = 0x00; // deactivate NAK-ALL > SYNCDELAY; > Wenn ich kapitel 7 TRM (Resets) richtig verstehe wird Bit URES (Bit 5) im Register USBIRQ auf 1 gesetzt sobals Device.reset() ausgelöst wird. Mit dem Eintrag : USBIRQ = 0xFF; USBIE = 0x10; in die TD_Init() und dem Eintrag: if (USBIRQ & 0x10) { PA1 = 0x01; //ist ein Ausgang, damit überprüfe ich die Abfrage mittels oszi // hier müssen die FIFO-Resets rein } in die TD_Poll() klappt das schon ganz gut, Woran liegt es, dass diese IF-Abfrage unregelmäßig ausgeführt wird? manchmal beim ersten, manchmal erst beim zweiten oder auch erst beim 3. Aufruf der Reset_Methode
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.