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


von Thomas (Gast)


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

von FPGA-User (Gast)


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?

von Thomas (Gast)


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/doc1138.pdf

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

von Thomas (Gast)


Lesenswert?

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

Thomas

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
Noch kein Account? Hier anmelden.