atmega32c1.pp 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653
  1. unit ATmega32C1;
  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. const
  157. // CANGCON
  158. ABRQ = 7; // Abort Request
  159. OVRQ = 6; // Overload Frame Request
  160. TTC = 5; // Time Trigger Communication
  161. SYNTTC = 4; // Synchronization of TTC
  162. LISTEN = 3; // Listening Mode
  163. TEST = 2; // Test Mode
  164. ENASTB = 1; // Enable / Standby
  165. SWRES = 0; // Software Reset Request
  166. // CANGSTA
  167. OVFG = 6; // Overload Frame Flag
  168. TXBSY = 4; // Transmitter Busy
  169. RXBSY = 3; // Receiver Busy
  170. ENFG = 2; // Enable Flag
  171. BOFF = 1; // Bus Off Mode
  172. ERRP = 0; // Error Passive Mode
  173. // CANGIT
  174. CANIT = 7; // General Interrupt Flag
  175. BOFFIT = 6; // Bus Off Interrupt Flag
  176. OVRTIM = 5; // Overrun CAN Timer Flag
  177. BXOK = 4; // Burst Receive Interrupt Flag
  178. SERG = 3; // Stuff Error General Flag
  179. CERG = 2; // CRC Error General Flag
  180. FERG = 1; // Form Error General Flag
  181. AERG = 0; // Ackknowledgement Error General Flag
  182. // CANGIE
  183. ENIT = 7; // Enable all Interrupts
  184. ENBOFF = 6; // Enable Bus Off Interrupt
  185. ENRX = 5; // Enable Receive Interrupt
  186. ENTX = 4; // Enable Transmitt Interrupt
  187. ENERR = 3; // Enable MOb Error Interrupt
  188. ENBX = 2; // Enable Burst Receive Interrupt
  189. ENERG = 1; // Enable General Error Interrupt
  190. ENOVRT = 0; // Enable CAN Timer Overrun Interrupt
  191. // CANEN2
  192. ENMOB = 0; // Enable MObs
  193. // CANIE2
  194. IEMOB = 0; // Interrupt Enable MObs
  195. // CANSIT2
  196. SIT = 0; // Status of Interrupt MObs
  197. // CANBT1
  198. BRP = 1; // Baud Rate Prescaler bits
  199. // CANBT2
  200. SJW = 5; // Re-Sync Jump Width bits
  201. PRS = 1; // Propagation Time Segment bits
  202. // CANBT3
  203. PHS2 = 4; // Phase Segment 2 bits
  204. PHS1 = 1; // Phase Segment 1 bits
  205. SMP = 0; // Sample Type
  206. // CANHPMOB
  207. HPMOB = 4; // Highest Priority MOb Number bits
  208. CGP = 0; // CAN General Purpose bits
  209. // CANPAGE
  210. MOBNB = 4; // MOb Number bits
  211. AINC = 3; // MOb Data Buffer Auto Increment (Active Low)
  212. INDX = 0; // Data Buffer Index bits
  213. // CANSTMOB
  214. DLCW = 7; // Data Length Code Warning on MOb
  215. TXOK = 6; // Transmit OK on MOb
  216. RXOK = 5; // Receive OK on MOb
  217. BERR = 4; // Bit Error on MOb
  218. SERR = 3; // Stuff Error on MOb
  219. CERR = 2; // CRC Error on MOb
  220. FERR = 1; // Form Error on MOb
  221. AERR = 0; // Ackknowledgement Error on MOb
  222. // CANCDMOB
  223. CONMOB = 6; // MOb Config bits
  224. RPLV = 5; // Reply Valid
  225. IDE = 4; // Identifier Extension
  226. DLC = 0; // Data Length Code bits
  227. // CANIDT4
  228. IDT = 3; //
  229. RTRTAG = 2; //
  230. RB1TAG = 1; //
  231. RB0TAG = 0; //
  232. // AC0CON
  233. AC0EN = 7; // Analog Comparator 0 Enable Bit
  234. AC0IE = 6; // Analog Comparator 0 Interrupt Enable Bit
  235. AC0IS = 4; // Analog Comparator 0 Interrupt Select Bits
  236. ACCKSEL = 3; // Analog Comparator Clock Select
  237. AC0M = 0; // Analog Comparator 0 Multiplexer Register
  238. // AC1CON
  239. AC1EN = 7; // Analog Comparator 1 Enable Bit
  240. AC1IE = 6; // Analog Comparator 1 Interrupt Enable Bit
  241. AC1IS = 4; // Analog Comparator 1 Interrupt Select Bit
  242. AC1ICE = 3; // Analog Comparator 1 Interrupt Capture Enable Bit
  243. AC1M = 0; // Analog Comparator 1 Multiplexer Register
  244. // AC2CON
  245. AC2EN = 7; // Analog Comparator 2 Enable Bit
  246. AC2IE = 6; // Analog Comparator 2 Interrupt Enable Bit
  247. AC2IS = 4; // Analog Comparator 2 Interrupt Select Bit
  248. AC2M = 0; // Analog Comparator 2 Multiplexer Register
  249. // AC3CON
  250. AC3EN = 7; // Analog Comparator 3 Enable Bit
  251. AC3IE = 6; // Analog Comparator 3 Interrupt Enable Bit
  252. AC3IS = 4; // Analog Comparator 3 Interrupt Select Bit
  253. AC3M = 0; // Analog Comparator 3 Multiplexer Register
  254. // ACSR
  255. AC3IF = 7; // Analog Comparator 3 Interrupt Flag Bit
  256. AC2IF = 6; // Analog Comparator 2 Interrupt Flag Bit
  257. AC1IF = 5; // Analog Comparator 1 Interrupt Flag Bit
  258. AC0IF = 4; // Analog Comparator 0 Interrupt Flag Bit
  259. AC3O = 3; // Analog Comparator 3 Output Bit
  260. AC2O = 2; // Analog Comparator 2 Output Bit
  261. AC1O = 1; // Analog Comparator 1 Output Bit
  262. AC0O = 0; // Analog Comparator 0 Output Bit
  263. // DACH
  264. // DACL
  265. // DACON
  266. DAATE = 7; // DAC Auto Trigger Enable Bit
  267. DATS = 4; // DAC Trigger Selection Bits
  268. DALA = 2; // DAC Left Adjust
  269. DAEN = 0; // DAC Enable Bit
  270. // SPMCSR
  271. SPMIE = 7; // SPM Interrupt Enable
  272. RWWSB = 6; // Read While Write Section Busy
  273. SIGRD = 5; // Signature Row Read
  274. RWWSRE = 4; // Read While Write section read enable
  275. BLBSET = 3; // Boot Lock Bit Set
  276. PGWRT = 2; // Page Write
  277. PGERS = 1; // Page Erase
  278. SPMEN = 0; // Store Program Memory Enable
  279. // SREG
  280. I = 7; // Global Interrupt Enable
  281. T = 6; // Bit Copy Storage
  282. H = 5; // Half Carry Flag
  283. S = 4; // Sign Bit
  284. V = 3; // Two's Complement Overflow Flag
  285. N = 2; // Negative Flag
  286. Z = 1; // Zero Flag
  287. C = 0; // Carry Flag
  288. // MCUCR
  289. SPIPS = 7; // SPI Pin Select
  290. PUD = 4; // Pull-up disable
  291. IVSEL = 1; // Interrupt Vector Select
  292. IVCE = 0; // Interrupt Vector Change Enable
  293. // MCUSR
  294. WDRF = 3; // Watchdog Reset Flag
  295. BORF = 2; // Brown-out Reset Flag
  296. EXTRF = 1; // External Reset Flag
  297. PORF = 0; // Power-on reset flag
  298. // CLKPR
  299. CLKPCE = 7; //
  300. CLKPS = 0; //
  301. // SMCR
  302. SM = 1; // Sleep Mode Select bits
  303. SE = 0; // Sleep Enable
  304. // GPIOR2
  305. GPIOR = 0; // General Purpose IO Register 2 bis
  306. // GPIOR1
  307. // GPIOR0
  308. GPIOR07 = 7; // General Purpose IO Register 0 bit 7
  309. GPIOR06 = 6; // General Purpose IO Register 0 bit 6
  310. GPIOR05 = 5; // General Purpose IO Register 0 bit 5
  311. GPIOR04 = 4; // General Purpose IO Register 0 bit 4
  312. GPIOR03 = 3; // General Purpose IO Register 0 bit 3
  313. GPIOR02 = 2; // General Purpose IO Register 0 bit 2
  314. GPIOR01 = 1; // General Purpose IO Register 0 bit 1
  315. GPIOR00 = 0; // General Purpose IO Register 0 bit 0
  316. // PLLCSR
  317. PLLF = 2; // PLL Factor
  318. PLLE = 1; // PLL Enable
  319. PLOCK = 0; // PLL Lock Detector
  320. // PRR
  321. PRCAN = 6; // Power Reduction CAN
  322. PRPSC = 5; // Power Reduction PSC
  323. PRTIM1 = 4; // Power Reduction Timer/Counter1
  324. PRTIM0 = 3; // Power Reduction Timer/Counter0
  325. PRSPI = 2; // Power Reduction Serial Peripheral Interface
  326. PRLIN = 1; // Power Reduction LIN UART
  327. PRADC = 0; // Power Reduction ADC
  328. // TIMSK0
  329. OCIE0B = 2; // Timer/Counter0 Output Compare Match B Interrupt Enable
  330. OCIE0A = 1; // Timer/Counter0 Output Compare Match A Interrupt Enable
  331. TOIE0 = 0; // Timer/Counter0 Overflow Interrupt Enable
  332. // TIFR0
  333. OCF0B = 2; // Timer/Counter0 Output Compare Flag 0B
  334. OCF0A = 1; // Timer/Counter0 Output Compare Flag 0A
  335. TOV0 = 0; // Timer/Counter0 Overflow Flag
  336. // TCCR0A
  337. COM0A = 6; // Compare Output Mode, Phase Correct PWM Mode
  338. COM0B = 4; // Compare Output Mode, Fast PWm
  339. WGM0 = 0; // Waveform Generation Mode
  340. // TCCR0B
  341. FOC0A = 7; // Force Output Compare A
  342. FOC0B = 6; // Force Output Compare B
  343. WGM02 = 3; //
  344. CS0 = 0; // Clock Select
  345. // GTCCR
  346. TSM = 7; // Timer/Counter Synchronization Mode
  347. ICPSEL1 = 6; // Timer1 Input Capture Selection Bit
  348. PSR10 = 0; // Prescaler Reset Timer/Counter1 and Timer/Counter0
  349. // TIMSK1
  350. ICIE1 = 5; // Timer/Counter1 Input Capture Interrupt Enable
  351. OCIE1B = 2; // Timer/Counter1 Output CompareB Match Interrupt Enable
  352. OCIE1A = 1; // Timer/Counter1 Output CompareA Match Interrupt Enable
  353. TOIE1 = 0; // Timer/Counter1 Overflow Interrupt Enable
  354. // TIFR1
  355. ICF1 = 5; // Input Capture Flag 1
  356. OCF1B = 2; // Output Compare Flag 1B
  357. OCF1A = 1; // Output Compare Flag 1A
  358. TOV1 = 0; // Timer/Counter1 Overflow Flag
  359. // TCCR1A
  360. COM1A = 6; // Compare Output Mode 1A, bits
  361. COM1B = 4; // Compare Output Mode 1B, bits
  362. WGM1 = 0; // Waveform Generation Mode
  363. // TCCR1B
  364. ICNC1 = 7; // Input Capture 1 Noise Canceler
  365. ICES1 = 6; // Input Capture 1 Edge Select
  366. CS1 = 0; // Prescaler source of Timer/Counter 1
  367. // TCCR1C
  368. FOC1A = 7; //
  369. FOC1B = 6; //
  370. // GTCCR
  371. PSRSYNC = 0; // Prescaler Reset Timer/Counter1 and Timer/Counter0
  372. // ADMUX
  373. REFS = 6; // Reference Selection Bits
  374. ADLAR = 5; // Left Adjust Result
  375. MUX = 0; // Analog Channel and Gain Selection Bits
  376. // ADCSRA
  377. ADEN = 7; // ADC Enable
  378. ADSC = 6; // ADC Start Conversion
  379. ADATE = 5; // ADC Auto Trigger Enable
  380. ADIF = 4; // ADC Interrupt Flag
  381. ADIE = 3; // ADC Interrupt Enable
  382. ADPS = 0; // ADC Prescaler Select Bits
  383. // ADCSRB
  384. ADHSM = 7; // ADC High Speed Mode
  385. ISRCEN = 6; // Current Source Enable
  386. AREFEN = 5; // Analog Reference pin Enable
  387. ADTS = 0; // ADC Auto Trigger Sources
  388. // DIDR0
  389. ADC7D = 7; // ADC7 Digital input Disable
  390. ADC6D = 6; // ADC6 Digital input Disable
  391. ADC5D = 5; // ADC5 Digital input Disable
  392. ADC4D = 4; // ADC4 Digital input Disable
  393. ADC3D = 3; // ADC3 Digital input Disable
  394. ADC2D = 2; // ADC2 Digital input Disable
  395. ADC1D = 1; // ADC1 Digital input Disable
  396. ADC0D = 0; // ADC0 Digital input Disable
  397. // DIDR1
  398. AMP2PD = 6; // AMP2P Pin Digital input Disable
  399. ACMP0D = 5; // ACMP0 Pin Digital input Disable
  400. AMP0PD = 4; // AMP0P Pin Digital input Disable
  401. AMP0ND = 3; // AMP0N Pin Digital input Disable
  402. ADC10D = 2; // ADC10 Pin Digital input Disable
  403. ADC9D = 1; // ADC9 Pin Digital input Disable
  404. ADC8D = 0; // ADC8 Pin Digital input Disable
  405. // AMP0CSR
  406. AMP0EN = 7; //
  407. AMP0IS = 6; //
  408. AMP0G = 4; //
  409. AMPCMP0 = 3; // Amplifier 0 - Comparator 0 Connection
  410. AMP0TS = 0; //
  411. // AMP1CSR
  412. AMP1EN = 7; //
  413. AMP1IS = 6; //
  414. AMP1G = 4; //
  415. AMPCMP1 = 3; // Amplifier 1 - Comparator 1 Connection
  416. AMP1TS = 0; //
  417. // AMP2CSR
  418. AMP2EN = 7; //
  419. AMP2IS = 6; //
  420. AMP2G = 4; //
  421. AMPCMP2 = 3; // Amplifier 2 - Comparator 2 Connection
  422. AMP2TS = 0; //
  423. // LINCR
  424. LSWRES = 7; // Software Reset
  425. LIN13 = 6; // LIN Standard
  426. LCONF = 4; // LIN Configuration bits
  427. LENA = 3; // LIN or UART Enable
  428. LCMD = 0; // LIN Command and Mode bits
  429. // LINSIR
  430. LIDST = 5; // Identifier Status bits
  431. LBUSY = 4; // Busy Signal
  432. LERR = 3; // Error Interrupt
  433. LIDOK = 2; // Identifier Interrupt
  434. LTXOK = 1; // Transmit Performed Interrupt
  435. LRXOK = 0; // Receive Performed Interrupt
  436. // LINENIR
  437. LENERR = 3; // Enable Error Interrupt
  438. LENIDOK = 2; // Enable Identifier Interrupt
  439. LENTXOK = 1; // Enable Transmit Performed Interrupt
  440. LENRXOK = 0; // Enable Receive Performed Interrupt
  441. // LINERR
  442. LABORT = 7; // Abort Flag
  443. LTOERR = 6; // Frame Time Out Error Flag
  444. LOVERR = 5; // Overrun Error Flag
  445. LFERR = 4; // Framing Error Flag
  446. LSERR = 3; // Synchronization Error Flag
  447. LPERR = 2; // Parity Error Flag
  448. LCERR = 1; // Checksum Error Flag
  449. LBERR = 0; // Bit Error Flag
  450. // LINBTR
  451. LDISR = 7; // Disable Bit Timing Resynchronization
  452. LBT = 0; // LIN Bit Timing bits
  453. // LINBRRL
  454. LDIV = 0; //
  455. // LINBRRH
  456. // LINDLR
  457. LTXDL = 4; // LIN Transmit Data Length bits
  458. LRXDL = 0; // LIN Receive Data Length bits
  459. // LINIDR
  460. LP = 6; // Parity bits
  461. LID = 0; // Identifier bit 5 or Data Length bits
  462. // LINSEL
  463. LAINC = 3; // Auto Increment of Data Buffer Index (Active Low)
  464. LINDX = 0; // FIFO LIN Data Buffer Index bits
  465. // LINDAT
  466. LDATA = 0; //
  467. // SPCR
  468. SPIE = 7; // SPI Interrupt Enable
  469. SPE = 6; // SPI Enable
  470. DORD = 5; // Data Order
  471. MSTR = 4; // Master/Slave Select
  472. CPOL = 3; // Clock polarity
  473. CPHA = 2; // Clock Phase
  474. SPR = 0; // SPI Clock Rate Selects
  475. // SPSR
  476. SPIF = 7; // SPI Interrupt Flag
  477. WCOL = 6; // Write Collision Flag
  478. SPI2X = 0; // Double SPI Speed Bit
  479. // WDTCSR
  480. WDIF = 7; // Watchdog Timeout Interrupt Flag
  481. WDIE = 6; // Watchdog Timeout Interrupt Enable
  482. WDP = 0; // Watchdog Timer Prescaler Bits
  483. WDCE = 4; // Watchdog Change Enable
  484. WDE = 3; // Watch Dog Enable
  485. // EICRA
  486. ISC3 = 6; // External Interrupt Sense Control Bit
  487. ISC2 = 4; // External Interrupt Sense Control Bit
  488. ISC1 = 2; // External Interrupt Sense Control 1 Bits
  489. ISC0 = 0; // External Interrupt Sense Control 0 Bits
  490. // EIMSK
  491. INT = 0; // External Interrupt Request 3 Enable
  492. // EIFR
  493. INTF = 0; // External Interrupt Flags
  494. // PCICR
  495. PCIE = 0; // Pin Change Interrupt Enables
  496. // PCMSK3
  497. PCINT = 0; // Pin Change Enable Masks
  498. // PCMSK2
  499. // PCMSK1
  500. // PCMSK0
  501. // PCIFR
  502. PCIF = 0; // Pin Change Interrupt Flags
  503. // EECR
  504. EEPM = 4; //
  505. EERIE = 3; // EEProm Ready Interrupt Enable
  506. EEMWE = 2; // EEPROM Master Write Enable
  507. EEWE = 1; // EEPROM Write Enable
  508. EERE = 0; // EEPROM Read Enable
  509. implementation
  510. {$i avrcommon.inc}
  511. procedure ANACOMP0_ISR; external name 'ANACOMP0_ISR'; // Interrupt 1 Analog Comparator 0
  512. procedure ANACOMP1_ISR; external name 'ANACOMP1_ISR'; // Interrupt 2 Analog Comparator 1
  513. procedure ANACOMP2_ISR; external name 'ANACOMP2_ISR'; // Interrupt 3 Analog Comparator 2
  514. procedure ANACOMP3_ISR; external name 'ANACOMP3_ISR'; // Interrupt 4 Analog Comparator 3
  515. procedure PSC_FAULT_ISR; external name 'PSC_FAULT_ISR'; // Interrupt 5 PSC Fault
  516. procedure PSC_EC_ISR; external name 'PSC_EC_ISR'; // Interrupt 6 PSC End of Cycle
  517. procedure INT0_ISR; external name 'INT0_ISR'; // Interrupt 7 External Interrupt Request 0
  518. procedure INT1_ISR; external name 'INT1_ISR'; // Interrupt 8 External Interrupt Request 1
  519. procedure INT2_ISR; external name 'INT2_ISR'; // Interrupt 9 External Interrupt Request 2
  520. procedure INT3_ISR; external name 'INT3_ISR'; // Interrupt 10 External Interrupt Request 3
  521. procedure TIMER1_CAPT_ISR; external name 'TIMER1_CAPT_ISR'; // Interrupt 11 Timer/Counter1 Capture Event
  522. procedure TIMER1_COMPA_ISR; external name 'TIMER1_COMPA_ISR'; // Interrupt 12 Timer/Counter1 Compare Match A
  523. procedure TIMER1_COMPB_ISR; external name 'TIMER1_COMPB_ISR'; // Interrupt 13 Timer/Counter1 Compare Match B
  524. procedure TIMER1_OVF_ISR; external name 'TIMER1_OVF_ISR'; // Interrupt 14 Timer1/Counter1 Overflow
  525. procedure TIMER0_COMPA_ISR; external name 'TIMER0_COMPA_ISR'; // Interrupt 15 Timer/Counter0 Compare Match A
  526. procedure TIMER0_COMPB_ISR; external name 'TIMER0_COMPB_ISR'; // Interrupt 16 Timer/Counter0 Compare Match B
  527. procedure TIMER0_OVF_ISR; external name 'TIMER0_OVF_ISR'; // Interrupt 17 Timer/Counter0 Overflow
  528. procedure CAN_INT_ISR; external name 'CAN_INT_ISR'; // Interrupt 18 CAN MOB, Burst, General Errors
  529. procedure CAN_TOVF_ISR; external name 'CAN_TOVF_ISR'; // Interrupt 19 CAN Timer Overflow
  530. procedure LIN_TC_ISR; external name 'LIN_TC_ISR'; // Interrupt 20 LIN Transfer Complete
  531. procedure LIN_ERR_ISR; external name 'LIN_ERR_ISR'; // Interrupt 21 LIN Error
  532. procedure PCINT0_ISR; external name 'PCINT0_ISR'; // Interrupt 22 Pin Change Interrupt Request 0
  533. procedure PCINT1_ISR; external name 'PCINT1_ISR'; // Interrupt 23 Pin Change Interrupt Request 1
  534. procedure PCINT2_ISR; external name 'PCINT2_ISR'; // Interrupt 24 Pin Change Interrupt Request 2
  535. procedure PCINT3_ISR; external name 'PCINT3_ISR'; // Interrupt 25 Pin Change Interrupt Request 3
  536. procedure SPI__STC_ISR; external name 'SPI__STC_ISR'; // Interrupt 26 SPI Serial Transfer Complete
  537. procedure ADC_ISR; external name 'ADC_ISR'; // Interrupt 27 ADC Conversion Complete
  538. procedure WDT_ISR; external name 'WDT_ISR'; // Interrupt 28 Watchdog Time-Out Interrupt
  539. procedure EE_READY_ISR; external name 'EE_READY_ISR'; // Interrupt 29 EEPROM Ready
  540. procedure SPM_READY_ISR; external name 'SPM_READY_ISR'; // Interrupt 30 Store Program Memory Read
  541. procedure _FPC_start; assembler; nostackframe;
  542. label
  543. _start;
  544. asm
  545. .init
  546. .globl _start
  547. jmp _start
  548. jmp ANACOMP0_ISR
  549. jmp ANACOMP1_ISR
  550. jmp ANACOMP2_ISR
  551. jmp ANACOMP3_ISR
  552. jmp PSC_FAULT_ISR
  553. jmp PSC_EC_ISR
  554. jmp INT0_ISR
  555. jmp INT1_ISR
  556. jmp INT2_ISR
  557. jmp INT3_ISR
  558. jmp TIMER1_CAPT_ISR
  559. jmp TIMER1_COMPA_ISR
  560. jmp TIMER1_COMPB_ISR
  561. jmp TIMER1_OVF_ISR
  562. jmp TIMER0_COMPA_ISR
  563. jmp TIMER0_COMPB_ISR
  564. jmp TIMER0_OVF_ISR
  565. jmp CAN_INT_ISR
  566. jmp CAN_TOVF_ISR
  567. jmp LIN_TC_ISR
  568. jmp LIN_ERR_ISR
  569. jmp PCINT0_ISR
  570. jmp PCINT1_ISR
  571. jmp PCINT2_ISR
  572. jmp PCINT3_ISR
  573. jmp SPI__STC_ISR
  574. jmp ADC_ISR
  575. jmp WDT_ISR
  576. jmp EE_READY_ISR
  577. jmp SPM_READY_ISR
  578. {$i start.inc}
  579. .weak ANACOMP0_ISR
  580. .weak ANACOMP1_ISR
  581. .weak ANACOMP2_ISR
  582. .weak ANACOMP3_ISR
  583. .weak PSC_FAULT_ISR
  584. .weak PSC_EC_ISR
  585. .weak INT0_ISR
  586. .weak INT1_ISR
  587. .weak INT2_ISR
  588. .weak INT3_ISR
  589. .weak TIMER1_CAPT_ISR
  590. .weak TIMER1_COMPA_ISR
  591. .weak TIMER1_COMPB_ISR
  592. .weak TIMER1_OVF_ISR
  593. .weak TIMER0_COMPA_ISR
  594. .weak TIMER0_COMPB_ISR
  595. .weak TIMER0_OVF_ISR
  596. .weak CAN_INT_ISR
  597. .weak CAN_TOVF_ISR
  598. .weak LIN_TC_ISR
  599. .weak LIN_ERR_ISR
  600. .weak PCINT0_ISR
  601. .weak PCINT1_ISR
  602. .weak PCINT2_ISR
  603. .weak PCINT3_ISR
  604. .weak SPI__STC_ISR
  605. .weak ADC_ISR
  606. .weak WDT_ISR
  607. .weak EE_READY_ISR
  608. .weak SPM_READY_ISR
  609. .set ANACOMP0_ISR, Default_IRQ_handler
  610. .set ANACOMP1_ISR, Default_IRQ_handler
  611. .set ANACOMP2_ISR, Default_IRQ_handler
  612. .set ANACOMP3_ISR, Default_IRQ_handler
  613. .set PSC_FAULT_ISR, Default_IRQ_handler
  614. .set PSC_EC_ISR, Default_IRQ_handler
  615. .set INT0_ISR, Default_IRQ_handler
  616. .set INT1_ISR, Default_IRQ_handler
  617. .set INT2_ISR, Default_IRQ_handler
  618. .set INT3_ISR, Default_IRQ_handler
  619. .set TIMER1_CAPT_ISR, Default_IRQ_handler
  620. .set TIMER1_COMPA_ISR, Default_IRQ_handler
  621. .set TIMER1_COMPB_ISR, Default_IRQ_handler
  622. .set TIMER1_OVF_ISR, Default_IRQ_handler
  623. .set TIMER0_COMPA_ISR, Default_IRQ_handler
  624. .set TIMER0_COMPB_ISR, Default_IRQ_handler
  625. .set TIMER0_OVF_ISR, Default_IRQ_handler
  626. .set CAN_INT_ISR, Default_IRQ_handler
  627. .set CAN_TOVF_ISR, Default_IRQ_handler
  628. .set LIN_TC_ISR, Default_IRQ_handler
  629. .set LIN_ERR_ISR, Default_IRQ_handler
  630. .set PCINT0_ISR, Default_IRQ_handler
  631. .set PCINT1_ISR, Default_IRQ_handler
  632. .set PCINT2_ISR, Default_IRQ_handler
  633. .set PCINT3_ISR, Default_IRQ_handler
  634. .set SPI__STC_ISR, Default_IRQ_handler
  635. .set ADC_ISR, Default_IRQ_handler
  636. .set WDT_ISR, Default_IRQ_handler
  637. .set EE_READY_ISR, Default_IRQ_handler
  638. .set SPM_READY_ISR, Default_IRQ_handler
  639. end;
  640. end.