* completed atmega128-Unit by Christian

git-svn-id: trunk@18849 -
This commit is contained in:
florian 2011-08-25 21:59:29 +00:00
parent a08dfdf803
commit a774f4681a

View File

@ -1,7 +1,6 @@
{****************************************************************************** {******************************************************************************
Register definitions and startup code for ATMEL ATmega128 Register definitions and startup code for ATMEL ATmega128
******************************************************************************} ******************************************************************************}
unit atmega128; unit atmega128;
@ -9,6 +8,505 @@ unit atmega128;
{$macro on} {$macro on}
interface interface
type
const
_SFR_OFFSET = $20; //indirect addressing
var
PINF : byte absolute $00+_SFR_OFFSET;
PINE : byte absolute $01+_SFR_OFFSET;
DDRE : byte absolute $02+_SFR_OFFSET;
PORTE : byte absolute $03+_SFR_OFFSET;
ADCW : word absolute $04+_SFR_OFFSET;
ADC : word absolute $04+_SFR_OFFSET;
ADCL : byte absolute $04+_SFR_OFFSET;
ADCH : byte absolute $05+_SFR_OFFSET;
ADCSR : byte absolute $06+_SFR_OFFSET;
ADCSRA : byte absolute $06+_SFR_OFFSET;
ADMUX : byte absolute $07+_SFR_OFFSET;
ACSR : byte absolute $08+_SFR_OFFSET;
UBRR0L : byte absolute $09+_SFR_OFFSET;
UCSR0B : byte absolute $0A+_SFR_OFFSET;
UCSR0A : byte absolute $0B+_SFR_OFFSET;
UDR0 : byte absolute $0C+_SFR_OFFSET;
SPCR : byte absolute $0D+_SFR_OFFSET;
SPSR : byte absolute $0E+_SFR_OFFSET;
SPDR : byte absolute $0F+_SFR_OFFSET;
PIND : byte absolute $10+_SFR_OFFSET;
DDRD : byte absolute $11+_SFR_OFFSET;
PORTD : byte absolute $12+_SFR_OFFSET;
PINC : byte absolute $13+_SFR_OFFSET;
DDRC : byte absolute $14+_SFR_OFFSET;
PORTC : byte absolute $15+_SFR_OFFSET;
PINB : byte absolute $16+_SFR_OFFSET;
DDRB : byte absolute $17+_SFR_OFFSET;
PORTB : byte absolute $18+_SFR_OFFSET;
PINA : byte absolute $19+_SFR_OFFSET;
DDRA : byte absolute $1A+_SFR_OFFSET;
PORTA : byte absolute $1B+_SFR_OFFSET;
EECR : byte absolute $1C+_SFR_OFFSET;
EEDR : byte absolute $1D+_SFR_OFFSET;
EEAR : word absolute $1E+_SFR_OFFSET;
EEARL : byte absolute $1E+_SFR_OFFSET;
EEARH : byte absolute $1F+_SFR_OFFSET;
SFIOR : byte absolute $20+_SFR_OFFSET;
WDTCR : byte absolute $21+_SFR_OFFSET;
OCDR : byte absolute $22+_SFR_OFFSET;
OCR2 : byte absolute $23+_SFR_OFFSET;
TCNT2 : byte absolute $24+_SFR_OFFSET;
TCCR2 : byte absolute $25+_SFR_OFFSET;
ICR1 : word absolute $26+_SFR_OFFSET;
ICR1L : byte absolute $26+_SFR_OFFSET;
ICR1H : byte absolute $27+_SFR_OFFSET;
OCR1B : word absolute $28+_SFR_OFFSET;
OCR1BL : byte absolute $28+_SFR_OFFSET;
OCR1BH : byte absolute $29+_SFR_OFFSET;
OCR1A : word absolute $2A+_SFR_OFFSET;
OCR1AL : byte absolute $2A+_SFR_OFFSET;
OCR1AH : byte absolute $2B+_SFR_OFFSET;
TCNT1 : word absolute $2C+_SFR_OFFSET;
TCNT1L : byte absolute $2C+_SFR_OFFSET;
TCNT1H : byte absolute $2D+_SFR_OFFSET;
TCCR1B : byte absolute $2E+_SFR_OFFSET;
TCCR1A : byte absolute $2F+_SFR_OFFSET;
TCCR1B : byte absolute $2E+_SFR_OFFSET;
ASSR : byte absolute $30+_SFR_OFFSET;
OCR0 : byte absolute $31+_SFR_OFFSET;
TCNT0 : byte absolute $32+_SFR_OFFSET;
TCCR0 : byte absolute $33+_SFR_OFFSET;
MCUSR : byte absolute $34+_SFR_OFFSET;
MCUCSR : byte absolute $34+_SFR_OFFSET;
MCUCR : byte absolute $35+_SFR_OFFSET;
TIFR : byte absolute $36+_SFR_OFFSET;
TIMSK : byte absolute $37+_SFR_OFFSET;
EIFR : byte absolute $38+_SFR_OFFSET;
EIMSK : byte absolute $39+_SFR_OFFSET;
EICRB : byte absolute $3A+_SFR_OFFSET;
RAMPZ : byte absolute $3B+_SFR_OFFSET;
XDIV : byte absolute $3C+_SFR_OFFSET;
DDRF : byte absolute $61;
PORTF : byte absolute $62;
PING : byte absolute $63;
DDRG : byte absolute $64;
PORTG : byte absolute $65;
SPMCSR : byte absolute $68;
EICRA : byte absolute $6A;
XMCRB : byte absolute $6C;
XMCRA : byte absolute $6D;
OSCCAL : byte absolute $6F;
TWBR : byte absolute $70;
TWSR : byte absolute $71;
TWAR : byte absolute $72;
TWDR : byte absolute $73;
TWCR : byte absolute $74;
OCR1C : word absolute $78;
OCR1CL : byte absolute $78;
OCR1CH : byte absolute $79;
TCCR1C : byte absolute $7A;
ETIFR : byte absolute $7C;
ETIMSK : byte absolute $7D;
ICR3 : word absolute $80;
ICR3L : byte absolute $80;
ICR3H : byte absolute $81;
OCR3C : word absolute $82;
OCR3CL : byte absolute $82;
OCR3CH : byte absolute $83;
OCR3B : word absolute $84;
OCR3BL : byte absolute $84;
OCR3BH : byte absolute $85;
OCR3A : word absolute $86;
OCR3AL : byte absolute $86;
OCR3AH : byte absolute $87;
TCNT3 : word absolute $88;
TCNT3L : byte absolute $88;
TCNT3H : byte absolute $89;
TCCR3B : byte absolute $8A;
TCCR3A : byte absolute $8B;
TCCR3C : byte absolute $8C;
UBRR0H : byte absolute $90;
UCSR0C : byte absolute $95;
UBRR1H : byte absolute $98;
UBRR1L : byte absolute $99;
UCSR1B : byte absolute $9A;
UCSR1A : byte absolute $9B;
UDR1 : byte absolute $9C;
UCSR1C : byte absolute $9D;
const
TWINT = 7;
TWEA = 6;
TWSTA = 5;
TWSTO = 4;
TWWC = 3;
TWEN = 2;
TWIE = 0;
TWA6 = 7;
TWA5 = 6;
TWA4 = 5;
TWA3 = 4;
TWA2 = 3;
TWA1 = 2;
TWA0 = 1;
TWGCE = 0;
TWS7 = 7;
TWS6 = 6;
TWS5 = 5;
TWS4 = 4;
TWS3 = 3;
TWPS1 = 1;
TWPS0 = 0;
SRL2 = 6;
SRL1 = 5;
SRL0 = 4;
SRW01 = 3;
SRW00 = 2;
SRW11 = 1;
XMBK = 7;
XMM2 = 2;
XMM1 = 1;
XMM0 = 0;
XDIVEN = 7;
XDIV6 = 6;
XDIV5 = 5;
XDIV4 = 4;
XDIV3 = 3;
XDIV2 = 2;
XDIV1 = 1;
XDIV0 = 0;
RAMPZ0 = 0;
ISC31 = 7;
ISC30 = 6;
ISC21 = 5;
ISC20 = 4;
ISC11 = 3;
ISC10 = 2;
ISC01 = 1;
ISC00 = 0;
ISC71 = 7;
ISC70 = 6;
ISC61 = 5;
ISC60 = 4;
ISC51 = 3;
ISC50 = 2;
ISC41 = 1;
ISC40 = 0;
SPMIE = 7;
RWWSB = 6;
RWWSRE = 4;
BLBSET = 3;
PGWRT = 2;
PGERS = 1;
SPMEN = 0;
INT7 = 7;
INT6 = 6;
INT5 = 5;
INT4 = 4;
INT3 = 3;
INT2 = 2;
INT1 = 1;
INT0 = 0;
INTF7 = 7;
INTF6 = 6;
INTF5 = 5;
INTF4 = 4;
INTF3 = 3;
INTF2 = 2;
INTF1 = 1;
INTF0 = 0;
OCIE2 = 7;
TOIE2 = 6;
TICIE1 = 5;
OCIE1A = 4;
OCIE1B = 3;
TOIE1 = 2;
OCIE0 = 1;
TOIE0 = 0;
OCF2 = 7;
TOV2 = 6;
ICF1 = 5;
OCF1A = 4;
OCF1B = 3;
TOV1 = 2;
OCF0 = 1;
TOV0 = 0;
TICIE3 = 5;
OCIE3A = 4;
OCIE3B = 3;
TOIE3 = 2;
OCIE3C = 1;
OCIE1C = 0;
ICF3 = 5;
OCF3A = 4;
OCF3B = 3;
TOV3 = 2;
OCF3C = 1;
OCF1C = 0;
SRE = 7;
SRW = 6;
SRW10 = 6;
SE = 5;
SM1 = 4;
SM0 = 3;
SM2 = 2;
IVSEL = 1;
IVCE = 0;
JTD = 7;
JTRF = 4;
WDRF = 3;
BORF = 2;
EXTRF = 1;
PORF = 0;
FOC = 7;
WGM0 = 6;
COM1 = 5;
COM0 = 4;
WGM1 = 3;
CS2 = 2;
CS1 = 1;
CS0 = 0;
FOC0 = 7;
WGM00 = 6;
COM01 = 5;
COM00 = 4;
WGM01 = 3;
CS02 = 2;
CS01 = 1;
CS00 = 0;
FOC2 = 7;
WGM20 = 6;
COM21 = 5;
COM20 = 4;
WGM21 = 3;
CS22 = 2;
CS21 = 1;
CS20 = 0;
AS0 = 3;
TCN0UB = 2;
OCR0UB = 1;
TCR0UB = 0;
COMA1 = 7;
COMA0 = 6;
COMB1 = 5;
COMB0 = 4;
COMC1 = 3;
COMC0 = 2;
WGMA1 = 1;
WGMA0 = 0;
COM1A1 = 7;
COM1A0 = 6;
COM1B1 = 5;
COM1B0 = 4;
COM1C1 = 3;
COM1C0 = 2;
WGM11 = 1;
WGM10 = 0;
COM3A1 = 7;
COM3A0 = 6;
COM3B1 = 5;
COM3B0 = 4;
COM3C1 = 3;
COM3C0 = 2;
WGM31 = 1;
WGM30 = 0;
ICNC = 7;
ICES = 6;
WGMB3 = 4;
WGMB2 = 3;
CSB2 = 2;
CSB1 = 1;
CSB0 = 0;
ICNC1 = 7;
ICES1 = 6;
WGM13 = 4;
WGM12 = 3;
CS12 = 2;
CS11 = 1;
CS10 = 0;
ICNC3 = 7;
ICES3 = 6;
WGM33 = 4;
WGM32 = 3;
CS32 = 2;
CS31 = 1;
CS30 = 0;
FOCA = 7;
FOCB = 6;
FOCC = 5;
FOC3A = 7;
FOC3B = 6;
FOC3C = 5;
FOC1A = 7;
FOC1B = 6;
FOC1C = 5;
IDRD = 7;
OCDR7 = 7;
OCDR6 = 6;
OCDR5 = 5;
OCDR4 = 4;
OCDR3 = 3;
OCDR2 = 2;
OCDR1 = 1;
OCDR0 = 0;
WDCE = 4;
WDE = 3;
WDP2 = 2;
WDP1 = 1;
WDP0 = 0;
TSM = 7;
ACME = 3;
PUD = 2;
PSR0 = 1;
PSR321 = 0;
SPIF = 7;
WCOL = 6;
SPI2X = 0;
SPIE = 7;
SPE = 6;
DORD = 5;
MSTR = 4;
CPOL = 3;
CPHA = 2;
SPR1 = 1;
SPR0 = 0;
UMSEL = 6;
UPM1 = 5;
UPM0 = 4;
USBS = 3;
UCSZ1 = 2;
UCSZ0 = 1;
UCPOL = 0;
UMSEL1 = 6;
UPM11 = 5;
UPM10 = 4;
USBS1 = 3;
UCSZ11 = 2;
UCSZ10 = 1;
UCPOL1 = 0;
UMSEL0 = 6;
UPM01 = 5;
UPM00 = 4;
USBS0 = 3;
UCSZ01 = 2;
UCSZ00 = 1;
UCPOL0 = 0;
RXC = 7;
TXC = 6;
UDRE = 5;
FE = 4;
DOR = 3;
UPE = 2;
U2X = 1;
MPCM = 0;
RXC1 = 7;
TXC1 = 6;
UDRE1 = 5;
FE1 = 4;
DOR1 = 3;
UPE1 = 2;
U2X1 = 1;
MPCM1 = 0;
RXC0 = 7;
TXC0 = 6;
UDRE0 = 5;
FE0 = 4;
DOR0 = 3;
UPE0 = 2;
U2X0 = 1;
MPCM0 = 0;
RXCIE = 7;
TXCIE = 6;
UDRIE = 5;
RXEN = 4;
TXEN = 3;
UCSZ = 2;
UCSZ2 = 2;
RXB8 = 1;
TXB8 = 0;
RXCIE1 = 7;
TXCIE1 = 6;
UDRIE1 = 5;
RXEN1 = 4;
TXEN1 = 3;
UCSZ12 = 2;
RXB81 = 1;
TXB81 = 0;
RXCIE0 = 7;
TXCIE0 = 6;
UDRIE0 = 5;
RXEN0 = 4;
TXEN0 = 3;
UCSZ02 = 2;
RXB80 = 1;
TXB80 = 0;
ACD = 7;
ACBG = 6;
ACO = 5;
ACI = 4;
ACIE = 3;
ACIC = 2;
ACIS1 = 1;
ACIS0 = 0;
ADEN = 7;
ADSC = 6;
ADFR = 5;
ADIF = 4;
ADIE = 3;
ADPS2 = 2;
ADPS1 = 1;
ADPS0 = 0;
REFS1 = 7;
REFS0 = 6;
ADLAR = 5;
MUX4 = 4;
MUX3 = 3;
MUX2 = 2;
MUX1 = 1;
MUX0 = 0;
{$define DOCALL:=call} {$define DOCALL:=call}
{$define DOJMP:=jmp} {$define DOJMP:=jmp}
@ -32,54 +530,91 @@ unit atmega128;
_bss_end: record end; external name '_bss_end'; _bss_end: record end; external name '_bss_end';
_stack_top: record end; external name '_stack_top'; _stack_top: record end; external name '_stack_top';
Int00Handler,
Int01Handler,
Int02Handler,
Int03Handler,
Int04Handler,
Int05Handler,
Int06Handler,
Int07Handler,
Int08Handler,
Int09Handler,
Int10Handler,
Int11Handler,
Int12Handler,
Int13Handler,
Int14Handler,
Int15Handler,
Int16Handler,
Int17Handler,
Int18Handler,
Int19Handler,
Int20Handler,
Int21Handler,
Int22Handler,
Int23Handler,
Int24Handler,
Int25Handler,
Int26Handler,
Int27Handler,
Int28Handler,
Int29Handler,
Int30Handler,
Int31Handler,
Int32Handler,
Int33Handler,
Int34Handler : Pointer = Default_IRQ_handler;
procedure Default_IRQ_handler; assembler; nostackframe; public name '_Default_IRQ_handler';
asm
.Lloop:
b .Lloop
end;
procedure _FPC_start; assembler; nostackframe; procedure _FPC_start; assembler; nostackframe;
label label
_start; _start;
asm asm
// code derived from phillips appnote 10254
.init .init
.align 16
.globl _start .globl _start
{ b _start // .org 0x00
b .LUndefined_Addr // Undefined Instruction vector rjmp _start
b .LSWI_Addr // Software Interrupt vector rjump Int00Handler
b .LPrefetch_Addr // Prefetch abort vector rjump Int01Handler
b .LAbort_Addr // Data abort vector rjump Int02Handler
nop // reserved rjump Int03Handler
b .LIRQ_Addr // Interrupt Request (IRQ) vector rjump Int04Handler
b .LFIQ_Addr // Fast interrupt request (FIQ) vector rjump Int05Handler
rjump Int06Handler
.LUndefined_Addr: rjump Int07Handler
ldr r0,.L1 rjump Int08Handler
ldr pc,[r0] rjump Int09Handler
.LSWI_Addr: rjump Int10Handler
ldr r0,.L2 rjump Int11Handler
ldr pc,[r0] rjump Int12Handler
.LPrefetch_Addr: rjump Int13Handler
ldr r0,.L3 rjump Int14Handler
ldr pc,[r0] rjump Int15Handler
.LAbort_Addr: rjump Int16Handler
ldr r0,.L4 rjump Int17Handler
ldr pc,[r0] rjump Int18Handler
.LIRQ_Addr: rjump Int19Handler
ldr r0,.L5 rjump Int20Handler
ldr pc,[r0] rjump Int21Handler
.LFIQ_Addr: rjump Int22Handler
ldr r0,.L5 rjump Int23Handler
ldr pc,[r0] rjump Int24Handler
.L1: rjump Int25Handler
.long Undefined_Handler rjump Int26Handler
.L2: rjump Int27Handler
.long SWI_Handler rjump Int28Handler
.L3: rjump Int29Handler
.long Prefetch_Handler rjump Int30Handler
.L4: rjump Int31Handler
.long Abort_Handler rjump Int32Handler
.L5: rjump Int33Handler
.long IRQ_Handler rjump Int34Handler
.L6:
.long FIQ_Handler
}
{ {
all ATMEL MCUs use the same startup code, the details are all ATMEL MCUs use the same startup code, the details are
governed by defines governed by defines
@ -88,3 +623,4 @@ unit atmega128;
end; end;
end. end.