atmega16.pp 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. {******************************************************************************
  2. Register definitions and startup code for ATMEL ATmega16
  3. ******************************************************************************}
  4. unit atmega16;
  5. {$goto on}
  6. interface
  7. const
  8. _SFR_OFFSET = $20; //indirect addressing
  9. var
  10. TWBR : byte absolute $00+_SFR_OFFSET;
  11. TWSR : byte absolute $01+_SFR_OFFSET;
  12. TWAR : byte absolute $02+_SFR_OFFSET;
  13. TWDR : byte absolute $03+_SFR_OFFSET;
  14. ADCW : word absolute $04+_SFR_OFFSET;
  15. ADC : word absolute $04+_SFR_OFFSET;
  16. ADCL : byte absolute $04+_SFR_OFFSET;
  17. ADCH : byte absolute $05+_SFR_OFFSET;
  18. ADCSRA : byte absolute $06+_SFR_OFFSET;
  19. ADMUX : byte absolute $07+_SFR_OFFSET;
  20. ACSR : byte absolute $08+_SFR_OFFSET;
  21. UBRRL : byte absolute $09+_SFR_OFFSET;
  22. UCSRB : byte absolute $0A+_SFR_OFFSET;
  23. UCSRA : byte absolute $0B+_SFR_OFFSET;
  24. UDR : byte absolute $0C+_SFR_OFFSET;
  25. SPCR : byte absolute $0D+_SFR_OFFSET;
  26. SPSR : byte absolute $0E+_SFR_OFFSET;
  27. SPDR : byte absolute $0F+_SFR_OFFSET;
  28. PIND : byte absolute $10+_SFR_OFFSET;
  29. DDRD : byte absolute $11+_SFR_OFFSET;
  30. PORTD : byte absolute $12+_SFR_OFFSET;
  31. PINC : byte absolute $13+_SFR_OFFSET;
  32. DDRC : byte absolute $14+_SFR_OFFSET;
  33. PORTC : byte absolute $15+_SFR_OFFSET;
  34. PINB : byte absolute $16+_SFR_OFFSET;
  35. DDRB : byte absolute $17+_SFR_OFFSET;
  36. PORTB : byte absolute $18+_SFR_OFFSET;
  37. PINA : byte absolute $19+_SFR_OFFSET;
  38. DDRA : byte absolute $1A+_SFR_OFFSET;
  39. PORTA : byte absolute $1B+_SFR_OFFSET;
  40. EECR : byte absolute $1C+_SFR_OFFSET;
  41. EEDR : byte absolute $1D+_SFR_OFFSET;
  42. EEAR : word absolute $1E+_SFR_OFFSET;
  43. EEARL : byte absolute $1E+_SFR_OFFSET;
  44. EEARH : byte absolute $1F+_SFR_OFFSET;
  45. UCSRC : byte absolute $20+_SFR_OFFSET;
  46. UBRRH : byte absolute $20+_SFR_OFFSET;
  47. WDTCR : byte absolute $21+_SFR_OFFSET;
  48. ASSR : byte absolute $22+_SFR_OFFSET;
  49. OCR2 : byte absolute $23+_SFR_OFFSET;
  50. TCNT2 : byte absolute $24+_SFR_OFFSET;
  51. TCCR2 : byte absolute $25+_SFR_OFFSET;
  52. ICR1 : word absolute $26+_SFR_OFFSET;
  53. ICR1L : byte absolute $26+_SFR_OFFSET;
  54. ICR1H : byte absolute $27+_SFR_OFFSET;
  55. OCR1B : word absolute $28+_SFR_OFFSET;
  56. OCR1BL : byte absolute $28+_SFR_OFFSET;
  57. OCR1BH : byte absolute $29+_SFR_OFFSET;
  58. OCR1A : word absolute $2A+_SFR_OFFSET;
  59. OCR1AL : byte absolute $2A+_SFR_OFFSET;
  60. OCR1AH : byte absolute $2B+_SFR_OFFSET;
  61. TCNT1 : word absolute $2C+_SFR_OFFSET;
  62. TCNT1L : byte absolute $2C+_SFR_OFFSET;
  63. TCNT1H : byte absolute $2D+_SFR_OFFSET;
  64. TCCR1B : byte absolute $2E+_SFR_OFFSET;
  65. TCCR1A : byte absolute $2F+_SFR_OFFSET;
  66. SFIOR : byte absolute $30+_SFR_OFFSET;
  67. OSCCAL : byte absolute $31+_SFR_OFFSET;
  68. TCNT0 : byte absolute $32+_SFR_OFFSET;
  69. TCCR0 : byte absolute $33+_SFR_OFFSET;
  70. MCUSR : byte absolute $34+_SFR_OFFSET;
  71. MCUCSR : byte absolute $34+_SFR_OFFSET;
  72. MCUCR : byte absolute $35+_SFR_OFFSET;
  73. TWCR : byte absolute $36+_SFR_OFFSET;
  74. SPMCR : byte absolute $37+_SFR_OFFSET;
  75. TIFR : byte absolute $38+_SFR_OFFSET;
  76. TIMSK : byte absolute $39+_SFR_OFFSET;
  77. GIFR : byte absolute $3A+_SFR_OFFSET;
  78. GICR : byte absolute $3B+_SFR_OFFSET;
  79. OCR0 : byte absolute $3C+_SFR_OFFSET;
  80. SP : word absolute $3D+_SFR_OFFSET;
  81. SPL : byte absolute $3D+_SFR_OFFSET;
  82. SPH : byte absolute $3E+_SFR_OFFSET;
  83. SREG : byte absolute $3F+_SFR_OFFSET;
  84. const
  85. TWINT = 7;
  86. TWEA = 6;
  87. TWSTA = 5;
  88. TWSTO = 4;
  89. TWWC = 3;
  90. TWEN = 2;
  91. TWIE = 0;
  92. TWA6 = 7;
  93. TWA5 = 6;
  94. TWA4 = 5;
  95. TWA3 = 4;
  96. TWA2 = 3;
  97. TWA1 = 2;
  98. TWA0 = 1;
  99. TWGCE = 0;
  100. TWS7 = 7;
  101. TWS6 = 6;
  102. TWS5 = 5;
  103. TWS4 = 4;
  104. TWS3 = 3;
  105. TWPS1 = 1;
  106. TWPS0 = 0;
  107. XDIVEN = 7;
  108. XDIV6 = 6;
  109. XDIV5 = 5;
  110. XDIV4 = 4;
  111. XDIV3 = 3;
  112. XDIV2 = 2;
  113. XDIV1 = 1;
  114. XDIV0 = 0;
  115. ISC11 = 3;
  116. ISC10 = 2;
  117. ISC01 = 1;
  118. ISC00 = 0;
  119. INT1 = 7;
  120. INT0 = 6;
  121. INTF1 = 7;
  122. INTF0 = 6;
  123. OCIE2 = 7;
  124. TOIE2 = 6;
  125. TICIE1 = 5;
  126. OCIE1A = 4;
  127. OCIE1B = 3;
  128. TOIE1 = 2;
  129. TOIE0 = 0;
  130. OCF2 = 7;
  131. TOV2 = 6;
  132. ICF1 = 5;
  133. OCF1A = 4;
  134. OCF1B = 3;
  135. TOV1 = 2;
  136. TOV0 = 0;
  137. SPMIE = 7;
  138. RWWSB = 6;
  139. RWWSRE = 4;
  140. BLBSET = 3;
  141. PGWRT = 2;
  142. PGERS = 1;
  143. SPMEN = 0;
  144. COM1A1 = 7;
  145. COM1A0 = 6;
  146. COM1B1 = 5;
  147. COM1B0 = 4;
  148. COM1C1 = 3;
  149. COM1C0 = 2;
  150. WGM11 = 1;
  151. WGM10 = 0;
  152. ICNC = 7;
  153. ICES = 6;
  154. WGMB3 = 4;
  155. WGMB2 = 3;
  156. CSB2 = 2;
  157. CSB1 = 1;
  158. CSB0 = 0;
  159. ICNC1 = 7;
  160. ICES1 = 6;
  161. WGM13 = 4;
  162. WGM12 = 3;
  163. CS12 = 2;
  164. CS11 = 1;
  165. CS10 = 0;
  166. FOC2 = 7;
  167. WGM20 = 6;
  168. COM21 = 5;
  169. COM20 = 4;
  170. WGM21 = 3;
  171. CS22 = 2;
  172. CS21 = 1;
  173. CS20 = 0;
  174. SPIF = 7;
  175. WCOL = 6;
  176. SPI2X = 0;
  177. SPIE = 7;
  178. SPE = 6;
  179. DORD = 5;
  180. MSTR = 4;
  181. CPOL = 3;
  182. CPHA = 2;
  183. SPR1 = 1;
  184. SPR0 = 0;
  185. URSEL = 7;
  186. UMSEL = 6;
  187. UPM1 = 5;
  188. UPM0 = 4;
  189. USBS = 3;
  190. UCSZ1 = 2;
  191. UCSZ0 = 1;
  192. UCPOL = 0;
  193. RXC = 7;
  194. TXC = 6;
  195. UDRE = 5;
  196. FE = 4;
  197. DOR = 3;
  198. UPE = 2;
  199. U2X = 1;
  200. MPCM = 0;
  201. RXCIE = 7;
  202. TXCIE = 6;
  203. UDRIE = 5;
  204. RXEN = 4;
  205. TXEN = 3;
  206. UCSZ = 2;
  207. UCSZ2 = 2;
  208. RXB8 = 1;
  209. TXB8 = 0;
  210. ACD = 7;
  211. ACBG = 6;
  212. ACO = 5;
  213. ACI = 4;
  214. ACIE = 3;
  215. ACIC = 2;
  216. ACIS1 = 1;
  217. ACIS0 = 0;
  218. ADEN = 7;
  219. ADSC = 6;
  220. ADFR = 5;
  221. ADIF = 4;
  222. ADIE = 3;
  223. ADPS2 = 2;
  224. ADPS1 = 1;
  225. ADPS0 = 0;
  226. REFS1 = 7;
  227. REFS0 = 6;
  228. ADLAR = 5;
  229. MUX3 = 3;
  230. MUX2 = 2;
  231. MUX1 = 1;
  232. MUX0 = 0;
  233. implementation
  234. {$i avrcommon.inc}
  235. procedure Int00Handler; external name 'Int00Handler';
  236. procedure Int01Handler; external name 'Int01Handler';
  237. procedure Int02Handler; external name 'Int02Handler';
  238. procedure Int03Handler; external name 'Int03Handler';
  239. procedure Int04Handler; external name 'Int04Handler';
  240. procedure Int05Handler; external name 'Int05Handler';
  241. procedure Int06Handler; external name 'Int06Handler';
  242. procedure Int07Handler; external name 'Int07Handler';
  243. procedure Int08Handler; external name 'Int08Handler';
  244. procedure Int09Handler; external name 'Int09Handler';
  245. procedure Int10Handler; external name 'Int10Handler';
  246. procedure Int11Handler; external name 'Int11Handler';
  247. procedure Int12Handler; external name 'Int12Handler';
  248. procedure Int13Handler; external name 'Int13Handler';
  249. procedure Int14Handler; external name 'Int14Handler';
  250. procedure Int15Handler; external name 'Int15Handler';
  251. procedure Int16Handler; external name 'Int16Handler';
  252. procedure Int17Handler; external name 'Int17Handler';
  253. procedure Int18Handler; external name 'Int18Handler';
  254. procedure Int19Handler; external name 'Int19Handler';
  255. procedure _FPC_start; assembler; nostackframe;
  256. label
  257. _start;
  258. asm
  259. .init
  260. .globl _start
  261. jmp _start
  262. jmp Int00Handler
  263. jmp Int01Handler
  264. jmp Int02Handler
  265. jmp Int03Handler
  266. jmp Int04Handler
  267. jmp Int05Handler
  268. jmp Int06Handler
  269. jmp Int07Handler
  270. jmp Int08Handler
  271. jmp Int09Handler
  272. jmp Int10Handler
  273. jmp Int11Handler
  274. jmp Int12Handler
  275. jmp Int13Handler
  276. jmp Int14Handler
  277. jmp Int15Handler
  278. jmp Int16Handler
  279. jmp Int17Handler
  280. jmp Int18Handler
  281. jmp Int19Handler
  282. {
  283. all ATMEL MCUs use the same startup code, the details are
  284. governed by defines
  285. }
  286. {$i start.inc}
  287. .weak Int00Handler
  288. .weak Int01Handler
  289. .weak Int02Handler
  290. .weak Int03Handler
  291. .weak Int04Handler
  292. .weak Int05Handler
  293. .weak Int06Handler
  294. .weak Int07Handler
  295. .weak Int08Handler
  296. .weak Int09Handler
  297. .weak Int10Handler
  298. .weak Int11Handler
  299. .weak Int12Handler
  300. .weak Int13Handler
  301. .weak Int14Handler
  302. .weak Int15Handler
  303. .weak Int16Handler
  304. .weak Int17Handler
  305. .weak Int18Handler
  306. .weak Int19Handler
  307. .set Int00Handler, Default_IRQ_handler
  308. .set Int01Handler, Default_IRQ_handler
  309. .set Int02Handler, Default_IRQ_handler
  310. .set Int03Handler, Default_IRQ_handler
  311. .set Int04Handler, Default_IRQ_handler
  312. .set Int05Handler, Default_IRQ_handler
  313. .set Int06Handler, Default_IRQ_handler
  314. .set Int07Handler, Default_IRQ_handler
  315. .set Int08Handler, Default_IRQ_handler
  316. .set Int09Handler, Default_IRQ_handler
  317. .set Int10Handler, Default_IRQ_handler
  318. .set Int11Handler, Default_IRQ_handler
  319. .set Int12Handler, Default_IRQ_handler
  320. .set Int13Handler, Default_IRQ_handler
  321. .set Int14Handler, Default_IRQ_handler
  322. .set Int15Handler, Default_IRQ_handler
  323. .set Int16Handler, Default_IRQ_handler
  324. .set Int17Handler, Default_IRQ_handler
  325. .set Int18Handler, Default_IRQ_handler
  326. .set Int19Handler, Default_IRQ_handler
  327. end;
  328. end.