atmega32m1.pp 30 KB

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