attiny9.pp 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. unit ATtiny9;
  2. {$goto on}
  3. interface
  4. var
  5. // ANALOG_COMPARATOR
  6. ACSR : byte absolute $00+$1F; // Analog Comparator Control And Status Register
  7. DIDR0 : byte absolute $00+$17; //
  8. // CPU
  9. CCP : byte absolute $00+$3C; // Configuration Change Protection
  10. SP : word absolute $00+$3D; // Stack Pointer
  11. SPL : byte absolute $00+$3D; // Stack Pointer
  12. SPH : byte absolute $00+$3D+1; // Stack Pointer
  13. SREG : byte absolute $00+$3F; // Status Register
  14. CLKMSR : byte absolute $00+$37; // Clock Main Settings Register
  15. CLKPSR : byte absolute $00+$36; // Clock Prescale Register
  16. OSCCAL : byte absolute $00+$39; // Oscillator Calibration Value
  17. SMCR : byte absolute $00+$3A; // Sleep Mode Control Register
  18. PRR : byte absolute $00+$35; // Power Reduction Register
  19. VLMCSR : byte absolute $00+$34; // Vcc Level Monitoring Control and Status Register
  20. RSTFLR : byte absolute $00+$3B; // Reset Flag Register
  21. NVMCSR : byte absolute $00+$32; // Non-Volatile Memory Control and Status Register
  22. NVMCMD : byte absolute $00+$33; // Non-Volatile Memory Command
  23. // PORTB
  24. PORTCR : byte absolute $00+$0C; // Port Control Register
  25. PUEB : byte absolute $00+$03; // Pull-up Enable Control Register
  26. DDRB : byte absolute $00+$01; // Data Direction Register, Port B
  27. PINB : byte absolute $00+$00; // Port B Data register
  28. PORTB : byte absolute $00+$02; // Input Pins, Port B
  29. // EXTERNAL_INTERRUPT
  30. EICRA : byte absolute $00+$15; // External Interrupt Control Register A
  31. EIMSK : byte absolute $00+$13; // External Interrupt Mask register
  32. EIFR : byte absolute $00+$14; // External Interrupt Flag register
  33. PCICR : byte absolute $00+$12; // Pin Change Interrupt Control Register
  34. PCIFR : byte absolute $00+$11; // Pin Change Interrupt Flag Register
  35. PCMSK : byte absolute $00+$10; // Pin Change Mask Register
  36. // TIMER_COUNTER_0
  37. TCCR0A : byte absolute $00+$2E; // Timer/Counter 0 Control Register A
  38. TCCR0B : byte absolute $00+$2D; // Timer/Counter 0 Control Register B
  39. TCCR0C : byte absolute $00+$2C; // Timer/Counter 0 Control Register C
  40. TCNT0 : word absolute $00+$28; // Timer/Counter0
  41. TCNT0L : byte absolute $00+$28; // Timer/Counter0
  42. TCNT0H : byte absolute $00+$28+1; // Timer/Counter0
  43. OCR0A : word absolute $00+$26; // Timer/Counter 0 Output Compare Register A
  44. OCR0AL : byte absolute $00+$26; // Timer/Counter 0 Output Compare Register A
  45. OCR0AH : byte absolute $00+$26+1; // Timer/Counter 0 Output Compare Register A
  46. OCR0B : word absolute $00+$24; // Timer/Counter0 Output Compare Register B
  47. OCR0BL : byte absolute $00+$24; // Timer/Counter0 Output Compare Register B
  48. OCR0BH : byte absolute $00+$24+1; // Timer/Counter0 Output Compare Register B
  49. ICR0 : word absolute $00+$22; // Input Capture Register Bytes
  50. ICR0L : byte absolute $00+$22; // Input Capture Register Bytes
  51. ICR0H : byte absolute $00+$22+1; // Input Capture Register Bytes
  52. TIMSK0 : byte absolute $00+$2B; // Timer Interrupt Mask Register 0
  53. TIFR0 : byte absolute $00+$2A; // Overflow Interrupt Enable
  54. GTCCR : byte absolute $00+$2F; // General Timer/Counter Control Register
  55. // WATCHDOG
  56. WDTCSR : byte absolute $00+$31; // Watchdog Timer Control and Status Register
  57. const
  58. // ACSR
  59. ACD = 7; // Analog Comparator Disable
  60. ACO = 5; // Analog Compare Output
  61. ACI = 4; // Analog Comparator Interrupt Flag
  62. ACIE = 3; // Analog Comparator Interrupt Enable
  63. ACIC = 2; // Analog Comparator Input Capture Enable
  64. ACIS = 0; // Analog Comparator Interrupt Mode Select bits
  65. // DIDR0
  66. AIN1D = 1; // AIN1 Digital Input Disable
  67. AIN0D = 0; // AIN0 Digital Input Disable
  68. // SREG
  69. I = 7; // Global Interrupt Enable
  70. T = 6; // Bit Copy Storage
  71. H = 5; // Half Carry Flag
  72. S = 4; // Sign Bit
  73. V = 3; // Two's Complement Overflow Flag
  74. N = 2; // Negative Flag
  75. Z = 1; // Zero Flag
  76. C = 0; // Carry Flag
  77. // CLKMSR
  78. CLKMS = 0; // Clock Main Select Bits
  79. // CLKPSR
  80. CLKPS = 0; // Clock Prescaler Select Bits
  81. // SMCR
  82. SM = 1; // Sleep Mode Select Bits
  83. SE = 0; // Sleep Enable
  84. // PRR
  85. PRADC = 1; // Power Reduction ADC
  86. PRTIM0 = 0; // Power Reduction Timer/Counter0
  87. // VLMCSR
  88. VLMF = 7; // VLM Flag
  89. VLMIE = 6; // VLM Interrupt Enable
  90. VLM = 0; // Trigger Level of Voltage Level Monitor bits
  91. // RSTFLR
  92. WDRF = 3; // Watchdog Reset Flag
  93. EXTRF = 1; // External Reset Flag
  94. PORF = 0; // Power-on Reset Flag
  95. // NVMCSR
  96. NVMBSY = 7; // Non-Volatile Memory Busy
  97. // PORTCR
  98. BBMB = 1; // Break-Before-Make Mode Enable
  99. // EICRA
  100. ISC01 = 1; // Interrupt Sense Control 0 Bit 1
  101. ISC00 = 0; // Interrupt Sense Control 0 Bit 0
  102. // EIMSK
  103. INT0 = 0; // External Interrupt Request 0 Enable
  104. // EIFR
  105. INTF0 = 0; // External Interrupt Flag 0
  106. // PCICR
  107. PCIE0 = 0; // Pin Change Interrupt Enable 0
  108. // PCIFR
  109. PCIF0 = 0; // Pin Change Interrupt Flag 0
  110. // PCMSK
  111. PCINT = 0; // Pin Change Enable Masks
  112. // TCCR0A
  113. COM0A = 6; // Compare Output Mode for Channel A bits
  114. COM0B = 4; // Compare Output Mode for Channel B bits
  115. WGM0 = 0; // Waveform Generation Mode
  116. // TCCR0B
  117. ICNC0 = 7; // Input Capture Noise Canceler
  118. ICES0 = 6; // Input Capture Edge Select
  119. CS0 = 0; // Clock Select
  120. // TCCR0C
  121. FOC0A = 7; // Force Output Compare for Channel A
  122. FOC0B = 6; // Force Output Compare for Channel B
  123. // TIMSK0
  124. ICIE0 = 5; // Input Capture Interrupt Enable
  125. OCIE0B = 2; // Output Compare B Match Interrupt Enable
  126. OCIE0A = 1; // Output Compare A Match Interrupt Enable
  127. TOIE0 = 0; // Overflow Interrupt Enable
  128. // TIFR0
  129. ICF0 = 5; // Input Capture Flag
  130. OCF0B = 2; // Timer Output Compare Flag 0B
  131. OCF0A = 1; // Timer Output Compare Flag 0A
  132. TOV0 = 0; // Timer Overflow Flag
  133. // GTCCR
  134. TSM = 7; // Timer Synchronization Mode
  135. PSR = 0; // Prescaler Reset
  136. // WDTCSR
  137. WDIF = 7; // Watchdog Timer Interrupt Flag
  138. WDIE = 6; // Watchdog Timer Interrupt Enable
  139. WDP = 0; // Watchdog Timer Prescaler Bits
  140. WDE = 3; // Watch Dog Enable
  141. implementation
  142. {$define RELBRANCHES}
  143. {$i avrcommon.inc}
  144. procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
  145. procedure PCINT0_ISR; external name 'PCINT0_ISR'; // Interrupt 2 Pin Change Interrupt Request 0
  146. procedure TIM0_CAPT_ISR; external name 'TIM0_CAPT_ISR'; // Interrupt 3 Timer/Counter0 Input Capture
  147. procedure TIM0_OVF_ISR; external name 'TIM0_OVF_ISR'; // Interrupt 4 Timer/Counter0 Overflow
  148. procedure TIM0_COMPA_ISR; external name 'TIM0_COMPA_ISR'; // Interrupt 5 Timer/Counter Compare Match A
  149. procedure TIM0_COMPB_ISR; external name 'TIM0_COMPB_ISR'; // Interrupt 6 Timer/Counter Compare Match B
  150. procedure ANA_COMP_ISR; external name 'ANA_COMP_ISR'; // Interrupt 7 Analog Comparator
  151. procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 8 Watchdog Time-out
  152. procedure VLM_ISR; external name 'VLM_ISR'; // Interrupt 9 Vcc Voltage Level Monitor
  153. procedure _FPC_start; assembler; nostackframe;
  154. label
  155. _start;
  156. asm
  157. .init
  158. .globl _start
  159. rjmp _start
  160. rjmp INT0_ISR
  161. rjmp PCINT0_ISR
  162. rjmp TIM0_CAPT_ISR
  163. rjmp TIM0_OVF_ISR
  164. rjmp TIM0_COMPA_ISR
  165. rjmp TIM0_COMPB_ISR
  166. rjmp ANA_COMP_ISR
  167. rjmp WDT_ISR
  168. rjmp VLM_ISR
  169. {$i start.inc}
  170. .weak INT0_ISR
  171. .weak PCINT0_ISR
  172. .weak TIM0_CAPT_ISR
  173. .weak TIM0_OVF_ISR
  174. .weak TIM0_COMPA_ISR
  175. .weak TIM0_COMPB_ISR
  176. .weak ANA_COMP_ISR
  177. .weak WDT_ISR
  178. .weak VLM_ISR
  179. .set INT0_ISR, Default_IRQ_handler
  180. .set PCINT0_ISR, Default_IRQ_handler
  181. .set TIM0_CAPT_ISR, Default_IRQ_handler
  182. .set TIM0_OVF_ISR, Default_IRQ_handler
  183. .set TIM0_COMPA_ISR, Default_IRQ_handler
  184. .set TIM0_COMPB_ISR, Default_IRQ_handler
  185. .set ANA_COMP_ISR, Default_IRQ_handler
  186. .set WDT_ISR, Default_IRQ_handler
  187. .set VLM_ISR, Default_IRQ_handler
  188. end;
  189. end.