atmega16m1.pp 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741
  1. unit ATmega16M1;
  2. {$goto on}
  3. interface
  4. var
  5. // PORTB
  6. PORTB : byte absolute $00+$25; // Port B Data Register
  7. DDRB : byte absolute $00+$24; // Port B Data Direction Register
  8. PINB : byte absolute $00+$23; // Port B Input Pins
  9. // PORTC
  10. PORTC : byte absolute $00+$28; // Port C Data Register
  11. DDRC : byte absolute $00+$27; // Port C Data Direction Register
  12. PINC : byte absolute $00+$26; // Port C Input Pins
  13. // PORTD
  14. PORTD : byte absolute $00+$2B; // Port D Data Register
  15. DDRD : byte absolute $00+$2A; // Port D Data Direction Register
  16. PIND : byte absolute $00+$29; // Port D Input Pins
  17. // CAN
  18. CANGCON : byte absolute $00+$D8; // CAN General Control Register
  19. CANGSTA : byte absolute $00+$D9; // CAN General Status Register
  20. CANGIT : byte absolute $00+$DA; // CAN General Interrupt Register Flags
  21. CANGIE : byte absolute $00+$DB; // CAN General Interrupt Enable Register
  22. CANEN2 : byte absolute $00+$DC; // Enable MOb Register 2
  23. CANEN1 : byte absolute $00+$DD; // Enable MOb Register 1(empty)
  24. CANIE2 : byte absolute $00+$DE; // Enable Interrupt MOb Register 2
  25. CANIE1 : byte absolute $00+$DF; // Enable Interrupt MOb Register 1 (empty)
  26. CANSIT2 : byte absolute $00+$E0; // CAN Status Interrupt MOb Register 2
  27. CANSIT1 : byte absolute $00+$E1; // CAN Status Interrupt MOb Register 1 (empty)
  28. CANBT1 : byte absolute $00+$E2; // CAN Bit Timing Register 1
  29. CANBT2 : byte absolute $00+$E3; // CAN Bit Timing Register 2
  30. CANBT3 : byte absolute $00+$E4; // CAN Bit Timing Register 3
  31. CANTCON : byte absolute $00+$E5; // Timer Control Register
  32. CANTIML : byte absolute $00+$E6; // Timer Register Low
  33. CANTIMH : byte absolute $00+$E7; // Timer Register High
  34. CANTTCL : byte absolute $00+$E8; // TTC Timer Register Low
  35. CANTTCH : byte absolute $00+$E9; // TTC Timer Register High
  36. CANTEC : byte absolute $00+$EA; // Transmit Error Counter Register
  37. CANREC : byte absolute $00+$EB; // Receive Error Counter Register
  38. CANHPMOB : byte absolute $00+$EC; // Highest Priority MOb Register
  39. CANPAGE : byte absolute $00+$ED; // Page MOb Register
  40. CANSTMOB : byte absolute $00+$EE; // MOb Status Register
  41. CANCDMOB : byte absolute $00+$EF; // MOb Control and DLC Register
  42. CANIDT4 : byte absolute $00+$F0; // Identifier Tag Register 4
  43. CANIDT3 : byte absolute $00+$F1; // Identifier Tag Register 3
  44. CANIDT2 : byte absolute $00+$F2; // Identifier Tag Register 2
  45. CANIDT1 : byte absolute $00+$F3; // Identifier Tag Register 1
  46. CANIDM4 : byte absolute $00+$F4; // Identifier Mask Register 4
  47. CANIDM3 : byte absolute $00+$F5; // Identifier Mask Register 3
  48. CANIDM2 : byte absolute $00+$F6; // Identifier Mask Register 2
  49. CANIDM1 : byte absolute $00+$F7; // Identifier Mask Register 1
  50. CANSTML : byte absolute $00+$F8; // Time Stamp Register Low
  51. CANSTMH : byte absolute $00+$F9; // Time Stamp Register High
  52. CANMSG : byte absolute $00+$FA; // Message Data Register
  53. // ANALOG_COMPARATOR
  54. AC0CON : byte absolute $00+$94; // Analog Comparator 0 Control Register
  55. AC1CON : byte absolute $00+$95; // Analog Comparator 1 Control Register
  56. AC2CON : byte absolute $00+$96; // Analog Comparator 2 Control Register
  57. AC3CON : byte absolute $00+$97; // Analog Comparator 3 Control Register
  58. ACSR : byte absolute $00+$50; // Analog Comparator Status Register
  59. // DA_CONVERTER
  60. DACH : byte absolute $00+$92; // DAC Data Register High Byte
  61. DACL : byte absolute $00+$91; // DAC Data Register Low Byte
  62. DACON : byte absolute $00+$90; // DAC Control Register
  63. // CPU
  64. SPMCSR : byte absolute $00+$57; // Store Program Memory Control Register
  65. SREG : byte absolute $00+$5F; // Status Register
  66. SP : word absolute $00+$5D; // Stack Pointer
  67. SPL : byte absolute $00+$5D; // Stack Pointer
  68. SPH : byte absolute $00+$5D+1; // Stack Pointer
  69. MCUCR : byte absolute $00+$55; // MCU Control Register
  70. MCUSR : byte absolute $00+$54; // MCU Status Register
  71. OSCCAL : byte absolute $00+$66; // Oscillator Calibration Value
  72. CLKPR : byte absolute $00+$61; //
  73. SMCR : byte absolute $00+$53; // Sleep Mode Control Register
  74. GPIOR2 : byte absolute $00+$3A; // General Purpose IO Register 2
  75. GPIOR1 : byte absolute $00+$39; // General Purpose IO Register 1
  76. GPIOR0 : byte absolute $00+$3E; // General Purpose IO Register 0
  77. PLLCSR : byte absolute $00+$49; // PLL Control And Status Register
  78. PRR : byte absolute $00+$64; // Power Reduction Register
  79. // PORTE
  80. PORTE : byte absolute $00+$2E; // Port E Data Register
  81. DDRE : byte absolute $00+$2D; // Port E Data Direction Register
  82. PINE : byte absolute $00+$2C; // Port E Input Pins
  83. // TIMER_COUNTER_0
  84. TIMSK0 : byte absolute $00+$6E; // Timer/Counter0 Interrupt Mask Register
  85. TIFR0 : byte absolute $00+$35; // Timer/Counter0 Interrupt Flag register
  86. TCCR0A : byte absolute $00+$44; // Timer/Counter Control Register A
  87. TCCR0B : byte absolute $00+$45; // Timer/Counter Control Register B
  88. TCNT0 : byte absolute $00+$46; // Timer/Counter0
  89. OCR0A : byte absolute $00+$47; // Timer/Counter0 Output Compare Register
  90. OCR0B : byte absolute $00+$48; // Timer/Counter0 Output Compare Register
  91. GTCCR : byte absolute $00+$43; // General Timer/Counter Control Register
  92. // TIMER_COUNTER_1
  93. TIMSK1 : byte absolute $00+$6F; // Timer/Counter Interrupt Mask Register
  94. TIFR1 : byte absolute $00+$36; // Timer/Counter Interrupt Flag register
  95. TCCR1A : byte absolute $00+$80; // Timer/Counter1 Control Register A
  96. TCCR1B : byte absolute $00+$81; // Timer/Counter1 Control Register B
  97. TCCR1C : byte absolute $00+$82; // Timer/Counter1 Control Register C
  98. TCNT1 : word absolute $00+$84; // Timer/Counter1 Bytes
  99. TCNT1L : byte absolute $00+$84; // Timer/Counter1 Bytes
  100. TCNT1H : byte absolute $00+$84+1; // Timer/Counter1 Bytes
  101. OCR1A : word absolute $00+$88; // Timer/Counter1 Output Compare Register Bytes
  102. OCR1AL : byte absolute $00+$88; // Timer/Counter1 Output Compare Register Bytes
  103. OCR1AH : byte absolute $00+$88+1; // Timer/Counter1 Output Compare Register Bytes
  104. OCR1B : word absolute $00+$8A; // Timer/Counter1 Output Compare Register Bytes
  105. OCR1BL : byte absolute $00+$8A; // Timer/Counter1 Output Compare Register Bytes
  106. OCR1BH : byte absolute $00+$8A+1; // Timer/Counter1 Output Compare Register Bytes
  107. ICR1 : word absolute $00+$86; // Timer/Counter1 Input Capture Register Bytes
  108. ICR1L : byte absolute $00+$86; // Timer/Counter1 Input Capture Register Bytes
  109. ICR1H : byte absolute $00+$86+1; // Timer/Counter1 Input Capture Register Bytes
  110. // AD_CONVERTER
  111. ADMUX : byte absolute $00+$7C; // The ADC multiplexer Selection Register
  112. ADCSRA : byte absolute $00+$7A; // The ADC Control and Status register
  113. ADC : word absolute $00+$78; // ADC Data Register Bytes
  114. ADCL : byte absolute $00+$78; // ADC Data Register Bytes
  115. ADCH : byte absolute $00+$78+1; // ADC Data Register Bytes
  116. ADCSRB : byte absolute $00+$7B; // ADC Control and Status Register B
  117. DIDR0 : byte absolute $00+$7E; // Digital Input Disable Register 0
  118. DIDR1 : byte absolute $00+$7F; // Digital Input Disable Register 0
  119. AMP0CSR : byte absolute $00+$75; //
  120. AMP1CSR : byte absolute $00+$76; //
  121. AMP2CSR : byte absolute $00+$77; //
  122. // LINUART
  123. LINCR : byte absolute $00+$C8; // LIN Control Register
  124. LINSIR : byte absolute $00+$C9; // LIN Status and Interrupt Register
  125. LINENIR : byte absolute $00+$CA; // LIN Enable Interrupt Register
  126. LINERR : byte absolute $00+$CB; // LIN Error Register
  127. LINBTR : byte absolute $00+$CC; // LIN Bit Timing Register
  128. LINBRRL : byte absolute $00+$CD; // LIN Baud Rate Low Register
  129. LINBRRH : byte absolute $00+$CE; // LIN Baud Rate High Register
  130. LINDLR : byte absolute $00+$CF; // LIN Data Length Register
  131. LINIDR : byte absolute $00+$D0; // LIN Identifier Register
  132. LINSEL : byte absolute $00+$D1; // LIN Data Buffer Selection Register
  133. LINDAT : byte absolute $00+$D2; // LIN Data Register
  134. // SPI
  135. SPCR : byte absolute $00+$4C; // SPI Control Register
  136. SPSR : byte absolute $00+$4D; // SPI Status Register
  137. SPDR : byte absolute $00+$4E; // SPI Data Register
  138. // WATCHDOG
  139. WDTCSR : byte absolute $00+$60; // Watchdog Timer Control Register
  140. // EXTERNAL_INTERRUPT
  141. EICRA : byte absolute $00+$69; // External Interrupt Control Register
  142. EIMSK : byte absolute $00+$3D; // External Interrupt Mask Register
  143. EIFR : byte absolute $00+$3C; // External Interrupt Flag Register
  144. PCICR : byte absolute $00+$68; // Pin Change Interrupt Control Register
  145. PCMSK3 : byte absolute $00+$6D; // Pin Change Mask Register 3
  146. PCMSK2 : byte absolute $00+$6C; // Pin Change Mask Register 2
  147. PCMSK1 : byte absolute $00+$6B; // Pin Change Mask Register 1
  148. PCMSK0 : byte absolute $00+$6A; // Pin Change Mask Register 0
  149. PCIFR : byte absolute $00+$3B; // Pin Change Interrupt Flag Register
  150. // EEPROM
  151. EEAR : word absolute $00+$41; // EEPROM Read/Write Access
  152. EEARL : byte absolute $00+$41; // EEPROM Read/Write Access
  153. EEARH : byte absolute $00+$41+1; // EEPROM Read/Write Access
  154. EEDR : byte absolute $00+$40; // EEPROM Data Register
  155. EECR : byte absolute $00+$3F; // EEPROM Control Register
  156. // PSC
  157. PIFR : byte absolute $00+$BC; // PSC Interrupt Flag Register
  158. PIM : byte absolute $00+$BB; // PSC Interrupt Mask Register
  159. PMIC2 : byte absolute $00+$BA; // PSC Module 2 Input Control Register
  160. PMIC1 : byte absolute $00+$B9; // PSC Module 1 Input Control Register
  161. PMIC0 : byte absolute $00+$B8; // PSC Module 0 Input Control Register
  162. PCTL : byte absolute $00+$B7; // PSC Control Register
  163. POC : byte absolute $00+$B6; // PSC Output Configuration
  164. PCNF : byte absolute $00+$B5; // PSC Configuration Register
  165. PSYNC : byte absolute $00+$B4; // PSC Synchro Configuration
  166. POCR_RB : word absolute $00+$B2; // PSC Output Compare RB Register
  167. POCR_RBL : byte absolute $00+$B2; // PSC Output Compare RB Register
  168. POCR_RBH : byte absolute $00+$B2+1; // PSC Output Compare RB Register
  169. POCR2SB : word absolute $00+$B0; // PSC Module 2 Output Compare SB Register
  170. POCR2SBL : byte absolute $00+$B0; // PSC Module 2 Output Compare SB Register
  171. POCR2SBH : byte absolute $00+$B0+1; // PSC Module 2 Output Compare SB Register
  172. POCR2RA : word absolute $00+$AE; // PSC Module 2 Output Compare RA Register
  173. POCR2RAL : byte absolute $00+$AE; // PSC Module 2 Output Compare RA Register
  174. POCR2RAH : byte absolute $00+$AE+1; // PSC Module 2 Output Compare RA Register
  175. POCR2SA : word absolute $00+$AC; // PSC Module 2 Output Compare SA Register
  176. POCR2SAL : byte absolute $00+$AC; // PSC Module 2 Output Compare SA Register
  177. POCR2SAH : byte absolute $00+$AC+1; // PSC Module 2 Output Compare SA Register
  178. POCR1SB : word absolute $00+$AA; // PSC Module 1 Output Compare SB Register
  179. POCR1SBL : byte absolute $00+$AA; // PSC Module 1 Output Compare SB Register
  180. POCR1SBH : byte absolute $00+$AA+1; // PSC Module 1 Output Compare SB Register
  181. POCR1RA : word absolute $00+$A8; // PSC Module 1 Output Compare RA Register
  182. POCR1RAL : byte absolute $00+$A8; // PSC Module 1 Output Compare RA Register
  183. POCR1RAH : byte absolute $00+$A8+1; // PSC Module 1 Output Compare RA Register
  184. POCR1SA : word absolute $00+$A6; // PSC Output Compare SA Register
  185. POCR1SAL : byte absolute $00+$A6; // PSC Output Compare SA Register
  186. POCR1SAH : byte absolute $00+$A6+1; // PSC Output Compare SA Register
  187. POCR0SB : word absolute $00+$A4; // PSC Output Compare SB Register
  188. POCR0SBL : byte absolute $00+$A4; // PSC Output Compare SB Register
  189. POCR0SBH : byte absolute $00+$A4+1; // PSC Output Compare SB Register
  190. POCR0RA : word absolute $00+$A2; // PSC Module 0 Output Compare RA Register
  191. POCR0RAL : byte absolute $00+$A2; // PSC Module 0 Output Compare RA Register
  192. POCR0RAH : byte absolute $00+$A2+1; // PSC Module 0 Output Compare RA Register
  193. POCR0SA : word absolute $00+$A0; // PSC Module 0 Output Compare SA Register
  194. POCR0SAL : byte absolute $00+$A0; // PSC Module 0 Output Compare SA Register
  195. POCR0SAH : byte absolute $00+$A0+1; // PSC Module 0 Output Compare SA Register
  196. const
  197. // CANGCON
  198. ABRQ = 7; // Abort Request
  199. OVRQ = 6; // Overload Frame Request
  200. TTC = 5; // Time Trigger Communication
  201. SYNTTC = 4; // Synchronization of TTC
  202. LISTEN = 3; // Listening Mode
  203. TEST = 2; // Test Mode
  204. ENASTB = 1; // Enable / Standby
  205. SWRES = 0; // Software Reset Request
  206. // CANGSTA
  207. OVFG = 6; // Overload Frame Flag
  208. TXBSY = 4; // Transmitter Busy
  209. RXBSY = 3; // Receiver Busy
  210. ENFG = 2; // Enable Flag
  211. BOFF = 1; // Bus Off Mode
  212. ERRP = 0; // Error Passive Mode
  213. // CANGIT
  214. CANIT = 7; // General Interrupt Flag
  215. BOFFIT = 6; // Bus Off Interrupt Flag
  216. OVRTIM = 5; // Overrun CAN Timer Flag
  217. BXOK = 4; // Burst Receive Interrupt Flag
  218. SERG = 3; // Stuff Error General Flag
  219. CERG = 2; // CRC Error General Flag
  220. FERG = 1; // Form Error General Flag
  221. AERG = 0; // Ackknowledgement Error General Flag
  222. // CANGIE
  223. ENIT = 7; // Enable all Interrupts
  224. ENBOFF = 6; // Enable Bus Off Interrupt
  225. ENRX = 5; // Enable Receive Interrupt
  226. ENTX = 4; // Enable Transmitt Interrupt
  227. ENERR = 3; // Enable MOb Error Interrupt
  228. ENBX = 2; // Enable Burst Receive Interrupt
  229. ENERG = 1; // Enable General Error Interrupt
  230. ENOVRT = 0; // Enable CAN Timer Overrun Interrupt
  231. // CANEN2
  232. ENMOB = 0; // Enable MObs
  233. // CANIE2
  234. IEMOB = 0; // Interrupt Enable MObs
  235. // CANSIT2
  236. SIT = 0; // Status of Interrupt MObs
  237. // CANBT1
  238. BRP = 1; // Baud Rate Prescaler bits
  239. // CANBT2
  240. SJW = 5; // Re-Sync Jump Width bits
  241. PRS = 1; // Propagation Time Segment bits
  242. // CANBT3
  243. PHS2 = 4; // Phase Segment 2 bits
  244. PHS1 = 1; // Phase Segment 1 bits
  245. SMP = 0; // Sample Type
  246. // CANHPMOB
  247. HPMOB = 4; // Highest Priority MOb Number bits
  248. CGP = 0; // CAN General Purpose bits
  249. // CANPAGE
  250. MOBNB = 4; // MOb Number bits
  251. AINC = 3; // MOb Data Buffer Auto Increment (Active Low)
  252. INDX = 0; // Data Buffer Index bits
  253. // CANSTMOB
  254. DLCW = 7; // Data Length Code Warning on MOb
  255. TXOK = 6; // Transmit OK on MOb
  256. RXOK = 5; // Receive OK on MOb
  257. BERR = 4; // Bit Error on MOb
  258. SERR = 3; // Stuff Error on MOb
  259. CERR = 2; // CRC Error on MOb
  260. FERR = 1; // Form Error on MOb
  261. AERR = 0; // Ackknowledgement Error on MOb
  262. // CANCDMOB
  263. CONMOB = 6; // MOb Config bits
  264. RPLV = 5; // Reply Valid
  265. IDE = 4; // Identifier Extension
  266. DLC = 0; // Data Length Code bits
  267. // CANIDT4
  268. IDT = 3; //
  269. RTRTAG = 2; //
  270. RB1TAG = 1; //
  271. RB0TAG = 0; //
  272. // AC0CON
  273. AC0EN = 7; // Analog Comparator 0 Enable Bit
  274. AC0IE = 6; // Analog Comparator 0 Interrupt Enable Bit
  275. AC0IS = 4; // Analog Comparator 0 Interrupt Select Bits
  276. ACCKSEL = 3; // Analog Comparator Clock Select
  277. AC0M = 0; // Analog Comparator 0 Multiplexer Register
  278. // AC1CON
  279. AC1EN = 7; // Analog Comparator 1 Enable Bit
  280. AC1IE = 6; // Analog Comparator 1 Interrupt Enable Bit
  281. AC1IS = 4; // Analog Comparator 1 Interrupt Select Bit
  282. AC1ICE = 3; // Analog Comparator 1 Interrupt Capture Enable Bit
  283. AC1M = 0; // Analog Comparator 1 Multiplexer Register
  284. // AC2CON
  285. AC2EN = 7; // Analog Comparator 2 Enable Bit
  286. AC2IE = 6; // Analog Comparator 2 Interrupt Enable Bit
  287. AC2IS = 4; // Analog Comparator 2 Interrupt Select Bit
  288. AC2M = 0; // Analog Comparator 2 Multiplexer Register
  289. // AC3CON
  290. AC3EN = 7; // Analog Comparator 3 Enable Bit
  291. AC3IE = 6; // Analog Comparator 3 Interrupt Enable Bit
  292. AC3IS = 4; // Analog Comparator 3 Interrupt Select Bit
  293. AC3M = 0; // Analog Comparator 3 Multiplexer Register
  294. // ACSR
  295. AC3IF = 7; // Analog Comparator 3 Interrupt Flag Bit
  296. AC2IF = 6; // Analog Comparator 2 Interrupt Flag Bit
  297. AC1IF = 5; // Analog Comparator 1 Interrupt Flag Bit
  298. AC0IF = 4; // Analog Comparator 0 Interrupt Flag Bit
  299. AC3O = 3; // Analog Comparator 3 Output Bit
  300. AC2O = 2; // Analog Comparator 2 Output Bit
  301. AC1O = 1; // Analog Comparator 1 Output Bit
  302. AC0O = 0; // Analog Comparator 0 Output Bit
  303. // DACH
  304. // DACL
  305. // DACON
  306. DAATE = 7; // DAC Auto Trigger Enable Bit
  307. DATS = 4; // DAC Trigger Selection Bits
  308. DALA = 2; // DAC Left Adjust
  309. DAEN = 0; // DAC Enable Bit
  310. // SPMCSR
  311. SPMIE = 7; // SPM Interrupt Enable
  312. RWWSB = 6; // Read While Write Section Busy
  313. SIGRD = 5; // Signature Row Read
  314. RWWSRE = 4; // Read While Write section read enable
  315. BLBSET = 3; // Boot Lock Bit Set
  316. PGWRT = 2; // Page Write
  317. PGERS = 1; // Page Erase
  318. SPMEN = 0; // Store Program Memory Enable
  319. // SREG
  320. I = 7; // Global Interrupt Enable
  321. T = 6; // Bit Copy Storage
  322. H = 5; // Half Carry Flag
  323. S = 4; // Sign Bit
  324. V = 3; // Two's Complement Overflow Flag
  325. N = 2; // Negative Flag
  326. Z = 1; // Zero Flag
  327. C = 0; // Carry Flag
  328. // MCUCR
  329. SPIPS = 7; // SPI Pin Select
  330. PUD = 4; // Pull-up disable
  331. IVSEL = 1; // Interrupt Vector Select
  332. IVCE = 0; // Interrupt Vector Change Enable
  333. // MCUSR
  334. WDRF = 3; // Watchdog Reset Flag
  335. BORF = 2; // Brown-out Reset Flag
  336. EXTRF = 1; // External Reset Flag
  337. PORF = 0; // Power-on reset flag
  338. // CLKPR
  339. CLKPCE = 7; //
  340. CLKPS = 0; //
  341. // SMCR
  342. SM = 1; // Sleep Mode Select bits
  343. SE = 0; // Sleep Enable
  344. // GPIOR2
  345. GPIOR = 0; // General Purpose IO Register 2 bis
  346. // GPIOR1
  347. // GPIOR0
  348. GPIOR07 = 7; // General Purpose IO Register 0 bit 7
  349. GPIOR06 = 6; // General Purpose IO Register 0 bit 6
  350. GPIOR05 = 5; // General Purpose IO Register 0 bit 5
  351. GPIOR04 = 4; // General Purpose IO Register 0 bit 4
  352. GPIOR03 = 3; // General Purpose IO Register 0 bit 3
  353. GPIOR02 = 2; // General Purpose IO Register 0 bit 2
  354. GPIOR01 = 1; // General Purpose IO Register 0 bit 1
  355. GPIOR00 = 0; // General Purpose IO Register 0 bit 0
  356. // PLLCSR
  357. PLLF = 2; // PLL Factor
  358. PLLE = 1; // PLL Enable
  359. PLOCK = 0; // PLL Lock Detector
  360. // PRR
  361. PRCAN = 6; // Power Reduction CAN
  362. PRPSC = 5; // Power Reduction PSC
  363. PRTIM1 = 4; // Power Reduction Timer/Counter1
  364. PRTIM0 = 3; // Power Reduction Timer/Counter0
  365. PRSPI = 2; // Power Reduction Serial Peripheral Interface
  366. PRLIN = 1; // Power Reduction LIN UART
  367. PRADC = 0; // Power Reduction ADC
  368. // TIMSK0
  369. OCIE0B = 2; // Timer/Counter0 Output Compare Match B Interrupt Enable
  370. OCIE0A = 1; // Timer/Counter0 Output Compare Match A Interrupt Enable
  371. TOIE0 = 0; // Timer/Counter0 Overflow Interrupt Enable
  372. // TIFR0
  373. OCF0B = 2; // Timer/Counter0 Output Compare Flag 0B
  374. OCF0A = 1; // Timer/Counter0 Output Compare Flag 0A
  375. TOV0 = 0; // Timer/Counter0 Overflow Flag
  376. // TCCR0A
  377. COM0A = 6; // Compare Output Mode, Phase Correct PWM Mode
  378. COM0B = 4; // Compare Output Mode, Fast PWm
  379. WGM0 = 0; // Waveform Generation Mode
  380. // TCCR0B
  381. FOC0A = 7; // Force Output Compare A
  382. FOC0B = 6; // Force Output Compare B
  383. WGM02 = 3; //
  384. CS0 = 0; // Clock Select
  385. // GTCCR
  386. TSM = 7; // Timer/Counter Synchronization Mode
  387. ICPSEL1 = 6; // Timer1 Input Capture Selection Bit
  388. PSR10 = 0; // Prescaler Reset Timer/Counter1 and Timer/Counter0
  389. // TIMSK1
  390. ICIE1 = 5; // Timer/Counter1 Input Capture Interrupt Enable
  391. OCIE1B = 2; // Timer/Counter1 Output CompareB Match Interrupt Enable
  392. OCIE1A = 1; // Timer/Counter1 Output CompareA Match Interrupt Enable
  393. TOIE1 = 0; // Timer/Counter1 Overflow Interrupt Enable
  394. // TIFR1
  395. ICF1 = 5; // Input Capture Flag 1
  396. OCF1B = 2; // Output Compare Flag 1B
  397. OCF1A = 1; // Output Compare Flag 1A
  398. TOV1 = 0; // Timer/Counter1 Overflow Flag
  399. // TCCR1A
  400. COM1A = 6; // Compare Output Mode 1A, bits
  401. COM1B = 4; // Compare Output Mode 1B, bits
  402. WGM1 = 0; // Waveform Generation Mode
  403. // TCCR1B
  404. ICNC1 = 7; // Input Capture 1 Noise Canceler
  405. ICES1 = 6; // Input Capture 1 Edge Select
  406. CS1 = 0; // Prescaler source of Timer/Counter 1
  407. // TCCR1C
  408. FOC1A = 7; //
  409. FOC1B = 6; //
  410. // GTCCR
  411. PSRSYNC = 0; // Prescaler Reset Timer/Counter1 and Timer/Counter0
  412. // ADMUX
  413. REFS = 6; // Reference Selection Bits
  414. ADLAR = 5; // Left Adjust Result
  415. MUX = 0; // Analog Channel and Gain Selection Bits
  416. // ADCSRA
  417. ADEN = 7; // ADC Enable
  418. ADSC = 6; // ADC Start Conversion
  419. ADATE = 5; // ADC Auto Trigger Enable
  420. ADIF = 4; // ADC Interrupt Flag
  421. ADIE = 3; // ADC Interrupt Enable
  422. ADPS = 0; // ADC Prescaler Select Bits
  423. // ADCSRB
  424. ADHSM = 7; // ADC High Speed Mode
  425. ISRCEN = 6; // Current Source Enable
  426. AREFEN = 5; // Analog Reference pin Enable
  427. ADTS = 0; // ADC Auto Trigger Sources
  428. // DIDR0
  429. ADC7D = 7; // ADC7 Digital input Disable
  430. ADC6D = 6; // ADC6 Digital input Disable
  431. ADC5D = 5; // ADC5 Digital input Disable
  432. ADC4D = 4; // ADC4 Digital input Disable
  433. ADC3D = 3; // ADC3 Digital input Disable
  434. ADC2D = 2; // ADC2 Digital input Disable
  435. ADC1D = 1; // ADC1 Digital input Disable
  436. ADC0D = 0; // ADC0 Digital input Disable
  437. // DIDR1
  438. AMP2PD = 6; // AMP2P Pin Digital input Disable
  439. ACMP0D = 5; // ACMP0 Pin Digital input Disable
  440. AMP0PD = 4; // AMP0P Pin Digital input Disable
  441. AMP0ND = 3; // AMP0N Pin Digital input Disable
  442. ADC10D = 2; // ADC10 Pin Digital input Disable
  443. ADC9D = 1; // ADC9 Pin Digital input Disable
  444. ADC8D = 0; // ADC8 Pin Digital input Disable
  445. // AMP0CSR
  446. AMP0EN = 7; //
  447. AMP0IS = 6; //
  448. AMP0G = 4; //
  449. AMPCMP0 = 3; // Amplifier 0 - Comparator 0 Connection
  450. AMP0TS = 0; //
  451. // AMP1CSR
  452. AMP1EN = 7; //
  453. AMP1IS = 6; //
  454. AMP1G = 4; //
  455. AMPCMP1 = 3; // Amplifier 1 - Comparator 1 Connection
  456. AMP1TS = 0; //
  457. // AMP2CSR
  458. AMP2EN = 7; //
  459. AMP2IS = 6; //
  460. AMP2G = 4; //
  461. AMPCMP2 = 3; // Amplifier 2 - Comparator 2 Connection
  462. AMP2TS = 0; //
  463. // LINCR
  464. LSWRES = 7; // Software Reset
  465. LIN13 = 6; // LIN Standard
  466. LCONF = 4; // LIN Configuration bits
  467. LENA = 3; // LIN or UART Enable
  468. LCMD = 0; // LIN Command and Mode bits
  469. // LINSIR
  470. LIDST = 5; // Identifier Status bits
  471. LBUSY = 4; // Busy Signal
  472. LERR = 3; // Error Interrupt
  473. LIDOK = 2; // Identifier Interrupt
  474. LTXOK = 1; // Transmit Performed Interrupt
  475. LRXOK = 0; // Receive Performed Interrupt
  476. // LINENIR
  477. LENERR = 3; // Enable Error Interrupt
  478. LENIDOK = 2; // Enable Identifier Interrupt
  479. LENTXOK = 1; // Enable Transmit Performed Interrupt
  480. LENRXOK = 0; // Enable Receive Performed Interrupt
  481. // LINERR
  482. LABORT = 7; // Abort Flag
  483. LTOERR = 6; // Frame Time Out Error Flag
  484. LOVERR = 5; // Overrun Error Flag
  485. LFERR = 4; // Framing Error Flag
  486. LSERR = 3; // Synchronization Error Flag
  487. LPERR = 2; // Parity Error Flag
  488. LCERR = 1; // Checksum Error Flag
  489. LBERR = 0; // Bit Error Flag
  490. // LINBTR
  491. LDISR = 7; // Disable Bit Timing Resynchronization
  492. LBT = 0; // LIN Bit Timing bits
  493. // LINBRRL
  494. LDIV = 0; //
  495. // LINBRRH
  496. // LINDLR
  497. LTXDL = 4; // LIN Transmit Data Length bits
  498. LRXDL = 0; // LIN Receive Data Length bits
  499. // LINIDR
  500. LP = 6; // Parity bits
  501. LID = 0; // Identifier bit 5 or Data Length bits
  502. // LINSEL
  503. LAINC = 3; // Auto Increment of Data Buffer Index (Active Low)
  504. LINDX = 0; // FIFO LIN Data Buffer Index bits
  505. // LINDAT
  506. LDATA = 0; //
  507. // SPCR
  508. SPIE = 7; // SPI Interrupt Enable
  509. SPE = 6; // SPI Enable
  510. DORD = 5; // Data Order
  511. MSTR = 4; // Master/Slave Select
  512. CPOL = 3; // Clock polarity
  513. CPHA = 2; // Clock Phase
  514. SPR = 0; // SPI Clock Rate Selects
  515. // SPSR
  516. SPIF = 7; // SPI Interrupt Flag
  517. WCOL = 6; // Write Collision Flag
  518. SPI2X = 0; // Double SPI Speed Bit
  519. // WDTCSR
  520. WDIF = 7; // Watchdog Timeout Interrupt Flag
  521. WDIE = 6; // Watchdog Timeout Interrupt Enable
  522. WDP = 0; // Watchdog Timer Prescaler Bits
  523. WDCE = 4; // Watchdog Change Enable
  524. WDE = 3; // Watch Dog Enable
  525. // EICRA
  526. ISC3 = 6; // External Interrupt Sense Control Bit
  527. ISC2 = 4; // External Interrupt Sense Control Bit
  528. ISC1 = 2; // External Interrupt Sense Control 1 Bits
  529. ISC0 = 0; // External Interrupt Sense Control 0 Bits
  530. // EIMSK
  531. INT = 0; // External Interrupt Request 3 Enable
  532. // EIFR
  533. INTF = 0; // External Interrupt Flags
  534. // PCICR
  535. PCIE = 0; // Pin Change Interrupt Enables
  536. // PCMSK3
  537. PCINT = 0; // Pin Change Enable Masks
  538. // PCMSK2
  539. // PCMSK1
  540. // PCMSK0
  541. // PCIFR
  542. PCIF = 0; // Pin Change Interrupt Flags
  543. // EECR
  544. EEPM = 4; //
  545. EERIE = 3; // EEProm Ready Interrupt Enable
  546. EEMWE = 2; // EEPROM Master Write Enable
  547. EEWE = 1; // EEPROM Write Enable
  548. EERE = 0; // EEPROM Read Enable
  549. // PIFR
  550. PEV = 1; // PSC External Event 2 Interrupt
  551. PEOP = 0; // PSC End of Cycle Interrupt
  552. // PIM
  553. PEVE = 1; // External Event 2 Interrupt Enable
  554. PEOPE = 0; // PSC End of Cycle Interrupt Enable
  555. // PMIC2
  556. POVEN2 = 7; // PSC Module 2 Overlap Enable
  557. PISEL2 = 6; // PSC Module 2 Input Select
  558. PELEV2 = 5; // PSC Module 2 Input Level Selector
  559. PFLTE2 = 4; // PSC Module 2 Input Filter Enable
  560. PAOC2 = 3; // PSC Module 2 Asynchronous Output Control
  561. PRFM2 = 0; // PSC Module 2 Input Mode bits
  562. // PMIC1
  563. POVEN1 = 7; // PSC Module 1 Overlap Enable
  564. PISEL1 = 6; // PSC Module 1 Input Select
  565. PELEV1 = 5; // PSC Module 1 Input Level Selector
  566. PFLTE1 = 4; // PSC Module 1 Input Filter Enable
  567. PAOC1 = 3; // PSC Module 1 Asynchronous Output Control
  568. PRFM1 = 0; // PSC Module 1 Input Mode bits
  569. // PMIC0
  570. POVEN0 = 7; // PSC Module 0 Overlap Enable
  571. PISEL0 = 6; // PSC Module 0 Input Select
  572. PELEV0 = 5; // PSC Module 0 Input Level Selector
  573. PFLTE0 = 4; // PSC Module 0 Input Filter Enable
  574. PAOC0 = 3; // PSC Module 0 Asynchronous Output Control
  575. PRFM0 = 0; // PSC Module 0 Input Mode bits
  576. // PCTL
  577. PPRE = 6; // PSC Prescaler Select bits
  578. PCLKSEL = 5; // PSC Input Clock Select
  579. PCCYC = 1; // PSC Complete Cycle
  580. PRUN = 0; // PSC Run
  581. // POC
  582. POEN2B = 5; // PSC Output 2B Enable
  583. POEN2A = 4; // PSC Output 2A Enable
  584. POEN1B = 3; // PSC Output 1B Enable
  585. POEN1A = 2; // PSC Output 1A Enable
  586. POEN0B = 1; // PSC Output 0B Enable
  587. POEN0A = 0; // PSC Output 0A Enable
  588. // PCNF
  589. PULOCK = 5; // PSC Update Lock
  590. PMODE = 4; // PSC Mode
  591. POPB = 3; // PSC Output B Polarity
  592. POPA = 2; // PSC Output A Polarity
  593. // PSYNC
  594. PSYNC2 = 4; // Selection of Synchronization Out for ADC
  595. PSYNC1 = 2; // Selection of Synchronization Out for ADC
  596. PSYNC0 = 0; // Selection of Synchronization Out for ADC
  597. implementation
  598. {$i avrcommon.inc}
  599. procedure ANACOMP0_ISR; external name 'ANACOMP0_ISR'; // Interrupt 1 Analog Comparator 0
  600. procedure ANACOMP1_ISR; external name 'ANACOMP1_ISR'; // Interrupt 2 Analog Comparator 1
  601. procedure ANACOMP2_ISR; external name 'ANACOMP2_ISR'; // Interrupt 3 Analog Comparator 2
  602. procedure ANACOMP3_ISR; external name 'ANACOMP3_ISR'; // Interrupt 4 Analog Comparator 3
  603. procedure PSC_FAULT_ISR; external name 'PSC_FAULT_ISR'; // Interrupt 5 PSC Fault
  604. procedure PSC_EC_ISR; external name 'PSC_EC_ISR'; // Interrupt 6 PSC End of Cycle
  605. procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 7 External Interrupt Request 0
  606. procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 8 External Interrupt Request 1
  607. procedure INT2_ISR; external name 'INT2_ISR'; // Interrupt 9 External Interrupt Request 2
  608. procedure INT3_ISR; external name 'INT3_ISR'; // Interrupt 10 External Interrupt Request 3
  609. procedure TIMER1_CAPT_ISR; external name 'TIMER1_CAPT_ISR'; // Interrupt 11 Timer/Counter1 Capture Event
  610. procedure TIMER1_COMPA_ISR; external name 'TIMER1_COMPA_ISR'; // Interrupt 12 Timer/Counter1 Compare Match A
  611. procedure TIMER1_COMPB_ISR; external name 'TIMER1_COMPB_ISR'; // Interrupt 13 Timer/Counter1 Compare Match B
  612. procedure TIMER1_OVF_ISR; external name 'TIMER1_OVF_ISR'; // Interrupt 14 Timer1/Counter1 Overflow
  613. procedure TIMER0_COMPA_ISR; external name 'TIMER0_COMPA_ISR'; // Interrupt 15 Timer/Counter0 Compare Match A
  614. procedure TIMER0_COMPB_ISR; external name 'TIMER0_COMPB_ISR'; // Interrupt 16 Timer/Counter0 Compare Match B
  615. procedure TIMER0_OVF_ISR; external name 'TIMER0_OVF_ISR'; // Interrupt 17 Timer/Counter0 Overflow
  616. procedure CAN_INT_ISR; external name 'CAN_INT_ISR'; // Interrupt 18 CAN MOB, Burst, General Errors
  617. procedure CAN_TOVF_ISR; external name 'CAN_TOVF_ISR'; // Interrupt 19 CAN Timer Overflow
  618. procedure LIN_TC_ISR; external name 'LIN_TC_ISR'; // Interrupt 20 LIN Transfer Complete
  619. procedure LIN_ERR_ISR; external name 'LIN_ERR_ISR'; // Interrupt 21 LIN Error
  620. procedure PCINT0_ISR; external name 'PCINT0_ISR'; // Interrupt 22 Pin Change Interrupt Request 0
  621. procedure PCINT1_ISR; external name 'PCINT1_ISR'; // Interrupt 23 Pin Change Interrupt Request 1
  622. procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 24 Pin Change Interrupt Request 2
  623. procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 25 Pin Change Interrupt Request 3
  624. procedure SPI__STC_ISR; external name 'SPI__STC_ISR'; // Interrupt 26 SPI Serial Transfer Complete
  625. procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 27 ADC Conversion Complete
  626. procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 28 Watchdog Time-Out Interrupt
  627. procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 29 EEPROM Ready
  628. procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 30 Store Program Memory Read
  629. procedure _FPC_start; assembler; nostackframe;
  630. label
  631. _start;
  632. asm
  633. .init
  634. .globl _start
  635. jmp _start
  636. jmp ANACOMP0_ISR
  637. jmp ANACOMP1_ISR
  638. jmp ANACOMP2_ISR
  639. jmp ANACOMP3_ISR
  640. jmp PSC_FAULT_ISR
  641. jmp PSC_EC_ISR
  642. jmp INT0_ISR
  643. jmp INT1_ISR
  644. jmp INT2_ISR
  645. jmp INT3_ISR
  646. jmp TIMER1_CAPT_ISR
  647. jmp TIMER1_COMPA_ISR
  648. jmp TIMER1_COMPB_ISR
  649. jmp TIMER1_OVF_ISR
  650. jmp TIMER0_COMPA_ISR
  651. jmp TIMER0_COMPB_ISR
  652. jmp TIMER0_OVF_ISR
  653. jmp CAN_INT_ISR
  654. jmp CAN_TOVF_ISR
  655. jmp LIN_TC_ISR
  656. jmp LIN_ERR_ISR
  657. jmp PCINT0_ISR
  658. jmp PCINT1_ISR
  659. jmp PCINT2_ISR
  660. jmp PCINT3_ISR
  661. jmp SPI__STC_ISR
  662. jmp ADC_ISR
  663. jmp WDT_ISR
  664. jmp EE_READY_ISR
  665. jmp SPM_READY_ISR
  666. {$i start.inc}
  667. .weak ANACOMP0_ISR
  668. .weak ANACOMP1_ISR
  669. .weak ANACOMP2_ISR
  670. .weak ANACOMP3_ISR
  671. .weak PSC_FAULT_ISR
  672. .weak PSC_EC_ISR
  673. .weak INT0_ISR
  674. .weak INT1_ISR
  675. .weak INT2_ISR
  676. .weak INT3_ISR
  677. .weak TIMER1_CAPT_ISR
  678. .weak TIMER1_COMPA_ISR
  679. .weak TIMER1_COMPB_ISR
  680. .weak TIMER1_OVF_ISR
  681. .weak TIMER0_COMPA_ISR
  682. .weak TIMER0_COMPB_ISR
  683. .weak TIMER0_OVF_ISR
  684. .weak CAN_INT_ISR
  685. .weak CAN_TOVF_ISR
  686. .weak LIN_TC_ISR
  687. .weak LIN_ERR_ISR
  688. .weak PCINT0_ISR
  689. .weak PCINT1_ISR
  690. .weak PCINT2_ISR
  691. .weak PCINT3_ISR
  692. .weak SPI__STC_ISR
  693. .weak ADC_ISR
  694. .weak WDT_ISR
  695. .weak EE_READY_ISR
  696. .weak SPM_READY_ISR
  697. .set ANACOMP0_ISR, Default_IRQ_handler
  698. .set ANACOMP1_ISR, Default_IRQ_handler
  699. .set ANACOMP2_ISR, Default_IRQ_handler
  700. .set ANACOMP3_ISR, Default_IRQ_handler
  701. .set PSC_FAULT_ISR, Default_IRQ_handler
  702. .set PSC_EC_ISR, Default_IRQ_handler
  703. .set INT0_ISR, Default_IRQ_handler
  704. .set INT1_ISR, Default_IRQ_handler
  705. .set INT2_ISR, Default_IRQ_handler
  706. .set INT3_ISR, Default_IRQ_handler
  707. .set TIMER1_CAPT_ISR, Default_IRQ_handler
  708. .set TIMER1_COMPA_ISR, Default_IRQ_handler
  709. .set TIMER1_COMPB_ISR, Default_IRQ_handler
  710. .set TIMER1_OVF_ISR, Default_IRQ_handler
  711. .set TIMER0_COMPA_ISR, Default_IRQ_handler
  712. .set TIMER0_COMPB_ISR, Default_IRQ_handler
  713. .set TIMER0_OVF_ISR, Default_IRQ_handler
  714. .set CAN_INT_ISR, Default_IRQ_handler
  715. .set CAN_TOVF_ISR, Default_IRQ_handler
  716. .set LIN_TC_ISR, Default_IRQ_handler
  717. .set LIN_ERR_ISR, Default_IRQ_handler
  718. .set PCINT0_ISR, Default_IRQ_handler
  719. .set PCINT1_ISR, Default_IRQ_handler
  720. .set PCINT2_ISR, Default_IRQ_handler
  721. .set PCINT3_ISR, Default_IRQ_handler
  722. .set SPI__STC_ISR, Default_IRQ_handler
  723. .set ADC_ISR, Default_IRQ_handler
  724. .set WDT_ISR, Default_IRQ_handler
  725. .set EE_READY_ISR, Default_IRQ_handler
  726. .set SPM_READY_ISR, Default_IRQ_handler
  727. end;
  728. end.