Subversion Repositories pentevo

Rev

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

                ifndef  __regavrinc     ; avoid multiple inclusion
__regavrinc     equ     1

                save
                listing off             ; no listing over this file

;****************************************************************************
;*                                                                          *
;*   AS 1.42 - Datei REGAVROLD.INC                                          *
;*                                                                          *
;*   Contains SFR  and Bit Definitions for AVR Processors                   *
;*          OUTDATED VERSION - PLEASE SWITCH TO NEW FILE IF POSSIBLE        *
;*                                                                          *
;****************************************************************************

; Set internal CPU code and memory addresses in one step

                switch  MOMCPUNAME
                case    "AT90S1200"
__cpucode         equ     0x011200
eeend             equ     63            ; End Address EEPROM
iramend           equ     95,data       ; End Address SRAM
iromend           label   1023          ; End Address EPROM
                case    "AT90S2313"
__cpucode         equ     0x012313
eeend             equ     127
iramend           equ     0xdf,data
iromend           label   2047
                case    "AT90S4414"
__cpucode         equ     0x014414
eeend             equ     255
iramend           equ     0x15f,data
iromend           label   4095
                case    "AT90S8515"
__cpucode         equ     0x018515
eeend             equ     511
iramend           equ     0x25f,data
iromend           label   8191
                case    "ATMEGA8"
__cpucode         equ     0x020008
eeend             equ     511
iramend           equ     0x45f,data
iromend           label   8191
                case    "ATMEGA16"
__cpucode         equ     0x020010
eeend             equ     511
iramend           equ     0x45f,data
iromend           label   16383
                elsecase
                  fatal  "wrong target selected: only AT90S1200, AT90S2313, AT90S4414, AT90S8515, ATMEGA8, or ATMEGA16 supported"
                endcase

ismega          function code,(code>>16)=2

                if      MOMPASS=1
                 message "Atmel AVR SFR Definitions (C) 1996,2002 Alfred Arnold"
                endif

;----------------------------------------------------------------------------
; Constant Memory Addresses

eestart         equ     0               ; Start Address Internal EEPROM
iram            equ     96,data         ; Start Address Internal SRAM
                                        ; (behind mapped I/O)
irom            label   0               ; Start Address Internal EPROM

;----------------------------------------------------------------------------
; Prozessorkern

sreg            port    0x3f            ; Status Register:
c               equ     0               ;  Carry
z               equ     1               ;  Zero Result
n               equ     2               ;  Negative Result
v               equ     3               ;  Twos Complement Overflow
s               equ     4               ;  Sign
h               equ     5               ;  Half Carry
t               equ     6               ;  Bit Storage
i               equ     7               ;  Globale Interrupt Enable

; Size of stack pointer depends on size of Internal data space
; (if present at all)

                if      __cpucode>=0x012313
spl              equ     0x3d           ; Stack Pointer (LSB)
                 if      iramend>=256
sph               equ     0x3e          ;               (MSB)
                 endif
                endif

;----------------------------------------------------------------------------
; Chip Configuration

mcucr           port    0x35            ; CPU Control:
isc00           equ     0               ;  INT0 Edge Selection
isc01           equ     1               ;  INT0 Edge/Level Trigger
                if      __cpucode>=0x012313
isc10             equ     2             ;  INT1 Edge Selection
isc11             equ     3             ;  INT1 Edge/Level Trigger
                endif
                if      ismega(__cpucode)
; Note: for the Mega16, bits 6 & 7 are interchanged, I guess that's an
; error in the data sheet...
se                equ     7             ; Sleep Enable
sm2               equ     6             ; Sleep Mode Select
sm1               equ     5
sm0               equ     4
                else ; !ismega
sm                equ     4             ;  Select Idle/PowerDdown Mode
se                equ     5             ;  Enable Sleep Mode
                  if      __cpucode>=0x014414
srw                 equ     6           ;  Wait State Selection External SRAM
sre                 equ     7           ;  External External SRAM
                  endif
                endif

                if      ismega(__cpucode)
osccal            port    0x31          ; Oscillator Calibration

mcucsr            port    0x34
                  if      __cpucode>=0x020010
jtd                 equ     7           ; JTAG Reset Flag
isc2                equ     6           ; Interrupt Sense Control 2
                  endif
wdrf              equ     3             ; Watchdog Reset Occured
borf              equ     2             ; Brown Out Occured
extrf             equ     1             ; External Reset Occured
porf              equ     0             ; Power On Reset Occured

