345 lines
12 KiB
PHP
345 lines
12 KiB
PHP
save
|
|
; listing off ; kein Listing über diesen File
|
|
|
|
;****************************************************************************
|
|
;* *
|
|
;* AS 1.41 - Datei REG53x.INC *
|
|
;* *
|
|
;* Sinn : enthält Register- und Adreßdefinitionen für H8/53x *
|
|
;* *
|
|
;* letzte Änderungen : 12.11.1995 *
|
|
;* *
|
|
;****************************************************************************
|
|
|
|
ifndef reg53xinc ; verhindert Mehrfacheinbindung
|
|
|
|
reg53xinc equ 1
|
|
|
|
if (MOMCPUNAME<>"HD6475328")&&(MOMCPUNAME<>"HD6475348")&&(MOMCPUNAME<>"HD6475368")&&(MOMCPUNAME<>"HD6475388")
|
|
fatal "Falscher Prozessortyp eingestellt: nur HD6475328, HD6475348, HD6475368 oder HD6475388 erlaubt!"
|
|
endif
|
|
|
|
|
|
if MOMPASS=1
|
|
message "H8/53x-Definitionen (C) 1994 Alfred Arnold"
|
|
endif
|
|
|
|
__cpunum equ MOMCPU-$6475000 ; ist halt bequemer...
|
|
|
|
if __cpunum=$328 ; Peripherie verschiebt sich beim
|
|
__regbase equ $ff00 ; H8/532 um eine Seite nach oben
|
|
elseif
|
|
__regbase equ $fe00
|
|
endif
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Adressen:
|
|
|
|
if __cpunum=$328
|
|
IRAM equ $fb80 ; Anfang internes RAM (1 kByte)
|
|
IRAMEND equ $ff7f ; Ende internes RAM
|
|
elseif
|
|
IRAM equ $f680 ; Anfang internes RAM (2 kByte)
|
|
IRAMEND equ $fe7f ; Ende internes RAM
|
|
endif
|
|
|
|
IROM equ $0000 ; Anfang internes ROM
|
|
if __cpunum=$368
|
|
IROMEND equ $f67f ; Ende internes ROM (62 kByte)
|
|
elseif
|
|
IROMEND equ $7fff ; Ende internes ROM (32 kByte)
|
|
endif
|
|
|
|
|
|
;----------------------------------------------------------------------------
|
|
; CPU-Konfiguration:
|
|
|
|
if __cpunum=$328
|
|
__sysbase equ $fff8
|
|
elseif
|
|
__sysbase equ $ff10
|
|
endif
|
|
|
|
WCR equ __sysbase+0 ; Wait-state control register
|
|
WC0 equ 0 ; Anzahl Wartezyklen (rw)
|
|
WC1 equ 1
|
|
WMS0 equ 2 ; Wartemodus (rw)
|
|
WMS1 equ 3
|
|
|
|
RAMCR equ __sysbase+1 ; RAM control register
|
|
RAME equ 7 ; Freigabe internes RAM
|
|
|
|
MDCR equ __sysbase+2 ; Mode control register
|
|
MDS0 equ 0 ; Modusauswahl (r)
|
|
MDS1 equ 1
|
|
MDS2 equ 2
|
|
|
|
SBYCR equ __sysbase+3 ; Software standby control register
|
|
SSBY equ 7 ; Sleep/Standby-Moduswahl (rw)
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Interruptsteuerung:
|
|
|
|
if __cpunum=$328
|
|
IPRA equ $fff0 ; Interrupt-Priorität IRQ1 / IRQ0 (rw)
|
|
IPRB equ $fff1 ; Interrupt-Priorität FRT2 / FRT1 (rw)
|
|
IPRC equ $fff2 ; Interrupt-Priorität 8-Bit-Timer / FRT3 (rw)
|
|
IPRD equ $fff3 ; Interrupt-Priorität AD-Wandler / SCI (rw)
|
|
elseif
|
|
IPRA equ $ff00 ; Interrupt-Priorität IRQ1 / IRQ0|I.-Timer (rw)
|
|
IPRB equ $ff01 ; Interrupt-Priorität IRQ5|IRQ4 / IRQ3|IRQ2 (rw)
|
|
IPRC equ $ff02 ; Interrupt-Priorität FRT2 / FRT1 (rw)
|
|
IPRD equ $ff03 ; Interrupt-Priorität 8-Bit-Timer / FTR3 (rw)
|
|
IPRE equ $ff04 ; Interrupt-Priorität SCI2 / SCI1 (rw)
|
|
IPRF equ $ff05 ; Interrupt-Priorität - / AD-Wandler
|
|
endif
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Data Transfer Controller:
|
|
|
|
if __cpunum=$328
|
|
DTEA equ $fff4 ; Umschaltung normaler/DTC-Interrupt
|
|
DTEB equ $fff5 ; (Belegung der Nibbles analog zu IPRx)
|
|
DTEC equ $fff6
|
|
DTED equ $fff7
|
|
elseif
|
|
DTEA equ $ff08
|
|
DTEB equ $ff09
|
|
DTEC equ $ff0a
|
|
DTED equ $ff0b
|
|
DTEE equ $ff0c
|
|
DTEF equ $ff0d
|
|
endif
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Ports:
|
|
|
|
__portbase equ __regbase+$80
|
|
|
|
P1DR equ __portbase+2 ; Datenregister Port 1 (rw/r)
|
|
P1DDR equ __portbase+0 ; Datenrichtungsregister Port 1 (w)
|
|
if __cpunum=$328
|
|
P1CR equ $fffc ; Steuerregister Port 1 (rw)
|
|
elseif
|
|
SYSCR1 equ $fefc ; Systemsteuerregister 1 (rw)
|
|
endif
|
|
BRLE equ 3 ; P1CR/SYSCR1: Bus-Release-Modus
|
|
NMIEG equ 4 ; Flanke, auf die NMI-Eingang triggert
|
|
IRQ0E equ 5 ; Nutzung P15 als IRQ0 ?
|
|
IRQ1E equ 6 ; Nutzung P16 als IRQ1 ?
|
|
|
|
P2DR equ __portbase+3 ; Datenregister Port 2 (rw)
|
|
P2DDR equ __portbase+1 ; Datenrichtungsregister Port 2 (w)
|
|
|
|
P3DR equ __portbase+6 ; Datenregister Port 3 (rw)
|
|
P3DDR equ __portbase+4 ; Datenrichtungsregister Port 3 (w)
|
|
|
|
P4DR equ __portbase+7 ; Datenregister Port 4 (rw)
|
|
P4DDR equ __portbase+5 ; Datenrichtungsregister Port 4 (w)
|
|
|
|
P5DR equ __portbase+10 ; Datenregister Port 5 (rw)
|
|
P5DDR equ __portbase+8 ; Datenrichtungsregister Port 5 (w)
|
|
|
|
P6DR equ __portbase+11 ; Datenregister Port 6 (rw)
|
|
P6DDR equ __portbase+9 ; Datenrichtungsregister Port 6 (w)
|
|
if __cpunum<>$328
|
|
SYSCR2 equ $fefd ; Systemsteuerregister 2 (w)
|
|
P9SCI2E equ 0 ; P92..P94 für SCI2 nutzen ?
|
|
P9PWME equ 1 ; P92..P94 für PWM nutzen ?
|
|
P6PWME equ 2 ; P61..P63 als PWM-Ausgang nutzen ?
|
|
IRQ2E equ 3 ; Nutzung P60 als IRQ2 ?
|
|
IRQ3E equ 4 ; Nutzung P61 als IRQ3 ?
|
|
IRQ4E equ 5 ; Nutzung P62 als IRQ4 ?
|
|
IRQ5E equ 6 ; Nutzung P63 als IRQ5 ?
|
|
endif
|
|
|
|
P7DR equ __portbase+14 ; Datenregister Port 7 (rw)
|
|
P7DDR equ __portbase+12 ; Datenrichtungsregister Port 7 (w)
|
|
|
|
P8DR equ __portbase+15 ; Datenregister Port 8 (r)
|
|
|
|
if __cpunum=$388
|
|
P9DR equ __portbase+18 ; Datenregister Port 9 (r)
|
|
|
|
PADR equ __portbase+19 ; Datenregister Port A (rw)
|
|
PADDR equ __portbase+17 ; Datenrichtungsregister Port A (w)
|
|
|
|
PBDR equ __portbase+22 ; Datenregister Port B (rw)
|
|
PBDDR equ __portbase+20 ; Datenrichtungsregister Port B (w)
|
|
PBPCR equ __portbase+24 ; Pullup-Register Port B (w)
|
|
|
|
PCDR equ __portbase+23 ; Datenregister Port C (rw)
|
|
PCDDR equ __portbase+21 ; Datenrichtungsregister Port C (w)
|
|
PCPCR equ __portbase+25 ; Pullup-Register Port C (w)
|
|
elseif __cpunum=$328
|
|
P9DR equ __portbase+$7f ; Datenregister Port 9 (rw)
|
|
P9DDR equ __portbase+$7e ; Datenrichtungsregister Port 9 (w)
|
|
elseif
|
|
P9DR equ __portbase+$ff ; Datenregister Port 9 (rw)
|
|
P9DDR equ __portbase+$fe ; Datenrichtungsregister Port 9 (w)
|
|
endif
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Timer:
|
|
|
|
__deftimer macro Base,NAME
|
|
TCR{NAME} equ Base+0 ; Steuerregister (rw)
|
|
TCSR{NAME} equ Base+1 ; Steuer/Statusregister (rw/r)
|
|
FRC{NAME} equ Base+2 ; Zählerregister (rw, 16 Bit)
|
|
OCRA{NAME} equ Base+4 ; Vergleicher A (rw, 16 Bit)
|
|
OCRB{NAME} equ Base+6 ; Vergleicher B (rw, 16 Bit)
|
|
ICR{NAME} equ Base+8 ; Eingabe-Fangregister (r, 16 Bit)
|
|
endm
|
|
|
|
__deftimer __regbase+$90,"1"
|
|
__deftimer __regbase+$a0,"2"
|
|
__deftimer __regbase+$b0,"3"
|
|
|
|
CKS0 equ 0 ; TCRx: Taktquellenwahl (rw)
|
|
CKS1 equ 1
|
|
OEA equ 2 ; Vergleichsergebnis OCRA ausgeben ? (rw)
|
|
OEB equ 3 ; Vergleichsergebnis OCRB ausgeben ? (rw)
|
|
OVIE equ 4 ; Interrupt bei FRC-Überlauf auslösen? (rw)
|
|
OCIEA equ 5 ; Interrupt bei Gleichheit mit OCRA auslösen? (rw)
|
|
OCIEB equ 6 ; Interrupt bei Gleichheit mit OCRB auslösen? (rw)
|
|
ICIE equ 7 ; Interrupt bei ICR-Fang auslösen? (rw)
|
|
|
|
CCLRA equ 0 ; TCSRx: FRC bei Gleichheit mit OCRA rücksetzen ? (rw)
|
|
IEDG equ 1 ; Eingabefang bei welcher Flanke ? (rw)
|
|
OLVLA equ 2 ; Polarität für OCRA-Ausgangssignal (rw)
|
|
OLVLB equ 3 ; Polarität für OCRB-Ausgangssignal (rw)
|
|
OVF equ 4 ; FRC-Überlauf aufgetreten ? (r)
|
|
OCFA equ 5 ; war FRC=OCRA ? (r)
|
|
OCFB equ 6 ; war FRC=OCRB ? (r)
|
|
ICF equ 7 ; Eingabe-Fang aufgetreten ? (r)
|
|
|
|
; 8-Bit-Timer:
|
|
|
|
__tcntbase equ __regbase+$d0
|
|
|
|
TCR4 equ __tcntbase+0 ; Steuerregister (rw)
|
|
CKS2 equ 2 ; Taktauswahl (Rest identisch zu FRCx)
|
|
CCLR0 equ 3 ; Rücksetzmodus
|
|
CCLR1 equ 4
|
|
OVIE_4 equ 5 ; Interrupt bei Überlauf auslösen ?
|
|
CMIEA equ 6 ; Interrupt bei TCNT=TCORA?
|
|
CMIEB equ 7 ; Interrupt bei TCNT=TCORB?
|
|
|
|
TCSR4 equ __tcntbase+1 ; Steuer/Statusregister (rw/r)
|
|
OS0 equ 0 ; Auswirkung von TCORA=TCNT auf TMO
|
|
OS1 equ 1
|
|
OS2 equ 2 ; Auswirkung von TCORB=TCNT auf TMO
|
|
OS3 equ 3
|
|
OVF_4 equ 5 ; Überlauf aufgetreten
|
|
CMFA equ 6 ; TCNT=TCORA aufgetreten
|
|
CMFB equ 7 ; TCNT=TCORB aufgetreten
|
|
|
|
TCORA equ __tcntbase+2 ; Zeitkonstante 1 (rw)
|
|
TCORB equ __tcntbase+3 ; Zeitkonstante 2 (rw)
|
|
TCNT equ __tcntbase+4 ; Zählwert (rw)
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Pulsweitenmodulatoren:
|
|
|
|
__defpwm macro Base,NAME
|
|
PW{NAME}_TCR equ Base ; Steuerregister (rw)
|
|
PW{NAME}_DTR equ Base+1 ; Pulsweitenregister (rw)
|
|
PW{NAME}_TCNT equ Base+2 ; Zählwert (rw)
|
|
endm
|
|
|
|
__defpwm __regbase+$c0,"1"
|
|
__defpwm __regbase+$c4,"2"
|
|
__defpwm __regbase+$c8,"3"
|
|
|
|
OS equ 6 ; PWx_TCR: Logik des Ausgangs
|
|
OE equ 7 ; Ausgang freischalten
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Watchdog:
|
|
|
|
__wdtbase equ __regbase+$ec
|
|
|
|
WDT_TCSR_R equ __wdtbase+0 ; Steuer/Statusregister (unterschied-
|
|
WDT_TCSR_W equ __wdtbase+1 ; liche Schreib/Leseadressen)
|
|
TME equ 5 ; Timer freigeben
|
|
WTIT equ 6 ; Watchdog/Timermodus
|
|
WDT_OVF equ 7 ; Watchdog-Überlauf ?
|
|
|
|
WDT_TCNT equ __wdtbase+1 ; Zählregister (rw)
|
|
|
|
if __cpunum<>$328
|
|
RSTCSR_W equ $ff14 ; Reset-Register (unterschiedliche
|
|
RSTCSR_R equ $ff15 ; Schreib/Leseadressen)
|
|
RSTOE equ 6 ; Watchdog-Reset nach außen geben ?
|
|
WRST equ 7 ; Reset durch Watchdog ?
|
|
endif
|
|
|
|
;----------------------------------------------------------------------------
|
|
; serielle Schnittstelle:
|
|
|
|
__defsci macro Base,NAME
|
|
SMR{NAME} equ Base+0 ; Modusregister (rw)
|
|
BRR{NAME} equ Base+1 ; Bitratenregister (rw)
|
|
SCR{NAME} equ Base+2 ; Steuerregister (rw)
|
|
TDR{NAME} equ Base+3 ; Sendedaten (rw)
|
|
SSR{NAME} equ Base+4 ; Statusregister (rw)
|
|
RDR{NAME} equ Base+5 ; Empfangsdaten (r)
|
|
endm
|
|
|
|
if __cpunum=$328
|
|
__defsci __regbase+$d8,""
|
|
elseif
|
|
__defsci __regbase+$d8,"1"
|
|
__defsci __regbase+$f0,"2"
|
|
endif
|
|
|
|
STOP equ 3 ; SMRx: #Stopp-Bits
|
|
O_E equ 4 ; odd/even Parity
|
|
PE equ 5 ; mit/ohne Parität
|
|
CHR equ 6 ; 7/8 Datenbits
|
|
C_A equ 7 ; synchron/asynchron
|
|
|
|
CKE0 equ 0 ; SCRx: bei synchroner Kommunikation Takt an SCK ausgeben ?
|
|
CKE1 equ 1 ; Takt intern/extern (-->SCK Ein-oder Ausgang) ?
|
|
RE equ 4 ; Empfänger freigeben
|
|
TE equ 5 ; Sender freigeben
|
|
RIE equ 6 ; Empfangs-Interrupt freigeben
|
|
TIE equ 7 ; Sende-Interrupt freigeben
|
|
|
|
PER equ 3 ; SSRx: Paritäts-Fehler
|
|
FER equ 4 ; ungültiger Rahmen
|
|
ORER equ 5 ; Empfänger-Überlauf
|
|
RDRF equ 6 ; Empfänger voll ?
|
|
TDRE equ 7 ; Sender leer ?
|
|
|
|
;----------------------------------------------------------------------------
|
|
; A/D-Wandler
|
|
|
|
__adbase equ __regbase+$e0
|
|
|
|
ADDRA equ __adbase+0 ; Wandelergebnis Kanal A (r, 16Bit)
|
|
ADDRB equ __adbase+2 ; Wandelergebnis Kanal B (r, 16Bit)
|
|
ADDRC equ __adbase+4 ; Wandelergebnis Kanal C (r, 16Bit)
|
|
ADDRD equ __adbase+6 ; Wandelergebnis Kanal D (r, 16Bit)
|
|
|
|
ADCSR equ __adbase+8 ; Steuer/Statusregister (rw)
|
|
CH0 equ 0 ; Kanalauswahl
|
|
CH1 equ 1
|
|
CH2 equ 2
|
|
CKS equ 3 ; Wandelzeit 274/138 Takte
|
|
SCAN equ 4 ; Single Channel/Scan-Modus
|
|
ADST equ 5 ; Wandler starten/stoppen
|
|
ADIE equ 6 ; Interrupt bei Wandelende auslösen ?
|
|
ADF equ 7 ; Wandlung abgeschlossen ?
|
|
|
|
if __cpunum<>$328
|
|
ADCR equ __adbase+9 ; Steuerregister (rw)
|
|
TRGE equ 7 ; externer Trigger ?
|
|
endif
|
|
|
|
;----------------------------------------------------------------------------
|
|
|
|
endif
|
|
|
|
restore ; wieder erlauben
|