attiny28.pp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. unit ATtiny28;
  2. interface
  3. var
  4. // PORTD
  5. PORTD : byte absolute $00+$32; // Port D Data Register
  6. DDRD : byte absolute $00+$31; // Port D Data Direction Register
  7. PIND : byte absolute $00+$30; // Port D Input Pins
  8. // CPU
  9. SREG : byte absolute $00+$3F; // Status Register
  10. ICR : byte absolute $00+$26; // Interrupt Control Register
  11. MCUCS : byte absolute $00+$27; // MCU Control and Status Register
  12. OSCCAL : byte absolute $00+$20; // Status Register
  13. // ANALOG_COMPARATOR
  14. ACSR : byte absolute $00+$28; // Analog Comparator Control And Status Register
  15. // TIMER_COUNTER_0
  16. IFR : byte absolute $00+$25; // Interrupt Flag register
  17. TCCR0 : byte absolute $00+$24; // Timer/Counter0 Control Register
  18. TCNT0 : byte absolute $00+$23; // Timer Counter 0
  19. // WATCHDOG
  20. WDTCR : byte absolute $00+$21; // Watchdog Timer Control Register
  21. // EXTERNAL_INTERRUPT
  22. // PORTA
  23. PORTA : byte absolute $00+$3B; // Port A Data Register
  24. PACR : byte absolute $00+$3A; // Port A Control Register
  25. PINA : byte absolute $00+$39; // Port A Input Pins
  26. // PORTB
  27. PINB : byte absolute $00+$36; // Port B Input Pins
  28. // MODULATOR
  29. MODCR : byte absolute $00+$22; // Modulation Control Register
  30. const
  31. // SREG
  32. I = 7; // Global Interrupt Enable
  33. T = 6; // Bit Copy Storage
  34. H = 5; // Half Carry Flag
  35. S = 4; // Sign Bit
  36. V = 3; // Two's Complement Overflow Flag
  37. N = 2; // Negative Flag
  38. Z = 1; // Zero Flag
  39. C = 0; // Carry Flag
  40. // ICR
  41. ICS1 = 2; // Interrupt Sense Control 1 bits
  42. ISC0 = 0; // Interrupt Sense Control 0 bits
  43. // MCUCS
  44. PLUPB = 7; // Pull-up Enable Port B
  45. SE = 5; // Sleep Enable
  46. SM = 4; // Sleep Mode
  47. WDRF = 3; // Watchdog Reset Flag
  48. EXTRF = 1; // External Reset Flag
  49. PORF = 0; // Power-On Reset Flag
  50. // ACSR
  51. ACD = 7; // Analog Comparator Disable
  52. ACO = 5; // Analog Comparator Output
  53. ACI = 4; // Analog Comparator Interrupt Flag
  54. ACIE = 3; // Analog Comparator Interrupt Enable
  55. ACIS = 0; // Analog Comparator Interrupt Mode Select bits
  56. // ICR
  57. TOIE0 = 4; // Timer/Counter0 Overflow Interrupt Enable
  58. // IFR
  59. TOV0 = 4; // Timer/Counter0 Overflow Flag
  60. // TCCR0
  61. FOV0 = 7; // Force Overflow
  62. OOM0 = 3; // Overflow Output Mode, Bits
  63. CS0 = 0; // Clock Select0 bits
  64. // WDTCR
  65. WDTOE = 4; // RW
  66. WDE = 3; // Watch Dog Enable
  67. WDP = 0; // Watch Dog Timer Prescaler bits
  68. // ICR
  69. INT = 6; // External Interrupt Request 1 Enable
  70. LLIE = 5; // Low-level Input Interrupt Enable
  71. // IFR
  72. INTF = 6; // External Interrupt Flags
  73. // MODCR
  74. ONTIM4 = 7; // Modulation On-time Bit 4
  75. OTIM3 = 6; // Modulation On-time Bit 3
  76. ONTIM = 3; // Modulation On-time Bits
  77. MCONF = 0; // Modulation Configuration Bits
  78. implementation
  79. {$define RELBRANCHES}
  80. {$i avrcommon.inc}
  81. procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt 0
  82. procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt 1
  83. procedure LOW_LEVEL_IO_PINS_ISR; external name 'LOW_LEVEL_IO_PINS_ISR'; // Interrupt 3 Low-level Input on Port B
  84. procedure TIMER0_OVF_ISR; external name 'TIMER0_OVF_ISR'; // Interrupt 4 Timer/Counter0 Overflow
  85. procedure ANA_COMP_ISR; external name 'ANA_COMP_ISR'; // Interrupt 5 Analog Comparator
  86. procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  87. asm
  88. rjmp __dtors_end
  89. rjmp INT0_ISR
  90. rjmp INT1_ISR
  91. rjmp LOW_LEVEL_IO_PINS_ISR
  92. rjmp TIMER0_OVF_ISR
  93. rjmp ANA_COMP_ISR
  94. .weak INT0_ISR
  95. .weak INT1_ISR
  96. .weak LOW_LEVEL_IO_PINS_ISR
  97. .weak TIMER0_OVF_ISR
  98. .weak ANA_COMP_ISR
  99. .set INT0_ISR, Default_IRQ_handler
  100. .set INT1_ISR, Default_IRQ_handler
  101. .set LOW_LEVEL_IO_PINS_ISR, Default_IRQ_handler
  102. .set TIMER0_OVF_ISR, Default_IRQ_handler
  103. .set ANA_COMP_ISR, Default_IRQ_handler
  104. end;
  105. end.