spmcr             port    0x37          ; Store Program Memory Control Register
spmie             equ     7             ; Interrupt Enable
rwwsb             equ     6             ; Read-while-Write Section Busy
rwwsre            equ     4             ; Read-while-Write Section Read Enable
blbset            equ     3             ; Boot Lock Bit Set
pgwrt             equ     2             ; Page Write
pgers             equ     1             ; Page Erase
spmen             equ     0             ; Store Program Memory Enable
                endif

;----------------------------------------------------------------------------
; Interrupt-Steuerung

                if      ismega(__cpucode)
gicr             port    0x3b
ivce             equ     0              ; Interrupt Vector Change Enable
ivsel            equ     1              ; Interrupt Vector Select
int0             equ     6              ; Enable External Interrupt 0
int1             equ     7              ; Enable External Interrupt 1
                 if      __cpucode>=0x020010
int2              equ     5             ; Enable External Interrupt 2
                 endif
                elseif
gimsk            port    0x3b           ; Global Interrupt Mask:
int0             equ     6              ;  External Interrupt 0
                 if      __cpucode>=0x012313
int1              equ     7             ;  External Interrupt 1
                 endif
                endif

                if      __cpucode>=0x012313
gifr             port    0x3a           ; Global Interrupt Flags
intf0            equ     6              ;  External Interrupt 0
intf1            equ     7              ;  External Interrupt 1
                 ifdef   int2
intf2             equ     int2          ; External Interrupt 2
                 endif
                endif

; who the heck decided to rearrange all bits for the Megas?

timsk           port    0x39            ; Timer Interrupt Mask:
                if      ismega(__cpucode)
toie0            equ     0
                elseif
toie0            equ     1              ;  Timer 0 Overflow
                endif
                if      __cpucode>=0x012313
                 if      __cpucode>=0x014414
                  if      ismega(__cpucode)
ocie1b             equ     3            ;  Timer 1 Vergleich B
                  elseif
ocie1b             equ     5            ;  Timer 1 Vergleich B
                  endif
                 endif
                 if       ismega(__cpucode)
toie1             equ     2
ticie1            equ     5
toie2             equ     6
ocie2             equ     7
ocie1a            equ     4
                 elseif
toie1             equ     7             ;  Timer 1 Overflow
ticie1            equ     3             ;  Timer 1 Capture
ocie1a            equ     6             ;  Timer 1 Compare
                 endif
                endif

tifr            port    0x38            ; Timer Interrupt Flags
tov0            equ     toie0           ;  Timer 0 Overflow
                if      __cpucode>=0x012313
ocf1a            equ     ocie1a         ;  Timer 1 Compare A
tov1             equ     toie1          ;  Timer 1 Overflow
icf1             equ     ticie1         ;  Timer 1 Capture
                endif
                if      __cpucode>=0x014414
ocf1b            equ     ocie1b         ;  Timer 1 Compare
                endif
                if      ismega(__cpucode)
tov2             equ     toie2
ocf2             equ     ocie2
                endif


;----------------------------------------------------------------------------
; Parallel Ports

                if      ismega(__cpucode)
sfior            equ     0x30
psr10            equ     0              ; T0/T1 Prescaler Reset
psr2             equ     1              ; ditto T2
pud              equ     2              ; Pullup Disable
acme             equ     3              ; Analog Comparator Multiplexer Enable
adhsm            equ     4              ; ADC High Speed Mode
                 if      __cpucode>=0x020010
adts0             equ     5
adts1             equ     6
adts2             equ     7
                 endif
                endif

                if      (__cpucode=0x014414)||(__cpucode=0x018515)||(__cpucode=0x020010)
porta            port    0x1b           ; Port A Data Register
ddra             port    0x1a           ; Port A Data Direction Register
pina             port    0x19           ; Port A Read Register
                endif

portb           port    0x18            ; Port B Data Register
ddrb            port    0x17            ; Port B Data Direction Register
pinb            port    0x16            ; Port B Read Register

                if      __cpucode>=0x014414
portc            port    0x15           ; Port C Data Register
ddrc             port    0x14           ; Port C Data Direction Register
pinc             port    0x13           ; Port C Read Register
                endif

portd           port    0x12            ; Port D Data Register
ddrd            port    0x11            ; Port D Data Direction Register
pind            port    0x10            ; Port D Read Register

;----------------------------------------------------------------------------
; Timer

tccr0           port    0x33            ; Timer 0 Control Register:
cs00            equ     0               ;  Prescaler Setting
cs01            equ     1
cs02            equ     2
                if      __cpucode=0x020010
