422 lines
18 KiB
PHP
422 lines
18 KiB
PHP
save
|
|
listing off ; kein Listing über diesen File
|
|
|
|
;****************************************************************************
|
|
;* *
|
|
;* AS 1.41 - Datei REGM16C.INC *
|
|
;* *
|
|
;* Sinn : enthält Registerdefinitionen für den M16C, Modell M30600M8 *
|
|
;* *
|
|
;* letzte Änderungen : 30. 8.1996 *
|
|
;* 8. 2.1997 if MomPass... *
|
|
;* 7. 7.1999 added two more M16C family CPU entries *
|
|
;* *
|
|
;****************************************************************************
|
|
|
|
ifndef regm16cinc ; verhindert Mehrfacheinbindung
|
|
|
|
regm16cinc equ 1
|
|
|
|
if MOMPASS=1
|
|
switch MOMCPUNAME
|
|
case "M16C"
|
|
fatal "please be more specific; do not use the generic processor type for this header file!"
|
|
case "M30600M8"
|
|
message "including M30600M8-registers"
|
|
case "M30610"
|
|
message "including M30610 registers"
|
|
case "M30620"
|
|
message "including M30620 registers"
|
|
elsecase
|
|
fatal "invalid processor type: only M30600M8, M30610, or M30620 allowed!"
|
|
endcase
|
|
endif
|
|
|
|
;----------------------------------------------------------------------------
|
|
; benötigte Makros
|
|
|
|
__bitreg macro Name,Adr,Mask
|
|
Name equ Adr
|
|
irp BIT,0,1,2,3,4,5,6,7
|
|
if Mask&(1<<BIT)
|
|
Name{"BIT"} equ Adr<<3+BIT
|
|
endif
|
|
endm
|
|
endm
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Prozessorsteuerung
|
|
|
|
__bitreg PM,0004h,0ffh ; CPU-Modusregister
|
|
__bitreg CM0,0006h,0ffh ; Systemtaktsteuerung 0
|
|
__bitreg CM1,0007h,02bh ; Systemtaktsteuerung 1
|
|
PRCR equ 000ah ; Schutzregister
|
|
PRC0 equ PRCR<<3+0 ; Schreibschutz CM0/CM1
|
|
PRC1 equ PRCR<<3+1 ; Schreibschutz PM
|
|
PRC2 equ PRCR<<3+2 ; Schreibschutz PD9
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Ports
|
|
|
|
P0 equ 03e0h ; Datenregister Port 0
|
|
PD0 equ 03e2h ; Datenrichtungsregister Port 0
|
|
|
|
P1 equ 03e1h ; Datenregister Port 1
|
|
PD1 equ 03e3h ; Datenrichtungsregister Port 1
|
|
|
|
P2 equ 03e4h ; Datenregister Port 2
|
|
PD2 equ 03e6h ; Datenrichtungsregister Port 2
|
|
|
|
P3 equ 03e5h ; Datenregister Port 3
|
|
PD3 equ 03e7h ; Datenrichtungsregister Port 3
|
|
|
|
P4 equ 03e8h ; Datenregister Port 4
|
|
PD4 equ 03eah ; Datenrichtungsregister Port 4
|
|
|
|
P5 equ 03e9h ; Datenregister Port 5
|
|
PD5 equ 03ebh ; Datenrichtungsregister Port 5
|
|
|
|
P6 equ 03ech ; Datenregister Port 6
|
|
PD6 equ 03eeh ; Datenrichtungsregister Port 6
|
|
|
|
P7 equ 03edh ; Datenregister Port 7
|
|
PD7 equ 03efh ; Datenrichtungsregister Port 7
|
|
|
|
P8 equ 03f0h ; Datenregister Port 8
|
|
PD8 equ 03f2h ; Datenrichtungsregister Port 8
|
|
|
|
P9 equ 03f1h ; Datenregister Port 9
|
|
PD9 equ 03f3h ; Datenrichtungsregister Port 9
|
|
|
|
P10 equ 03f4h ; Datenregister Port 10
|
|
PD10 equ 03f6h ; Datenrichtungsregister Port 10
|
|
|
|
PUR0 equ 03fch ; Pull-Up-Register
|
|
PUR1 equ 03fdh
|
|
PUR2 equ 03feh
|
|
PUR3 equ 03ffh
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Interruptsteuerung
|
|
|
|
DM0IC equ 004bh ; DMA-Kanal 0
|
|
DM1IC equ 004ch ; DMA-Kanal 1
|
|
KUPIC equ 004dh ; Keyboard input
|
|
ADIC equ 004eh ; A/D-Wandler
|
|
S0TIC equ 0051h ; Senden UART0
|
|
S0RIC equ 0052h ; Empfang UART0
|
|
S1TIC equ 0053h ; Senden UART1
|
|
S1RIC equ 0054h ; Empfang UART1
|
|
TA0IC equ 0055h ; Timer A0
|
|
TA1IC equ 0056h ; Timer A1
|
|
TA2IC equ 0057h ; Timer A2
|
|
TA3IC equ 0058h ; Timer A3
|
|
TA4IC equ 0059h ; Timer A4
|
|
TB0IC equ 005ah ; Timer B0
|
|
TB1IC equ 005bh ; Timer B1
|
|
TB2IC equ 005ch ; Timer B2
|
|
INT0IC equ 005dh ; externer Imterrupt 0
|
|
INT1IC equ 005eh ; externer Interrupt 1
|
|
INT2IC equ 005fh ; externer Interrupt 2
|
|
|
|
_ILVL0 equ 0 ; Prioritätsebene
|
|
_ILVL1 equ 1
|
|
_ILVL2 equ 2
|
|
_IR equ 3 ; Interrupt aufgetreten ?
|
|
_POL equ 4 ; Polaritätswahl (nur INTxIC)
|
|
_LVS equ 5 ; Pegel/Flankentriggerung (nur INTxIC)
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Chip-Selects
|
|
|
|
CSR equ 0008h
|
|
CS0 equ CSR<<3+0 ; Freigabe Chip-Selects
|
|
CS1 equ CSR<<3+1
|
|
CS2 equ CSR<<3+2
|
|
CS3 equ CSR<<3+3
|
|
CS0W equ CSR<<3+4 ; mit / ohne Wait-State ?
|
|
CS1W equ CSR<<3+5
|
|
CS2W equ CSR<<3+6
|
|
CS3W equ CSR<<3+7
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Adreßvergleicher
|
|
|
|
RMAD0 equ 0010h ; Vergleichsadresse 0
|
|
RMAD1 equ 0014h ; Vergleichsadresse 1
|
|
__bitreg AIER,0009h,03h ; Interrupt-Freigaben
|
|
|
|
;----------------------------------------------------------------------------
|
|
; DMA-Controller
|
|
|
|
DM0SL equ 03b8h ; Request-Auswahl Kanal 0
|
|
DM1SL equ 03bah ; Request-Auswahl Kanal 1
|
|
_DSEL0 equ 0 ; Request-Grund
|
|
_DSEL1 equ 1
|
|
_DSEL2 equ 2
|
|
_DSEL3 equ 3
|
|
_DSR equ 7 ; Software-Trigger
|
|
|
|
DM0CON equ 002ch ; Steuerregister Kanal 0
|
|
DM1CON equ 003ch ; Steuerregister Kanal 1
|
|
_DMBIT equ 0 ; Transfereinheit (1/2 Byte)
|
|
_DMASL equ 1 ; Einzel/Blocktransfer
|
|
_DMAS equ 2 ; Request-Anzeige
|
|
_DMAE equ 3 ; Freigabe
|
|
_DSD equ 4 ; feste/wandernde Quelladresse
|
|
_DAD equ 5 ; feste/wandernde Zieladresse
|
|
|
|
SAR0 equ 0020h ; Quelladresse Kanal 0
|
|
DAR0 equ 0024h ; Zieladresse Kanal 0
|
|
TCR0 equ 0028h ; Zähler Kanal 0
|
|
SAR1 equ 0030h ; Quelladresse Kanal 1
|
|
DAR1 equ 0034h ; Zieladresse Kanal 1
|
|
TCR1 equ 0038h ; Zähler Kanal 1
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Timer
|
|
|
|
TA0MR equ 0396h ; Modusregister Timer A0
|
|
TA1MR equ 0397h ; Modusregister Timer A1
|
|
TA2MR equ 0398h ; Modusregister Timer A2
|
|
TA3MR equ 0399h ; Modusregister Timer A3
|
|
TA4MR equ 039ah ; Modusregister Timer A4
|
|
TB0MR equ 039bh ; Modusregister Timer B0
|
|
TB1MR equ 039ch ; Modusregister Timer B1
|
|
TB2MR equ 039dh ; Modusregister Timer B2
|
|
_TMOD0 equ 0 ; Moduswahl
|
|
_TMOD1 equ 1
|
|
_MR0 equ 2 ; Sub-Funktionsauswahl
|
|
_MR1 equ 3
|
|
_MR2 equ 4
|
|
_MR3 equ 5
|
|
_TCK0 equ 6 ; Zählquellenwahl
|
|
_TCK1 equ 7
|
|
|
|
TA0 equ 0386h ; Zählregister Timer A0
|
|
TA1 equ 0388h ; Zählregister Timer A1
|
|
TA2 equ 038ah ; Zählregister Timer A2
|
|
TA3 equ 038ch ; Zählregister Timer A3
|
|
TA4 equ 038eh ; Zählregister Timer A4
|
|
TB0 equ 0390h ; Zählregister Timer B0
|
|
TB1 equ 0392h ; Zählregister Timer B1
|
|
TB2 equ 0394h ; Zählregister Timer B2
|
|
|
|
TABSR equ 0380h ; Start/Stop-Register:
|
|
TA0S equ TABSR<<3+0 ; Timer A0
|
|
TA1S equ TABSR<<3+1 ; Timer A1
|
|
TA2S equ TABSR<<3+2 ; Timer A2
|
|
TA3S equ TABSR<<3+3 ; Timer A3
|
|
TA4S equ TABSR<<3+4 ; Timer A4
|
|
TB0S equ TABSR<<3+5 ; Timer B0
|
|
TB1S equ TABSR<<3+6 ; Timer B1
|
|
TB2S equ TABSR<<3+7 ; Timer B2
|
|
|
|
CPSRF equ 0381h ; Vorteilerregister:
|
|
CPSR equ CPSRF<<3+7 ; Vorteiler zurücksetzen
|
|
|
|
ONSF equ 0382h ; Monoflop-Triggerbits
|
|
TA0OS equ ONSF<<3+0 ; Timer A0
|
|
TA1OS equ ONSF<<3+1 ; Timer A1
|
|
TA2OS equ ONSF<<3+2 ; Timer A2
|
|
TA3OS equ ONSF<<3+3 ; Timer A3
|
|
TA4OS equ ONSF<<3+4 ; Timer A4
|
|
TA0TGL equ ONSF<<3+6 ; Triggerwahl Timer A0
|
|
TA0TGH equ ONSF<<3+7
|
|
|
|
TRGSR equ 0383h ; Triggerwahlregister
|
|
TA1TGL equ TRGSR<<3+0 ; Triggerwahl Timer A1
|
|
TA1TGH equ TRGSR<<3+1
|
|
TA2TGL equ TRGSR<<3+2 ; Triggerwahl Timer A2
|
|
TA2TGH equ TRGSR<<3+3
|
|
TA3TGL equ TRGSR<<3+4 ; Triggerwahl Timer A3
|
|
TA3TGH equ TRGSR<<3+5
|
|
TA4TGL equ TRGSR<<3+6 ; Triggerwahl Timer A4
|
|
TA4TGH equ TRGSR<<3+7
|
|
|
|
UDF equ 0384h ; Zählrichtungen(A) / Zweiphasenmodi(A2-4)
|
|
TA0UD equ UDF<<3+0 ; Timer A0
|
|
TA1UD equ UDF<<3+1 ; Timer A1
|
|
TA2UD equ UDF<<3+2 ; Timer A2
|
|
TA3UD equ UDF<<3+3 ; Timer A3
|
|
TA4UD equ UDF<<3+4 ; Timer A4
|
|
TA2P equ UDF<<3+5 ; Timer A2
|
|
TA3P equ UDF<<3+6 ; Timer A3
|
|
TA4P equ UDF<<3+7 ; Timer A4
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Watchdog
|
|
|
|
WDTS equ 000eh ; Startwert
|
|
__bitreg WDC,000fh,80h ; Vorteilerwahl / obere Zähler-Bits
|
|
|
|
;----------------------------------------------------------------------------
|
|
; serielle Ports:
|
|
|
|
U0TB equ 03a2h ; Senderegister UART0
|
|
U1TB equ 03aah ; Senderegister UART1
|
|
|
|
U0RB equ 03a6h ; Empfangsregister UART0
|
|
U1RB equ 03aeh ; Empfangsregister UART1
|
|
_OER equ 4 ; Overrun-Fehler ?
|
|
_FER equ 5 ; Framing-Fehler ?
|
|
_PER equ 6 ; Paritäts-Fehler ?
|
|
_SUM equ 7 ; Summenfehler ?
|
|
|
|
U0BRG equ 03a1h ; Baudratengenerator UART0
|
|
U1BRG equ 03a9h ; Baudratengenerator UART1
|
|
|
|
U0MR equ 03a0h ; Modusregister UART0
|
|
U1MR equ 03a8h ; Modusregister UART1
|
|
_SMD0 equ 0 ; Modus
|
|
_SMD1 equ 1
|
|
_SMD2 equ 2
|
|
_CKDIR equ 3 ; interner/externer Takt
|
|
_STPS equ 4 ; Anzahl Stopbits
|
|
_PRY equ 5 ; Paritätswahl
|
|
_PRYE equ 6 ; Paritätsart
|
|
_SLEP equ 7 ; Sleep-Modus
|
|
|
|
U0C0 equ 03a4h ; Steuerregister 0 UART0
|
|
U1C0 equ 03ach ; Steuerregister 1 UART0
|
|
_CLK0 equ 0 ; Taktquelle Baudratengenerator
|
|
_CLK1 equ 1
|
|
_CRS equ 2 ; RTS/CTS-Auswahl
|
|
_TXEPT equ 3 ; Senderegister voll ?
|
|
_CRD equ 4 ; CTS/RTS-Auswahl
|
|
_NCH equ 5 ; TXD als Open-Collector ?
|
|
_CKPOL equ 6 ; Taktpolaritätswahl
|
|
_UFORM equ 7 ; Bitreihenfolge
|
|
|
|
U0C1 equ 03a5h ; Steuerregister 1 UART0
|
|
U1C1 equ 03adh ; Steuerregister 1 UART1
|
|
_TE equ 0 ; Senderfreigabe
|
|
_TI equ 1 ; Sendepuffer leer ?
|
|
_RE equ 2 ; Empfängerfreigabe
|
|
_RI equ 3 ; Empfangspuffer voll ?
|
|
|
|
UCON equ 03b0h ; Steuerregister 2 UART0+1
|
|
U0IRS equ UCON<<3+0 ; Interruptgrund Sender UART0
|
|
U1IRS equ UCON<<3+1 ; Interruptgrund Sender UART1
|
|
U0RRM equ UCON<<3+2 ; kontinuierlicher Empfangsmodus UART0
|
|
U1RRM equ UCON<<3+3 ; kontinuierlicher Empfangsmodus UART1
|
|
CLKMD0 equ UCON<<3+4 ; Taktausgabe an CLK1/CLKS1
|
|
CLKMD1 equ UCON<<3+5
|
|
RCSP equ UCON<<3+6 ; RTS/CTS gemeinsam/einzeln
|
|
|
|
;----------------------------------------------------------------------------
|
|
; CRC-Generator
|
|
|
|
CRCD equ 03bch ; Ergebnis CRC-Berechnung
|
|
|
|
CRCIN equ 03beh ; Datumseingabe CRC-Berechnung
|
|
|
|
;----------------------------------------------------------------------------
|
|
; A/D-Wandler
|
|
|
|
AD0 equ 03c0h ; Datenregister Kanal 0
|
|
AD1 equ 03c2h ; Datenregister Kanal 1
|
|
AD2 equ 03c4h ; Datenregister Kanal 2
|
|
AD3 equ 03c6h ; Datenregister Kanal 3
|
|
AD4 equ 03c8h ; Datenregister Kanal 4
|
|
AD5 equ 03cah ; Datenregister Kanal 5
|
|
AD6 equ 03cch ; Datenregister Kanal 6
|
|
AD7 equ 03ceh ; Datenregister Kanal 7
|
|
|
|
ADCON0 equ 03d6h ; A/D-Steuerregister 0
|
|
CH0 equ ADCON0<<3+0 ; Kanalwahl
|
|
CH1 equ ADCON0<<3+1
|
|
CH2 equ ADCON0<<3+2
|
|
MD0 equ ADCON0<<3+3 ; Modus
|
|
MD1 equ ADCON0<<3+4
|
|
TRG equ ADCON0<<3+5 ; Soft/Hardwaretrigger
|
|
ADST equ ADCON0<<3+6 ; Konversion starten
|
|
CKS0 equ ADCON0<<3+7 ; Frequenzwahl
|
|
|
|
ADCON1 equ 03d7h ; A/D-Steuerregister 1
|
|
SCAN0 equ ADCON1<<3+0 ; Sweep-Modus
|
|
SCAN1 equ ADCON1<<3+1
|
|
MD2 equ ADCON1<<3+2 ; Modus
|
|
BITS equ ADCON1<<3+3 ; Breitenwahl (8/10 Bit)
|
|
VCUT equ ADCON1<<3+5
|
|
OPA0 equ ADCON1<<3+6
|
|
OPA1 equ ADCON1<<3+7
|
|
|
|
ADCON2 equ 03d4h
|
|
SMP equ ADCON2<<3+0 ; A-D Conversion method bit
|
|
|
|
;----------------------------------------------------------------------------
|
|
; D/A-Wandler
|
|
|
|
DA0 equ 03d8h ; Wert D/A-Wandler 0
|
|
DA1 equ 03dah ; Wert D/A-Wandler 1
|
|
|
|
DACON equ 03dch ; Steuerregister D/A-Wandler
|
|
DA0E equ DACON<<3+0 ; D/A-Wandler 0 freigeben
|
|
DA1E equ DACON<<3+1 ; D/A-Wandler 1 freigeben
|
|
|
|
;----------------------------------------------------------------------------
|
|
; feste Vektoren
|
|
|
|
Vec_UndefInstr equ 0fffdch ; UND ausgeführt
|
|
Vec_Overflow equ 0fffe0h ; INTO+Overflow ausgeführt
|
|
Vec_BRK equ 0fffe4h ; BRK ausgeführt
|
|
Vec_AddrMatch equ 0fffe8h ; Adressengleichheit aufgetreten
|
|
Vec_SingleStep equ 0fffech ; Einzelschrittverarbeitung
|
|
Vec_WDT equ 0ffff0h ; Watchdog hat zugeschlagen
|
|
Vec_DBC equ 0ffff4h
|
|
Vec_NMI equ 0ffff8h ; nichtmaskierbarer Interrupt
|
|
Vec_Reset equ 0ffffch
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Variable Vektoren; hier Offset zu INTB
|
|
|
|
Vec_BRK2 equ 0 ; BRK ausgeführt (falls fester Vektor abgeschaltet)
|
|
Vec_DMA0 equ 44
|
|
Vec_DMA1 equ 48
|
|
Vec_KeyInp equ 52
|
|
Vec_AD equ 56
|
|
Vec_UART0T equ 68
|
|
Vec_UART0R equ 72
|
|
Vec_UART1T equ 76
|
|
Vec_UART1R equ 80
|
|
Vec_TA0 equ 84
|
|
Vec_TA1 equ 88
|
|
Vec_TA2 equ 92
|
|
Vec_TA3 equ 96
|
|
Vec_TA4 equ 100
|
|
Vec_TB0 equ 104
|
|
Vec_TB1 equ 108
|
|
Vec_TB2 equ 112
|
|
Vec_INT0 equ 116
|
|
Vec_INT1 equ 120
|
|
Vec_INT2 equ 124
|
|
|
|
;----------------------------------------------------------------------------
|
|
; Speicherbereiche
|
|
|
|
switch MOMCPUNAME
|
|
case "M30600M8"
|
|
IROM equ 0f0000h ; 64K ROM am Ende des Speicherraums
|
|
IROMEND equ 0fffffh
|
|
IRAM equ 000400h ; 10K RAM hinter SFRs
|
|
IRAMEND equ 002c00h
|
|
case "M30610" ; 128k ROM
|
|
IROM equ 0e0000h
|
|
IROMEND equ 0fffffh
|
|
IRAM equ 000400h
|
|
IRAMEND equ 002c00h ; 10k RAM
|
|
case "M30620"
|
|
IROM equ 0e0000h
|
|
IROMEND equ 0fffffh
|
|
IRAM equ 000400h
|
|
IRAMEND equ 002c00h ; 10k RAM
|
|
endcase
|
|
|
|
;----------------------------------------------------------------------------
|
|
|
|
endif
|
|
|
|
restore ; Listing wieder an
|
|
|