Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Interruptprogrammierung? Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 22.02.2006 21:40)
 Als Antwort auf Re: Interruptprogrammierung? von Frank E. - 22.02.2006 20:57
Dietmar nutzt:  CC1-M-Unit V1.1, Advanced CC1-Unit, Open-Micro, Open-Mini, Open-Mini M-Unit, Open-Mini Station
Hallo Frank

> IRQ ist kinderleicht und hat mit den Beispielen sofort geklappt

Die OM-Kontroller wurden mit dem Ziel entwickelt, daß der Einstieg möglichst einfach ist. Profis können aber trotzdem mit Hilfe von Assemblerroutinen, die sich einfach in das System einbinden lassen, alle Funktionen des Kontrollers komfortabel nutzen.

> Was muss ich verstehen unter "Das Register laesst sich nur einmal nach jedem Reset beschreiben ("write once"), nachfolgendes Beschreiben wird ignoriert"? Das steht in TSTIRQ.BAS bei config2.

Der PORT[3] wird für verschiedene Dinge benutzt. Wenn Du die IRQ-Funktion nutzen möchtest, mußt Du zunächst den Port mit "config2=&b01000000" auf IRQ umschalten. Leider läßt der Kontroller, auf dem die OM-Kontroller basieren, nicht zu, daß das Register mehrfach beschrieben wird. Die IRQ-Funktion läßt sich also nur noch deaktivieren, indem der Kontroller resettet wird. Die I/O-Port-Funktion, FREQ1 und Hostmode-Schalter kann also bis zum nächsten Reset nicht mehr benutzt werden. Auslesen von PORT[3] liefert bis dahin immer OFF (also eine 0) zurück.

Es gäbe übrigens die Möglichkeit, statt dem IRQ-Interrupt den KEYB-Interrupt zu nutzen und eine Assemblerroutine zu starten, wenn sich an PORT[1] bis PORT[6] (genauer KBI0 bis KBI5) etwas tut. Wie in ENDTEST3.BAS mit der ON-TIMER-Funktionalität gezeigt, kann die Assemblerroutine dann die BASIC-Interruptroutine aktivieren.

> Darf ich im IRQ ein GOSUB benutzen?

Das geht schon. Die per GOSUB aufgerufenen Subroutinen müssen dann aber ganz normal per RETURN, nicht mit RETURN INTERRUPT, beendet werden. Außerdem unterstützt die OM "nur" fünf GOSUB-Verschachtelungsebenen. (Bei der C-Control 1.1 waren es sogar nur vier.) Eine Verschachtelungsebene wird für den Aufruf der BASIC-Interruptroutine verwendet. Wenn Du dann noch eine weitere innerhalb der Interruptroutine benutzt, bleiben für das Hauptprogramm nur noch drei Ebenen.

> Was muss ich sonst noch beachten?

Zu beachten ist vielleicht noch, daß die BASIC-Interruptroutine nur während der "normalen" Programmausführung starten kann. Ein PAUSE oder INPUT im Hauptprogramm wird nicht unterbrochen, wenn eine Anforderung für einen BASIC-Interrupt kommt. Für Assembler-Interruptroutinen existiert diese Einschränkung natürlich nicht. Aber wenn Du die bisherigen Tips beachtest, sollte eigentlich auch in BASIC nichts schiefgehen.

Viele Grüße
Dietmar

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten:

Re: Interruptprogrammierung? (von Frank E. - 22.02.2006 22:09)