www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fifos reseten im cypress cy7c6013


Autor: Dete Kosschlovsski (dete)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Methode aus der DLL löscht meines Wissens nicht den Füllstand der 
Slave FIFOs. Das geht nur durch
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;

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.

Autor: Dete Kosschlovsski (dete)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.