mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-18 17:38:28 +02:00
185 lines
6.0 KiB
ObjectPascal
185 lines
6.0 KiB
ObjectPascal
unit ATtiny15;
|
|
|
|
interface
|
|
|
|
var
|
|
ADC: word absolute $04; // ADC Data Register Bytes
|
|
ADCL: byte absolute $04; // ADC Data Register Bytes
|
|
ADCH: byte absolute $05; // ADC Data Register Bytes;
|
|
ADCSR: byte absolute $06; // The ADC Control and Status register
|
|
ADMUX: byte absolute $07; // The ADC multiplexer Selection Register
|
|
ACSR: byte absolute $08; // Analog Comparator Control And Status Register
|
|
PINB: byte absolute $16; // Input Pins, Port B
|
|
DDRB: byte absolute $17; // Data Direction Register, Port B
|
|
PORTB: byte absolute $18; // Data Register, Port B
|
|
EECR: byte absolute $1C; // EEPROM Control Register
|
|
EEDR: byte absolute $1D; // EEPROM Data Register
|
|
EEAR: byte absolute $1E; // EEPROM Read/Write Access
|
|
WDTCR: byte absolute $21; // Watchdog Timer Control Register
|
|
SFIOR: byte absolute $2C; // Special Function IO Register
|
|
OCR1B: byte absolute $2D; // Output Compare Register
|
|
OCR1A: byte absolute $2E; // Output Compare Register
|
|
TCNT1: byte absolute $2F; // Timer/Counter Register
|
|
TCCR1: byte absolute $30; // Timer/Counter Control Register
|
|
OSCCAL: byte absolute $31; // Status Register
|
|
TCNT0: byte absolute $32; // Timer Counter 0
|
|
TCCR0: byte absolute $33; // Timer/Counter0 Control Register
|
|
MCUSR: byte absolute $34; // MCU Status register
|
|
MCUCR: byte absolute $35; // MCU Control Register
|
|
TIFR: byte absolute $38; // Timer/Counter Interrupt Flag Register
|
|
TIMSK: byte absolute $39; // Timer/Counter Interrupt Mask Register
|
|
GIFR: byte absolute $3A; // General Interrupt Flag register
|
|
GIMSK: byte absolute $3B; // General Interrupt Mask Register
|
|
SREG: byte absolute $3F; // Status Register
|
|
|
|
const
|
|
// The ADC Control and Status register
|
|
ADPS0 = $00; // ADC Prescaler Select Bits
|
|
ADPS1 = $01; // ADC Prescaler Select Bits
|
|
ADPS2 = $02; // ADC Prescaler Select Bits
|
|
ADIE = $03;
|
|
ADIF = $04;
|
|
ADFR = $05;
|
|
ADSC = $06;
|
|
ADEN = $07;
|
|
// The ADC multiplexer Selection Register
|
|
MUX0 = $00; // Analog Channel and Gain Selection Bits
|
|
MUX1 = $01; // Analog Channel and Gain Selection Bits
|
|
MUX2 = $02; // Analog Channel and Gain Selection Bits
|
|
ADLAR = $05;
|
|
REFS0 = $06; // Reference Selection Bits
|
|
REFS1 = $07; // Reference Selection Bits
|
|
// Analog Comparator Control And Status Register
|
|
ACIS0 = $00; // Analog Comparator Interrupt Mode Select bits
|
|
ACIS1 = $01; // Analog Comparator Interrupt Mode Select bits
|
|
ACIE = $03;
|
|
ACI = $04;
|
|
ACO = $05;
|
|
ACBG = $06;
|
|
ACD = $07;
|
|
// Data Register, Port B
|
|
PB0 = $00;
|
|
PB1 = $01;
|
|
PB2 = $02;
|
|
PB3 = $03;
|
|
PB4 = $04;
|
|
// EEPROM Control Register
|
|
EERE = $00;
|
|
EEWE = $01;
|
|
EEMWE = $02;
|
|
EERIE = $03;
|
|
// Watchdog Timer Control Register
|
|
WDP0 = $00; // Watch Dog Timer Prescaler bits
|
|
WDP1 = $01; // Watch Dog Timer Prescaler bits
|
|
WDP2 = $02; // Watch Dog Timer Prescaler bits
|
|
WDE = $03;
|
|
WDTOE = $04;
|
|
// Special Function IO Register
|
|
PSR0 = $00;
|
|
PSR1 = $01;
|
|
FOC1A = $02;
|
|
// Timer/Counter Control Register
|
|
CS10 = $00; // Clock Select Bits
|
|
CS11 = $01; // Clock Select Bits
|
|
CS12 = $02; // Clock Select Bits
|
|
CS13 = $03; // Clock Select Bits
|
|
COM1A0 = $04; // Compare Output Mode, Bits
|
|
COM1A1 = $05; // Compare Output Mode, Bits
|
|
PWM1 = $06;
|
|
CTC1 = $07;
|
|
// Status Register
|
|
OSCCAL0 = $00; // Oscillator Calibration
|
|
OSCCAL1 = $01; // Oscillator Calibration
|
|
OSCCAL2 = $02; // Oscillator Calibration
|
|
OSCCAL3 = $03; // Oscillator Calibration
|
|
OSCCAL4 = $04; // Oscillator Calibration
|
|
OSCCAL5 = $05; // Oscillator Calibration
|
|
OSCCAL6 = $06; // Oscillator Calibration
|
|
OSCCAL7 = $07; // Oscillator Calibration
|
|
// Timer/Counter0 Control Register
|
|
CS00 = $00;
|
|
CS01 = $01;
|
|
CS02 = $02;
|
|
// MCU Status register
|
|
PORF = $00;
|
|
EXTRF = $01;
|
|
BORF = $02;
|
|
WDRF = $03;
|
|
// MCU Control Register
|
|
ISC00 = $00; // Interrupt Sense Control 0 bits
|
|
ISC01 = $01; // Interrupt Sense Control 0 bits
|
|
SM0 = $03; // Sleep Mode Select Bits
|
|
SM1 = $04; // Sleep Mode Select Bits
|
|
SE = $05;
|
|
PUD = $06;
|
|
// Timer/Counter Interrupt Flag Register
|
|
TOV0 = $01;
|
|
TOV1 = $02;
|
|
OCF1A = $06;
|
|
// Timer/Counter Interrupt Mask Register
|
|
TOIE0 = $01;
|
|
TOIE1 = $02;
|
|
OCIE1A = $06;
|
|
// General Interrupt Flag register
|
|
PCIF = $05;
|
|
INTF0 = $06;
|
|
// General Interrupt Mask Register
|
|
PCIE = $05;
|
|
INT0 = $06;
|
|
// Status Register
|
|
C = $00;
|
|
Z = $01;
|
|
N = $02;
|
|
V = $03;
|
|
S = $04;
|
|
H = $05;
|
|
T = $06;
|
|
I = $07;
|
|
|
|
|
|
implementation
|
|
{$define RELBRANCHES}
|
|
{$i avrcommon.inc}
|
|
|
|
procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt 0
|
|
procedure IO_PINS_ISR; external name 'IO_PINS_ISR'; // Interrupt 2 External Interrupt Request 0
|
|
procedure TIMER1_COMP_ISR; external name 'TIMER1_COMP_ISR'; // Interrupt 3 Timer/Counter1 Compare Match
|
|
procedure TIMER1_OVF_ISR; external name 'TIMER1_OVF_ISR'; // Interrupt 4 Timer/Counter1 Overflow
|
|
procedure TIMER0_OVF_ISR; external name 'TIMER0_OVF_ISR'; // Interrupt 5 Timer/Counter0 Overflow
|
|
procedure EE_RDY_ISR; external name 'EE_RDY_ISR'; // Interrupt 6 EEPROM Ready
|
|
procedure ANA_COMP_ISR; external name 'ANA_COMP_ISR'; // Interrupt 7 Analog Comparator
|
|
procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 8 ADC Conversion Ready
|
|
|
|
procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
|
|
asm
|
|
rjmp __dtors_end
|
|
rjmp INT0_ISR
|
|
rjmp IO_PINS_ISR
|
|
rjmp TIMER1_COMP_ISR
|
|
rjmp TIMER1_OVF_ISR
|
|
rjmp TIMER0_OVF_ISR
|
|
rjmp EE_RDY_ISR
|
|
rjmp ANA_COMP_ISR
|
|
rjmp ADC_ISR
|
|
|
|
.weak INT0_ISR
|
|
.weak IO_PINS_ISR
|
|
.weak TIMER1_COMP_ISR
|
|
.weak TIMER1_OVF_ISR
|
|
.weak TIMER0_OVF_ISR
|
|
.weak EE_RDY_ISR
|
|
.weak ANA_COMP_ISR
|
|
.weak ADC_ISR
|
|
|
|
.set INT0_ISR, Default_IRQ_handler
|
|
.set IO_PINS_ISR, Default_IRQ_handler
|
|
.set TIMER1_COMP_ISR, Default_IRQ_handler
|
|
.set TIMER1_OVF_ISR, Default_IRQ_handler
|
|
.set TIMER0_OVF_ISR, Default_IRQ_handler
|
|
.set EE_RDY_ISR, Default_IRQ_handler
|
|
.set ANA_COMP_ISR, Default_IRQ_handler
|
|
.set ADC_ISR, Default_IRQ_handler
|
|
end;
|
|
|
|
end.
|