wgm01            equ     3              ; Waveform Generation Mode
wgm00            equ     6
com00            equ     4              ; Compare/Match Output Mode
com01            equ     5
foc0             equ     7              ; Force Output Compare
                endif

tcnt0           port    0x32            ; Timer 0 Count Register

ocr0            port    0x3c

                if      __cpucode>=0x012313
tccr1a           port    0x2f           ; Timer 1 Steuerregister A:
pwm10            equ     0              ;  PWM Mode
wgm10            equ     pwm10
pwm11            equ     1
wgm11            equ     pwm11
com1a0           equ     6              ;  Compare Mode A
com1a1           equ     7
                 if      __cpucode>=0x014414
com1b0            equ     4             ;  Compare Mode B
com1b1            equ     5
                 endif
                 if      ismega(__cpucode)
foc1b             equ     2
foc1a             equ     3
                 endif

tccr1b           port    0x2e           ; Timer 1 Control Register B:
cs10             equ     0              ; Prescale setting
cs11             equ     1
cs12             equ     2
ctc1             equ     3              ; Reset after Equality ?
wgm12            equ     ctc1
                 if      ismega(__cpucode)
wgm13             equ     4
                 endif
ices1            equ     6              ; Capture Edge Selection
icnc1            equ     7              ; Capture Noise Filter

tcnt1l           port    0x2c           ; Timer 1 Count Register (LSB)
tcnt1h           port    0x2d           ;                        (MSB)

                 if      __cpucode>=0x014414
ocr1al            port    0x2a          ; Timer 1 Compare Register A (LSB)
ocr1ah            port    0x2b          ;                            (MSB)
ocr1bl            port    0x28          ; Timer 1 Compare Register B (LSB)
ocr1bh            port    0x29          ;                            (MSB)
                 elseif
ocr1l             port    0x2a          ; Timer 1 Compare Register (LSB)
ocr1h             port    0x2b          ;                          (MSB)
                 endif

                 if      ismega(__cpucode)
icr1l             port    0x26
icr1h             port    0x27
                 elseif
icr1l             port    0x24          ; Timer 1 Capture Value (LSB)
icr1h             port    0x25          ;                       (MSB)
                 endif
                endif

                if      ismega(__cpucode)
tccr2            port    0x26           ; Timer 2 Control Register
cs20             equ     0              ; Prescaler
cs21             equ     1
cs22             equ     2
wgm21            equ     3
com20            equ     4
com21            equ     5
wgm20            equ     6
foc2             equ     7

tcnt2            port    0x24           ; Timer Value
ocr2             port    0x23           ; Output Compare Value

assr             port    0x22           ; Asynchronous Status Register
as2              equ     3              ; Asynchronous Timer 2
tcn2ub           equ     2              ; Timer/Counter 2 Update Busy
ocr2ub           equ     1              ; Output Compare Register 2 Update Busy
tcr2ub           equ     0              ; Timer/Counter Control Register 2 Update Busy
                endif

;----------------------------------------------------------------------------
; Watchdog

wdtcr           port    0x21            ; Watchdog-Control Register:
wdp0            equ     0               ;  Prescaler
wdp1            equ     1
wdp2            equ     2
wde             equ     3               ; Enable
                if      __cpucode=0x010008
wdce              equ     4             ; Watchdog Change Enable
                elseif  __cpucode>=0x012313
wdttoe            equ     4             ; Needed for Disable
                endif

;----------------------------------------------------------------------------
; serielle Ports

                if      __cpucode>=0x012312
udr              port    0x0c           ; Data Register UART

usr              port    0x0b           ; Status Register UART:
ucsra            port    usr
                 if      ismega(__cpucode)
mpcm              equ     0             ; Multiprocessor Communication Mode
u2x               equ     1             ; Double Speed
pe                equ     2             ; Parity Error
                 endif
or               equ     3              ;  Receiver Overflow
dor              equ     or
fe               equ     4              ;  Framing Error
udre             equ     5              ;  Data Register Empty
txc              equ     6              ;  Transmission Complete
rxc              equ     7              ;  Reception Complete

ucr              port    0x0a           ; UART Control Register:
ucsrb            port    ucr
txb8             equ     0              ;  Transmit Bit 8
rxb8             equ     1              ;  Receive Bit 8
chr9             equ     2              ;  Enable 9 Bit Data Values
ucsz2            equ     chr9
txen             equ     3              ;  Transmitter Enable
rxen             equ     4              ;  Receiver Enable
udrie            equ     5              ;  Enable Free Data Register Interrupt
txcie            equ     6              ;  Enable Transmit Complete Interrupt
rxcie            equ     7              ;  Enable Receive Complete Interrupt

                 if      ismega(__cpucode)
