atmega328pb.pp 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817
  1. unit ATmega328PB;
  2. interface
  3. var
  4. PINB: byte absolute $23; // Port B Input Pins
  5. DDRB: byte absolute $24; // Port B Data Direction Register
  6. PORTB: byte absolute $25; // Port B Data Register
  7. PINC: byte absolute $26; // Port C Input Pins
  8. DDRC: byte absolute $27; // Port C Data Direction Register
  9. PORTC: byte absolute $28; // Port C Data Register
  10. PIND: byte absolute $29; // Port D Input Pins
  11. DDRD: byte absolute $2A; // Port D Data Direction Register
  12. PORTD: byte absolute $2B; // Port D Data Register
  13. PINE: byte absolute $2C; // Port E Input Pins
  14. DDRE: byte absolute $2D; // Port E Data Direction Register
  15. PORTE: byte absolute $2E; // Port E Data Register
  16. TIFR0: byte absolute $35; // Timer/Counter0 Interrupt Flag register
  17. TIFR1: byte absolute $36; // Timer/Counter Interrupt Flag register
  18. TIFR2: byte absolute $37; // Timer/Counter Interrupt Flag Register
  19. TIFR3: byte absolute $38; // Timer/Counter3 Interrupt Flag register
  20. TIFR4: byte absolute $39; // Timer/Counter4 Interrupt Flag register
  21. PCIFR: byte absolute $3B; // Pin Change Interrupt Flag Register
  22. EIFR: byte absolute $3C; // External Interrupt Flag Register
  23. EIMSK: byte absolute $3D; // External Interrupt Mask Register
  24. GPIOR0: byte absolute $3E; // General Purpose I/O Register 0
  25. EECR: byte absolute $3F; // EEPROM Control Register
  26. EEDR: byte absolute $40; // EEPROM Data Register
  27. EEAR: word absolute $41; // EEPROM Address Register Bytes
  28. EEARL: byte absolute $41; // EEPROM Address Register Bytes
  29. EEARH: byte absolute $42; // EEPROM Address Register Bytes;
  30. GTCCR: byte absolute $43; // General Timer/Counter Control Register
  31. TCCR0A: byte absolute $44; // Timer/Counter Control Register A
  32. TCCR0B: byte absolute $45; // Timer/Counter Control Register B
  33. TCNT0: byte absolute $46; // Timer/Counter0
  34. OCR0A: byte absolute $47; // Timer/Counter0 Output Compare Register
  35. OCR0B: byte absolute $48; // Timer/Counter0 Output Compare Register
  36. GPIOR1: byte absolute $4A; // General Purpose I/O Register 1
  37. GPIOR2: byte absolute $4B; // General Purpose I/O Register 2
  38. SPCR0: byte absolute $4C; // SPI Control Register
  39. SPSR0: byte absolute $4D; // SPI Status Register
  40. SPDR0: byte absolute $4E; // SPI Data Register
  41. ACSRB: byte absolute $4F; // Analog Comparator Control And Status Register-B
  42. ACSR: byte absolute $50; // Analog Comparator Control And Status Register
  43. SMCR: byte absolute $53; // Sleep Mode Control Register
  44. MCUSR: byte absolute $54; // MCU Status Register
  45. MCUCR: byte absolute $55; // MCU Control Register
  46. SPMCSR: byte absolute $57; // Store Program Memory Control and Status Register
  47. SP: word absolute $5D; // Stack Pointer
  48. SPL: byte absolute $5D; // Stack Pointer
  49. SPH: byte absolute $5E; // Stack Pointer;
  50. SREG: byte absolute $5F; // Status Register
  51. WDTCSR: byte absolute $60; // Watchdog Timer Control Register
  52. CLKPR: byte absolute $61; // Clock Prescale Register
  53. XFDCSR: byte absolute $62; // XOSC Failure Detection Control and Status Register
  54. PRR0: byte absolute $64; // Power Reduction Register 0
  55. PRR1: byte absolute $65; // Power Reduction Register 1
  56. OSCCAL: byte absolute $66; // Oscillator Calibration Value
  57. PCICR: byte absolute $68; // Pin Change Interrupt Control Register
  58. EICRA: byte absolute $69; // External Interrupt Control Register
  59. PCMSK0: byte absolute $6B; // Pin Change Mask Register 0
  60. PCMSK1: byte absolute $6C; // Pin Change Mask Register 1
  61. PCMSK2: byte absolute $6D; // Pin Change Mask Register 2
  62. TIMSK0: byte absolute $6E; // Timer/Counter0 Interrupt Mask Register
  63. TIMSK1: byte absolute $6F; // Timer/Counter Interrupt Mask Register
  64. TIMSK2: byte absolute $70; // Timer/Counter Interrupt Mask register
  65. TIMSK3: byte absolute $71; // Timer/Counter Interrupt Mask Register
  66. TIMSK4: byte absolute $72; // Timer/Counter4 Interrupt Mask Register
  67. PCMSK3: byte absolute $73; // Pin Change Mask Register 3
  68. ADC: word absolute $78; // ADC Data Register Bytes
  69. ADCL: byte absolute $78; // ADC Data Register Bytes
  70. ADCH: byte absolute $79; // ADC Data Register Bytes;
  71. ADCSRA: byte absolute $7A; // The ADC Control and Status register A
  72. ADCSRB: byte absolute $7B; // The ADC Control and Status register B
  73. ADMUX: byte absolute $7C; // The ADC multiplexer Selection Register
  74. DIDR0: byte absolute $7E; // Digital Input Disable Register
  75. DIDR1: byte absolute $7F; // Digital Input Disable Register 1
  76. TCCR1A: byte absolute $80; // Timer/Counter1 Control Register A
  77. TCCR1B: byte absolute $81; // Timer/Counter1 Control Register B
  78. TCCR1C: byte absolute $82; // Timer/Counter1 Control Register C
  79. TCNT1: word absolute $84; // Timer/Counter1 Bytes
  80. TCNT1L: byte absolute $84; // Timer/Counter1 Bytes
  81. TCNT1H: byte absolute $85; // Timer/Counter1 Bytes;
  82. ICR1: word absolute $86; // Timer/Counter1 Input Capture Register Bytes
  83. ICR1L: byte absolute $86; // Timer/Counter1 Input Capture Register Bytes
  84. ICR1H: byte absolute $87; // Timer/Counter1 Input Capture Register Bytes;
  85. OCR1A: word absolute $88; // Timer/Counter1 Output Compare Register Bytes
  86. OCR1AL: byte absolute $88; // Timer/Counter1 Output Compare Register Bytes
  87. OCR1AH: byte absolute $89; // Timer/Counter1 Output Compare Register Bytes;
  88. OCR1B: word absolute $8A; // Timer/Counter1 Output Compare Register Bytes
  89. OCR1BL: byte absolute $8A; // Timer/Counter1 Output Compare Register Bytes
  90. OCR1BH: byte absolute $8B; // Timer/Counter1 Output Compare Register Bytes;
  91. TCCR3A: byte absolute $90; // Timer/Counter3 Control Register A
  92. TCCR3B: byte absolute $91; // Timer/Counter3 Control Register B
  93. TCCR3C: byte absolute $92; // Timer/Counter3 Control Register C
  94. TCNT3: word absolute $94; // Timer/Counter3 Bytes
  95. TCNT3L: byte absolute $94; // Timer/Counter3 Bytes
  96. TCNT3H: byte absolute $95; // Timer/Counter3 Bytes;
  97. ICR3: word absolute $96; // Timer/Counter3 Input Capture Register Bytes
  98. ICR3L: byte absolute $96; // Timer/Counter3 Input Capture Register Bytes
  99. ICR3H: byte absolute $97; // Timer/Counter3 Input Capture Register Bytes;
  100. OCR3A: word absolute $98; // Timer/Counter3 Output Compare Register Bytes
  101. OCR3AL: byte absolute $98; // Timer/Counter3 Output Compare Register Bytes
  102. OCR3AH: byte absolute $99; // Timer/Counter3 Output Compare Register Bytes;
  103. OCR3B: word absolute $9A; // Timer/Counter3 Output Compare Register Bytes
  104. OCR3BL: byte absolute $9A; // Timer/Counter3 Output Compare Register Bytes
  105. OCR3BH: byte absolute $9B; // Timer/Counter3 Output Compare Register Bytes;
  106. TCCR4A: byte absolute $A0; // Timer/Counter4 Control Register A
  107. TCCR4B: byte absolute $A1; // Timer/Counter4 Control Register B
  108. TCCR4C: byte absolute $A2; // Timer/Counter4 Control Register C
  109. TCNT4: word absolute $A4; // Timer/Counter4 Bytes
  110. TCNT4L: byte absolute $A4; // Timer/Counter4 Bytes
  111. TCNT4H: byte absolute $A5; // Timer/Counter4 Bytes;
  112. ICR4: word absolute $A6; // Timer/Counter4 Input Capture Register Bytes
  113. ICR4L: byte absolute $A6; // Timer/Counter4 Input Capture Register Bytes
  114. ICR4H: byte absolute $A7; // Timer/Counter4 Input Capture Register Bytes;
  115. OCR4A: word absolute $A8; // Timer/Counter4 Output Compare Register Bytes
  116. OCR4AL: byte absolute $A8; // Timer/Counter4 Output Compare Register Bytes
  117. OCR4AH: byte absolute $A9; // Timer/Counter4 Output Compare Register Bytes;
  118. OCR4B: word absolute $AA; // Timer/Counter4 Output Compare Register Bytes
  119. OCR4BL: byte absolute $AA; // Timer/Counter4 Output Compare Register Bytes
  120. OCR4BH: byte absolute $AB; // Timer/Counter4 Output Compare Register Bytes;
  121. SPCR1: byte absolute $AC; // SPI Control Register
  122. SPSR1: byte absolute $AD; // SPI Status Register
  123. SPDR1: byte absolute $AE; // SPI Data Register
  124. TCCR2A: byte absolute $B0; // Timer/Counter2 Control Register A
  125. TCCR2B: byte absolute $B1; // Timer/Counter2 Control Register B
  126. TCNT2: byte absolute $B2; // Timer/Counter2
  127. OCR2A: byte absolute $B3; // Timer/Counter2 Output Compare Register A
  128. OCR2B: byte absolute $B4; // Timer/Counter2 Output Compare Register B
  129. ASSR: byte absolute $B6; // Asynchronous Status Register
  130. TWBR0: byte absolute $B8; // TWI Bit Rate register
  131. TWSR0: byte absolute $B9; // TWI Status Register
  132. TWAR0: byte absolute $BA; // TWI (Slave) Address register
  133. TWDR0: byte absolute $BB; // TWI Data register
  134. TWCR0: byte absolute $BC; // TWI Control Register
  135. TWAMR0: byte absolute $BD; // TWI (Slave) Address Mask Register
  136. UCSR0A: byte absolute $C0; // USART Control and Status Register A
  137. UCSR0B: byte absolute $C1; // USART Control and Status Register B
  138. UCSR0C: byte absolute $C2; // USART Control and Status Register C
  139. UCSR0D: byte absolute $C3; // USART Control and Status Register D
  140. UBRR0: word absolute $C4; // USART Baud Rate Register Bytes
  141. UBRR0L: byte absolute $C4; // USART Baud Rate Register Bytes
  142. UBRR0H: byte absolute $C5; // USART Baud Rate Register Bytes;
  143. UDR0: byte absolute $C6; // USART I/O Data Register 0
  144. UCSR1A: byte absolute $C8; // USART Control and Status Register A
  145. UCSR1B: byte absolute $C9; // USART Control and Status Register B
  146. UCSR1C: byte absolute $CA; // USART Control and Status Register C
  147. UCSR1D: byte absolute $CB; // USART Control and Status Register D
  148. UBRR1: word absolute $CC; // USART Baud Rate Register Bytes
  149. UBRR1L: byte absolute $CC; // USART Baud Rate Register Bytes
  150. UBRR1H: byte absolute $CD; // USART Baud Rate Register Bytes;
  151. UDR1: byte absolute $CE; // USART I/O Data Register
  152. TWBR1: byte absolute $D8; // TWI Bit Rate register
  153. TWSR1: byte absolute $D9; // TWI Status Register
  154. TWAR1: byte absolute $DA; // TWI (Slave) Address register
  155. TWDR1: byte absolute $DB; // TWI Data register
  156. TWCR1: byte absolute $DC; // TWI Control Register
  157. TWAMR1: byte absolute $DD; // TWI (Slave) Address Mask Register
  158. const
  159. // Port B Data Register
  160. PB0 = $00;
  161. PB1 = $01;
  162. PB2 = $02;
  163. PB3 = $03;
  164. PB4 = $04;
  165. PB5 = $05;
  166. PB6 = $06;
  167. PB7 = $07;
  168. // Port C Data Register
  169. PC0 = $00;
  170. PC1 = $01;
  171. PC2 = $02;
  172. PC3 = $03;
  173. PC4 = $04;
  174. PC5 = $05;
  175. PC6 = $06;
  176. // Port D Data Register
  177. PD0 = $00;
  178. PD1 = $01;
  179. PD2 = $02;
  180. PD3 = $03;
  181. PD4 = $04;
  182. PD5 = $05;
  183. PD6 = $06;
  184. PD7 = $07;
  185. // Port E Data Register
  186. PE0 = $00;
  187. PE1 = $01;
  188. PE2 = $02;
  189. PE3 = $03;
  190. // Timer/Counter0 Interrupt Flag register
  191. TOV0 = $00;
  192. OCF0A = $01;
  193. OCF0B = $02;
  194. // Timer/Counter Interrupt Flag register
  195. TOV1 = $00;
  196. OCF1A = $01;
  197. OCF1B = $02;
  198. ICF1 = $05;
  199. // Timer/Counter Interrupt Flag Register
  200. TOV2 = $00;
  201. OCF2A = $01;
  202. OCF2B = $02;
  203. // Timer/Counter3 Interrupt Flag register
  204. TOV3 = $00;
  205. OCF3A = $01;
  206. OCF3B = $02;
  207. ICF3 = $05;
  208. // Timer/Counter4 Interrupt Flag register
  209. TOV4 = $00;
  210. OCF4A = $01;
  211. OCF4B = $02;
  212. ICF4 = $05;
  213. // Pin Change Interrupt Flag Register
  214. PCIF0 = $00; // Pin Change Interrupt Flags
  215. PCIF1 = $01; // Pin Change Interrupt Flags
  216. PCIF2 = $02; // Pin Change Interrupt Flags
  217. PCIF3 = $03; // Pin Change Interrupt Flags
  218. // External Interrupt Flag Register
  219. INTF0 = $00; // External Interrupt Flags
  220. INTF1 = $01; // External Interrupt Flags
  221. // External Interrupt Mask Register
  222. INT0 = $00; // External Interrupt Request 1 Enable
  223. INT1 = $01; // External Interrupt Request 1 Enable
  224. // EEPROM Control Register
  225. EERE = $00;
  226. EEPE = $01;
  227. EEMPE = $02;
  228. EERIE = $03;
  229. EEPM0 = $04; // EEPROM Programming Mode Bits
  230. EEPM1 = $05; // EEPROM Programming Mode Bits
  231. // General Timer/Counter Control Register
  232. PSRSYNC = $00;
  233. PSRASY = $01;
  234. TSM = $07;
  235. // Timer/Counter Control Register A
  236. WGM00 = $00; // Waveform Generation Mode
  237. WGM01 = $01; // Waveform Generation Mode
  238. COM0B0 = $04; // Compare Output Mode, Fast PWM
  239. COM0B1 = $05; // Compare Output Mode, Fast PWM
  240. COM0A0 = $06; // Compare Output Mode, Phase Correct PWM Mode
  241. COM0A1 = $07; // Compare Output Mode, Phase Correct PWM Mode
  242. // Timer/Counter Control Register B
  243. CS00 = $00; // Clock Select
  244. CS01 = $01; // Clock Select
  245. CS02 = $02; // Clock Select
  246. WGM02 = $03;
  247. FOC0B = $06;
  248. FOC0A = $07;
  249. // SPI Control Register
  250. SPR0 = $00; // SPI Clock Rate Selects
  251. SPR1 = $01; // SPI Clock Rate Selects
  252. CPHA = $02;
  253. CPOL = $03;
  254. MSTR = $04;
  255. DORD = $05;
  256. SPE = $06;
  257. SPIE = $07;
  258. // SPI Status Register
  259. SPI2X = $00;
  260. WCOL = $06;
  261. SPIF = $07;
  262. // Analog Comparator Control And Status Register-B
  263. ACOE = $00;
  264. // Analog Comparator Control And Status Register
  265. ACIS0 = $00; // Analog Comparator Interrupt Mode Select bits
  266. ACIS1 = $01; // Analog Comparator Interrupt Mode Select bits
  267. ACIC = $02;
  268. ACIE = $03;
  269. ACI = $04;
  270. ACO = $05;
  271. ACBG = $06;
  272. ACD = $07;
  273. // Sleep Mode Control Register
  274. SE = $00;
  275. SM0 = $01; // Sleep Mode Select Bits
  276. SM1 = $02; // Sleep Mode Select Bits
  277. SM2 = $03; // Sleep Mode Select Bits
  278. // MCU Status Register
  279. PORF = $00;
  280. EXTRF = $01;
  281. BORF = $02;
  282. WDRF = $03;
  283. // MCU Control Register
  284. IVCE = $00;
  285. IVSEL = $01;
  286. PUD = $04;
  287. BODSE = $05;
  288. BODS = $06;
  289. // Store Program Memory Control and Status Register
  290. SPMEN = $00;
  291. PGERS = $01;
  292. PGWRT = $02;
  293. BLBSET = $03;
  294. RWWSRE = $04;
  295. SIGRD = $05;
  296. RWWSB = $06;
  297. SPMIE = $07;
  298. // Status Register
  299. C = $00;
  300. Z = $01;
  301. N = $02;
  302. V = $03;
  303. S = $04;
  304. H = $05;
  305. T = $06;
  306. I = $07;
  307. // Watchdog Timer Control Register
  308. WDE = $03;
  309. WDCE = $04;
  310. WDP0 = $00; // Watchdog Timer Prescaler Bits
  311. WDP1 = $01; // Watchdog Timer Prescaler Bits
  312. WDP2 = $02; // Watchdog Timer Prescaler Bits
  313. WDP3 = $05; // Watchdog Timer Prescaler Bits
  314. WDIE = $06;
  315. WDIF = $07;
  316. // Clock Prescale Register
  317. CLKPS0 = $00; // Clock Prescaler Select Bits
  318. CLKPS1 = $01; // Clock Prescaler Select Bits
  319. CLKPS2 = $02; // Clock Prescaler Select Bits
  320. CLKPS3 = $03; // Clock Prescaler Select Bits
  321. CLKPCE = $07;
  322. // XOSC Failure Detection Control and Status Register
  323. XFDIE = $00;
  324. XFDIF = $01;
  325. // Power Reduction Register 0
  326. PRADC = $00;
  327. PRUSART0 = $01;
  328. PRSPI0 = $02;
  329. PRTIM1 = $03;
  330. PRUSART1 = $04;
  331. PRTIM0 = $05;
  332. PRTIM2 = $06;
  333. PRTWI0 = $07;
  334. // Power Reduction Register 1
  335. PRTIM3 = $00;
  336. PRSPI1 = $02;
  337. PRTIM4 = $03;
  338. PRPTC = $04;
  339. PRTWI1 = $05;
  340. // Oscillator Calibration Value
  341. OSCCAL0 = $00; // Oscillator Calibration
  342. OSCCAL1 = $01; // Oscillator Calibration
  343. OSCCAL2 = $02; // Oscillator Calibration
  344. OSCCAL3 = $03; // Oscillator Calibration
  345. OSCCAL4 = $04; // Oscillator Calibration
  346. OSCCAL5 = $05; // Oscillator Calibration
  347. OSCCAL6 = $06; // Oscillator Calibration
  348. OSCCAL7 = $07; // Oscillator Calibration
  349. // Pin Change Interrupt Control Register
  350. PCIE0 = $00; // Pin Change Interrupt Enables
  351. PCIE1 = $01; // Pin Change Interrupt Enables
  352. PCIE2 = $02; // Pin Change Interrupt Enables
  353. PCIE3 = $03; // Pin Change Interrupt Enables
  354. // External Interrupt Control Register
  355. ISC00 = $00; // External Interrupt Sense Control 0 Bits
  356. ISC01 = $01; // External Interrupt Sense Control 0 Bits
  357. ISC10 = $02; // External Interrupt Sense Control 1 Bits
  358. ISC11 = $03; // External Interrupt Sense Control 1 Bits
  359. // Timer/Counter0 Interrupt Mask Register
  360. TOIE0 = $00;
  361. OCIE0A = $01;
  362. OCIE0B = $02;
  363. // Timer/Counter Interrupt Mask Register
  364. TOIE1 = $00;
  365. OCIE1A = $01;
  366. OCIE1B = $02;
  367. ICIE1 = $05;
  368. // Timer/Counter Interrupt Mask register
  369. TOIE2 = $00;
  370. OCIE2A = $01;
  371. OCIE2B = $02;
  372. // Timer/Counter Interrupt Mask Register
  373. TOIE3 = $00;
  374. OCIE3A = $01;
  375. OCIE3B = $02;
  376. ICIE3 = $05;
  377. // Timer/Counter4 Interrupt Mask Register
  378. TOIE4 = $00;
  379. OCIE4A = $01;
  380. OCIE4B = $02;
  381. ICIE4 = $05;
  382. // Pin Change Mask Register 3
  383. PCINT24 = $00; // Pin Change Enable Masks
  384. PCINT25 = $01; // Pin Change Enable Masks
  385. PCINT26 = $02; // Pin Change Enable Masks
  386. PCINT27 = $03; // Pin Change Enable Masks
  387. // The ADC Control and Status register A
  388. ADPS0 = $00; // ADC Prescaler Select Bits
  389. ADPS1 = $01; // ADC Prescaler Select Bits
  390. ADPS2 = $02; // ADC Prescaler Select Bits
  391. ADIE = $03;
  392. ADIF = $04;
  393. ADATE = $05;
  394. ADSC = $06;
  395. ADEN = $07;
  396. // The ADC Control and Status register B
  397. ADTS0 = $00; // ADC Auto Trigger Source bits
  398. ADTS1 = $01; // ADC Auto Trigger Source bits
  399. ADTS2 = $02; // ADC Auto Trigger Source bits
  400. ACME = $06;
  401. // The ADC multiplexer Selection Register
  402. MUX0 = $00; // Analog Channel Selection Bits
  403. MUX1 = $01; // Analog Channel Selection Bits
  404. MUX2 = $02; // Analog Channel Selection Bits
  405. MUX3 = $03; // Analog Channel Selection Bits
  406. ADLAR = $05;
  407. REFS0 = $06; // Reference Selection Bits
  408. REFS1 = $07; // Reference Selection Bits
  409. // Digital Input Disable Register
  410. ADC0D = $00;
  411. ADC1D = $01;
  412. ADC2D = $02;
  413. ADC3D = $03;
  414. ADC4D = $04;
  415. ADC5D = $05;
  416. // Digital Input Disable Register 1
  417. AIN0D = $00;
  418. AIN1D = $01;
  419. // Timer/Counter1 Control Register A
  420. WGM10 = $00; // Waveform Generation Mode
  421. WGM11 = $01; // Waveform Generation Mode
  422. COM1B0 = $04; // Compare Output Mode 1B, bits
  423. COM1B1 = $05; // Compare Output Mode 1B, bits
  424. COM1A0 = $06; // Compare Output Mode 1A, bits
  425. COM1A1 = $07; // Compare Output Mode 1A, bits
  426. // Timer/Counter1 Control Register B
  427. CS10 = $00; // Prescaler source of Timer/Counter 1
  428. CS11 = $01; // Prescaler source of Timer/Counter 1
  429. CS12 = $02; // Prescaler source of Timer/Counter 1
  430. ICES1 = $06;
  431. ICNC1 = $07;
  432. // Timer/Counter1 Control Register C
  433. FOC1B = $06;
  434. FOC1A = $07;
  435. // Timer/Counter3 Control Register A
  436. WGM30 = $00; // Waveform Genration Mode
  437. WGM31 = $01; // Waveform Genration Mode
  438. COM3B0 = $04; // Compare Output Mode bits
  439. COM3B1 = $05; // Compare Output Mode bits
  440. COM3A0 = $06; // Compare Output Mode bits
  441. COM3A1 = $07; // Compare Output Mode bits
  442. // Timer/Counter3 Control Register B
  443. CS30 = $00; // Clock Select bits
  444. CS31 = $01; // Clock Select bits
  445. CS32 = $02; // Clock Select bits
  446. WGM32 = $03;
  447. WGM33 = $04;
  448. ICES3 = $06;
  449. ICNC3 = $07;
  450. // Timer/Counter3 Control Register C
  451. FOC3B = $06;
  452. FOC3A = $07;
  453. // Timer/Counter4 Control Register A
  454. WGM40 = $00; // Waveform Generation Mode
  455. WGM41 = $01; // Waveform Generation Mode
  456. COM4B0 = $04; // Compare Output Mode bits
  457. COM4B1 = $05; // Compare Output Mode bits
  458. COM4A0 = $06; // Compare Output Mode bits
  459. COM4A1 = $07; // Compare Output Mode bits
  460. // Timer/Counter4 Control Register B
  461. CS40 = $00; // Clock Select bits
  462. CS41 = $01; // Clock Select bits
  463. CS42 = $02; // Clock Select bits
  464. WGM42 = $03;
  465. WGM43 = $04;
  466. ICES4 = $06;
  467. ICNC4 = $07;
  468. // Timer/Counter4 Control Register C
  469. FOC4B = $06;
  470. FOC4A = $07;
  471. // SPI Control Register
  472. SPR10 = $00; // SPI Clock Rate Selects
  473. SPR11 = $01; // SPI Clock Rate Selects
  474. CPHA1 = $02;
  475. CPOL1 = $03;
  476. MSTR1 = $04;
  477. DORD1 = $05;
  478. SPE1 = $06;
  479. SPIE1 = $07;
  480. // SPI Status Register
  481. SPI2X1 = $00;
  482. WCOL1 = $06;
  483. SPIF1 = $07;
  484. // Timer/Counter2 Control Register A
  485. WGM20 = $00; // Waveform Genration Mode
  486. WGM21 = $01; // Waveform Genration Mode
  487. COM2B0 = $04; // Compare Output Mode bits
  488. COM2B1 = $05; // Compare Output Mode bits
  489. COM2A0 = $06; // Compare Output Mode bits
  490. COM2A1 = $07; // Compare Output Mode bits
  491. // Timer/Counter2 Control Register B
  492. CS20 = $00; // Clock Select bits
  493. CS21 = $01; // Clock Select bits
  494. CS22 = $02; // Clock Select bits
  495. WGM22 = $03;
  496. FOC2B = $06;
  497. FOC2A = $07;
  498. // Asynchronous Status Register
  499. TCR2BUB = $00;
  500. TCR2AUB = $01;
  501. OCR2BUB = $02;
  502. OCR2AUB = $03;
  503. TCN2UB = $04;
  504. AS2 = $05;
  505. EXCLK = $06;
  506. // TWI Status Register
  507. TWPS0 = $00; // TWI Prescaler
  508. TWPS1 = $01; // TWI Prescaler
  509. TWS3 = $03; // TWI Status
  510. TWS4 = $04; // TWI Status
  511. TWS5 = $05; // TWI Status
  512. TWS6 = $06; // TWI Status
  513. TWS7 = $07; // TWI Status
  514. // TWI (Slave) Address register
  515. TWGCE = $00;
  516. TWA0 = $01; // TWI (Slave) Address register Bits
  517. TWA1 = $02; // TWI (Slave) Address register Bits
  518. TWA2 = $03; // TWI (Slave) Address register Bits
  519. TWA3 = $04; // TWI (Slave) Address register Bits
  520. TWA4 = $05; // TWI (Slave) Address register Bits
  521. TWA5 = $06; // TWI (Slave) Address register Bits
  522. TWA6 = $07; // TWI (Slave) Address register Bits
  523. // TWI Control Register
  524. TWIE = $00;
  525. TWEN = $02;
  526. TWWC = $03;
  527. TWSTO = $04;
  528. TWSTA = $05;
  529. TWEA = $06;
  530. TWINT = $07;
  531. // TWI (Slave) Address Mask Register
  532. TWAM0 = $01;
  533. TWAM1 = $02;
  534. TWAM2 = $03;
  535. TWAM3 = $04;
  536. TWAM4 = $05;
  537. TWAM5 = $06;
  538. TWAM6 = $07;
  539. // USART Control and Status Register A
  540. MPCM0 = $00;
  541. U2X0 = $01;
  542. UPE0 = $02;
  543. DOR0 = $03;
  544. FE0 = $04;
  545. UDRE0 = $05;
  546. TXC0 = $06;
  547. RXC0 = $07;
  548. // USART Control and Status Register B
  549. TXB80 = $00;
  550. RXB80 = $01;
  551. UCSZ02 = $02;
  552. TXEN0 = $03;
  553. RXEN0 = $04;
  554. UDRIE0 = $05;
  555. TXCIE0 = $06;
  556. RXCIE0 = $07;
  557. // USART Control and Status Register C
  558. UCPOL0 = $00;
  559. UCSZ00 = $01; // Character Size - together with UCSZ2 in UCSR0B
  560. UCSZ01 = $02; // Character Size - together with UCSZ2 in UCSR0B
  561. USBS0 = $03;
  562. UPM00 = $04; // Parity Mode Bits
  563. UPM01 = $05; // Parity Mode Bits
  564. UMSEL00 = $06; // USART Mode Select
  565. UMSEL01 = $07; // USART Mode Select
  566. // USART Control and Status Register D
  567. SFDE = $05;
  568. RXS = $06;
  569. RXSIE = $07;
  570. // USART Control and Status Register A
  571. MPCM1 = $00;
  572. U2X1 = $01;
  573. UPE1 = $02;
  574. DOR1 = $03;
  575. FE1 = $04;
  576. UDRE1 = $05;
  577. TXC1 = $06;
  578. RXC1 = $07;
  579. // USART Control and Status Register B
  580. TXB81 = $00;
  581. RXB81 = $01;
  582. UCSZ12 = $02;
  583. TXEN1 = $03;
  584. RXEN1 = $04;
  585. UDRIE1 = $05;
  586. TXCIE1 = $06;
  587. RXCIE1 = $07;
  588. // USART Control and Status Register C
  589. UCPOL1 = $00;
  590. UCSZ10 = $01; // Character Size - together with UCSZ12 in UCSR1B
  591. UCSZ11 = $02; // Character Size - together with UCSZ12 in UCSR1B
  592. USBS1 = $03;
  593. UPM10 = $04; // Parity Mode Bits
  594. UPM11 = $05; // Parity Mode Bits
  595. UMSEL10 = $06; // USART Mode Select
  596. UMSEL11 = $07; // USART Mode Select
  597. // USART Control and Status Register D
  598. SFDE1 = $05;
  599. RXS1 = $06;
  600. RXSIE1 = $07;
  601. // TWI Status Register
  602. TWPS10 = $00; // TWI Prescaler
  603. TWPS11 = $01; // TWI Prescaler
  604. TWS13 = $03; // TWI Status
  605. TWS14 = $04; // TWI Status
  606. TWS15 = $05; // TWI Status
  607. TWS16 = $06; // TWI Status
  608. TWS17 = $07; // TWI Status
  609. // TWI Control Register
  610. TWIE1 = $00;
  611. TWEN1 = $02;
  612. TWWC1 = $03;
  613. TWSTO1 = $04;
  614. TWSTA1 = $05;
  615. TWEA1 = $06;
  616. TWINT1 = $07;
  617. // TWI (Slave) Address Mask Register
  618. TWAM10 = $01;
  619. TWAM11 = $02;
  620. TWAM12 = $03;
  621. TWAM13 = $04;
  622. TWAM14 = $05;
  623. TWAM15 = $06;
  624. TWAM16 = $07;
  625. implementation
  626. {$i avrcommon.inc}
  627. procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 1 External Interrupt Request 0
  628. procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 2 External Interrupt Request 1
  629. procedure PCINT0_ISR; external name 'PCINT0_ISR'; // Interrupt 3 Pin Change Interrupt Request 0
  630. procedure PCINT1_ISR; external name 'PCINT1_ISR'; // Interrupt 4 Pin Change Interrupt Request 1
  631. procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 5 Pin Change Interrupt Request 2
  632. procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 6 Watchdog Time-out Interrupt
  633. procedure TIMER2_COMPA_ISR; external name 'TIMER2_COMPA_ISR'; // Interrupt 7 Timer/Counter2 Compare Match A
  634. procedure TIMER2_COMPB_ISR; external name 'TIMER2_COMPB_ISR'; // Interrupt 8 Timer/Counter2 Compare Match B
  635. procedure TIMER2_OVF_ISR; external name 'TIMER2_OVF_ISR'; // Interrupt 9 Timer/Counter2 Overflow
  636. procedure TIMER1_CAPT_ISR; external name 'TIMER1_CAPT_ISR'; // Interrupt 10 Timer/Counter1 Capture Event
  637. procedure TIMER1_COMPA_ISR; external name 'TIMER1_COMPA_ISR'; // Interrupt 11 Timer/Counter1 Compare Match A
  638. procedure TIMER1_COMPB_ISR; external name 'TIMER1_COMPB_ISR'; // Interrupt 12 Timer/Counter1 Compare Match B
  639. procedure TIMER1_OVF_ISR; external name 'TIMER1_OVF_ISR'; // Interrupt 13 Timer/Counter1 Overflow
  640. procedure TIMER0_COMPA_ISR; external name 'TIMER0_COMPA_ISR'; // Interrupt 14 TimerCounter0 Compare Match A
  641. procedure TIMER0_COMPB_ISR; external name 'TIMER0_COMPB_ISR'; // Interrupt 15 TimerCounter0 Compare Match B
  642. procedure TIMER0_OVF_ISR; external name 'TIMER0_OVF_ISR'; // Interrupt 16 Timer/Couner0 Overflow
  643. procedure SPI0_STC_ISR; external name 'SPI0_STC_ISR'; // Interrupt 17 SPI Serial Transfer Complete
  644. procedure USART0_RX_ISR; external name 'USART0_RX_ISR'; // Interrupt 18 USART0 Rx Complete
  645. procedure USART0_UDRE_ISR; external name 'USART0_UDRE_ISR'; // Interrupt 19 USART0, Data Register Empty
  646. procedure USART0_TX_ISR; external name 'USART0_TX_ISR'; // Interrupt 20 USART0 Tx Complete
  647. procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 21 ADC Conversion Complete
  648. procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 22 EEPROM Ready
  649. procedure ANALOG_COMP_ISR; external name 'ANALOG_COMP_ISR'; // Interrupt 23 Analog Comparator
  650. procedure TWI0_ISR; external name 'TWI0_ISR'; // Interrupt 24 Two-wire Serial Interface
  651. procedure SPM_Ready_ISR; external name 'SPM_Ready_ISR'; // Interrupt 25 Store Program Memory Read
  652. procedure USART0_START_ISR; external name 'USART0_START_ISR'; // Interrupt 26 USART0 Start frame detection
  653. procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 27 Pin Change Interrupt Request 3
  654. procedure USART1_RX_ISR; external name 'USART1_RX_ISR'; // Interrupt 28 USART1 Rx Complete
  655. procedure USART1_UDRE_ISR; external name 'USART1_UDRE_ISR'; // Interrupt 29 USART1, Data Register Empty
  656. procedure USART1_TX_ISR; external name 'USART1_TX_ISR'; // Interrupt 30 USART1 Tx Complete
  657. procedure USART1_START_ISR; external name 'USART1_START_ISR'; // Interrupt 31 USART1 Start frame detection
  658. procedure TIMER3_CAPT_ISR; external name 'TIMER3_CAPT_ISR'; // Interrupt 32 Timer/Counter3 Capture Event
  659. procedure TIMER3_COMPA_ISR; external name 'TIMER3_COMPA_ISR'; // Interrupt 33 Timer/Counter3 Compare Match A
  660. procedure TIMER3_COMPB_ISR; external name 'TIMER3_COMPB_ISR'; // Interrupt 34 Timer/Counter3 Compare Match B
  661. procedure TIMER3_OVF_ISR; external name 'TIMER3_OVF_ISR'; // Interrupt 35 Timer/Counter3 Overflow
  662. procedure CFD_ISR; external name 'CFD_ISR'; // Interrupt 36 Clock failure detection interrupt
  663. procedure PTC_EOC_ISR; external name 'PTC_EOC_ISR'; // Interrupt 37 PTC End of conversion
  664. procedure PTC_WCOMP_ISR; external name 'PTC_WCOMP_ISR'; // Interrupt 38 PTC Window comparator mode
  665. procedure SPI1_STC_ISR; external name 'SPI1_STC_ISR'; // Interrupt 39 SPI1 Serial Transfer Complete
  666. procedure TWI1_ISR; external name 'TWI1_ISR'; // Interrupt 40 TWI Transfer Complete
  667. procedure TIMER4_CAPT_ISR; external name 'TIMER4_CAPT_ISR'; // Interrupt 41 Timer/Counter4 Capture Event
  668. procedure TIMER4_COMPA_ISR; external name 'TIMER4_COMPA_ISR'; // Interrupt 42 Timer/Counter4 Compare Match A
  669. procedure TIMER4_COMPB_ISR; external name 'TIMER4_COMPB_ISR'; // Interrupt 43 Timer/Counter4 Compare Match B
  670. procedure TIMER4_OVF_ISR; external name 'TIMER4_OVF_ISR'; // Interrupt 44 Timer/Counter4 Overflow
  671. procedure _FPC_start; assembler; nostackframe; noreturn; public name '_START'; section '.init';
  672. asm
  673. jmp __dtors_end
  674. jmp INT1_ISR
  675. jmp PCINT0_ISR
  676. jmp PCINT1_ISR
  677. jmp PCINT2_ISR
  678. jmp WDT_ISR
  679. jmp TIMER2_COMPA_ISR
  680. jmp TIMER2_COMPB_ISR
  681. jmp TIMER2_OVF_ISR
  682. jmp TIMER1_CAPT_ISR
  683. jmp TIMER1_COMPA_ISR
  684. jmp TIMER1_COMPB_ISR
  685. jmp TIMER1_OVF_ISR
  686. jmp TIMER0_COMPA_ISR
  687. jmp TIMER0_COMPB_ISR
  688. jmp TIMER0_OVF_ISR
  689. jmp SPI0_STC_ISR
  690. jmp USART0_RX_ISR
  691. jmp USART0_UDRE_ISR
  692. jmp USART0_TX_ISR
  693. jmp ADC_ISR
  694. jmp EE_READY_ISR
  695. jmp ANALOG_COMP_ISR
  696. jmp TWI0_ISR
  697. jmp SPM_Ready_ISR
  698. jmp USART0_START_ISR
  699. jmp PCINT3_ISR
  700. jmp USART1_RX_ISR
  701. jmp USART1_UDRE_ISR
  702. jmp USART1_TX_ISR
  703. jmp USART1_START_ISR
  704. jmp TIMER3_CAPT_ISR
  705. jmp TIMER3_COMPA_ISR
  706. jmp TIMER3_COMPB_ISR
  707. jmp TIMER3_OVF_ISR
  708. jmp CFD_ISR
  709. jmp PTC_EOC_ISR
  710. jmp PTC_WCOMP_ISR
  711. jmp SPI1_STC_ISR
  712. jmp TWI1_ISR
  713. jmp TIMER4_CAPT_ISR
  714. jmp TIMER4_COMPA_ISR
  715. jmp TIMER4_COMPB_ISR
  716. jmp TIMER4_OVF_ISR
  717. .weak INT0_ISR
  718. .weak INT1_ISR
  719. .weak PCINT0_ISR
  720. .weak PCINT1_ISR
  721. .weak PCINT2_ISR
  722. .weak WDT_ISR
  723. .weak TIMER2_COMPA_ISR
  724. .weak TIMER2_COMPB_ISR
  725. .weak TIMER2_OVF_ISR
  726. .weak TIMER1_CAPT_ISR
  727. .weak TIMER1_COMPA_ISR
  728. .weak TIMER1_COMPB_ISR
  729. .weak TIMER1_OVF_ISR
  730. .weak TIMER0_COMPA_ISR
  731. .weak TIMER0_COMPB_ISR
  732. .weak TIMER0_OVF_ISR
  733. .weak SPI0_STC_ISR
  734. .weak USART0_RX_ISR
  735. .weak USART0_UDRE_ISR
  736. .weak USART0_TX_ISR
  737. .weak ADC_ISR
  738. .weak EE_READY_ISR
  739. .weak ANALOG_COMP_ISR
  740. .weak TWI0_ISR
  741. .weak SPM_Ready_ISR
  742. .weak USART0_START_ISR
  743. .weak PCINT3_ISR
  744. .weak USART1_RX_ISR
  745. .weak USART1_UDRE_ISR
  746. .weak USART1_TX_ISR
  747. .weak USART1_START_ISR
  748. .weak TIMER3_CAPT_ISR
  749. .weak TIMER3_COMPA_ISR
  750. .weak TIMER3_COMPB_ISR
  751. .weak TIMER3_OVF_ISR
  752. .weak CFD_ISR
  753. .weak PTC_EOC_ISR
  754. .weak PTC_WCOMP_ISR
  755. .weak SPI1_STC_ISR
  756. .weak TWI1_ISR
  757. .weak TIMER4_CAPT_ISR
  758. .weak TIMER4_COMPA_ISR
  759. .weak TIMER4_COMPB_ISR
  760. .weak TIMER4_OVF_ISR
  761. .set INT0_ISR, Default_IRQ_handler
  762. .set INT1_ISR, Default_IRQ_handler
  763. .set PCINT0_ISR, Default_IRQ_handler
  764. .set PCINT1_ISR, Default_IRQ_handler
  765. .set PCINT2_ISR, Default_IRQ_handler
  766. .set WDT_ISR, Default_IRQ_handler
  767. .set TIMER2_COMPA_ISR, Default_IRQ_handler
  768. .set TIMER2_COMPB_ISR, Default_IRQ_handler
  769. .set TIMER2_OVF_ISR, Default_IRQ_handler
  770. .set TIMER1_CAPT_ISR, Default_IRQ_handler
  771. .set TIMER1_COMPA_ISR, Default_IRQ_handler
  772. .set TIMER1_COMPB_ISR, Default_IRQ_handler
  773. .set TIMER1_OVF_ISR, Default_IRQ_handler
  774. .set TIMER0_COMPA_ISR, Default_IRQ_handler
  775. .set TIMER0_COMPB_ISR, Default_IRQ_handler
  776. .set TIMER0_OVF_ISR, Default_IRQ_handler
  777. .set SPI0_STC_ISR, Default_IRQ_handler
  778. .set USART0_RX_ISR, Default_IRQ_handler
  779. .set USART0_UDRE_ISR, Default_IRQ_handler
  780. .set USART0_TX_ISR, Default_IRQ_handler
  781. .set ADC_ISR, Default_IRQ_handler
  782. .set EE_READY_ISR, Default_IRQ_handler
  783. .set ANALOG_COMP_ISR, Default_IRQ_handler
  784. .set TWI0_ISR, Default_IRQ_handler
  785. .set SPM_Ready_ISR, Default_IRQ_handler
  786. .set USART0_START_ISR, Default_IRQ_handler
  787. .set PCINT3_ISR, Default_IRQ_handler
  788. .set USART1_RX_ISR, Default_IRQ_handler
  789. .set USART1_UDRE_ISR, Default_IRQ_handler
  790. .set USART1_TX_ISR, Default_IRQ_handler
  791. .set USART1_START_ISR, Default_IRQ_handler
  792. .set TIMER3_CAPT_ISR, Default_IRQ_handler
  793. .set TIMER3_COMPA_ISR, Default_IRQ_handler
  794. .set TIMER3_COMPB_ISR, Default_IRQ_handler
  795. .set TIMER3_OVF_ISR, Default_IRQ_handler
  796. .set CFD_ISR, Default_IRQ_handler
  797. .set PTC_EOC_ISR, Default_IRQ_handler
  798. .set PTC_WCOMP_ISR, Default_IRQ_handler
  799. .set SPI1_STC_ISR, Default_IRQ_handler
  800. .set TWI1_ISR, Default_IRQ_handler
  801. .set TIMER4_CAPT_ISR, Default_IRQ_handler
  802. .set TIMER4_COMPA_ISR, Default_IRQ_handler
  803. .set TIMER4_COMPB_ISR, Default_IRQ_handler
  804. .set TIMER4_OVF_ISR, Default_IRQ_handler
  805. end;
  806. end.