fpc/rtl/embedded/avr/attiny28.pp
2017-05-02 19:51:22 +00:00

126 lines
3.7 KiB
ObjectPascal

unit ATtiny28;
{$goto on}
interface
var
// PORTD
PORTD : byte absolute $00+$32; // Port D Data Register
DDRD : byte absolute $00+$31; // Port D Data Direction Register
PIND : byte absolute $00+$30; // Port D Input Pins
// CPU
SREG : byte absolute $00+$3F; // Status Register
ICR : byte absolute $00+$26; // Interrupt Control Register
MCUCS : byte absolute $00+$27; // MCU Control and Status Register
OSCCAL : byte absolute $00+$20; // Status Register
// ANALOG_COMPARATOR
ACSR : byte absolute $00+$28; // Analog Comparator Control And Status Register
// TIMER_COUNTER_0
IFR : byte absolute $00+$25; // Interrupt Flag register
TCCR0 : byte absolute $00+$24; // Timer/Counter0 Control Register
TCNT0 : byte absolute $00+$23; // Timer Counter 0
// WATCHDOG
WDTCR : byte absolute $00+$21; // Watchdog Timer Control Register
// EXTERNAL_INTERRUPT
// PORTA
PORTA : byte absolute $00+$3B; // Port A Data Register
PACR : byte absolute $00+$3A; // Port A Control Register
PINA : byte absolute $00+$39; // Port A Input Pins
// PORTB
PINB : byte absolute $00+$36; // Port B Input Pins
// MODULATOR
MODCR : byte absolute $00+$22; // Modulation Control Register
const
// SREG
I = 7; // Global Interrupt Enable
T = 6; // Bit Copy Storage
H = 5; // Half Carry Flag
S = 4; // Sign Bit
V = 3; // Two's Complement Overflow Flag
N = 2; // Negative Flag
Z = 1; // Zero Flag
C = 0; // Carry Flag
// ICR
ICS1 = 2; // Interrupt Sense Control 1 bits
ISC0 = 0; // Interrupt Sense Control 0 bits
// MCUCS
PLUPB = 7; // Pull-up Enable Port B
SE = 5; // Sleep Enable
SM = 4; // Sleep Mode
WDRF = 3; // Watchdog Reset Flag
EXTRF = 1; // External Reset Flag
PORF = 0; // Power-On Reset Flag
// ACSR
ACD = 7; // Analog Comparator Disable
ACO = 5; // Analog Comparator Output
ACI = 4; // Analog Comparator Interrupt Flag
ACIE = 3; // Analog Comparator Interrupt Enable
ACIS = 0; // Analog Comparator Interrupt Mode Select bits
// ICR
TOIE0 = 4; // Timer/Counter0 Overflow Interrupt Enable
// IFR
TOV0 = 4; // Timer/Counter0 Overflow Flag
// TCCR0
FOV0 = 7; // Force Overflow
OOM0 = 3; // Overflow Output Mode, Bits
CS0 = 0; // Clock Select0 bits
// WDTCR
WDTOE = 4; // RW
WDE = 3; // Watch Dog Enable
WDP = 0; // Watch Dog Timer Prescaler bits
// ICR
INT = 6; // External Interrupt Request 1 Enable
LLIE = 5; // Low-level Input Interrupt Enable
// IFR
INTF = 6; // External Interrupt Flags
// MODCR
ONTIM4 = 7; // Modulation On-time Bit 4
OTIM3 = 6; // Modulation On-time Bit 3
ONTIM = 3; // Modulation On-time Bits
MCONF = 0; // Modulation Configuration Bits
implementation
{$define RELBRANCHES}
{$i avrcommon.inc}
procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt 0
procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt 1
procedure LOW_LEVEL_IO_PINS_ISR; external name 'LOW_LEVEL_IO_PINS_ISR'; // Interrupt 3 Low-level Input on Port B
procedure TIMER0_OVF_ISR; external name 'TIMER0_OVF_ISR'; // Interrupt 4 Timer/Counter0 Overflow
procedure ANA_COMP_ISR; external name 'ANA_COMP_ISR'; // Interrupt 5 Analog Comparator
procedure _FPC_start; assembler; nostackframe;
label
_start;
asm
.init
.globl _start
rjmp _start
rjmp INT0_ISR
rjmp INT1_ISR
rjmp LOW_LEVEL_IO_PINS_ISR
rjmp TIMER0_OVF_ISR
rjmp ANA_COMP_ISR
{$i start_noram.inc}
.weak INT0_ISR
.weak INT1_ISR
.weak LOW_LEVEL_IO_PINS_ISR
.weak TIMER0_OVF_ISR
.weak ANA_COMP_ISR
.set INT0_ISR, Default_IRQ_handler
.set INT1_ISR, Default_IRQ_handler
.set LOW_LEVEL_IO_PINS_ISR, Default_IRQ_handler
.set TIMER0_OVF_ISR, Default_IRQ_handler
.set ANA_COMP_ISR, Default_IRQ_handler
end;
end.