www.mikrocontroller.net

Forum: FPGA, VHDL & Co. FPSLIC AVR-FPGA Interface


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi folks,

ich sitze seit einiger Zeit am AVR-FPGA Interface und die
Datenübertragung vom AVR zum FPGA funktioniert aber nicht umgekehrt.
Der Interrupt "RCO" (INT0) sollte im AVR die ISR aufrufen um die
Daten vom Bus zu lesen, leider kommt kein Interrupt durch. Was mache
ich falsch?



  process (CLOCK, RESET, INPUT, ENABLE, FIOREA)      --sensivity list
  variable rRCO : std_logic;
  variable varOUT : std_logic_vector(7 downto 0);
  begin
    if CLOCK'event and CLOCK = '0' then
      if (ENABLE = '1' and FIOREA = '1') then
        varOUT := "01000001";
        rRCO := '1';

      else
        varOUT := "ZZZZZZZZ";
        rRCO := '0';

      end if;
    end if;
        RCO <= rRCO;        -- Interrupt for AVR
    OUTPUT <= varOUT;      -- data output
--
  end process;

Was mache ich mit dem ENABLE? In den Atmel Beispielen wird es nie mit
einem Kontakt verbunden..

Danke für jegliche Hilfe.

Thomas

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, mit dem Stück Sourcecode ist kaum eine Analyse
möglich. Warum sind varOUT und rRC0 Variablen ? Nimm
doch besser Signale dafür. Warum stehen RESET und INPUT
in der Sens-List, wenn sie gar nicht verwendet werden ?
Hast Du das ganze mal mit ModelSim simuliert ? Das wäre
das erste, was ich machen würde.

Hast Du mit nem Scope auf der Interrupt-Leitung gemessen
dass der INT wirklich nicht kommt?

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den Code mit Modelsim simuliert und herausgefunden, dass das
ganze Problem wirklich nur am Interrupt liegt. In der Dokumentation
(Seite 59)steht, wie man den setzt aber  das klappt irgendwie nicht
URL: http://www.atmel.com/dyn/resources/prod_documents/...

In den Beispielen von Atmel wurden Variablen statt der Signale benutzt,
deshalb habe ich daran auch nix geändert.

Die ISR setzt das ENABLE und FIOREA, d.h. der Interrupt muss vor dem
Schleifeneintritt aufgerufen werden.
Quellcode ISR:

SIGNAL (SIG_FPGA_INTERRUPT0)
{

  FISCR = ((1 << XFIS0) | (0 << XFIS1));   //Configure FPGA I/O Select
Lines - clear XFIS1 and XFIS0

  receive = FISUA;  //recv Data fom FPGA and set FIOREA

}

Kann mir jemand weiterhelfen, wie man den Interrupt setzt? Die
Beschreibung in der Doku klingt kompliziert.

Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem lag am Interrupt, welcher manuell um 2 Takte verzögert
werden muss, damit er vom AVR erkannt wird.

Thomas

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]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.