attiny10.pp 8.4 KB

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