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
@ 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
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
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.
@ 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
... 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
@ 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.