ucsrc             port    0x20          ; Control Register C
ursel             equ     7             ; Register Select
umsel             equ     6             ; Sync/Async Mode
upm1              equ     5             ; Parity Mode
upm0              equ     4
usbs              equ     3             ; Stop Bit Select
ucsz1             equ     2             ; Character Size
ucsz0             equ     1
ucpol             equ     0             ; Clock Polarity
                 endif

ubrr             port    0x09           ; Baud Rate Generator
                 if      ismega(__cpucode)
ubrrl             port    ubrr
ubrrh             port    ucsrc
                 endif
                endif

                if      __cpucode>=0x014414
spcr             port    0x0d           ; SPI Control Register:
spr0             equ     0              ;  Clock Selection
spr1             equ     1
cpha             equ     2              ;  Clock Phase
cpol             equ     3              ;  Clock Polarity
mstr             equ     4              ;  Master/Slave Select
dord             equ     5              ;  Bit Order
spe              equ     6              ;  SPI Enable
spie             equ     7              ;  SPI Interrupt Enable

spsr             port    0x0e           ; SPI Status Register:
                 if      ismega(__cpucode)
spi2x             equ     0             ; Double Speed Mode
                 endif
wcol             equ     6              ;  Write Collision ?
spif             equ     7              ;  SPI Interrupt Flag

spdr             port    0x0f           ; SPI Data Register
                endif

                if      ismega(__cpucode)
twbr             port    0x00           ; Bit Rate Register

twcr             port    0x36           ; Control Register
twint            equ     7              ; Interrupt Flag
twea             equ     6              ; Enable Acknowledge Bit
twsta            equ     5              ; Start Condition
twsto            equ     4              ; Stop Condition
twwc             equ     3              ; Write Collision Flag
twen             equ     2              ; Enable Bit
twie             equ     0              ; Interupt Enable

twsr             port    0x01           ; Status Register
tws7             equ     7              ; Status
tws6             equ     6
tws5             equ     5
tws4             equ     4
tws3             equ     3
twps1            equ     1              ; Prescaler
twps0            equ     0

twdr             port    0x03           ; Data Register

twar             port    0x02           ; (Slave) Address Register
twgce            equ     0              ; General Call recognition Bit
                endif

;----------------------------------------------------------------------------
; Analog Comparator

acsr            port    0x08            ; Comparator Control/Status Register:
acis0           equ     0               ;  Interrupt Mode
acis1           equ     1
                if      __cpucode>=0x012313
acic             equ     2              ;  Use Comparator as Capture Signal for Timer 1
                endif
acie            equ     3               ;  Interrupt Enable
aci             equ     4               ;  Interrupt Flag
aco             equ     5               ;  Comparator Output
                if      ismega(__cpucode)
acbg             equ     6              ;  Bandgap Select
                endif
acd             equ     7               ;  Power Off

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

                if      ismega(__cpucode)
admux            port    0x07           ; Multiplexer Selection
refs1            equ     7              ; reference Selection Bits
refs0            equ     6
adlar            equ     5              ; Left Adjust Right
mux3             equ     3              ; Multiplexer
mux2             equ     2
mux1             equ     1
mux0             equ     0

                 if      __cpucode >=0x020010
adcsra            port    0x06          ; Control/Status Register
adate             equ     5             ; Auto Trigger Enable
                 elseif
adcsr             port    0x06          ; Control/Status Register
adfr              equ     5             ; free Running Select
                  endif
aden             equ     7              ; Enable ADC
adsc             equ     6              ; Start Conversion
adif             equ     4              ; Interrupt Flag
adie             equ     3              ; Interrupt Enable
adps2            equ     2              ; Prescaler Select
adps1            equ     1
adps0            equ     0

adch             port    0x05           ; Data Register
adcl             port    0x04
                endif

;----------------------------------------------------------------------------
; JTAG

                if      __cpucode >=0x020010
ocdr             port    osccal         ; Debug Register
                endif

;----------------------------------------------------------------------------
; EEPROM

                if eeend>=256
eearl            port    0x1e           ; Address Register
eearh            port    0x1f
                elseif 
eear             port    0x1e
                endif

eedr            port    0x1d            ; Data Register

eecr            port    0x1c            ; Control Register:
eere            equ     0               ;  Read Enable
eewe            equ     1               ;  Write Enable
                if      __cpucode>=0x012313
