attiny102.pp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. unit ATtiny102;
  2. interface
  3. var
  4. PINA: byte absolute $00; // Input Pins, Port A
  5. DDRA: byte absolute $01; // Data Direction Register, Port A
  6. PORTA: byte absolute $02; // Port A Data register
  7. PUEA: byte absolute $03; // Pull-up Enable Control Register for PORTA
  8. PINB: byte absolute $04; // Input Pins, Port B
  9. DDRB: byte absolute $05; // Data Direction Register, Port B
  10. PORTB: byte absolute $06; // Port B Data register
  11. PUEB: byte absolute $07; // Pull-up Enable Control Register for PORTB
  12. UDR: byte absolute $08; // USART I/O Data Register
  13. UBRR: word absolute $09; // USART Baud Rate Register Bytes
  14. UBRRL: byte absolute $09; // USART Baud Rate Register Bytes
  15. UBRRH: byte absolute $0A; // USART Baud Rate Register Bytes;
  16. UCSRD: byte absolute $0B; // USART Control and Status Register D
  17. UCSRC: byte absolute $0C; // USART Control and Status Register C
  18. UCSRB: byte absolute $0D; // USART Control and Status Register B
  19. UCSRA: byte absolute $0E; // USART Control and Status Register A
  20. PCMSK0: byte absolute $0F; // Pin Change Mask Register 0
  21. PCMSK1: byte absolute $10; // Pin Change Mask Register 1
  22. PCIFR: byte absolute $11; // Pin Change Interrupt Flag Register
  23. PCICR: byte absolute $12; // Pin Change Interrupt Control Register
  24. EIMSK: byte absolute $13; // External Interrupt Mask register
  25. EIFR: byte absolute $14; // External Interrupt Flag register
  26. EICRA: byte absolute $15; // External Interrupt Control Register A
  27. PORTCR: byte absolute $16; // Port Control Register
  28. DIDR0: byte absolute $17;
  29. ADCL: byte absolute $19; // ADC Data Register Low
  30. ADCH: byte absolute $1A; // ADC Data Register High
  31. ADMUX: byte absolute $1B; // The ADC multiplexer Selection Register
  32. ADCSRB: byte absolute $1C; // The ADC Control and Status register B
  33. ADCSRA: byte absolute $1D; // The ADC Control and Status register A
  34. ACSRB: byte absolute $1E; // Analog Comparator Control And Status Register B
  35. ACSRA: byte absolute $1F; // Analog Comparator Control And Status Register A
  36. ICR0: word absolute $22; // Input Capture Register Bytes
  37. ICR0L: byte absolute $22; // Input Capture Register Bytes
  38. ICR0H: byte absolute $23; // Input Capture Register Bytes;
  39. OCR0B: word absolute $24; // Timer/Counter0 Output Compare Register B
  40. OCR0BL: byte absolute $24; // Timer/Counter0 Output Compare Register B
  41. OCR0BH: byte absolute $25; // Timer/Counter0 Output Compare Register B ;
  42. OCR0A: word absolute $26; // Timer/Counter 0 Output Compare Register A
  43. OCR0AL: byte absolute $26; // Timer/Counter 0 Output Compare Register A
  44. OCR0AH: byte absolute $27; // Timer/Counter 0 Output Compare Register A ;
  45. TCNT0: word absolute $28; // Timer/Counter0
  46. TCNT0L: byte absolute $28; // Timer/Counter0
  47. TCNT0H: byte absolute $29; // Timer/Counter0 ;
  48. TIFR0: byte absolute $2A; // Overflow Interrupt Enable
  49. TIMSK0: byte absolute $2B; // Timer Interrupt Mask Register 0
  50. TCCR0C: byte absolute $2C; // Timer/Counter 0 Control Register C
  51. TCCR0B: byte absolute $2D; // Timer/Counter 0 Control Register B
  52. TCCR0A: byte absolute $2E; // Timer/Counter 0 Control Register A
  53. GTCCR: byte absolute $2F; // General Timer/Counter Control Register
  54. WDTCSR: byte absolute $31; // Watchdog Timer Control and Status Register
  55. NVMCSR: byte absolute $32; // Non-Volatile Memory Control and Status Register
  56. NVMCMD: byte absolute $33; // Non-Volatile Memory Command
  57. VLMCSR: byte absolute $34; // Vcc Level Monitoring Control and Status Register
  58. PRR: byte absolute $35; // Power Reduction Register
  59. CLKPSR: byte absolute $36; // Clock Prescale Register
  60. CLKMSR: byte absolute $37; // Clock Main Settings Register
  61. OSCCAL: byte absolute $39; // Oscillator Calibration Value
  62. SMCR: byte absolute $3A; // Sleep Mode Control Register
  63. RSTFLR: byte absolute $3B; // Reset Flag Register
  64. CCP: byte absolute $3C; // Configuration Change Protection
  65. SP: word absolute $3D; // Stack Pointer
  66. SPL: byte absolute $3D; // Stack Pointer
  67. SPH: byte absolute $3E; // Stack Pointer ;
  68. SREG: byte absolute $3F; // Status Register
  69. const
  70. // Port A Data register
  71. PA0 = $00;
  72. PA1 = $01;
  73. PA2 = $02;
  74. // Port B Data register
  75. PB1 = $01;
  76. PB2 = $02;
  77. PB3 = $03;
  78. // USART Control and Status Register D
  79. SFDE = $05;
  80. RXS = $06;
  81. RXSIE = $07;
  82. // USART Control and Status Register C
  83. UCPOL = $00;
  84. UCSZ0 = $01; // Character Size
  85. UCSZ1 = $02; // Character Size
  86. USBS = $03;
  87. UPM0 = $04; // Parity Mode Bits
  88. UPM1 = $05; // Parity Mode Bits
  89. UMSEL0 = $06; // USART Mode Select
  90. UMSEL1 = $07; // USART Mode Select
  91. // USART Control and Status Register B
  92. TXB8 = $00;
  93. RXB8 = $01;
  94. UCSZ2 = $02;
  95. TXEN = $03;
  96. RXEN = $04;
  97. UDRIE = $05;
  98. TXCIE = $06;
  99. RXCIE = $07;
  100. // USART Control and Status Register A
  101. MPCM = $00;
  102. U2X = $01;
  103. UPE = $02;
  104. DOR = $03;
  105. FE = $04;
  106. UDRE = $05;
  107. TXC = $06;
  108. RXC = $07;
  109. // Pin Change Mask Register 0
  110. PCINT0 = $00;
  111. PCINT1 = $01;
  112. PCINT2 = $02;
  113. PCINT3 = $03;
  114. PCINT4 = $04;
  115. PCINT5 = $05;
  116. PCINT6 = $06;
  117. PCINT7 = $07;
  118. // Pin Change Mask Register 1
  119. PCINT8 = $00;
  120. PCINT9 = $01;
  121. PCINT10 = $02;
  122. PCINT11 = $03;
  123. // Pin Change Interrupt Flag Register
  124. PCIF0 = $00;
  125. PCIF1 = $01;
  126. // Pin Change Interrupt Control Register
  127. PCIE0 = $00;
  128. PCIE1 = $01;
  129. // External Interrupt Mask register
  130. INT0 = $00;
  131. // External Interrupt Flag register
  132. INTF0 = $00;
  133. // External Interrupt Control Register A
  134. ISC00 = $00;
  135. ISC01 = $01;
  136. // Port Control Register
  137. BBMA = $00;
  138. BBMB = $01;
  139. ADC0D = $00;
  140. AIN0D = $00;
  141. ADC1D = $01;
  142. AIN1D = $01;
  143. ADC2D = $02;
  144. ADC3D = $03;
  145. ADC4D = $04;
  146. ADC5D = $05;
  147. ADC6D = $06;
  148. ADC7D = $07;
  149. // The ADC multiplexer Selection Register
  150. MUX0 = $00; // Analog Channel Selection Bits
  151. MUX1 = $01; // Analog Channel Selection Bits
  152. MUX2 = $02; // Analog Channel Selection Bits
  153. REFS0 = $06; // Analog Reference voltage Selection Bits
  154. REFS1 = $07; // Analog Reference voltage Selection Bits
  155. // The ADC Control and Status register B
  156. ADTS0 = $00; // ADC Auto Trigger Source bits
  157. ADTS1 = $01; // ADC Auto Trigger Source bits
  158. ADTS2 = $02; // ADC Auto Trigger Source bits
  159. ADLAR = $07;
  160. // The ADC Control and Status register A
  161. ADPS0 = $00; // ADC Prescaler Select Bits
  162. ADPS1 = $01; // ADC Prescaler Select Bits
  163. ADPS2 = $02; // ADC Prescaler Select Bits
  164. ADIE = $03;
  165. ADIF = $04;
  166. ADATE = $05;
  167. ADSC = $06;
  168. ADEN = $07;
  169. // Analog Comparator Control And Status Register B
  170. ACPMUX = $00;
  171. ACOE = $01;
  172. // Analog Comparator Control And Status Register A
  173. ACIS0 = $00; // Analog Comparator Interrupt Mode Select bits
  174. ACIS1 = $01; // Analog Comparator Interrupt Mode Select bits
  175. ACIC = $02;
  176. ACIE = $03;
  177. ACI = $04;
  178. ACO = $05;
  179. ACBG = $06;
  180. ACD = $07;
  181. // Overflow Interrupt Enable
  182. TOV0 = $00;
  183. OCF0A = $01;
  184. OCF0B = $02;
  185. ICF0 = $05;
  186. // Timer Interrupt Mask Register 0
  187. TOIE0 = $00;
  188. OCIE0A = $01;
  189. OCIE0B = $02;
  190. ICIE0 = $05;
  191. // Timer/Counter 0 Control Register C
  192. FOC0B = $06;
  193. FOC0A = $07;
  194. // Timer/Counter 0 Control Register B
  195. CS00 = $00; // Clock Select
  196. CS01 = $01; // Clock Select
  197. CS02 = $02; // Clock Select
  198. ICES0 = $06;
  199. ICNC0 = $07;
  200. // Timer/Counter 0 Control Register A
  201. WGM00 = $00; // Waveform Generation Mode
  202. WGM01 = $01; // Waveform Generation Mode
  203. COM0B0 = $04; // Compare Output Mode for Channel B bits
  204. COM0B1 = $05; // Compare Output Mode for Channel B bits
  205. COM0A0 = $06; // Compare Output Mode for Channel A bits
  206. COM0A1 = $07; // Compare Output Mode for Channel A bits
  207. // General Timer/Counter Control Register
  208. PSR = $00;
  209. REMAP = $01;
  210. TSM = $07;
  211. // Watchdog Timer Control and Status Register
  212. WDE = $03;
  213. WDP0 = $00; // Watchdog Timer Prescaler Bits
  214. WDP1 = $01; // Watchdog Timer Prescaler Bits
  215. WDP2 = $02; // Watchdog Timer Prescaler Bits
  216. WDP3 = $05; // Watchdog Timer Prescaler Bits
  217. WDIE = $06;
  218. WDIF = $07;
  219. // Non-Volatile Memory Control and Status Register
  220. NVMBSY = $07;
  221. // Vcc Level Monitoring Control and Status Register
  222. VLM0 = $00; // Trigger Level of Voltage Level Monitor bits
  223. VLM1 = $01; // Trigger Level of Voltage Level Monitor bits
  224. VLM2 = $02; // Trigger Level of Voltage Level Monitor bits
  225. VLMIE = $06;
  226. VLMF = $07;
  227. // Power Reduction Register
  228. PRTIM0 = $00;
  229. PRADC = $01;
  230. PRUSART = $02;
  231. // Clock Prescale Register
  232. CLKPS0 = $00; // Clock Prescaler Select Bits
  233. CLKPS1 = $01; // Clock Prescaler Select Bits
  234. CLKPS2 = $02; // Clock Prescaler Select Bits
  235. CLKPS3 = $03; // Clock Prescaler Select Bits
  236. // Clock Main Settings Register
  237. CLKMS0 = $00; // Clock Main Select Bits
  238. CLKMS1 = $01; // Clock Main Select Bits
  239. // Sleep Mode Control Register
  240. SE = $00;
  241. SM0 = $01; // Sleep Mode Select Bits
  242. SM1 = $02; // Sleep Mode Select Bits
  243. SM2 = $03; // Sleep Mode Select Bits
  244. // Reset Flag Register
  245. PORF = $00;
  246. EXTRF = $01;
  247. WDRF = $03;
  248. // Configuration Change Protection
  249. CCP0 = $00; // CCP signature
  250. CCP1 = $01; // CCP signature
  251. CCP2 = $02; // CCP signature
  252. CCP3 = $03; // CCP signature
  253. CCP4 = $04; // CCP signature
  254. CCP5 = $05; // CCP signature
  255. CCP6 = $06; // CCP signature
  256. CCP7 = $07; // CCP signature
  257. // Status Register
  258. C = $00;
  259. Z = $01;
  260. N = $02;
  261. V = $03;
  262. S = $04;
  263. H = $05;
  264. T = $06;
  265. I = $07;
  266. implementation
  267. {$define RELBRANCHES}
  268. {$i avrcommon.inc}
  269. procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
  270. procedure PCINT0_ISR; external name 'PCINT0_ISR'; // Interrupt 2 Pin Change Interrupt Request 0
  271. procedure PCINT1_ISR; external name 'PCINT1_ISR'; // Interrupt 3 Pin Change Interrupt Request 1
  272. procedure TIM0_CAPT_ISR; external name 'TIM0_CAPT_ISR'; // Interrupt 4 Timer/Counter0 Input Capture
  273. procedure TIM0_OVF_ISR; external name 'TIM0_OVF_ISR'; // Interrupt 5 Timer/Counter0 Overflow
  274. procedure TIM0_COMPA_ISR; external name 'TIM0_COMPA_ISR'; // Interrupt 6 Timer/Counter Compare Match A
  275. procedure TIM0_COMPB_ISR; external name 'TIM0_COMPB_ISR'; // Interrupt 7 Timer/Counter Compare Match B
  276. procedure ANA_COMP_ISR; external name 'ANA_COMP_ISR'; // Interrupt 8 Analog Comparator
  277. procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 9 Watchdog Time-out
  278. procedure VLM_ISR; external name 'VLM_ISR'; // Interrupt 10 Vcc Voltage Level Monitor
  279. procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 11 ADC Conversion complete
  280. procedure USART_RXS_ISR; external name 'USART_RXS_ISR'; // Interrupt 12 USART RX Start
  281. procedure USART_RXC_ISR; external name 'USART_RXC_ISR'; // Interrupt 13 USART RX Complete
  282. procedure USART_DRE_ISR; external name 'USART_DRE_ISR'; // Interrupt 14 USART Data register empty
  283. procedure USART_TXC_ISR; external name 'USART_TXC_ISR'; // Interrupt 15 USART Tx Complete
  284. procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  285. asm
  286. rjmp __dtors_end
  287. rjmp INT0_ISR
  288. rjmp PCINT0_ISR
  289. rjmp PCINT1_ISR
  290. rjmp TIM0_CAPT_ISR
  291. rjmp TIM0_OVF_ISR
  292. rjmp TIM0_COMPA_ISR
  293. rjmp TIM0_COMPB_ISR
  294. rjmp ANA_COMP_ISR
  295. rjmp WDT_ISR
  296. rjmp VLM_ISR
  297. rjmp ADC_ISR
  298. rjmp USART_RXS_ISR
  299. rjmp USART_RXC_ISR
  300. rjmp USART_DRE_ISR
  301. rjmp USART_TXC_ISR
  302. .weak INT0_ISR
  303. .weak PCINT0_ISR
  304. .weak PCINT1_ISR
  305. .weak TIM0_CAPT_ISR
  306. .weak TIM0_OVF_ISR
  307. .weak TIM0_COMPA_ISR
  308. .weak TIM0_COMPB_ISR
  309. .weak ANA_COMP_ISR
  310. .weak WDT_ISR
  311. .weak VLM_ISR
  312. .weak ADC_ISR
  313. .weak USART_RXS_ISR
  314. .weak USART_RXC_ISR
  315. .weak USART_DRE_ISR
  316. .weak USART_TXC_ISR
  317. .set INT0_ISR, Default_IRQ_handler
  318. .set PCINT0_ISR, Default_IRQ_handler
  319. .set PCINT1_ISR, Default_IRQ_handler
  320. .set TIM0_CAPT_ISR, Default_IRQ_handler
  321. .set TIM0_OVF_ISR, Default_IRQ_handler
  322. .set TIM0_COMPA_ISR, Default_IRQ_handler
  323. .set TIM0_COMPB_ISR, Default_IRQ_handler
  324. .set ANA_COMP_ISR, Default_IRQ_handler
  325. .set WDT_ISR, Default_IRQ_handler
  326. .set VLM_ISR, Default_IRQ_handler
  327. .set ADC_ISR, Default_IRQ_handler
  328. .set USART_RXS_ISR, Default_IRQ_handler
  329. .set USART_RXC_ISR, Default_IRQ_handler
  330. .set USART_DRE_ISR, Default_IRQ_handler
  331. .set USART_TXC_ISR, Default_IRQ_handler
  332. end;
  333. end.