Hardware Reference
In-Depth Information
diese Adresse als nächster Eintrag auf den Stack geladen. Dazu wird als Erstes der
Stack Pointer inkrementiert, damit er auf den nächsten freien Eintrag zeigt. Der
Stack kann unter jeder Adresse 21 Bits speichern, die in zweimal 8 Bits (TOSL,
TOSH) und einmal 5 Bits (TOSU) aufgeteilt sind [PIC18 Reference: 7.7]. Nachdem
dieser Rückkehrpunkt eingetragen worden ist, wird der Stack Pointer ein weiteres
Mal inkrementiert. In diese nächste freie Position wird jetzt der Startpunkt des
Befehlsunterprogramms eingetragen. Die Adresse wird der aktuellen Befehls-Ver-
gleichstabelle entnommen, wobei die höchstwertigen fünf Bits dort nicht gespei-
chert sind. Bei diesen wird vorausgesetzt, dass sie im vorliegenden System immer
den Wert null haben, weil der Programm-Adressraum oberhalb von 16 Bits nicht
verwendet wird. Nachdem diese Veränderung im Stack vorgenommen worden ist,
dürfen und müssen die Interruptquellen wieder aktiviert werden. Die Verzweigung
in das identifizierte Befehlsunterprogramm erfolgt, indem (an der Marke „get_
here“) einfach der CPU-Befehl „return“ ausgeführt wird. Das „return“ am Ende des
Befehlsunterprogramms leitet den Programmablauf wiederum auf die Marke „get_
here“. Dort befindet sich ja ein „return“, mit dem das Unterprogramm „compute_
comand“ dann beendet wird.
; ******************************************************************************
; compute command address according current commmand table
; ******************************************************************************
compute_command
; now a stack manipulation is performed. no interrupt must disturb this because
an insufficient program
; redirection may occur otherwise. See PIC18 Reference Manual section 7.7.1 and
; application note AN818 of Microchip Technology Inc. (2002)
bcf INTCON,GIE ;global interrupt enable bit
bcf INTCON,PEIE ;peripheral interrupt sources
; push reentrance address (get_here) onto stack
incf STKPTR, F
movlw UPPER get_here
movwf TOSU
movlw HIGH get_here
movwf TOSH
movlw LOW get_here
movwf TOSL
; fetch the start point for the command subroutine and push it onto the stack
incf STKPTR, F
movlw 0x00
movwf TOSU ;is always zero in this system architecture
tblrd *+
movff TABLAT,WREG
movwf TOSH
tblrd *+
movff TABLAT,WREG
movwf TOSL
Search WWH ::




Custom Search