attiny4.pp 7.5 KB

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