Forum: FPGA, VHDL & Co. Anfänger | Picoblaze-Assembler-Code| Interrupts ausführen lassen


von berndo (Gast)


Lesenswert?

Hallo,

ich beginne gerade erst mit dem Picoblaze Assembler-Code kleine 
Übungs-Programme zu schreiben.
Ich benutze das Spartan 3E Kit Board.
Mit VHDL mache ich zur Zeit noch nichts.
Bezüglich der Interrupts komme ich nun nicht weiter.
Ich habe den "Picoblaze User Guide" intensiv dazu gelesen. Im Grunde 
glaube ich es auch verstanden zu haben.
Leider steht dort überhaupt nicht, was denn den Interrupt auslöst, was 
ist die Quelle.
Ein Tastendruck?, irgendeine steigende Flanke?, ein Timer?, ...usw?
Was löst den Interrupt aus?
Kann ich das im Code festlegen?

Eigentlich möchte ich ein kleines Übungsprogramm zum Verständnis 
schreiben.
In einer kleinen Schleife wird ein Register immer um 2 erhöht.
Wenn ich nun auf eine Taste drücke soll die Schleife unterbrochen 
werden, eine  reihe LEDs sollen eingeschaltet werden, und dann kehrt das 
Programm wieder in die Addierschleife zurück.
Mein erster Versuch sieht so aus:

cstart:  load s0,09
  output s0,00
  enable interrupt
weiter:  load s1,00          ;kleine Addierschleife, Register s0 plus 2
  output  s1,01
  load s1, 02
  add s0,s1
  jump weiter

isr:  load  s1,ff       ;Interrupt-Service-Routine
  output  s1,01
  returni enable

  address 3ff         ;letzte Adresse des Befehlsspeichers
  jump isr

Ich simmuliere immer im Debugger PBlazIDE von Mediatronix.
Dort kann man sehr schön jeden einzelnen Schritt sehen.
Wenn ich dort für Interrupt auf Edge oder Static gehe, wird das 
Interrupt sofort ausgelöst. Es soll aber ja erst bei Tastendruck 
reagieren.


Wie geht das, was muss ich ändern?
Kann man die Interruptursache einstellen?


Gruß und Danke

von Falk B. (falk)


Lesenswert?

@  berndo (Gast)

>Leider steht dort überhaupt nicht, was denn den Interrupt auslöst, was
>ist die Quelle.

Das Eingangssignal Interrupt, oder wie auch immer das heisst.

>Ein Tastendruck?, irgendeine steigende Flanke?, ein Timer?, ...usw?
>Was löst den Interrupt aus?
>Kann ich das im Code festlegen?

Nöö, sooo umfangreich ist der Picoblaze nun auch wieder nicht. Du must 
eine Logikschaltung an den Interrupteingang hängen.

>Wenn ich nun auf eine Taste drücke soll die Schleife unterbrochen
>werden, eine  reihe LEDs sollen eingeschaltet werden, und dann kehrt das
>Programm wieder in die Addierschleife zurück.

Naja, sowas macht man aber nicht per Interrupt.

MFG
Falk

von berndo (Gast)


Lesenswert?

Vielen Dank für Deine Antwort,
leider bringt mich das nicht richtig weiter.
Aus Deinen Antworten kann ich leider keine inhaltliches Substanz 
herauslesen.
Liegt wohl an mir.

---------
>>Leider steht dort überhaupt nicht, was denn den Interrupt auslöst, was
>>ist die Quelle.

>Das Eingangssignal Interrupt, oder wie auch immer das heisst.

Das war mir irgendwie bereits bewußt. Der nicht veränderte 
Basis-Picoblaze Mikrocontroller hat einen Interrupteingang. Findet an 
diesem Interrupteingang ein positiver Flankenwechsel von Null nach 1 
statt, so wird der Interruptvorgang eingeleitet. (Wenn interrupt 
enable).
ABER:
Welches Ereignis verursacht denn diesen Flankenwechsel?
---------

>>Ein Tastendruck?, irgendeine steigende Flanke?, ein Timer?, ...usw?
>>Was löst den Interrupt aus?
>>Kann ich das im Code festlegen?

