aboutsummaryrefslogtreecommitdiffstats
path: root/include/reg53x.inc
diff options
context:
space:
mode:
Diffstat (limited to 'include/reg53x.inc')
-rw-r--r--include/reg53x.inc344
1 files changed, 344 insertions, 0 deletions
diff --git a/include/reg53x.inc b/include/reg53x.inc
new file mode 100644
index 0000000..9a382b8
--- /dev/null
+++ b/include/reg53x.inc
@@ -0,0 +1,344 @@
+ 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