Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

                ifndef  reg53xinc       ; avoid multiple inclusion
reg53xinc       equ     1

                save
                listing off             ; no listing over this file

;****************************************************************************
;*                                                                          *
;*   AS 1.42 - File REG53x.INC                                              *
;*                                                                          *
;*   Contains Register and Address Definitions for H8/53x                   *
;*                                                                          *
;****************************************************************************

                if      (MOMCPUNAME<>"HD6475328")&&(MOMCPUNAME<>"HD6475348")&&(MOMCPUNAME<>"HD6475368")&&(MOMCPUNAME<>"HD6475388")
                 fatal  "wrong target selected: only HD6475328, HD6475348, HD6475368, or HD6475388 supported"
                endif


                if      MOMPASS=1
                 message "H8/53x Definitions (C) 1995 Alfred Arnold"
                endif

__cpunum        equ     MOMCPU-$6475000 ; more comfortable this way...

                if      __cpunum=$328   ; For H8/532, register base moves
__regbase        equ    $ff00           ; one page upward
                elseif
__regbase        equ    $fe00
                endif

;----------------------------------------------------------------------------
; Adressen:

                if      __cpunum=$328
IRAM             equ    $fb80           ; Internal RAM Start (1 kByte)
IRAMEND          equ    $ff7f           ; Internal RAM End
                elseif
IRAM             equ    $f680           ; Internal RAM Start (2 kByte)
IRAMEND          equ    $fe7f           ; Internal RAM End
                endif

IROM            equ     $0000           ; Internal ROM Start
                if      __cpunum=$368
IROMEND          equ    $f67f           ; Internal ROM End (62 kByte)
                elseif
IROMEND          equ    $7fff           ; Internal ROM End (32 kByte)
                endif


;----------------------------------------------------------------------------
; CPU Configuration

                if      __cpunum=$328
__sysbase        equ    $fff8
                elseif
__sysbase        equ    $ff10
                endif

WCR             equ     __sysbase+0     ; Wait State Control Register
WC0             equ     0                ; Number of Wait Cycles (rw)
WC1             equ     1
WMS0            equ     2               ; Wait Mode (rw)
WMS1            equ     3

RAMCR           equ     __sysbase+1     ; RAM Control Register
RAME            equ     7               ; Internal RAM Enable

MDCR            equ     __sysbase+2     ; Mode Control Register
MDS0            equ     0                ; Mode Select (r)
MDS1            equ     1
MDS2            equ     2

SBYCR           equ     __sysbase+3     ; Software Standby Control Register
SSBY            equ     7               ; Sleep/Standby Mode Select (rw)

;----------------------------------------------------------------------------
; Interrupt Control

                if      __cpunum=$328
IPRA             equ    $fff0           ; IRQ1 / IRQ0 Interrupt Priority (rw)
IPRB             equ    $fff1           ; FRT2 / FRT1 Interrupt Priority (rw)
IPRC             equ    $fff2           ; 8 Bit Timer Interrupt Priority / FRT3 (rw)
IPRD             equ    $fff3           ; AD Converter / SCI Interrupt Priority (rw)
                elseif
IPRA             equ    $ff00           ; IRQ1 / IRQ0|I.-Timer Interrupt Priority (rw)
IPRB             equ    $ff01           ; IRQ5|IRQ4 / IRQ3|IRQ2 Interrupt Priority (rw)
IPRC             equ    $ff02           ; FRT2 / FRT1 Interrupt Priority (rw)
IPRD             equ    $ff03           ; 8 Bit Timer / FTR3 Interrupt Priority (rw)
IPRE             equ    $ff04           ; SCI2 / SCI1 Interrupt Priority (rw)
IPRF             equ    $ff05           ; - / AD Converter Interrupt Priority
                endif

;----------------------------------------------------------------------------
; Data Transfer Controller:

                if      __cpunum=$328