>Nöö, sooo umfangreich ist der Picoblaze nun auch wieder nicht. Du must
>eine Logikschaltung an den Interrupteingang hängen.

Aha, was meinst Du mit "Logikschaltung an den Interrupteingang"?
Wie realisiere ich das mit dem Assemblercode?
Wie spreche ich den Interrupteingang an?
Wie ich oben bereits schrieb, mit VHDL/Verilog mache ich noch nichts.
Wie ich bereits woanders las, kann man die Interruptmöglichkeiten von 
Picoblaze mit VHDL erweitern.
Ich arbeite jedoch noch direkt mit dem Assembler-Grundwortschatz.
Da hierbei eine Interruptmöglichkeit eingbaut ist, vermute ich mal, das 
man den auch benutzen kann.
aber wie?


>>Wenn ich nun auf eine Taste drücke soll die Schleife unterbrochen
>>werden, eine  reihe LEDs sollen eingeschaltet werden, und dann kehrt das
>>Programm wieder in die Addierschleife zurück.

>Naja, sowas macht man aber nicht per Interrupt.

Nein? Wie macht man das denn sonst?
Bisher habe ich gelesen, das man den Tastendruck durch Polling oder 
Interrupt ermitteln kann.
Mit Polling und Abfrage mit "test sX,kk" habe ich es bis jetzt versucht.
Wenn ich allerdings für eine Zeitverzögerung eine 3 Sekundenschleife 
einbaue, dann wird in dieser Zeit ein kurzer Tastendruck jedoch nicht 
erfasst.
Oder doch?
Würde der Tastendruck ein Interrupt auslösen, würde ein ´verpassen´ 
nicht auftreten.
Außerdem, was macht man denn "normalerweise" mit dem Interrupt?

Deine letzte Antwort hat irgendwie folgenden Charakter:
Ich frage: Wie transportiere ich meine Möbel zur neuen Wohnung?
Deine Antwort wäre: "Nicht mit dem Fahrrad",

anstatt eine Problemlösung aufzuzeigen, wie: "mit dem Laster, Anhänger 
..." oder anderen Möglichkeiten.

-----------
Dies soll dich nicht kritisieren. Ich weiss selber, wie schwierig 
textliche Antworten sind.
Es geht hat halt nichts über das mündliche Austauschen im Gespräch.
Probleme sind im Gespräch in Minuten gelöst, welche sich in Foren zäh 
über Tage hinziehen.

Dies geht Dir sicherlich ähnlich.
------------
Trotzdem,
Vielleicht kannst Du ja noch etwas ergänzen.

Danke

von berndl (Gast)


Lesenswert?

moin,
du verstehst da glaube ich wirklich total falsch: Was du im Moment 
machst ist die Simulation der programmierbaren state-machine PicoBlaze. 
Das ist aber nur ein in VHDL gegossener Teil eines FPGA-Designs. Da gibt 
es noch eine Menge VHDL mehr drumherum. Also schau dir mal die 
VHDL-Beispiele vom KCPSM an, sind ja dabei.

Falk hat uebrigens schon alles zum Interrupt gesagt. Das ist ein Signal 
im FPGA (wird im Beispiel von der Testbench aktiviert). Du koenntest 
dieses Signal ja auf einen Eingangspin legen und per Taster aktivieren.
Das geht aber in deinem PBlaze simulator nicht, da musst du dann den 
kompletten Design mit z.B. ModelSim simulieren.

von Falk B. (falk)


Lesenswert?

@  berndo (Gast)

>Welches Ereignis verursacht denn diesen Flankenwechsel?

Das erzeugt ein Stück Logik, welches du selber schreiben musst. Das kann 
eine (entprellte) Taste sein, ein UART, der ein Zeichen empfangen hat 
und vieles mehr.

>Aha, was meinst Du mit "Logikschaltung an den Interrupteingang"?
>Wie realisiere ich das mit dem Assemblercode?

Gar NICHT! Das ist VHDL!

>Wie spreche ich den Interrupteingang an?

In VHDL.

>Wie ich oben bereits schrieb, mit VHDL/Verilog mache ich noch nichts.

