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 20:23)
 Als Antwort auf Interruptprogrammierung? von Frank E. - 22.02.2006 18:59
Dietmar nutzt:  CC1-M-Unit V1.1, Advanced CC1-Unit, Open-Micro, Open-Mini, Open-Mini M-Unit, Open-Mini Station
Hallo Frank

Die OM-Kontroller bieten verschiedene Möglichkeiten zur Interruptprogrammierung. Und zwar kann eine Interruptroutine entweder in BASIC oder in Assembler erstellt und in jeden Interrupt des Systems eingebunden werden. Standardmäßig wird die BASIC-Interruptroutine zwar nur ausgeführt, wenn ein IRQ-Interrupt ("External Interrupt") ausgelöst wird, die BASIC-Routine läßt sich aber mit Hilfe eines kleinen Assemblerprogramms auch in andere Interrupts einbinden.

Bislang hatte ich keine Zeit, in der Doku ausführlich zu beschreiben, auf welche Art und Weise Interruptprogrammierung mit der Open-Micro und Open-Mini möglich ist. Es existieren aber ein paar interessante Beispielprogramme bei den Downloads, im ZIP-Archiv mit den "Diversen Beispielprogrammen".

Dort befindet sich unter anderem TSTIRQ.BAS, in dem zunächst der PORT[3] auf IRQ-Funktion umgeschaltet wird und dann die BASIC-Interruptroutine jedesmal gestartet wird, wenn der Kontroller eine negative Flanke an diesem Pin detektiert. Also die zugehörige Taste auf dem PE-Board gedrückt wird, wenn der Hostmode-Schalter in Stellung "RUN" steht. Im Beispielprogramm wird darüber hinaus auch noch die Funktion von "RealPop" demonstriert, deshalb gibt die Routine nur "(56)" über die serielle Schnittstelle aus. Das kann man mit einem Terminalprogramm überprüfen.

Vor jedem Start der BASIC-Interruptroutine wird der aktuelle Zustand des Rechenstacks in den letzten 8 Bytes des User-RAMs gesichert. Deshalb stehen BYTE[57] bis BYTE[64] nicht mehr für andere Zwecke, insbesondere zur Variablenspeicherung, zur Verfügung, solange die BASIC-Interruptroutine starten könnte. Mittels RealPop kann man die OM veranlassen, den Rechenstack nicht mehr zu sichern. RealPop sollte man aber nur aktivieren, wenn man weiß, was man tut.

Außerdem wird im Beispielprogramm ENDTEST3.BAS eine ON-TIMER-Funktionalität realisiert. Die BASIC-IRQ-Routine wird im zeitlichen Abstand von einer Sekunde aufgerufen. Die zugehörige Assemblerroutine ENDTEST3.ASM wird als S19-Datei in den SYSCODE-Bereich geschrieben, in den Timer-Interrupt eingebunden und 50 mal pro Sekunde aufgerufen.

In INLASM.BAS und INLASM.ASM wird gezeigt, wie eine Inline-Assembler-Routine (IAR) benutzt wird. Bisher wurden Assemblerprogramme per S19-Datei in den BASIC-Sourcecode eingebunden und während der Programmübertragung vom Kontroller im 255 Byte großen SYSCODE-Bereich abgespeichert. Diese Möglichkeit existiert auch auf den OM-Kontrollern, aber zusätzlich können IARs wie BASIC-Subroutinen oder Funktionen in den Sourcecode eingefügt und aufgerufen werden. Der Vorteil davon ist, daß diese Routinen beliebig groß sein dürfen und nur soviel Platz benötigen, wie unbedingt notwendig. Es gibt aber einen Sonderfall: Beginnt das BASIC-Programm mit einem GOTO-Befehl und steht unmittelbar dahinter eine IAR, dann handelt es sich um eine IIAR, also eine Interrupt-IAR. Wird mit Hilfe der Bits UIRIrq, UIRSwi, etc. eine User-Assemblerroutine aktiviert, wird diese IIAR statt der Routine im SYSCODE-Bereich aufgerufen. Wenn die IIARs entsprechend programmiert wurden, lassen sich im Baukastenprinzip unabhängig voneinander Assemblerroutinen in verschiedene Interrupts einbinden.

Für weitere Fragen stehe ich hier im Forum gerne zur Verfügung.

Viele Grüße
Dietmar

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

 Antwort schreiben

Bisherige Antworten:

Re: Interruptprogrammierung? (von Frank E. - 22.02.2006 20:57)
    Re: Interruptprogrammierung? (von Dietmar - 22.02.2006 21:40)
        Re: Interruptprogrammierung? (von Frank E. - 22.02.2006 22:09)