Fifos reseten im cypress cy7c6013

OP #983163
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
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.
OP #983541
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.