DTEA             equ    $fff4           ; Normal/DTC Interrupt Selection
DTEB             equ    $fff5           ; (Population of Nibbles analogous to 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    ; Port 1 Data Register (rw/r)
P1DDR           equ     __portbase+0    ; Port 1 Data Direction Register (w)
                if      __cpunum=$328
P1CR             equ    $fffc           ; Port 1 Control Register (rw)
                elseif
SYSCR1           equ    $fefc           ; System Control Register 1 (rw)
                endif
BRLE            equ     3               ; P1CR/SYSCR1: Bus Release Modus
NMIEG           equ     4               ;              Edge to trigger NMI Input
IRQ0E           equ     5               ;              Use P15 as IRQ0 ?
IRQ1E           equ     6               ;              Use P16 as IRQ1 ?

P2DR            equ     __portbase+3    ; Port 2 Data Register (rw)
P2DDR           equ     __portbase+1    ; Port 2 Data Direction Register (w)

P3DR            equ     __portbase+6    ; Port 3 Data Register (rw)
P3DDR           equ     __portbase+4    ; Port 3 Data Direction Register (w)

P4DR            equ     __portbase+7    ; Port 4 Data Register (rw)
P4DDR           equ     __portbase+5    ; Port 4 Data Direction Register (w)

P5DR            equ     __portbase+10   ; Port 5 Data Register (rw)
P5DDR           equ     __portbase+8    ; Port 5 Data Direction Register (w)

P6DR            equ     __portbase+11   ; Port 6 Data Register (rw)
P6DDR           equ     __portbase+9    ; Port 6 Data Direction Register (w)
                if      __cpunum<>$328
SYSCR2           equ    $fefd           ; System Control Register 2 (w)
P9SCI2E          equ    0                ; Use P92..P94 for SCI2
P9PWME           equ    1               ; Use P92..P94 for PWM
P6PWME           equ    2               ; Use P61..P63 as PWM Output
IRQ2E            equ    3               ; Use P60 as IRQ2 ?
IRQ3E            equ    4               ; Use P61 as IRQ3 ?
IRQ4E            equ    5               ; Use P62 as IRQ4 ?
IRQ5E            equ    6               ; Use P63 as IRQ5 ?
                endif

P7DR            equ     __portbase+14   ; Port 7 Data Register (rw)
P7DDR           equ     __portbase+12   ; Port 7 Data Direction Register (w)

P8DR            equ     __portbase+15   ; Port 8 Data Register (r)

                if      __cpunum=$388
P9DR             equ    __portbase+18   ; Port 9 Data Register (r)

PADR             equ    __portbase+19   ; Port A Data Register (rw)
PADDR            equ    __portbase+17   ; Port A Data Direction Register (w)

PBDR             equ    __portbase+22   ; Port B Data Register (rw)
PBDDR            equ    __portbase+20   ; Port B Data Direction Register (w)
PBPCR            equ    __portbase+24   ; Port B Pullup Register (w)

PCDR             equ    __portbase+23   ; Port C Data Register (rw)
PCDDR            equ    __portbase+21   ; Port C Data Direction Register (w)
PCPCR            equ    __portbase+25   ; Port C Pullup Register (w)
                elseif  __cpunum=$328
P9DR             equ    __portbase+$7f  ; Port 9 Data Register (rw)
P9DDR            equ    __portbase+$7e  ; Port 9 Data Direction Register (w)
                elseif
P9DR             equ    __portbase+$ff  ; Port 9 Data Register (rw)
P9DDR            equ    __portbase+$fe  ; Port 9 Data Direction Register (w)
                endif

;----------------------------------------------------------------------------
; Timer:

__deftimer      macro   Base,NAME
TCR{NAME}       equ     Base+0          ; Control Register (rw)
TCSR{NAME}      equ     Base+1          ; Control/Status Register (rw/r)
FRC{NAME}       equ     Base+2          ; Count Register (rw, 16 Bit)
OCRA{NAME}      equ     Base+4          ; Comparator A (rw, 16 Bit)
OCRB{NAME}      equ     Base+6          ; Comparator B (rw, 16 Bit)
ICR{NAME}       equ     Base+8          ; Input Capture Register (r, 16 Bit)
                endm

                __deftimer __regbase+$90,"1"
                __deftimer __regbase+$a0,"2"
                __deftimer __regbase+$b0,"3"

CKS0            equ     0                ; TCRx: Clock Source Select (rw)
CKS1            equ     1
OEA             equ     2               ;       Output Comparison Result OCRA (rw)
OEB             equ     3               ;       Output Comparison Result OCRB (rw)
OVIE            equ     4               ;       FRC Overflow Interrupt Enable (rw)
OCIEA           equ     5               ;       OCRA Compare Match Interrupt Enable (rw)
OCIEB           equ     6               ;       OCRB Compare Match Interrupt Enable (rw)
ICIE            equ     7               ;       ICR Capture Interrupt Enable (rw)

CCLRA           equ     0                ; TCSRx: Reset FRC upon OCRA Compare Match (rw)
IEDG            equ     1               ;        Input Capture Edge Select (rw)
OLVLA           equ     2               ;        OCRA Output Signal Polarity Select (rw)
OLVLB           equ     3               ;        OCRB Output Signal Polarity Select (rw)
OVF             equ     4               ;        FRC Overflow Flag (r)
OCFA            equ     5               ;        FRC=OCRA ? (r)
OCFB            equ     6               ;        FRC=OCRB ? (r)
ICF             equ     7               ;        Input Capture Flag (r)

; 8-Bit-Timer:

__tcntbase      equ     __regbase+$d0

TCR4            equ     __tcntbase+0    ; Control Register (rw)
CKS2            equ     2               ; Clock Select (Remainder identical to FRCx)
CCLR0           equ     3               ; Reset Mode
CCLR1           equ     4
OVIE_4          equ     5               ; Overflow Interrupt Enable
CMIEA           equ     6               ; TCNT=TCORA Interrupt Enable
CMIEB           equ     7               ; TCNT=TCORB Interrupt Enable

TCSR4           equ     __tcntbase+1    ; Control/Status Register (rw/r)
OS0             equ     0                ; TCORA=TCNT -> TMO
OS1             equ     1
OS2             equ     2               ; TCORB=TCNT -> TMO
OS3             equ     3
OVF_4           equ     5               ; Overflow Flag
CMFA            equ     6               ; TCNT=TCORA Flag
CMFB            equ     7               ; TCNT=TCORB Flag

TCORA           equ     __tcntbase+2    ; Time Constant 1 (rw)
TCORB           equ     __tcntbase+3    ; Time Constant 2 (rw)
TCNT            equ     __tcntbase+4    ; Count Value (rw)

;----------------------------------------------------------------------------
; Puls Width Modulators:

__defpwm        macro   Base,NAME
PW{NAME}_TCR    equ     Base            ; Control Register (rw)
PW{NAME}_DTR    equ     Base+1          ; Pulse Width Register (rw)
PW{NAME}_TCNT   equ     Base+2          ; Count Value (rw)
                endm

                __defpwm __regbase+$c0,"1"
                __defpwm __regbase+$c4,"2"
                __defpwm __regbase+$c8,"3"

OS              equ     6               ; PWx_TCR: Output Logic
OE              equ     7               ;          Output Enable

;----------------------------------------------------------------------------
; Watchdog:

__wdtbase       equ     __regbase+$ec

WDT_TCSR_R      equ     __wdtbase+0     ; Control/Status Register (different
WDT_TCSR_W      equ     __wdtbase+1     ; Write/Read Addresses)
TME             equ     5               ; Timer Enable
WTIT            equ     6               ; Watchdog/Timer Mode
WDT_OVF         equ     7               ; Watchdog Overflow

WDT_TCNT        equ     __wdtbase+1     ; Count Register (rw)

                if      __cpunum<>$328
RSTCSR_W         equ    $ff14           ; Reset Register (different
RSTCSR_R         equ    $ff15           ; Write/Read Addresses)
RSTOE            equ    6               ; Output Watchdog Reset
WRST             equ    7               ; Reset by Watchdog ?
                endif

;----------------------------------------------------------------------------
; serielle Schnittstelle:

__defsci        macro   Base,NAME
SMR{NAME}       equ     Base+0          ; Mode Register (rw)
BRR{NAME}       equ     Base+1          ; Bit Raten Register (rw)
SCR{NAME}       equ     Base+2          ; Control Register (rw)
TDR{NAME}       equ     Base+3          ; Transmit Data (rw)
SSR{NAME}       equ     Base+4          ; Status Register (rw)
RDR{NAME}       equ     Base+5          ; Receive Data (r)
                endm

                if      __cpunum=$328
                 __defsci __regbase+$d8,""
                elseif
                 __defsci __regbase+$d8,"1"
                 __defsci __regbase+$f0,"2"
                endif

STOP            equ     3               ; SMRx: Number of Stop Bits
O_E             equ     4               ;       odd/even Parity
PE              equ     5               ;       With/Without Parity
CHR             equ     6               ;       7/8 Data Bits
C_A             equ     7               ;       synchronous/asynchronous

CKE0            equ     0                ; SCRx: Output Clock if communicating synchronously
CKE1            equ     1               ;       Clock internal/external (-->SCK Input or Output)
RE              equ     4               ;       Receiver Enable
TE              equ     5               ;       Transmitter Enable
RIE             equ     6               ;       Receive Interrupt Enable
TIE             equ     7               ;       Transmit Interrupt Enable

PER             equ     3               ; SSRx: Parity Error
FER             equ     4               ;       Framing Error
ORER            equ     5               ;       Receiver Overflow
RDRF            equ     6               ;       Receiver Full
TDRE            equ     7               ;       Transmitter Empty

;----------------------------------------------------------------------------
; A/D Converter

__adbase        equ     __regbase+$e0

ADDRA           equ     __adbase+0      ; Channel A Conversion Result (r, 16Bit)
ADDRB           equ     __adbase+2      ; Channel B Conversion Result (r, 16Bit)
ADDRC           equ     __adbase+4      ; Channel C Conversion Result (r, 16Bit)
ADDRD           equ     __adbase+6      ; Channel D Conversion Result (r, 16Bit)

ADCSR           equ     __adbase+8      ; Control/Status Register (rw)
CH0             equ     0                ; Channel Selection
CH1             equ     1
CH2             equ     2
CKS             equ     3               ; 274/138 Clocks Conversion Time
SCAN            equ     4               ; Single Channel/Scan-Mode
ADST            equ     5               ; Start/Stop Converter
ADIE            equ     6               ; End of Conversion Interrupt Enable
ADF             equ     7               ; End of Conversion Flag

                if      __cpunum<>$328
ADCR             equ    __adbase+9      ; Control Register (rw)
TRGE             equ    7               ; External Trigger
                endif

;----------------------------------------------------------------------------

                restore                 ; re-allow listing

                endif                   ; reg53xinc