Fifos reseten im cypress cy7c6013

#983163
Lesenswert?

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
#983302
Lesenswert?

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.
#983541
Lesenswert?

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

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