Dann ist der Picoblaze für dich unbrauchbar. Denn der allein kann fast 
gar nichts. Ausser vielleicht ein paar Zahlen in Registern manipulieren. 
Aber wenn du ein paar LEDs ansteuern willst MUSST du was in VHDL machen, 
nämlich ein Ausgangsregister.

>Wie ich bereits woanders las, kann man die Interruptmöglichkeiten von
>Picoblaze mit VHDL erweitern.

MUSS!

>Ich arbeite jedoch noch direkt mit dem Assembler-Grundwortschatz.
>Da hierbei eine Interruptmöglichkeit eingbaut ist, vermute ich mal, das
>man den auch benutzen kann.
>aber wie?

Siehe oben. Du musst Hardware per VHDL beschreiben und an den Picoblaze 
klemmen.

>>Naja, sowas macht man aber nicht per Interrupt.

>Nein? Wie macht man das denn sonst?
>Bisher habe ich gelesen, das man den Tastendruck durch Polling oder
>Interrupt ermitteln kann.

Polling in einer festen Zeitschleife, meist per Timer-Interrupt. Dazu 
musst du beim Picoblaze aber noch einen Timer in VHDL beschreiben und an 
den Picoblaze ankoppeln.

>Mit Polling und Abfrage mit "test sX,kk" habe ich es bis jetzt versucht.
>Wenn ich allerdings für eine Zeitverzögerung eine 3 Sekundenschleife

AUA! Das macht man schon mal gar nicht. Solche Warteschleifen sind bis 
auf wenige Ausnahmen sehr schlecht.

>Außerdem, was macht man denn "normalerweise" mit dem Interrupt?

Zeitkritische Dinge erfassen. Siehe Interrupt.

>Deine Antwort wäre: "Nicht mit dem Fahrrad",

>anstatt eine Problemlösung aufzuzeigen, wie: "mit dem Laster, Anhänger
>..." oder anderen Möglichkeiten.

Ich bin kein Grundschullehrer. Das kleine 1x1 muss du dir schon selber 
aneignen oder jemanden anders fragen.

>Dies soll dich nicht kritisieren. Ich weiss selber, wie schwierig
>textliche Antworten sind.

Vor allem wenn dem Fragesteller Grundlagen fehlen . . .

>Es geht hat halt nichts über das mündliche Austauschen im Gespräch.
>Probleme sind im Gespräch in Minuten gelöst, welche sich in Foren zäh
>über Tage hinziehen.

Nöö, man muss ein paar Grundlagen draufhaben und klein anfangen und 
nicht aus dem Nichts gleich die grossen Projekte angehen.

Den Picoblaze sollte man erst angehen, wenn man einen normalen 
Mikrocontroller einigermassen gut verstanden hat. Und VHDL ist auch eine 
zwingende Voraussetzung.

>Dies geht Dir sicherlich ähnlich.

Nicht wirklich, ich spiele in einer anderen Liga. Und meisten gebe ich 
Antworten, un stelle eher wenig Fragen ;-)

>Vielleicht kannst Du ja noch etwas ergänzen.

Was hiermit geschehen ist.

MFG
Falk

von berndo (Gast)


Lesenswert?

...

Vielen Dank für die ausführliche Antwort.
Hat mir geholfen.


Es stimmt, beim Thema Mikrocontroller bin ich auch noch am Anfang.
Ich wollte mir gerade ein AVR-Board kaufen, da wurde mir das Spartan 3E 
und die Welt der VHDL-Logik empfohlen.
Ich arbeite mich nun in beide Gebiete simultan ein (Mikrocontroller und 
FPGA-Logik).

Ja, stimmt ebenfalls, ich bin noch ganz am Anfang eines langen Weges.
Darum jetzt noch die Standartfrage von Autodidakten:

Ich suche ein gutes Buch/Bücher für die ersten Schritte in VHDL.



Danke und Gruss

von Falk B. (falk)


Lesenswert?

@  berndo (Gast)

>Ich suche ein gutes Buch/Bücher für die ersten Schritte in VHDL.

Google mal nach VHDL Cookbook, das ist recht brauchbar.

MfG
Falk

von berndo (Gast)


Lesenswert?

..


Danke für den Hinweis

Gruss

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.