attiny28.pp 3.7 KB

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