eemwe            equ     2
                endif
                if      __cpucode=0x020008
eerie            equ     3              ; Enable Ready Interrupt
                endif

;----------------------------------------------------------------------------
; Vectors
; Unfortunately, interrupt numbers change for biggger processors
; Why only, Atmel, why ?

vec_reset       label   0               ; Reset Entry
                switch  __cpucode
                case    0x011200
vec_int0         label   1              ; Entry External Interrupt 0
vec_tm0ovf       label   2              ; Entry Overflow Timer 0
vec_anacomp      label   3              ; Entry Analog Comparator
                case    0x012313
vec_int0         label   1              ; Entry External Interrupt 0
vec_int1         label   2              ; Entry External Interrupt 2
vec_tm1capt      label   3              ; Entry Capture Timer 1
vec_tm1comp      label   4              ; Entry Compare Timer 1
vec_tm1ovf       label   5              ; Entry Overflow Timer 1
vec_tm0ovf       label   6              ; Entry Overflow Timer 0
vec_uartrx       label   7              ; Entry UART Empfang komplett
vec_uartudre     label   8              ; Entry UART Data Register leer
vec_uarttx       label   9              ; Entry UART Sendung komplett
vec_anacomp      label   10             ; Entry Analog-Komparator
                case    0x014414,0x018515
vec_int0         label   1              ; Entry External Interrupt 0
vec_int1         label   2              ; Entry External Interrupt 2
vec_tm1capt      label   3              ; Entry Capture Timer 1
vec_tm1compa     label   4              ; Entry Compare A Timer 1
vec_tm1compb     label   5              ; Entry Compare A Timer 1
vec_tm1ovf       label   6              ; Entry Overflow Timer 1
vec_tm0ovf       label   7              ; Entry Overflow Timer 0
vec_spi          label   8              ; Entry SPI Interrupt
vec_uartrx       label   9              ; Entry UART Reception Complete
vec_uartudre     label   10             ; Entry UART Data Register Empty
vec_uarttx       label   11             ; Entry UART Sendung Complete
vec_anacomp      label   12             ; Entry Analog Comparator
                case    0x020008
vec_int0         label   1              ; Entry External Interrupt 0
vec_int1         label   2              ; External Interrupt 1
vec_tm2comp      label   3              ; Timer 2 Compare Match
vec_tm2ovf       label   4              ; Timer 2 Overflow
vec_tm1capt      label   5              ; Timer 1 Capture
vec_tm1compa     label   6              ; Timer 1 Compare Match A
vec_tm1compb     label   7              ; Timer 1 Compare Match B
vec_tm1ovf       label   8              ; Timer 1 Overflow
vec_tm0ovf       label   9              ; Timer 0 Overflow
vec_spi          label   10             ; SPI Transfer Complete
vec_uartrx       label   11             ; UART Rx Complete
vec_uartudre     label   12             ; UART Data Register Empty
vec_uarttx       label   13             ; UART Tx Complete
vec_adc          label   14             ; ADC Conversion Complete
vec_eerdy        label   15             ; EEPROM Ready
vec_anacomp      label   16             ; analog Comparator
vec_twi          label   17             ; Two-Wire Interface
vec_spm_rdy      label   18             ; Store Program Memory Ready
                case    0x020010
vec_int0         label   2              ; External Interrupt 0
vec_int1         label   4              ; External Interrupt 1
vec_tm2comp      label   6              ; Timer 2 Compare Match
vec_tm2ovf       label   8              ; Timer 2 Overflow
vec_tm1capt      label   10             ; Timer 1 Capture
vec_tm1compa     label   12             ; Timer 1 Compare Match A
vec_tm1compb     label   14             ; Timer 1 Compare Match B
vec_tm1ovf       label   16             ; Timer 1 Overflow
vec_tm0ovf       label   18             ; Timer 0 Overflow
vec_spi          label   20             ; SPI Transfer Complete
vec_uartrx       label   22             ; UART Rx Complete
vec_uartudre     label   24             ; UART Data Register Empty
vec_uarttx       label   26             ; UART Tx Complete
vec_adc          label   28             ; ADC Conversion Complete
vec_eerdy        label   30             ; EEPROM Ready
vec_anacomp      label   32             ; analog Comparator
vec_twi          label   34             ; Two-Wire Interface
vec_int2         label   36             ; External Interrupt 2
vec_tm0comp      label   38             ; Timer 0 Compare Match
vec_spm_rdy      label   40             ; Store Program Memory Ready
                endcase

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

                restore                 ; re-allow listing

                endif                   ; __regavrinc